aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--target/linux/ramips/files/drivers/mtd/nand/raw/mt7621_nand.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/target/linux/ramips/files/drivers/mtd/nand/raw/mt7621_nand.c b/target/linux/ramips/files/drivers/mtd/nand/raw/mt7621_nand.c
index f3a81ee4e2..89cc7e2624 100644
--- a/target/linux/ramips/files/drivers/mtd/nand/raw/mt7621_nand.c
+++ b/target/linux/ramips/files/drivers/mtd/nand/raw/mt7621_nand.c
@@ -1006,7 +1006,7 @@ static int mt7621_nfc_read_page_hwecc(struct nand_chip *nand, uint8_t *buf,
{
struct mt7621_nfc *nfc = nand_get_controller_data(nand);
struct mtd_info *mtd = nand_to_mtd(nand);
- int bitflips = 0;
+ int bitflips = 0, ret = 0;
int rc, i;
nand_read_page_op(nand, page, 0, NULL, 0);
@@ -1031,7 +1031,7 @@ static int mt7621_nfc_read_page_hwecc(struct nand_chip *nand, uint8_t *buf,
mt7621_nfc_read_sector_fdm(nfc, i);
if (rc < 0) {
- bitflips = -EIO;
+ ret = -EIO;
continue;
}
@@ -1043,10 +1043,11 @@ static int mt7621_nfc_read_page_hwecc(struct nand_chip *nand, uint8_t *buf,
dev_dbg(nfc->dev,
"Uncorrectable ECC error at page %d.%d\n",
page, i);
- bitflips = -EBADMSG;
+ bitflips = nand->ecc.strength + 1;
mtd->ecc_stats.failed++;
- } else if (bitflips >= 0) {
- bitflips += rc;
+ } else {
+ if (rc > bitflips)
+ bitflips = rc;
mtd->ecc_stats.corrected += rc;
}
}
@@ -1055,6 +1056,9 @@ static int mt7621_nfc_read_page_hwecc(struct nand_chip *nand, uint8_t *buf,
nfi_write16(nfc, NFI_CON, 0);
+ if (ret < 0)
+ return ret;
+
return bitflips;
}