]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mtd: spinand: winbond: Fix ODTR write VCR on W35NxxJW
authorMiquel Raynal <miquel.raynal@bootlin.com>
Fri, 10 Apr 2026 17:41:05 +0000 (19:41 +0200)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Mon, 27 Apr 2026 13:08:04 +0000 (15:08 +0200)
In most scenarios this variant is actually unused (VCR is written in
SSDR mode), but we need to provide an octal variant. The address is 24
bits but is sent over 4 bytes MSB first. This means we need to shift the
register address by one extra byte for the address to be correct.

I didn't catch this initially because the volatile register region is
256 bytes wide, so the write-then-read procedure did work with the small
register addresses I was using at that time: 0 and 1.

Fixes: 44a2f49b9bdc ("mtd: spinand: winbond: W35N octal DTR support")
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
drivers/mtd/nand/spi/winbond.c

index ea62fecea661d6efae9c0c4f7a9ad32b4451c554..7cc0f0091430c16ab0c6edfd9415c4dfbe6c0575 100644 (file)
@@ -99,7 +99,7 @@ static SPINAND_OP_VARIANTS(update_cache_variants,
 
 #define SPINAND_WINBOND_WRITE_VCR_8D_8D_8D(reg, buf)                   \
        SPI_MEM_OP(SPI_MEM_DTR_OP_RPT_CMD(0x81, 8),                     \
-                  SPI_MEM_DTR_OP_ADDR(4, reg, 8),                      \
+                  SPI_MEM_DTR_OP_ADDR(4, reg << 8, 8),                 \
                   SPI_MEM_OP_NO_DUMMY,                                 \
                   SPI_MEM_DTR_OP_DATA_OUT(2, buf, 8))