2 Replies Latest reply on Jun 29, 2020 7:17 PM by HiOm_1802421

    Community Translation - How to Check E_ERR/P_ERR Status Errors in the Linux MTD SPI Driver – KBA220225

    HiOm_1802421

      Hi,

      I want to translate the following KBA into Japanese, please confirm to my work.

      How to Check E_ERR/P_ERR Status Errors in the Linux MTD SPI Driver – KBA220225

       

      Omoi

        • 2. Re: Community Translation - How to Check E_ERR/P_ERR Status Errors in the Linux MTD SPI Driver – KBA220225
          HiOm_1802421

          Hi,

          I tried to translate this KBA220225 into Japanese.

           

          How to Check E_ERR/P_ERR Status Errors in the Linux MTD SPI Driver – KBA220225

          ==========

          タイトル:Linux MTD SPIドライバでE_ERR/P_ERRステータス エラーを確認する方法

           

          バージョン:**

           

          質問:

          Linux MTD SPIドライバにフラッシュ プログラム/消去 失敗ステータスの確認を追加するにはどうすればよいですか?

           

          回答:

          Linuxマスターコードは、SPIドライバのプログラム/消去 失敗を確認しません。次の手順は、このエラーチェック機能をドライバに追加します。

           

          1. E_ERRおよびP_ERRビット フィールド定義をFL-SおよびFS-SのSPIドライバーに追加します。(FL-Lの場合は、ステータス レジスタ-1ではなくステータス レジスタ-2を使用します)

            • include/linux/mtd/spi-nor.hを開きます
            • ステータス レジスタ ビットの定義を探し、以下を置き換えます。

          #define SR_TB BIT(5) /* Top/Bottom protect */

           

          以下へ置き換え:

           

          #define SR_E_ERR BIT(5) /* Erase error occurred */

          #define SR_P_ERR BIT(6) /* Programming error occurred */

            • Flash opcodesセクションを探し、Clear Status Register opcodeを追加します

          #define SPINOR_OP_CLSR 0x30 /* Clear status register */

           

          2. E_ERRおよびP_ERRステータス ビット確認をステータス レディ確認サブ ルーチンに追加します。

            • drivers/mtd/spi-nor/spi-nor.cを開きます。
            • clear_st() サブ ルーチンを追加します。

          /*

          * Clear status register

          * Returns negative if error occurred.

          */

          static inline int clear_sr(struct spi_nor *nor)

          {

              return nor->write_reg(nor, SPINOR_OP_CLSR, NULL, 0);

          }

            • 消去またはプログラム失敗が発生したときのユーザー通知サブルーチンを追加します。例:user_error_handler()
            • static inline int spi_nor_sr_ready(struct spi_nor *nor) を探します。
            • 次のコードを変更します。

          int sr = read_sr(nor);

          if (sr < 0)

              return sr;

          else

              return !(sr & SR_WIP);

           

          以下へ変更:

           

          int sr = read_sr(nor);

          if (sr < 0)

              return sr;

          else if ((sr & SR_E_ERR) || (sr & SR_P_ERR))

          {

              user_error_handler();

              write_enable(nor);

              clear_sr(nor);

          }

          return !(sr & SR_WIP);

           

          ==========

          BR,

          Omoi