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

From: Masahiro Yamada
Date: Sat Nov 26 2016 - 13:08:55 EST


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@xxxxxxxxxxxxx>
---

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