| From | Masahiro Yamada <> | Subject | [PATCH 19/39] mtd: nand: denali: perform erased check against raw transferred page | Date | Sun, 27 Nov 2016 03:06:05 +0900 |
| |
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@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
|