mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-07 06:18:54 +00:00
43 lines
1.2 KiB
Diff
43 lines
1.2 KiB
Diff
|
--- 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;
|