]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
mtd: rawnand: brcmnand: fix OOB R/W with Hamming ECC
authorÁlvaro Fernández Rojas <noltari@gmail.com>
Sat, 11 Feb 2023 15:29:09 +0000 (16:29 +0100)
committerDario Binacchi <dario.binacchi@amarulasolutions.com>
Mon, 27 Feb 2023 15:30:05 +0000 (16:30 +0100)
Hamming ECC doesn't cover the OOB data, so reading or writing OOB shall
always be done without ECC enabled.
This is a problem when adding JFFS2 cleanmarkers to erased blocks. If JFFS2
clenmarkers are added to the OOB with ECC enabled, OOB bytes will be changed
from ff ff ff to 00 00 00, reporting incorrect ECC errors.

Fixes: 27c5b17cd1b1 ("mtd: nand: add NAND driver "library" for Broadcom STB NAND controller")
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Acked-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20210224080210.23686-1-noltari@gmail.com
[Ported to U-Boot from the Linux kernel]
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: William Zhang <william.zhang@broadcom.com>
Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
drivers/mtd/nand/raw/brcmnand/brcmnand.c

index b2ebcaf7a5bfe5df27c702901936c3a1cf4cee81..efbf9a3120a43f75a13c4bb8e51fc3809f7d9fa8 100644 (file)
@@ -2515,6 +2515,12 @@ static int brcmnand_init_cs(struct brcmnand_host *host, ofnode dn)
        ret = nand_register(0, mtd);
 #endif /* __UBOOT__ */
 
+       /* If OOB is written with ECC enabled it will cause ECC errors */
+       if (is_hamming_ecc(host->ctrl, &host->hwcfg)) {
+               chip->ecc.write_oob = brcmnand_write_oob_raw;
+               chip->ecc.read_oob = brcmnand_read_oob_raw;
+       }
+
        return ret;
 }