[PATCH v3 00/27] mtd: spi-nor: Clean Winbond W25QxxJV family
Miquel Raynal <[email protected]> Tue, 04 Aug 2026 12:58:58 +0200
| Newsgroups | gmane.linux.kernel,gmane.linux.drivers.mtd |
|---|---|
| Message-ID | <20260804-winbond-v7-1-spi-nor-jv-cleanup-v3-0-542ce107bc92@bootlin.com> |
Thanks to Winbond collaboration, I was able to test almost the entire JV SPI NOR family. A few chips could not be sourced, I decided to apply the very same logic than the other chips, all of them behave identically as shown in all the logs that I am sharing in each and every commit. This series is pretty straightforward, it is here to cleanup the JV entries by: - Aligning the comments and "fixing" the chip names in them - Reordering the chips by density and family - Testing and showing all the SFDP content and passing all the SPI NOR tests to ensure a good level of support. - Adding all the locking information when it is missing. Since v3, these Winbond changes are prefixed with core changes, to make the whole support work with legacy chips and SFDP compliant chips at the same time. This work is necessary because I am about to propose the addition of the W25QxxRV family, whose IDs actually collide with the JV chips. The chips are similar, they have been "improved" (especially the silicon/engraving smoothness) and we have a way to differentiate them based on their SFDP content, but that will be for a following series. Two Winbond-wide fixups are applied, non SFDP compatible chips do not have CMP nor QUAD_PP support, so let's make sure the additions we do in the table do not affect the old flags. Keeping the legacy flash handling in a separate function means that it will be easier to handle the day we want to drop support for them. So I picked that solution instead of enabling conditionally the fields at runtime (which makes the ID table real content harder to consolidate). NB: There is one collision with a Spansion chip as well (S25FL064K). On my side I commented out the Spansion entry to make sure the core was taking the Winbond entry (by alphabetical order) but it is due to an old joint agreement and is a legitimate ID duplication. We haven't found a good way to differentiate them so far, so I am keeping this aside for the moment and just assume we will have a solution later. In all cases, the colliding Winbond ID exist and is already fulfilled, so let's make sure the definition is accurate. Signed-off-by: Miquel Raynal <[email protected]> --- Sahiko hallucinations: - I disagree with Sashiko's feedback about the multi-die SWP issue: it is not fundamentally broken since there is only one set of status registers for the whole chip and all the bytes are addressed with those 4 bits. This is a false positive. - SPI_NOR_BP3_SR_BIT6 is not used in Winbond driver: slop (it is probably a vendor mixup since Micron does use it, whereas Winbond uses SPI_NOR_TB_SR_BIT6). - 254Mb devices do have 4 BP bits, I don't know why Sashiko compains about this. It is clearly stated in their datasheets. Changes in v3: - Added several core patches to change the deprecated SFDP parsing step a bit: do not limit SFDP parsing only to chips advertizing dual/quad/octal capabiltities. - Make sure the nor->sfdp pointer is not left dangling. - Ensure proper garbage collection in the SFDP parsing logic to avoid cluttering RAM with useless allocations. - Fixed typos in commit logs. - Fixed one (unrelated) extra typo in the sfdp.c file. - Fixed an out-of-band access on the ID buffer raised by Sashiko. - Link to v2: https://lore.kernel.org/r/20260731-winbond-v7-1-spi-nor-jv-cleanup-v2-0-2549ef1b1af8@bootlin.com Changes in v2: - Dropped the patches removing the no_sfdp_flags (they do not hurt) since this would drop support for !SFDP chips (~until 2016). - Stopped removing the .names. They are part of the ABI. I will try to drop them at runtime when adding the RV chips. At this stage, all the existing entries remain. - Reordered the patches a bit. - Added a catch all entry in the ID table as advised. - Added two fixups for non SFDP chips, one removing the CMP bit and the other removing the QUAD_PP flag. - Link to v1: https://lore.kernel.org/r/20260529-winbond-v7-1-spi-nor-jv-cleanup-v1-0-87e5d3122244@bootlin.com --- Miquel Raynal (27): mtd: spi-nor: sfdp: Fix spacing in function call mtd: spi-nor: sfdp: Garbage collection during sfdp parsing mtd: spi-nor: Unconditionally parse SFDP in the deprecated path mtd: spi-nor: Init flags before manufacturer late_init() hooks mtd: spi-nor: winbond: Move W25Q01NW to its right place mtd: spi-nor: winbond: Normalize names mtd: spi-nor: winbond: Properly document the chip names mtd: spi-nor: winbond: Make the RDCR fixup Winbond wide mtd: spi-nor: winbond: W25Q32JV-Q/N: Add quad page program capability mtd: spi-nor: winbond: W25Q64JV-Q/N: Add quad page program capability mtd: spi-nor: winbond: W25Q128JV-Q/N: Add quad page program capability mtd: spi-nor: winbond: W25Q32JV-M: Add quad page program capability mtd: spi-nor: winbond: W25Q64JV-M: Add quad page program capability mtd: spi-nor: winbond: W25Q128JV-M: Add quad page program capability mtd: spi-nor: winbond: W25QxxJV-Q/N/M: Add quad page program capability mtd: spi-nor: winbond: W25Q32JV-Q/N: Fill locking information mtd: spi-nor: winbond: W25Q64JV-Q/N: Fill locking information mtd: spi-nor: winbond: W25Q128JV-Q/N: Fill locking information mtd: spi-nor: winbond: W25Q512JV-Q/N: Fill locking information mtd: spi-nor: winbond: W25Q01JV-Q/N: Fill locking information mtd: spi-nor: winbond: W25Q32JV-M: Fill locking information mtd: spi-nor: winbond: W25Q64JV-M: Fill locking information mtd: spi-nor: winbond: W25Q128JV-M: Fill locking information mtd: spi-nor: winbond: W25Q02JV-M: Fill locking information mtd: spi-nor: winbond: W25QxxJV-Q/N/M: Fill locking information mtd: spi-nor: winbond: W25Q512JV-M: New chip mtd: spi-nor: winbond: W25Q01JV-M: New chip drivers/mtd/spi-nor/core.c | 12 ++-- drivers/mtd/spi-nor/sfdp.c | 30 +++++---- drivers/mtd/spi-nor/winbond.c | 138 +++++++++++++++++++++++++++++------------- 3 files changed, 119 insertions(+), 61 deletions(-) --- base-commit: 61e14aacac415b8c7ccbc8a5434b1e316af21aea change-id: 20260529-winbond-v7-1-spi-nor-jv-cleanup-817889edd1f7 Best regards, -- Miquel Raynal <[email protected]>