diff mbox series

mtd: spi-nor: Do not proceed with spi_nor_sr_unlock if WP

Message ID fc01cab3-7c95-9d24-a32f-d215fe834105@nokia.com
State Superseded
Delegated to: Vignesh R
Headers show
Series mtd: spi-nor: Do not proceed with spi_nor_sr_unlock if WP | expand

Commit Message

Matija Glavinic Pecotic Sept. 16, 2020, 4:42 p.m. UTC
In case Status register 1:SR_SRWD was set (either by software or write
protect pin), sr_unlock fails on spi_nor_write_sr_and_check in 8-bit
mode due to fact that written value will not match read value.

Problem was observed with n25q128a11 device having protection enabled
by W# pin.

Problem was uncovered by 82de6a6fb67e16 ("mtd: spi-nor: Fix the writing
of the Status Register on micron flashes"). Commit selected 8-bit mode
for micron devices. In 16-bit mode, CR content is verified, while in
8-bit SR is checked for sanity.

Signed-off-by: Matija Glavinic Pecotic <matija.glavinic-pecotic.ext@nokia.com>
---
  drivers/mtd/spi-nor/core.c | 4 ++++
  1 file changed, 4 insertions(+)
diff mbox series

Patch

diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c
index 65eff4c..4c3acc0 100644
--- a/drivers/mtd/spi-nor/core.c
+++ b/drivers/mtd/spi-nor/core.c
@@ -1777,6 +1777,10 @@  static int spi_nor_sr_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len)
  
  	status_old = nor->bouncebuf[0];
  
+	/* If SR is write protected, we cannot unlock */
+	if (status_old & SR_SRWD)
+		return 0;
+
  	/* If nothing in our range is locked, we don't need to do anything */
  	if (spi_nor_is_unlocked_sr(nor, ofs, len, status_old))
  		return 0;