[U-Boot] [PATCH 4/5] mtd: nand: Use ECC for NAND write verification
Peter Tyser
ptyser at xes-inc.com
Mon Jan 26 23:24:50 CET 2015
From: Joe Schaack <jschaack at xes-inc.com>
Modify the nand_write_page() function to use ECC when appropriate to verify
writes. Previously if a single bit error occured and software ECC was
used the write verification would report a failure. However, the write
really did succeed, since ECC can handle the error.
The issue can be simulated with a sequence of commands such as:
# Inject a fake bit that is stuck low (2K page flash being used)
nand erase 0 0x20000
mw.b 0x10000 0xff 0x1000
mw.b 0x10000 0xfe 1
nand write.raw 0x10000 0x0 0x1
# Write some data which needs to toggle the fake stuck bit
mw.b 0x10000 0xab 1
nand write 0x10000 0x0 0x800
An error will occur:
NAND write: device 0 offset 0x0, size 0x800
NAND write to offset 0 failed -5
0 bytes written: ERROR
But you can verify data was correctly written:
# Show data is correct when ECC is used
nand read 0x10000 0x0 0x800
md 0x10000
# Show the bit is still stuck low
nand read.raw 0x10000 0x0 0x1
md 0x10000
Change the behavior so ECC is used when verifying non-raw writes.
This only impacts boards that have COFNIG_MTD_NAND_VERIFY_WRITE
defined.
Signed-off-by: Joe Schaack <jschaack at xes-inc.com>
Signed-off-by: Peter Tyser <ptyser at xes-inc.com>
---
drivers/mtd/nand/nand_base.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index abcb84a..aa039ef 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -2405,7 +2405,10 @@ static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
/* Send command to read back the data */
chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
- chip->ecc.read_page_raw(mtd, chip, vfy_buf, oob_required, page);
+ if (unlikely(raw))
+ chip->ecc.read_page_raw(mtd, chip, vfy_buf, oob_required, page);
+ else
+ chip->ecc.read_page(mtd, chip, vfy_buf, oob_required, page);
status = memcmp(buf, vfy_buf, mtd->writesize);
--
1.9.1
More information about the U-Boot
mailing list