summaryrefslogtreecommitdiffstats
path: root/drivers/mtd/nand/atmel_nand.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2020-11-05 15:13:41 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2020-11-10 08:42:29 +0100
commitf1c04925f90c3983cdb20bf3eed45e09e7c27655 (patch)
treede1b6e514fa6cbc6f10b7f5ed7b23512899862a5 /drivers/mtd/nand/atmel_nand.c
parentf21714d18631ff1f30a71a13b13b84606f219ce1 (diff)
downloadbarebox-f1c04925f90c3983cdb20bf3eed45e09e7c27655.tar.gz
barebox-f1c04925f90c3983cdb20bf3eed45e09e7c27655.tar.xz
mtd: nand: atmel: Return number of bitflips
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/mtd/nand/atmel_nand.c')
-rw-r--r--drivers/mtd/nand/atmel_nand.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c
index 6903fb4c9d..5351667bdc 100644
--- a/drivers/mtd/nand/atmel_nand.c
+++ b/drivers/mtd/nand/atmel_nand.c
@@ -574,7 +574,7 @@ static int pmecc_correction(struct mtd_info *mtd, u32 pmecc_stat, uint8_t *buf)
{
struct nand_chip *nand_chip = mtd_to_nand(mtd);
struct atmel_nand_host *host = nand_chip->priv;
- int i, err_nbr, ret;
+ int i, err_nbr, ret, bitflips = 0;
uint8_t *buf_pos;
uint8_t *ecc_code = host->ecc_code;
@@ -603,17 +603,18 @@ normal_check:
if (err_nbr == -1) {
dev_err(host->dev, "PMECC: Too many errors\n");
mtd->ecc_stats.failed++;
- return -EIO;
+ return -EBADMSG;
} else {
pmecc_correct_data(mtd, buf_pos, ecc_code, i,
host->pmecc_bytes_per_sector, err_nbr);
mtd->ecc_stats.corrected += err_nbr;
+ bitflips += err_nbr;
}
}
pmecc_stat >>= 1;
}
- return 0;
+ return bitflips;
}
static int atmel_nand_pmecc_read_page(struct nand_chip *chip, uint8_t *buf,
@@ -647,8 +648,7 @@ static int atmel_nand_pmecc_read_page(struct nand_chip *chip, uint8_t *buf,
stat = pmecc_readl_relaxed(host->ecc, ISR);
if (stat != 0)
- if (pmecc_correction(mtd, stat, buf) != 0)
- return -EIO;
+ return pmecc_correction(mtd, stat, buf);
return 0;
}