diff mbox series

[v2] mtd: rawnand: arasan: Include ECC syndrome along with in-band data while checking for ECC failure

Message ID 20230927055621.2906454-1-amit.kumar-mahapatra@amd.com
State Accepted
Headers show
Series [v2] mtd: rawnand: arasan: Include ECC syndrome along with in-band data while checking for ECC failure | expand

Commit Message

Mahapatra, Amit Kumar Sept. 27, 2023, 5:56 a.m. UTC
Following an ECC failure condition upon page reads, we shall distinguish
between a real ECC failure and an empty page. This is handled with a call
to nand_check_erased_ecc_chunk() which looks at the data and counts the
number of bits which are not 'ones'. If we get less zeros than the ECC
strength, we assume the page was erased and we are in the presence of
natural bitflips. Otherwise, if we are above, we assume some data was
written and the ECC engine could not recover it all, so we report an ECC
failure.

In order for this logic to be as close as the reality as we can (this is
already a simplified condition but we can hardly be more precise), we
should check all the data that is covered by the ECC step not only the
in-band data, so we should also include the ECC syndrome in the check.

Fixes: 88ffef1b65cf ("mtd: rawnand: arasan: Support the hardware BCH ECC engine")
Signed-off-by: Amit Kumar Mahapatra <amit.kumar-mahapatra@amd.com>
---
BRANCH: nand/next

Changes in v2:
- Updated commit message.
---
 drivers/mtd/nand/raw/arasan-nand-controller.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Miquel Raynal Oct. 16, 2023, 9:29 a.m. UTC | #1
On Wed, 2023-09-27 at 05:56:21 UTC, Amit Kumar Mahapatra wrote:
> Following an ECC failure condition upon page reads, we shall distinguish
> between a real ECC failure and an empty page. This is handled with a call
> to nand_check_erased_ecc_chunk() which looks at the data and counts the
> number of bits which are not 'ones'. If we get less zeros than the ECC
> strength, we assume the page was erased and we are in the presence of
> natural bitflips. Otherwise, if we are above, we assume some data was
> written and the ECC engine could not recover it all, so we report an ECC
> failure.
> 
> In order for this logic to be as close as the reality as we can (this is
> already a simplified condition but we can hardly be more precise), we
> should check all the data that is covered by the ECC step not only the
> in-band data, so we should also include the ECC syndrome in the check.
> 
> Fixes: 88ffef1b65cf ("mtd: rawnand: arasan: Support the hardware BCH ECC engine")
> Signed-off-by: Amit Kumar Mahapatra <amit.kumar-mahapatra@amd.com>

Applied to https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git nand/next, thanks.

Miquel
diff mbox series

Patch

diff --git a/drivers/mtd/nand/raw/arasan-nand-controller.c b/drivers/mtd/nand/raw/arasan-nand-controller.c
index 4621ec549cc7..547cc82b5d80 100644
--- a/drivers/mtd/nand/raw/arasan-nand-controller.c
+++ b/drivers/mtd/nand/raw/arasan-nand-controller.c
@@ -481,7 +481,7 @@  static int anfc_read_page_hw_ecc(struct nand_chip *chip, u8 *buf,
 		}
 
 		bf = nand_check_erased_ecc_chunk(raw_buf, chip->ecc.size,
-						 NULL, 0, NULL, 0,
+						 anand->hw_ecc, chip->ecc.bytes, NULL, 0,
 						 chip->ecc.strength);
 		if (bf > 0) {
 			mtd->ecc_stats.corrected += bf;