Linux-mtd Archive on lore.kernel.org
 help / color / mirror / Atom feed
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/

      reply	other threads:[~2026-10-22  9:52 UTC|newest]

Thread overview: 4+ 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:20 ` sashiko-bot
2026-10-22  8:56   ` Bough Chen (OSS)
2026-10-22  9:52     ` Miquel Raynal [this message]

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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox