Răsfoiți Sursa

Merge branch 'master' of git://git.denx.de/u-boot-nand-flash

Wolfgang Denk 14 ani în urmă
părinte
comite
a12555c02d
1 a modificat fișierele cu 14 adăugiri și 1 ștergeri
  1. 14 1
      drivers/mtd/nand/davinci_nand.c

+ 14 - 1
drivers/mtd/nand/davinci_nand.c

@@ -484,7 +484,20 @@ static int nand_davinci_4bit_correct_data(struct mtd_info *mtd, uint8_t *dat,
 	__raw_writel(1 << 13, &davinci_emif_regs->nandfcr);
 
 	/*
-	 * Wait for the corr_state field (bits 8 to 11)in the
+	 * Wait for the corr_state field (bits 8 to 11) in the
+	 * NAND Flash Status register to be not equal to 0x0, 0x1, 0x2, or 0x3.
+	 * Otherwise ECC calculation has not even begun and the next loop might
+	 * fail because of a false positive!
+	 */
+	i = NAND_TIMEOUT;
+	do {
+		val = __raw_readl(&davinci_emif_regs->nandfsr);
+		val &= 0xc00;
+		i--;
+	} while ((i > 0) && !val);
+
+	/*
+	 * 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.
 	 */
 	i = NAND_TIMEOUT;