From: Miquel Raynal <miquel.raynal@bootlin.com>
To: "Bough Chen (OSS)" <haibo.chen@oss.nxp.com>
Cc: "sashiko-reviews@lists.linux.dev"
<sashiko-reviews@lists.linux.dev>,
Pratyush Yadav <pratyush@kernel.org>,
Michael Walle <mwalle@kernel.org>,
Takahiro Kuwano <takahiro.kuwano@infineon.com>,
Richard Weinberger <richard@nod.at>,
Vignesh Raghavendra <vigneshr@ti.com>,
"linux-mtd@lists.infradead.org" <linux-mtd@lists.infradead.org>,
"imx@lists.linux.dev" <imx@lists.linux.dev>,
"michael@walle.cc" <michael@walle.cc>,
Bough Chen <haibo.chen@nxp.com>,
"Frank.Li@kernel.org" <Frank.Li@kernel.org>
Subject: Re: [PATCH v3] mtd: spi-nor: clear the default read_sr2 opcode for xSPI Profile 1.0 flashes
Date: Thu, 22 Oct 2026 11:52:01 +0200 [thread overview]
Message-ID: <87y0bqqczi.fsf@bootlin.com> (raw)
In-Reply-To: <AS8PR04MB8820F1AAF591DCF5C9D0136090652@AS8PR04MB8820.eurprd04.prod.outlook.com> (Bough Chen's message of "Thu, 22 Oct 2026 08:56:03 +0000")
Hello,
On 22/10/2026 at 08:56:03 GMT, "Bough Chen (OSS)" <haibo.chen@oss.nxp.com> wrote:
>> -----Original Message-----
>> From: sashiko-bot@kernel.org <sashiko-bot@kernel.org>
>> Sent: Thursday, October 22, 2026 4:21 PM
>> To: Bough Chen (OSS) <haibo.chen@oss.nxp.com>; Pratyush Yadav
>> <pratyush@kernel.org>; Michael Walle <mwalle@kernel.org>; Takahiro
>> Kuwano <takahiro.kuwano@infineon.com>; Miquel Raynal
>> <miquel.raynal@bootlin.com>; Richard Weinberger <richard@nod.at>;
>> Vignesh Raghavendra <vigneshr@ti.com>
>> Cc: linux-mtd@lists.infradead.org; imx@lists.linux.dev; michael@walle.cc;
>> Bough Chen <haibo.chen@nxp.com>; Frank.Li@kernel.org
>> Subject: Re: [PATCH v3] mtd: spi-nor: clear the default read_sr2 opcode for
>> xSPI Profile 1.0 flashes
>>
>> Thank you for your contribution! Sashiko AI review found 1 potential issue(s)
>> to consider:
>> - [Medium] mtd: spi-nor: read_sr2 left set for 8D-8D-8D flashes without
>> Profile 1.0
>> --
>>
>> commit ef4079e3aea2014890e08df31ea4d8775a392f81
>> Author: Haibo Chen <haibo.chen@nxp.com>
>>
>> mtd: spi-nor: clear the default read_sr2 opcode for xSPI Profile 1.0 flashes
>>
>> This commit clears params->opcodes.read_sr2 in spi_nor_parse_profile1() so
>> that flashes with an xspi profile 1.0 table do not issue an unsupported
>> 0x35 register read when running in octal dtr mode.
>>
>> > diff --git a/drivers/mtd/spi-nor/sfdp.c b/drivers/mtd/spi-nor/sfdp.c
>> > index 4a3f82e97cef8..722eeff71d0df 100644
>> > --- a/drivers/mtd/spi-nor/sfdp.c
>> > +++ b/drivers/mtd/spi-nor/sfdp.c
>> > @@ -1344,6 +1344,17 @@ static int spi_nor_parse_profile1(struct spi_nor
>> *nor,
>> > */
>> > nor->params->hwcaps.mask |= SNOR_HWCAPS_PP_8_8_8_DTR;
>> >
>> > + /*
>> > + * The xSPI Profile 1.0 table does not describe a Read Configuration
>> > + * Register (RDCR, 35h) instruction, and the single-byte RDCR default
>> > + * is not usable in 8D-8D-8D mode. Drop the SR2 read opcode for
>> these
>> > + * octal-capable flashes so spi_nor_read_sr1_and_sr2() degrades to
>> an
>> > + * SR1-only read and spi_nor_init() does not issue an unsupported
>> > + * command that the flash never answers. A manufacturer driver that
>> > + * actually needs SR2 can install its own opcode in a later fixup.
>> > + */
>> > + nor->params->opcodes.read_sr2 = 0;
>>
>> [Severity: Medium]
>> What happens on octal dtr flashes that do not publish an xspi profile 1.0
>> table, so spi_nor_parse_profile1() is never called?
>>
>> Specifically, some batches of the Micron mt35xu512aba lack the profile 1.0
>> table and instead configure SNOR_PROTO_8_8_8_DTR in
>> drivers/mtd/spi-nor/micron-st.c:mt35xu512aba_post_sfdp_fixup():
>>
>> nor->params->hwcaps.mask |= SNOR_HWCAPS_READ_8_8_8_DTR;
>> spi_nor_set_read_settings(&nor->params-
>> >reads[SNOR_CMD_READ_8_8_8_DTR],
>> 0, 20, SPINOR_OP_MT_DTR_RD,
>> SNOR_PROTO_8_8_8_DTR);
>> ...
>> 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);
>>
>> In drivers/mtd/spi-nor/sfdp.c:spi_nor_parse_bfpt(), params-
>> >opcodes.read_sr2 is initialized to SPINOR_OP_RDCR (0x35) and remains set
>> when the quad enable requirements field contains a reserved value (which
>> mt35xu512aba_post_sfdp_fixup() notes is the case on this part) or
>> BFPT_DWORD15_QER_NONE:
>>
>> params->opcodes.read_sr1 = SPINOR_OP_RDSR;
>> params->opcodes.read_sr2 = SPINOR_OP_RDCR;
>> ...
>> default:
>> dev_dbg(nor->dev, "BFPT QER reserved value used\n");
>> break;
>>
>> Similarly, non-sfdp flashes initialized with SPI_NOR_OCTAL_DTR_READ in
>> drivers/mtd/spi-nor/core.c:spi_nor_no_sfdp_init_params() enable
>> SNOR_HWCAPS_READ_8_8_8_DTR while leaving params->opcodes.read_sr2
>> set to SPINOR_OP_RDCR from spi_nor_init_default_params().
>>
>> When spi_nor_init() switches these flashes to SNOR_PROTO_8_8_8_DTR via
>> spi_nor_set_octal_dtr() and then runs:
>>
>> spi_nor_init()
>> -> spi_nor_cache_sr_lock_bits()
>> -> spi_nor_read_sr1_and_sr2_careful()
>> -> spi_nor_read_sr2_careful()
>> -> spi_nor_read_sr_ll()
>>
>> wouldn't this still issue the unsupported 0x3535 register read in
>> SNOR_PROTO_8_8_8_DTR mode and fail probe or resume with a controller
>> timeout?
>
> Hi Miquel,
>
> The Sashiko AI review raised a valid point on v3.
Is it a valid point? Only Winbond flashes have something in SR2. It is
mentioning non SFDP compliant Micron devices. So this case never
actually happens.
> I see three ways to go, which do you prefer?
>
> 1, Keep the v3 approach (clear in spi_nor_parse_profile1()) and fix the remaining
> cases one by one, clearing read_sr2 in each relevant fixup
> (e.g. mt35xu512aba_post_sfdp_fixup) / no-SFDP path.
This is my favorite option, as you can guess.
> 2, Move the clear into spi_nor_late_init_params(), gated on the 8D read capability
> (hwcaps & SNOR_HWCAPS_READ_8_8_8_DTR) and read_sr2 == RDCR, so all 8D
> paths are covered in one place.
> The downside: late_init runs after the manufacturer fixups, so if a vendor later
> wants to set its own SR2 opcode for 8D it would be clobbered here and overriding
> it cleanly becomes awkward.
>
> 3, Go back to the v2 approach (clear in spi_nor_set_octal_dtr() when the switch to 8D
> actually succeeds). This covers every path that ends up in 8D regardless of how the
> capability was discovered, but it is runtime-protocol based rather than capability
> based, which you didn't prefer earlier. And this method has the same downside as
> method 2.
Thanks,
Miquèl
WARNING: multiple messages have this Message-ID (diff)
From: Miquel Raynal <miquel.raynal@bootlin.com>
To: "Bough Chen (OSS)" <haibo.chen@oss.nxp.com>
Cc: "sashiko-reviews@lists.linux.dev"
<sashiko-reviews@lists.linux.dev>,
Pratyush Yadav <pratyush@kernel.org>,
Michael Walle <mwalle@kernel.org>,
Takahiro Kuwano <takahiro.kuwano@infineon.com>,
Richard Weinberger <richard@nod.at>,
Vignesh Raghavendra <vigneshr@ti.com>,
"linux-mtd@lists.infradead.org" <linux-mtd@lists.infradead.org>,
"imx@lists.linux.dev" <imx@lists.linux.dev>,
"michael@walle.cc" <michael@walle.cc>,
Bough Chen <haibo.chen@nxp.com>,
"Frank.Li@kernel.org" <Frank.Li@kernel.org>
Subject: Re: [PATCH v3] mtd: spi-nor: clear the default read_sr2 opcode for xSPI Profile 1.0 flashes
Date: Thu, 22 Oct 2026 11:52:01 +0200 [thread overview]
Message-ID: <87y0bqqczi.fsf@bootlin.com> (raw)
In-Reply-To: <AS8PR04MB8820F1AAF591DCF5C9D0136090652@AS8PR04MB8820.eurprd04.prod.outlook.com> (Bough Chen's message of "Thu, 22 Oct 2026 08:56:03 +0000")
Hello,
On 22/10/2026 at 08:56:03 GMT, "Bough Chen (OSS)" <haibo.chen@oss.nxp.com> wrote:
>> -----Original Message-----
>> From: sashiko-bot@kernel.org <sashiko-bot@kernel.org>
>> Sent: Thursday, October 22, 2026 4:21 PM
>> To: Bough Chen (OSS) <haibo.chen@oss.nxp.com>; Pratyush Yadav
>> <pratyush@kernel.org>; Michael Walle <mwalle@kernel.org>; Takahiro
>> Kuwano <takahiro.kuwano@infineon.com>; Miquel Raynal
>> <miquel.raynal@bootlin.com>; Richard Weinberger <richard@nod.at>;
>> Vignesh Raghavendra <vigneshr@ti.com>
>> Cc: linux-mtd@lists.infradead.org; imx@lists.linux.dev; michael@walle.cc;
>> Bough Chen <haibo.chen@nxp.com>; Frank.Li@kernel.org
>> Subject: Re: [PATCH v3] mtd: spi-nor: clear the default read_sr2 opcode for
>> xSPI Profile 1.0 flashes
>>
>> Thank you for your contribution! Sashiko AI review found 1 potential issue(s)
>> to consider:
>> - [Medium] mtd: spi-nor: read_sr2 left set for 8D-8D-8D flashes without
>> Profile 1.0
>> --
>>
>> commit ef4079e3aea2014890e08df31ea4d8775a392f81
>> Author: Haibo Chen <haibo.chen@nxp.com>
>>
>> mtd: spi-nor: clear the default read_sr2 opcode for xSPI Profile 1.0 flashes
>>
>> This commit clears params->opcodes.read_sr2 in spi_nor_parse_profile1() so
>> that flashes with an xspi profile 1.0 table do not issue an unsupported
>> 0x35 register read when running in octal dtr mode.
>>
>> > diff --git a/drivers/mtd/spi-nor/sfdp.c b/drivers/mtd/spi-nor/sfdp.c
>> > index 4a3f82e97cef8..722eeff71d0df 100644
>> > --- a/drivers/mtd/spi-nor/sfdp.c
>> > +++ b/drivers/mtd/spi-nor/sfdp.c
>> > @@ -1344,6 +1344,17 @@ static int spi_nor_parse_profile1(struct spi_nor
>> *nor,
>> > */
>> > nor->params->hwcaps.mask |= SNOR_HWCAPS_PP_8_8_8_DTR;
>> >
>> > + /*
>> > + * The xSPI Profile 1.0 table does not describe a Read Configuration
>> > + * Register (RDCR, 35h) instruction, and the single-byte RDCR default
>> > + * is not usable in 8D-8D-8D mode. Drop the SR2 read opcode for
>> these
>> > + * octal-capable flashes so spi_nor_read_sr1_and_sr2() degrades to
>> an
>> > + * SR1-only read and spi_nor_init() does not issue an unsupported
>> > + * command that the flash never answers. A manufacturer driver that
>> > + * actually needs SR2 can install its own opcode in a later fixup.
>> > + */
>> > + nor->params->opcodes.read_sr2 = 0;
>>
>> [Severity: Medium]
>> What happens on octal dtr flashes that do not publish an xspi profile 1.0
>> table, so spi_nor_parse_profile1() is never called?
>>
>> Specifically, some batches of the Micron mt35xu512aba lack the profile 1.0
>> table and instead configure SNOR_PROTO_8_8_8_DTR in
>> drivers/mtd/spi-nor/micron-st.c:mt35xu512aba_post_sfdp_fixup():
>>
>> nor->params->hwcaps.mask |= SNOR_HWCAPS_READ_8_8_8_DTR;
>> spi_nor_set_read_settings(&nor->params-
>> >reads[SNOR_CMD_READ_8_8_8_DTR],
>> 0, 20, SPINOR_OP_MT_DTR_RD,
>> SNOR_PROTO_8_8_8_DTR);
>> ...
>> 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);
>>
>> In drivers/mtd/spi-nor/sfdp.c:spi_nor_parse_bfpt(), params-
>> >opcodes.read_sr2 is initialized to SPINOR_OP_RDCR (0x35) and remains set
>> when the quad enable requirements field contains a reserved value (which
>> mt35xu512aba_post_sfdp_fixup() notes is the case on this part) or
>> BFPT_DWORD15_QER_NONE:
>>
>> params->opcodes.read_sr1 = SPINOR_OP_RDSR;
>> params->opcodes.read_sr2 = SPINOR_OP_RDCR;
>> ...
>> default:
>> dev_dbg(nor->dev, "BFPT QER reserved value used\n");
>> break;
>>
>> Similarly, non-sfdp flashes initialized with SPI_NOR_OCTAL_DTR_READ in
>> drivers/mtd/spi-nor/core.c:spi_nor_no_sfdp_init_params() enable
>> SNOR_HWCAPS_READ_8_8_8_DTR while leaving params->opcodes.read_sr2
>> set to SPINOR_OP_RDCR from spi_nor_init_default_params().
>>
>> When spi_nor_init() switches these flashes to SNOR_PROTO_8_8_8_DTR via
>> spi_nor_set_octal_dtr() and then runs:
>>
>> spi_nor_init()
>> -> spi_nor_cache_sr_lock_bits()
>> -> spi_nor_read_sr1_and_sr2_careful()
>> -> spi_nor_read_sr2_careful()
>> -> spi_nor_read_sr_ll()
>>
>> wouldn't this still issue the unsupported 0x3535 register read in
>> SNOR_PROTO_8_8_8_DTR mode and fail probe or resume with a controller
>> timeout?
>
> Hi Miquel,
>
> The Sashiko AI review raised a valid point on v3.
Is it a valid point? Only Winbond flashes have something in SR2. It is
mentioning non SFDP compliant Micron devices. So this case never
actually happens.
> I see three ways to go, which do you prefer?
>
> 1, Keep the v3 approach (clear in spi_nor_parse_profile1()) and fix the remaining
> cases one by one, clearing read_sr2 in each relevant fixup
> (e.g. mt35xu512aba_post_sfdp_fixup) / no-SFDP path.
This is my favorite option, as you can guess.
> 2, Move the clear into spi_nor_late_init_params(), gated on the 8D read capability
> (hwcaps & SNOR_HWCAPS_READ_8_8_8_DTR) and read_sr2 == RDCR, so all 8D
> paths are covered in one place.
> The downside: late_init runs after the manufacturer fixups, so if a vendor later
> wants to set its own SR2 opcode for 8D it would be clobbered here and overriding
> it cleanly becomes awkward.
>
> 3, Go back to the v2 approach (clear in spi_nor_set_octal_dtr() when the switch to 8D
> actually succeeds). This covers every path that ends up in 8D regardless of how the
> capability was discovered, but it is runtime-protocol based rather than capability
> based, which you didn't prefer earlier. And this method has the same downside as
> method 2.
Thanks,
Miquèl
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
next prev parent reply other threads:[~2026-10-22 9:52 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-22 8:07 [PATCH v3] mtd: spi-nor: clear the default read_sr2 opcode for xSPI Profile 1.0 flashes haibo.chen
2026-10-22 8:07 ` haibo.chen
2026-10-22 8:20 ` sashiko-bot
2026-10-22 8:20 ` sashiko-bot
2026-10-22 8:56 ` Bough Chen (OSS)
2026-10-22 8:56 ` Bough Chen (OSS)
2026-10-22 9:52 ` Miquel Raynal [this message]
2026-10-22 9:52 ` Miquel Raynal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87y0bqqczi.fsf@bootlin.com \
--to=miquel.raynal@bootlin.com \
--cc=Frank.Li@kernel.org \
--cc=haibo.chen@nxp.com \
--cc=haibo.chen@oss.nxp.com \
--cc=imx@lists.linux.dev \
--cc=linux-mtd@lists.infradead.org \
--cc=michael@walle.cc \
--cc=mwalle@kernel.org \
--cc=pratyush@kernel.org \
--cc=richard@nod.at \
--cc=sashiko-reviews@lists.linux.dev \
--cc=takahiro.kuwano@infineon.com \
--cc=vigneshr@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.