[PATCH] mtd: spi-nor: sfdp: Fix wrong addr length and dummy when perform SMPT detection command

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



As per SFDP(JESD216D, Section 6.5.3) says of SMPT 1st DWORD, 11b of
bit[23:22] and 1111b of bit[19:16] represent variable
{address length, read latency}, which means "the {address length,
read latency} last set in memory device and this same value is used in the
configuration dectection command". Currently we use address length
and dummy byte of struct spi_nor in such conditions. But the value
are 0 as they are not set at the time, which will lead to
wrong perform of the dectection command.

As the last command is read SFDP(1S-1S-1S, the only mode we use in kernel),
with 3-byte address and 8 dummy cycles, use the same values in
variable situations to perform correct dectection command.

Fixes: b038e8e3be72 ("mtd: spi-nor: parse SFDP Sector Map Parameter Table")
Signed-off-by: Yicong Yang <yangyicong@xxxxxxxxxxxxx>
---
 drivers/mtd/spi-nor/sfdp.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/mtd/spi-nor/sfdp.c b/drivers/mtd/spi-nor/sfdp.c
index f6038d3..27a8faa 100644
--- a/drivers/mtd/spi-nor/sfdp.c
+++ b/drivers/mtd/spi-nor/sfdp.c
@@ -624,7 +624,7 @@ static u8 spi_nor_smpt_addr_width(const struct spi_nor *nor, const u32 settings)
 		return 4;
 	case SMPT_CMD_ADDRESS_LEN_USE_CURRENT:
 	default:
-		return nor->addr_width;
+		return 3;
 	}
 }

@@ -641,7 +641,7 @@ static u8 spi_nor_smpt_read_dummy(const struct spi_nor *nor, const u32 settings)
 	u8 read_dummy = SMPT_CMD_READ_DUMMY(settings);

 	if (read_dummy == SMPT_CMD_READ_DUMMY_IS_VARIABLE)
-		return nor->read_dummy;
+		return 8;
 	return read_dummy;
 }

--
2.8.1


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/



[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux