[PATCH] mtd: spi-nor: sfdp: Increase SFDP data size limit to 16 KiB

From: Takahiro Kuwano via B4 Relay

Date: Thu Sep 17 2026 - 01:07:04 EST


From: Takahiro Kuwano <takahiro.kuwano@xxxxxxxxxxxx>

The size of SFDP data read and cached is limited to avoid allocating
too much memory. The current limit is PAGE_SIZE, but the Spansion S25FS256S
has parameter tables at offsets beyond 4 KiB.

Increase the limit to 16 KiB to support such devices by introducing the
SFDP_MAX_SIZE macro.

Suggested-by: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>
Suggested-by: Michael Walle <mwalle@xxxxxxxxxx>
Signed-off-by: Takahiro Kuwano <takahiro.kuwano@xxxxxxxxxxxx>
---
drivers/mtd/spi-nor/sfdp.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/mtd/spi-nor/sfdp.c b/drivers/mtd/spi-nor/sfdp.c
index 641f17ad51a0..5d5bb6e587bf 100644
--- a/drivers/mtd/spi-nor/sfdp.c
+++ b/drivers/mtd/spi-nor/sfdp.c
@@ -115,6 +115,12 @@ struct sfdp_bfpt_erase {

#define SFDP_4BAIT_DWORD_MAX 2

+/*
+ * Limit the total size of SFDP to a reasonable value to avoid allocating too
+ * much memory just of because the flash returned some insane values.
+ */
+#define SFDP_MAX_SIZE SZ_16K
+
struct sfdp_4bait {
/* The hardware capability. */
u32 hwcaps;
@@ -1594,14 +1600,10 @@ int spi_nor_parse_sfdp(struct spi_nor *nor)
SFDP_PARAM_HEADER_PARAM_LEN(param_header));
}

- /*
- * Limit the total size to a reasonable value to avoid allocating too
- * much memory just of because the flash returned some insane values.
- */
- if (sfdp_size > PAGE_SIZE) {
+ if (sfdp_size > SFDP_MAX_SIZE) {
dev_dbg(dev, "SFDP data (%zu) too big, truncating\n",
sfdp_size);
- sfdp_size = PAGE_SIZE;
+ sfdp_size = SFDP_MAX_SIZE;
}

sfdp = devm_kzalloc(dev, sizeof(*sfdp), GFP_KERNEL);

---
base-commit: a96edc3f0b4f036a5b6ebc9b1eca4273ef5ce2d0
change-id: 20260917-sfdp_size-f9d50cd0539d

Best regards,
--
Takahiro Kuwano <takahiro.kuwano@xxxxxxxxxxxx>