[U-Boot] [PATCH] NAND: DaVinci: Update 4 bit ECC correction

s-paulraj at ti.com s-paulraj at ti.com
Tue Dec 1 23:24:59 CET 2009


From: Sandeep Paulraj <s-paulraj at ti.com>

There was a bug in the 4 bit ECC calculation routine
in the DaVinci NAND driver. This becomes prominent
when we use 4K page size NAND devices.
This is a fix for the issue.

Signed-off-by: Sandeep Paulraj <s-paulraj at ti.com>
---
 drivers/mtd/nand/davinci_nand.c |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/drivers/mtd/nand/davinci_nand.c b/drivers/mtd/nand/davinci_nand.c
index 41a9568..68a0e15 100644
--- a/drivers/mtd/nand/davinci_nand.c
+++ b/drivers/mtd/nand/davinci_nand.c
@@ -388,6 +388,17 @@ static int nand_davinci_4bit_correct_data(struct mtd_info *mtd, uint8_t *dat,
 	emif_regs->NANDFCR |= 1 << 13;
 
 	/*
+	 * ECC_STATE in NANDFSR register reads 0x3 (Error correction complete)
+	 * immediately after setting the 4BITECC_ADD_CALC_START bit. So if we
+	 * begin trying to poll for the state, we may fall right out of your
+	 * loop without any of the correction calculations having taken place.
+	 * So wait till ECC_STATE reads less than 4.
+	 */
+	do {
+		val = ((emif_regs->NANDFSR >> 8) & 0xf);
+	} while (val < 4);
+
+	/*
 	 * Wait for the corr_state field (bits 8 to 11)in the
 	 * NAND Flash Status register to be equal to 0x0, 0x1, 0x2, or 0x3.
 	 */
-- 
1.6.0.4



More information about the U-Boot mailing list