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

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
HiOm_1802421
Level 5
Level 5
Distributor - Marubun (Japan)
50 replies posted 50 questions asked 25 replies posted

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

0 Likes
2 Replies
JennaJo
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

Hi, Omoi-san

Confirm to work to this KBA.

Thanks

Jenna

Jenna Jo
0 Likes
HiOm_1802421
Level 5
Level 5
Distributor - Marubun (Japan)
50 replies posted 50 questions asked 25 replies posted

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

0 Likes