mtd: spi-nor: fix Spansion regressions (aliased with Winbond)

Linux-MTD Mailing List linux-mtd at lists.infradead.org
Tue Jan 5 16:59:01 PST 2016


Gitweb:     http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=67b9bcd36906e12a15ffec19463afbbd6a41660e
Commit:     67b9bcd36906e12a15ffec19463afbbd6a41660e
Parent:     472b444eef934eb7e90334efdd7fc7954cfe5132
Author:     Brian Norris <computersforpeace at gmail.com>
AuthorDate: Tue Dec 15 10:48:20 2015 -0800
Committer:  Brian Norris <computersforpeace at gmail.com>
CommitDate: Tue Jan 5 16:00:03 2016 -0800

    mtd: spi-nor: fix Spansion regressions (aliased with Winbond)
    
    Spansion and Winbond have occasionally used the same manufacturer ID,
    and they don't support the same features. Particularly, writing SR=0
    seems to break read access for Spansion's s25fl064k. Unfortunately, we
    don't currently have a way to differentiate these Spansion and Winbond
    parts, so rather than regressing support for these Spansion flash, let's
    drop the new Winbond lock/unlock support for now. We can try to address
    Winbond support during the next release cycle.
    
    Original discussion:
    
    http://patchwork.ozlabs.org/patch/549173/
    http://patchwork.ozlabs.org/patch/553683/
    
    Fixes: 357ca38d4751 ("mtd: spi-nor: support lock/unlock/is_locked for Winbond")
    Fixes: c6fc2171b249 ("mtd: spi-nor: disable protection for Winbond flash at startup")
    Signed-off-by: Brian Norris <computersforpeace at gmail.com>
    Reported-by: Felix Fietkau <nbd at openwrt.org>
    Cc: Felix Fietkau <nbd at openwrt.org>
---
 drivers/mtd/spi-nor/spi-nor.c | 6 ++----
 include/linux/mtd/spi-nor.h   | 2 +-
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
index 4988390..f5d59de 100644
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
@@ -1200,8 +1200,7 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode)
 
 	if (JEDEC_MFR(info) == SNOR_MFR_ATMEL ||
 	    JEDEC_MFR(info) == SNOR_MFR_INTEL ||
-	    JEDEC_MFR(info) == SNOR_MFR_SST ||
-	    JEDEC_MFR(info) == SNOR_MFR_WINBOND) {
+	    JEDEC_MFR(info) == SNOR_MFR_SST) {
 		write_enable(nor);
 		write_sr(nor, 0);
 	}
@@ -1217,8 +1216,7 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode)
 	mtd->_read = spi_nor_read;
 
 	/* NOR protection support for STmicro/Micron chips and similar */
-	if (JEDEC_MFR(info) == SNOR_MFR_MICRON ||
-	    JEDEC_MFR(info) == SNOR_MFR_WINBOND) {
+	if (JEDEC_MFR(info) == SNOR_MFR_MICRON) {
 		nor->flash_lock = stm_lock;
 		nor->flash_unlock = stm_unlock;
 		nor->flash_is_locked = stm_is_locked;
diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h
index c8723b6..bc742da 100644
--- a/include/linux/mtd/spi-nor.h
+++ b/include/linux/mtd/spi-nor.h
@@ -25,7 +25,7 @@
 #define SNOR_MFR_MACRONIX	CFI_MFR_MACRONIX
 #define SNOR_MFR_SPANSION	CFI_MFR_AMD
 #define SNOR_MFR_SST		CFI_MFR_SST
-#define SNOR_MFR_WINBOND	0xef
+#define SNOR_MFR_WINBOND	0xef /* Also used by some Spansion */
 
 /*
  * Note on opcode nomenclature: some opcodes have a format like



More information about the linux-mtd-cvs mailing list