On 5/4/2020 2:29 AM, Álvaro Fernández Rojas wrote: > The current code checks that the whole OOB area is erased. > This is a problem when JFFS2 cleanmarkers are added to the OOB, since it will > fail due to the usable OOB bytes not being 0xff. > Correct this by only checking that the ECC aren't 0xff. > > Signed-off-by: Álvaro Fernández Rojas <noltari@xxxxxxxxx> Can you provide a Fixes: tag for this change? > --- > drivers/mtd/nand/raw/brcmnand/brcmnand.c | 22 ++++++++++++++++++---- > 1 file changed, 18 insertions(+), 4 deletions(-) > > diff --git a/drivers/mtd/nand/raw/brcmnand/brcmnand.c b/drivers/mtd/nand/raw/brcmnand/brcmnand.c > index e4e3ceeac38f..546f0807b887 100644 > --- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c > +++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c > @@ -2018,6 +2018,7 @@ static int brcmnand_read_by_pio(struct mtd_info *mtd, struct nand_chip *chip, > static int brcmstb_nand_verify_erased_page(struct mtd_info *mtd, > struct nand_chip *chip, void *buf, u64 addr) > { > + struct mtd_oob_region oobecc; > int i, sas; > void *oob = chip->oob_poi; > int bitflips = 0; > @@ -2035,11 +2036,24 @@ static int brcmstb_nand_verify_erased_page(struct mtd_info *mtd, > 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, > + > + ret = nand_check_erased_ecc_chunk(ecc_chunk, chip->ecc.size, > + NULL, 0, NULL, 0, > + chip->ecc.strength); > + if (ret < 0) > + return ret; > + > + bitflips = max(bitflips, ret); > + } > + > + for (i = 0; mtd->ooblayout->ecc(mtd, i, &oobecc) != -ERANGE; i++) > + { > + ret = nand_check_erased_ecc_chunk(NULL, 0, > + oob + oobecc.offset, > + oobecc.length, > + NULL, 0, > chip->ecc.strength); > if (ret < 0) > return ret; > -- Florian