]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mtd: spinand: winbond: Fix 512GW, 01GW, 01JW and 02JW ECC information
authorMiquel Raynal <miquel.raynal@bootlin.com>
Wed, 9 Oct 2024 12:50:00 +0000 (14:50 +0200)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Mon, 21 Oct 2024 09:55:35 +0000 (11:55 +0200)
These four chips:
* W25N512GW
* W25N01GW
* W25N01JW
* W25N02JW
all require a single bit of ECC strength and thus feature an on-die
Hamming-like ECC engine. There is no point in filling a ->get_status()
callback for them because the main ECC status bytes are located in
standard places, and retrieving the number of bitflips in case of
corrected chunk is both useless and unsupported (if there are bitflips,
then there is 1 at most, so no need to query the chip for that).

Without this change, a kernel warning triggers every time a bit flips.

Fixes: 6a804fb72de5 ("mtd: spinand: winbond: add support for serial NAND flash")
Cc: stable@vger.kernel.org
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Link: https://lore.kernel.org/linux-mtd/20241009125002.191109-3-miquel.raynal@bootlin.com
drivers/mtd/nand/spi/winbond.c

index 1d9680cc26e5ea52deed2c36d5ecdc667a9ea4bd..a33ad04e99cc8e36bf803c738fab77ec60faaef3 100644 (file)
@@ -201,30 +201,30 @@ static const struct spinand_info winbond_spinand_table[] = {
        SPINAND_INFO("W25N01JW",
                     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xbc, 0x21),
                     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
-                    NAND_ECCREQ(4, 512),
+                    NAND_ECCREQ(1, 512),
                     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
                                              &write_cache_variants,
                                              &update_cache_variants),
                     0,
-                    SPINAND_ECCINFO(&w25m02gv_ooblayout, w25n02kv_ecc_get_status)),
+                    SPINAND_ECCINFO(&w25m02gv_ooblayout, NULL)),
        SPINAND_INFO("W25N02JWZEIF",
                     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xbf, 0x22),
                     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 2, 1),
-                    NAND_ECCREQ(4, 512),
+                    NAND_ECCREQ(1, 512),
                     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
                                              &write_cache_variants,
                                              &update_cache_variants),
                     0,
-                    SPINAND_ECCINFO(&w25m02gv_ooblayout, w25n02kv_ecc_get_status)),
+                    SPINAND_ECCINFO(&w25m02gv_ooblayout, NULL)),
        SPINAND_INFO("W25N512GW",
                     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xba, 0x20),
                     NAND_MEMORG(1, 2048, 64, 64, 512, 10, 1, 1, 1),
-                    NAND_ECCREQ(4, 512),
+                    NAND_ECCREQ(1, 512),
                     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
                                              &write_cache_variants,
                                              &update_cache_variants),
                     0,
-                    SPINAND_ECCINFO(&w25m02gv_ooblayout, w25n02kv_ecc_get_status)),
+                    SPINAND_ECCINFO(&w25m02gv_ooblayout, NULL)),
        SPINAND_INFO("W25N02KWZEIR",
                     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xba, 0x22),
                     NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1),
@@ -237,12 +237,12 @@ static const struct spinand_info winbond_spinand_table[] = {
        SPINAND_INFO("W25N01GWZEIG",
                     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xba, 0x21),
                     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
-                    NAND_ECCREQ(4, 512),
+                    NAND_ECCREQ(1, 512),
                     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
                                              &write_cache_variants,
                                              &update_cache_variants),
                     0,
-                    SPINAND_ECCINFO(&w25m02gv_ooblayout, w25n02kv_ecc_get_status)),
+                    SPINAND_ECCINFO(&w25m02gv_ooblayout, NULL)),
        SPINAND_INFO("W25N04KV",
                     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xaa, 0x23),
                     NAND_MEMORG(1, 2048, 128, 64, 4096, 40, 2, 1, 1),