[PATCH 21/25] mtd: spi-nor: winbond: Prepare introduction of W25QxxPW-M parts

From: Miquel Raynal

Date: Wed Sep 09 2026 - 13:57:54 EST


There is an ID collision between chips of same density from the JW
family (which it self conflicted with yet another family) with new PW
parts. Chips are very similar in practice, it is mostly a matter of
electrical differences (mostly power consumption being lower) as well as
the addition of inline ECC capability for the higher devices (> 32Mb).

Chips with ECC capability protect 16 bytes chunks are against single
errors. In case a non-aligned write happens, ECC is locally disabled
until the next erase.

Another significant difference is that PW chips identify themselves as
supporting the new SFDP (rev F) QER field which forces an alternate
write SR2 opcode (0x31).

Signed-off-by: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>
---
drivers/mtd/spi-nor/winbond.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/drivers/mtd/spi-nor/winbond.c b/drivers/mtd/spi-nor/winbond.c
index 9f6eeaf0c32d..0c5c195ad472 100644
--- a/drivers/mtd/spi-nor/winbond.c
+++ b/drivers/mtd/spi-nor/winbond.c
@@ -684,6 +684,10 @@ static const struct spi_nor_fixup winbond_fixups[] = {
.fixups = &winbond_nor_multi_die_fixups },
{ .id = SNOR_ID(0xef, 0x70, 0x22), .match = winbond_jv_match,
.fixups = &winbond_nor_multi_die_fixups },
+ { .id = SNOR_ID(0xef, 0x80), .match = winbond_pw_with_ecc_match,
+ .fixups = &winbond_nor_ecc_configuration_fixups },
+ { .id = SNOR_ID(0xef, 0x80), .match = winbond_pw_match,
+ .fixups = &winbond_nor_partname_fixups },
};

const struct spi_nor_manufacturer spi_nor_winbond = {

--
2.54.0