]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mtd: spi-nor: micron-st: add SNOR_CMD_PP_8_8_8_DTR sfdp fixup for mt35xu512aba
authorHaibo Chen <haibo.chen@nxp.com>
Tue, 23 Dec 2025 03:01:02 +0000 (11:01 +0800)
committerPratyush Yadav (Google) <pratyush@kernel.org>
Fri, 13 Mar 2026 10:54:21 +0000 (10:54 +0000)
Find two batches mt35xu512aba has different SFDP but with same
jedec ID. The batch which use the new version of SFDP contain
all the necessary information to support OCT DTR mode. The batch
with old version do not contain the OCT DTR command information,
but in fact it did support OCT DTR mode.

Current mt35xu512aba_post_sfdp_fixup() add some setting including
SNOR_CMD_READ_8_8_8_DTR, but still lack SNOR_CMD_PP_8_8_8_DTR. Meet
issue on the batch mt35xu512aba with old SFDP version. Because no
SNOR_CMD_PP_8_8_8_DTR, micron_st_nor_octal_dtr_en() will not be
called, then use SNOR_CMD_READ_8_8_8_DTR will meet issue.

Fixes: 44dd635cd632 ("mtd: spi-nor: micron-st: use SFDP of mt35xu512aba")
Reviewed-by: Pratyush Yadav <pratyush@kernel.org>
Signed-off-by: Haibo Chen <haibo.chen@nxp.com>
Reviewed-by: Michael Walle <mwalle@kernel.org>
[pratyush@kernel.org: touch up the comment a bit]
Signed-off-by: Pratyush Yadav (Google) <pratyush@kernel.org>
drivers/mtd/spi-nor/micron-st.c

index 88033384a71e5d19f5a26ca91f56a49e3017183a..b2b473501d0238e5d384915c645f397e3f33b1c8 100644 (file)
@@ -167,6 +167,16 @@ static int mt35xu512aba_post_sfdp_fixup(struct spi_nor *nor)
                                  0, 20, SPINOR_OP_MT_DTR_RD,
                                  SNOR_PROTO_8_8_8_DTR);
 
+       /*
+        * Some batches of mt35xu512aba do not contain the OCT DTR command
+        * information, but do support OCT DTR mode. Add the settings for
+        * SNOR_CMD_PP_8_8_8_DTR here. This also makes sure the flash can switch
+        * to OCT DTR mode.
+        */
+       nor->params->hwcaps.mask |= SNOR_HWCAPS_PP_8_8_8_DTR;
+       spi_nor_set_pp_settings(&nor->params->page_programs[SNOR_CMD_PP_8_8_8_DTR],
+                               SPINOR_OP_PP_4B, SNOR_PROTO_8_8_8_DTR);
+
        nor->cmd_ext_type = SPI_NOR_EXT_REPEAT;
        nor->params->rdsr_dummy = 8;
        nor->params->rdsr_addr_nbytes = 0;