[PATCH] Revert "mtd: spi-nor: disable protection for Winbond flash at startup"
Brian Norris
computersforpeace at gmail.com
Mon Dec 7 18:49:14 PST 2015
+ others
Hi Felix,
On Thu, Nov 26, 2015 at 05:27:01PM +0100, Felix Fietkau wrote:
> This reverts commit c6fc2171b249e73745c497b578b417a2946f1b2f.
>
> This commit is breaking read access on at least s25fl064k, but also
> possibly other Spansion flash chips.
>
> Any mtd read seems to succeed, but simply returns a zero-filled buffer.
>
> Signed-off-by: Felix Fietkau <nbd at openwrt.org>
> ---
> drivers/mtd/spi-nor/spi-nor.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
> index 4988390..8b8842e 100644
> --- a/drivers/mtd/spi-nor/spi-nor.c
> +++ b/drivers/mtd/spi-nor/spi-nor.c
> @@ -1194,14 +1194,13 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode)
> mutex_init(&nor->lock);
>
> /*
> - * Atmel, SST, Intel/Numonyx, and others serial NOR tend to power up
> - * with the software protection bits set
> + * Atmel, SST and Intel/Numonyx serial nor tend to power
> + * up with the software protection bits set
> */
>
> 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);
> }
So I think we've more or less agreed that this part needs applied for
4.4 (to prevent regressions), and hopefully we can work out a good way
forward for 4.5, to keep Winbond support.
But, I think if this part is breaking you, then ioctl(MEMLOCK) would
also mess up your flash, and so you'll need something like this too:
diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
index 3b2460efc019..3c88ebddf4db 100644
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
@@ -1236,8 +1236,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;
Do you think you can put together (and test) a patch with a fuller
description soon? Might mention the fact that Winbond and Spansion
shared vendor IDs on some parts. Then I can apply it for 4.4 and try for
a better solution on 4.5.
Thanks,
Brian
More information about the linux-mtd
mailing list