diff options
Diffstat (limited to 'target/linux/bcm63xx/patches-5.4/435-mtd-rawnand-brcmnand-correctly-verify-erased-pages.patch')
-rw-r--r-- | target/linux/bcm63xx/patches-5.4/435-mtd-rawnand-brcmnand-correctly-verify-erased-pages.patch | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/target/linux/bcm63xx/patches-5.4/435-mtd-rawnand-brcmnand-correctly-verify-erased-pages.patch b/target/linux/bcm63xx/patches-5.4/435-mtd-rawnand-brcmnand-correctly-verify-erased-pages.patch new file mode 100644 index 0000000000..cbd9e9e147 --- /dev/null +++ b/target/linux/bcm63xx/patches-5.4/435-mtd-rawnand-brcmnand-correctly-verify-erased-pages.patch @@ -0,0 +1,42 @@ +--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c ++++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c +@@ -1787,28 +1787,31 @@ static int brcmnand_read_by_pio(struct m + static int brcmstb_nand_verify_erased_page(struct mtd_info *mtd, + struct nand_chip *chip, void *buf, u64 addr) + { +- int i, sas; +- void *oob = chip->oob_poi; ++ struct mtd_oob_region ecc; ++ int i; + int bitflips = 0; + int page = addr >> chip->page_shift; + int ret; ++ void *ecc_bytes; + void *ecc_chunk; + + if (!buf) + buf = nand_get_data_buf(chip); + +- sas = mtd->oobsize / chip->ecc.steps; +- + /* read without ecc for verification */ + ret = chip->ecc.read_page_raw(chip, buf, true, page); + if (ret) + return ret; + +- for (i = 0; i < chip->ecc.steps; i++, oob += sas) { ++ for (i = 0; i < chip->ecc.steps; i++) { + ecc_chunk = buf + chip->ecc.size * i; +- ret = nand_check_erased_ecc_chunk(ecc_chunk, +- chip->ecc.size, +- oob, sas, NULL, 0, ++ ++ mtd_ooblayout_ecc(mtd, i, &ecc); ++ ecc_bytes = chip->oob_poi + ecc.offset; ++ ++ ret = nand_check_erased_ecc_chunk(ecc_chunk, chip->ecc.size, ++ ecc_bytes, ecc.length, ++ NULL, 0, + chip->ecc.strength); + if (ret < 0) + return ret; |