Commit 67b9bcd3 authored by Brian Norris's avatar Brian Norris

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: 357ca38d ("mtd: spi-nor: support lock/unlock/is_locked for Winbond")
Fixes: c6fc2171 ("mtd: spi-nor: disable protection for Winbond flash at startup")
Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
Reported-by: default avatarFelix Fietkau <nbd@openwrt.org>
Cc: Felix Fietkau <nbd@openwrt.org>
parent 472b444e
...@@ -1200,8 +1200,7 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode) ...@@ -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 || if (JEDEC_MFR(info) == SNOR_MFR_ATMEL ||
JEDEC_MFR(info) == SNOR_MFR_INTEL || JEDEC_MFR(info) == SNOR_MFR_INTEL ||
JEDEC_MFR(info) == SNOR_MFR_SST || JEDEC_MFR(info) == SNOR_MFR_SST) {
JEDEC_MFR(info) == SNOR_MFR_WINBOND) {
write_enable(nor); write_enable(nor);
write_sr(nor, 0); write_sr(nor, 0);
} }
...@@ -1217,8 +1216,7 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode) ...@@ -1217,8 +1216,7 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode)
mtd->_read = spi_nor_read; mtd->_read = spi_nor_read;
/* NOR protection support for STmicro/Micron chips and similar */ /* NOR protection support for STmicro/Micron chips and similar */
if (JEDEC_MFR(info) == SNOR_MFR_MICRON || if (JEDEC_MFR(info) == SNOR_MFR_MICRON) {
JEDEC_MFR(info) == SNOR_MFR_WINBOND) {
nor->flash_lock = stm_lock; nor->flash_lock = stm_lock;
nor->flash_unlock = stm_unlock; nor->flash_unlock = stm_unlock;
nor->flash_is_locked = stm_is_locked; nor->flash_is_locked = stm_is_locked;
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#define SNOR_MFR_MACRONIX CFI_MFR_MACRONIX #define SNOR_MFR_MACRONIX CFI_MFR_MACRONIX
#define SNOR_MFR_SPANSION CFI_MFR_AMD #define SNOR_MFR_SPANSION CFI_MFR_AMD
#define SNOR_MFR_SST CFI_MFR_SST #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 * Note on opcode nomenclature: some opcodes have a format like
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment