Messages in this thread Patch in this message | | | From | Michael Walle <> | Subject | [RFC PATCH 1/3] mtd: spi-nor: sfdp: remember sfdp_size | Date | Fri, 12 Mar 2021 20:05:46 +0100 |
| |
Save the sftp_size in the spi_nor struct so we can use it to dump the SFDP table without parsing the headers again.
Signed-off-by: Michael Walle <michael@walle.cc> --- drivers/mtd/spi-nor/sfdp.c | 12 ++++++++++++ include/linux/mtd/spi-nor.h | 1 + 2 files changed, 13 insertions(+)
diff --git a/drivers/mtd/spi-nor/sfdp.c b/drivers/mtd/spi-nor/sfdp.c index 25142ec4737b..b1814afefc33 100644 --- a/drivers/mtd/spi-nor/sfdp.c +++ b/drivers/mtd/spi-nor/sfdp.c @@ -16,6 +16,7 @@ (((p)->parameter_table_pointer[2] << 16) | \ ((p)->parameter_table_pointer[1] << 8) | \ ((p)->parameter_table_pointer[0] << 0)) +#define SFDP_PARAM_HEADER_PARAM_LEN(p) ((p)->length * 4) #define SFDP_BFPT_ID 0xff00 /* Basic Flash Parameter Table */ #define SFDP_SECTOR_MAP_ID 0xff81 /* Sector Map Table */ @@ -1263,6 +1264,7 @@ int spi_nor_parse_sfdp(struct spi_nor *nor, struct sfdp_parameter_header *param_headers = NULL; struct sfdp_header header; struct device *dev = nor->dev; + size_t param_max_offset; size_t psize; int i, err; @@ -1285,6 +1287,9 @@ int spi_nor_parse_sfdp(struct spi_nor *nor, bfpt_header->major != SFDP_JESD216_MAJOR) return -EINVAL; + nor->sfdp_size = SFDP_PARAM_HEADER_PTP(bfpt_header) + + SFDP_PARAM_HEADER_PARAM_LEN(bfpt_header); + /* * Allocate memory then read all parameter headers with a single * Read SFDP command. These parameter headers will actually be parsed @@ -1311,6 +1316,13 @@ int spi_nor_parse_sfdp(struct spi_nor *nor, } } + for (i = 0; i < header.nph; i++) { + param_header = ¶m_headers[i]; + param_max_offset = SFDP_PARAM_HEADER_PTP(param_header) + + SFDP_PARAM_HEADER_PARAM_LEN(param_header); + nor->sfdp_size = max(nor->sfdp_size, param_max_offset); + } + /* * Check other parameter headers to get the latest revision of * the basic flash parameter table. diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h index a0d572855444..a58118b8b002 100644 --- a/include/linux/mtd/spi-nor.h +++ b/include/linux/mtd/spi-nor.h @@ -404,6 +404,7 @@ struct spi_nor { bool sst_write_second; u32 flags; enum spi_nor_cmd_ext cmd_ext_type; + size_t sfdp_size; const struct spi_nor_controller_ops *controller_ops; -- 2.20.1
| |