[PATCH v2] mtd: nand: support for Toshiba BENAND (Built-in ECC NAND)
KOBAYASHI Yoshitake
yoshitake.kobayashi at toshiba.co.jp
Tue Jun 16 06:33:43 PDT 2015
On 2015/06/12 18:49, Richard Weinberger wrote:
> On Thu, Jun 11, 2015 at 6:00 PM, KOBAYASHI Yoshitake
> <yoshitake.kobayashi at toshiba.co.jp> wrote:
>> This patch enables support for Toshiba BENAND.
>> BENAND is a SLC NAND solution that automatically generates ECC inside
>> NAND chip.
>>
>> Some of the comments in the following discussion may need to be considerd.
>> https://lkml.org/lkml/2015/3/25/310
>
> Yep.
>
>> +void nand_benand_init(struct mtd_info *mtd)
>> +{
>> + struct nand_chip *chip = mtd->priv;
>> +
>> + pr_info("%s\n", __func__);
>
> Please kill all these prints. Use ftrace to trace function calls.
Okay, I will delete these prints in next patch.
>> + chip->ecc.size = mtd->writesize;
>> + chip->ecc.strength = 1;
>
> BENAND can correct only one bit?
> This would explain why you consider it as fast. ;-)
BENAND is able to correct up to 8bit. By issuing Status command 70h for read operation, BENAND
can report three types of ECC operation status (Pass / Fail(uncorrectable) / Recommended to rewrite).
Judgement for Recommended to rewrite is based on internal logic of BENAND.
>> +int nand_benand_status_chk(struct mtd_info *mtd, struct nand_chip *chip)
>> +{
>> + unsigned int bitflips = 0;
>> + u8 status;
>> +
>> + pr_debug("%s\n", __func__);
>> +
>> + /* Check Read Status */
>> + chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
>> + status = chip->read_byte(mtd);
>> +
>> + /* timeout */
>> + if (!(status & NAND_STATUS_READY)) {
>> + pr_info("BENAND : Time Out!\n");
>> + return -EIO;
>> + }
>> +
>> + /* uncorrectable */
>> + else if (status & NAND_STATUS_FAIL) {
>> + pr_info("BENAND : Uncorrectable!\n");
>> + mtd->ecc_stats.failed++;
>> + }
>> +
>> + /* correctable */
>> + else if (status & NAND_STATUS_RECOM_REWRT) {
>> + pr_info("BENAND : Recommended to rewrite!\n");
>> + bitflips = chip->ecc.strength;
>
> In your case this might be okay, as you set strength to 1.
> Otherweise you'd have to report the real number of bitflips.
I also thought it is okay in this case.
BENAND return corrected data to Host NAND Controller till uncorrectable status.
The current patch uses this Read Status command 70h to abstract BENAND Multi
bit ECC and Need to Rewrite judgement so BENAND would look like 1bit ECC device.
-- Yoshi
More information about the linux-mtd
mailing list