From 3d4d633b596302135f488862f355d183a5001a72 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 10 Aug 2023 11:52:50 -0700 Subject: [PATCH] sfdp: Only read page size when basic table is 11+ DWORDs --- src/target/sfdp.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/target/sfdp.c b/src/target/sfdp.c index 1eb22fac933..2921afbafff 100644 --- a/src/target/sfdp.c +++ b/src/target/sfdp.c @@ -71,6 +71,7 @@ static spi_parameters_s sfdp_read_basic_parameter_table( sfdp_basic_parameter_table_s parameter_table; const size_t table_length = MIN(sizeof(sfdp_basic_parameter_table_s), length); spi_read(target, SPI_FLASH_CMD_READ_SFDP, address, ¶meter_table, table_length); + sfdp_debug_print(address, ¶meter_table, table_length); spi_parameters_s result = {0}; result.capacity = sfdp_memory_density_to_capacity_bits(parameter_table.memory_density) >> 3U; @@ -82,7 +83,14 @@ static spi_parameters_s sfdp_read_basic_parameter_table( break; } } - result.page_size = SFDP_PAGE_SIZE(parameter_table); + // The timing and page size DWORD was added in JESD216A. Before then, the + // table is 9 DWORDs and we default to page size 256. + if (length >= 4 * 11) { + result.page_size = SFDP_PAGE_SIZE(parameter_table); + } else { + result.page_size = 256; + } + return result; }