Message ID | 20210531181757.19458-2-p.yadav@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Avoid odd length/address read/writes in 8D-8D-8D mode. | expand |
Am 2021-05-31 20:17, schrieb Pratyush Yadav: > The template ops used in spi_nor_spimem_check_pp() and > spi_nor_spimem_check_readop() currently set the data phase to 1 byte > long. This is problematic for 8D-8D-8D protocol where odd length data > phase is invalid since one cycle transfers 2 bytes and odd number of > bytes would mean half a cycle is left over. This could result in a > controller rejecting the op as "not supported" even though it actually > supports the protocol. > > Change the data length to 2 bytes in these templates. One might argue > that this should only be done for 8D-8D-8D operations but when talking > about these templates, there is no functional difference between one > and > two bytes, even in STR modes. > > Signed-off-by: Pratyush Yadav <p.yadav@ti.com> > --- Reviewed-by: Michael Walle <michael@walle.cc>
diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c index f6a6ef2d8bd8..d521ca577884 100644 --- a/drivers/mtd/spi-nor/core.c +++ b/drivers/mtd/spi-nor/core.c @@ -2143,7 +2143,7 @@ static int spi_nor_spimem_check_readop(struct spi_nor *nor, struct spi_mem_op op = SPI_MEM_OP(SPI_MEM_OP_CMD(read->opcode, 0), SPI_MEM_OP_ADDR(3, 0, 0), SPI_MEM_OP_DUMMY(1, 0), - SPI_MEM_OP_DATA_IN(1, NULL, 0)); + SPI_MEM_OP_DATA_IN(2, NULL, 0)); spi_nor_spimem_setup_op(nor, &op, read->proto); @@ -2169,7 +2169,7 @@ static int spi_nor_spimem_check_pp(struct spi_nor *nor, struct spi_mem_op op = SPI_MEM_OP(SPI_MEM_OP_CMD(pp->opcode, 0), SPI_MEM_OP_ADDR(3, 0, 0), SPI_MEM_OP_NO_DUMMY, - SPI_MEM_OP_DATA_OUT(1, NULL, 0)); + SPI_MEM_OP_DATA_OUT(2, NULL, 0)); spi_nor_spimem_setup_op(nor, &op, pp->proto);
The template ops used in spi_nor_spimem_check_pp() and spi_nor_spimem_check_readop() currently set the data phase to 1 byte long. This is problematic for 8D-8D-8D protocol where odd length data phase is invalid since one cycle transfers 2 bytes and odd number of bytes would mean half a cycle is left over. This could result in a controller rejecting the op as "not supported" even though it actually supports the protocol. Change the data length to 2 bytes in these templates. One might argue that this should only be done for 8D-8D-8D operations but when talking about these templates, there is no functional difference between one and two bytes, even in STR modes. Signed-off-by: Pratyush Yadav <p.yadav@ti.com> --- (no changes since v1) drivers/mtd/spi-nor/core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)