Commit a0f64241 authored by Sanjaikumar V S's avatar Sanjaikumar V S Committed by Pratyush Yadav (Google)
Browse files

mtd: spi-nor: sst: Fix write enable before AAI sequence



When writing to SST flash starting at an odd address, a single byte is
first programmed using the byte program (BP) command. After this
operation completes, the flash hardware automatically clears the Write
Enable Latch (WEL) bit.

If an AAI (Auto Address Increment) word program sequence follows, it
requires WEL to be set. Without re-enabling writes, the AAI sequence
fails.

Add spi_nor_write_enable() after the odd-address byte program when more
data needs to be written. Use a local boolean for clarity.

Fixes: b199489d ("mtd: spi-nor: add the framework for SPI NOR")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarSanjaikumar V S <sanjaikumar.vs@dicortech.com>
Tested-by: default avatarHendrik Donner <hd@os-cillation.de>
Reviewed-by: default avatarHendrik Donner <hd@os-cillation.de>
Signed-off-by: default avatarPratyush Yadav (Google) <pratyush@kernel.org>
parent 5eb13017
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -203,6 +203,8 @@ static int sst_nor_write(struct mtd_info *mtd, loff_t to, size_t len,

	/* Start write from odd address. */
	if (to % 2) {
		bool needs_write_enable = (len > 1);

		/* write one byte. */
		ret = sst_nor_write_data(nor, to, 1, buf);
		if (ret < 0)
@@ -210,6 +212,17 @@ static int sst_nor_write(struct mtd_info *mtd, loff_t to, size_t len,

		to++;
		actual++;

		/*
		 * Byte program clears the write enable latch. If more
		 * data needs to be written using the AAI sequence,
		 * re-enable writes.
		 */
		if (needs_write_enable) {
			ret = spi_nor_write_enable(nor);
			if (ret)
				goto out;
		}
	}

	/* Write out most of the data here. */