[PATCH 19/39] mtd: nand: denali: perform erased check against raw transferred page

Masahiro Yamada yamada.masahiro at socionext.com
Sat Nov 26 10:06:05 PST 2016


The erased page check must be done against the raw transferred data.
The current first call of is_erase() is against the data after ECC
correction.  I saw cases where not all of the data in the page are
0xFF after they are manipulated by the ECC correction engine.

Signed-off-by: Masahiro Yamada <yamada.masahiro at socionext.com>
---

 drivers/mtd/nand/denali.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/mtd/nand/denali.c b/drivers/mtd/nand/denali.c
index f035dac..ae44c01 100644
--- a/drivers/mtd/nand/denali.c
+++ b/drivers/mtd/nand/denali.c
@@ -1168,6 +1168,7 @@ static int denali_read_page(struct mtd_info *mtd, struct nand_chip *chip,
 		INTR_STATUS__DMA_CMD_COMP | INTR_STATUS__ECC_UNCOR_ERR :
 		INTR_STATUS__ECC_TRANSACTION_DONE | INTR_STATUS__ECC_ERR;
 	bool check_erased_page = false;
+	int ret;
 
 	if (page != denali->page) {
 		dev_err(denali->dev,
@@ -1206,7 +1207,9 @@ static int denali_read_page(struct mtd_info *mtd, struct nand_chip *chip,
 		 * error.
 		 */
 
-		read_oob_data(mtd, chip->oob_poi, denali->page);
+		ret = denali_read_page_raw(mtd, chip, buf, 1, denali->page);
+		if (ret < 0)
+			return ret;
 
 		/* check ECC failures that may have occurred on erased pages */
 		if (!is_erased(buf, mtd->writesize) ||
-- 
2.7.4




More information about the linux-mtd mailing list