On Tue, 21 Apr 2020 18:46:32 +0200 Miquel Raynal <miquel.raynal@xxxxxxxxxxx> wrote: > During ONFI detection, the CRC derived from the parameter page and the > CRC supposed to be at the end of the parameter page are compared. If > they do not match, the second then the third copies of the page are > tried. > > The current implementation compares the newly derived CRC with the CRC > contained in the first page only. So if this particular CRC area has > been corrupted, then the detection will fail for a wrong reason. > > Fix this issue by checking the derived CRC against the right one. > > Signed-off-by: Miquel Raynal <miquel.raynal@xxxxxxxxxxx> Reviewed-by: Boris Brezillon <boris.brezillon@xxxxxxxxxxxxx> > --- > drivers/mtd/nand/raw/nand_onfi.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/mtd/nand/raw/nand_onfi.c b/drivers/mtd/nand/raw/nand_onfi.c > index 0b879bd0a68c..8fe8d7bdd203 100644 > --- a/drivers/mtd/nand/raw/nand_onfi.c > +++ b/drivers/mtd/nand/raw/nand_onfi.c > @@ -173,7 +173,7 @@ int nand_onfi_detect(struct nand_chip *chip) > } > > if (onfi_crc16(ONFI_CRC_BASE, (u8 *)&p[i], 254) == > - le16_to_cpu(p->crc)) { > + le16_to_cpu(p[i].crc)) { > if (i) > memcpy(p, &p[i], sizeof(*p)); > break; ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/