[PATCH v4 00/28] mtd: spi-nor: Clean Winbond W25QxxJV family
Miquel Raynal <[email protected]> Tue, 04 Aug 2026 16:04:22 +0200
| Newsgroups | gmane.linux.kernel,gmane.linux.drivers.mtd |
|---|---|
| Message-ID | <20260804-winbond-v7-1-spi-nor-jv-cleanup-v4-0-ee3445066e4e@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: - Unconditional SFDP probing is intentional, it is explained, but it will very likely not break backward compatibility for legacy non-SFDP chips. First, there is a flag to skip SFDP parsing if it exist and is wrong. If the SFDP command does not exist, this is handled early and I believe it is fine paying the cost of this extra check on legacy chips. Finally the deprecated path already parses SFDP, and actually claims it does. The only change here is the fact that it is now done even on chips not advertizing dual/quad/octal support, which is an justified condition. It would be much more dangerous to flag the dual/quad capabilities of these chips (which could have been done otherwise) given that we cannot test it. - 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. So no, SR-based locking on the multi-die flash does not break partial locking nor incorrectly reports hardware lock state. - 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 v4: - Fixed the handling of one error in the garbage collection patch (at the end of SFDP parsing). - Fixed an issue in the commit log (s/CMP/QUAD_PP). - Improved the SFDP parsing failure rollback mechanism. - Link to v3: https://lore.kernel.org/r/20260804-winbond-v7-1-spi-nor-jv-cleanup-v3-0-542ce107bc92@bootlin.com 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 (28): mtd: spi-nor: Fix spacing in function call mtd: spi-nor: Complete error rollback on sfdp parsing failure mtd: spi-nor: 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 | 19 +++--- drivers/mtd/spi-nor/sfdp.c | 30 ++++++--- drivers/mtd/spi-nor/winbond.c | 138 +++++++++++++++++++++++++++++------------- 3 files changed, 127 insertions(+), 60 deletions(-) --- base-commit: 61e14aacac415b8c7ccbc8a5434b1e316af21aea change-id: 20260529-winbond-v7-1-spi-nor-jv-cleanup-817889edd1f7 Best regards, -- Miquel Raynal <[email protected]>