From: Pratyush Yadav <pratyush@kernel.org>
To: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Pratyush Yadav <pratyush@kernel.org>,
Tudor Ambarus <tudor.ambarus@linaro.org>,
Michael Walle <mwalle@kernel.org>,
Richard Weinberger <richard@nod.at>,
Vignesh Raghavendra <vigneshr@ti.com>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Steam Lin <STLin2@winbond.com>,
linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/2] mtd: spi-nor: winbond: Add support for w25q01jv
Date: Mon, 20 Jan 2025 14:21:46 +0000 [thread overview]
Message-ID: <mafs0o7014lc5.fsf@kernel.org> (raw)
In-Reply-To: <87jzapsldj.fsf@bootlin.com> (Miquel Raynal's message of "Mon, 20 Jan 2025 13:47:04 +0100")
On Mon, Jan 20 2025, Miquel Raynal wrote:
> Hi Pratyush,
>
>> Okay, I am confused because you said earlier that:
>>
>>> The bug that has been experienced followed this sequence:
>>> - send the write enable command (non-volatile)
>>> - wait for the ready/busy bit, ie. wait for the WEL bit to be set
>>> because it is non-volatile write
>>> - active die is ready, (but idle die is not!)
>>> - enter 4-byte address mode, only the die that is ready processes the
>>> command.
>>
>> Which says the WEL bit being set itself is racy. What I understand from
>> that is one die is ready to take writes and the other is not. Now when
>> you try to write the SR to enable 4B mode, it would only work on the die
>> that got the WEL set. The other one ignores it and stays in 3B mode. Do
>> I understand this correctly? To fix this you need to wait after the
>> write enable, before you initiate the write SR operation.
>
> Sorry for the confusion, I got myself confused as well. I double checked
> with Winbond and I think I have the correct explanation now:
>
> The WEL bit is volatile, there is no delay when setting it (well, about
> 10ns, but no specific deviation).
>
> On most chips, WEL enables all write operations:
> * (single/dual/quad) page programs
> * (sector/block/chip) erases
> * status register write
> * erase/program of other internal registers (like security registers)
>
> On Winbond, the above applies, but with the usual "Write Enable command
> (06h)", the status register bits are non-volatile, ie. they are stored
> in non-volatile cells (which takes time to program and are subject
> to deviations across dies). Hence, they added another command, called
> "Write Enable for Volatile Status Register (50h)" which is an addition
> to the usual "Write Enable command (06h)" which causes:
> - enabling writes on the status register only (if the WEL bit is not yet
> set)
> - using volatile writes for the status register bits (ie. they are using
> some kind of local cache which update almost immediately).
>
> So basically, if you do the following:
> - status register write
> - check the status bit with the standard helper
> - (and quickly after) do anything else on the idle die
> In this case you could experience a race, but that is not related to the
> Write Enable command.
>
> In general I believe enabling volatile status register writes would not
> be useful as long as we have the "read the status from all dies"
> workaround.
>
> Let me know if something is still unclear.
Ah, okay. That all makes sense now. With this explanation, your patches
should be doing the right thing. I will do a round of review on the v3
soon, but they looked mostly good when I last took a brief look.
--
Regards,
Pratyush Yadav
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
WARNING: multiple messages have this Message-ID (diff)
From: Pratyush Yadav <pratyush@kernel.org>
To: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Pratyush Yadav <pratyush@kernel.org>,
Tudor Ambarus <tudor.ambarus@linaro.org>,
Michael Walle <mwalle@kernel.org>,
Richard Weinberger <richard@nod.at>,
Vignesh Raghavendra <vigneshr@ti.com>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Steam Lin <STLin2@winbond.com>,
linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/2] mtd: spi-nor: winbond: Add support for w25q01jv
Date: Mon, 20 Jan 2025 14:21:46 +0000 [thread overview]
Message-ID: <mafs0o7014lc5.fsf@kernel.org> (raw)
In-Reply-To: <87jzapsldj.fsf@bootlin.com> (Miquel Raynal's message of "Mon, 20 Jan 2025 13:47:04 +0100")
On Mon, Jan 20 2025, Miquel Raynal wrote:
> Hi Pratyush,
>
>> Okay, I am confused because you said earlier that:
>>
>>> The bug that has been experienced followed this sequence:
>>> - send the write enable command (non-volatile)
>>> - wait for the ready/busy bit, ie. wait for the WEL bit to be set
>>> because it is non-volatile write
>>> - active die is ready, (but idle die is not!)
>>> - enter 4-byte address mode, only the die that is ready processes the
>>> command.
>>
>> Which says the WEL bit being set itself is racy. What I understand from
>> that is one die is ready to take writes and the other is not. Now when
>> you try to write the SR to enable 4B mode, it would only work on the die
>> that got the WEL set. The other one ignores it and stays in 3B mode. Do
>> I understand this correctly? To fix this you need to wait after the
>> write enable, before you initiate the write SR operation.
>
> Sorry for the confusion, I got myself confused as well. I double checked
> with Winbond and I think I have the correct explanation now:
>
> The WEL bit is volatile, there is no delay when setting it (well, about
> 10ns, but no specific deviation).
>
> On most chips, WEL enables all write operations:
> * (single/dual/quad) page programs
> * (sector/block/chip) erases
> * status register write
> * erase/program of other internal registers (like security registers)
>
> On Winbond, the above applies, but with the usual "Write Enable command
> (06h)", the status register bits are non-volatile, ie. they are stored
> in non-volatile cells (which takes time to program and are subject
> to deviations across dies). Hence, they added another command, called
> "Write Enable for Volatile Status Register (50h)" which is an addition
> to the usual "Write Enable command (06h)" which causes:
> - enabling writes on the status register only (if the WEL bit is not yet
> set)
> - using volatile writes for the status register bits (ie. they are using
> some kind of local cache which update almost immediately).
>
> So basically, if you do the following:
> - status register write
> - check the status bit with the standard helper
> - (and quickly after) do anything else on the idle die
> In this case you could experience a race, but that is not related to the
> Write Enable command.
>
> In general I believe enabling volatile status register writes would not
> be useful as long as we have the "read the status from all dies"
> workaround.
>
> Let me know if something is still unclear.
Ah, okay. That all makes sense now. With this explanation, your patches
should be doing the right thing. I will do a round of review on the v3
soon, but they looked mostly good when I last took a brief look.
--
Regards,
Pratyush Yadav
next prev parent reply other threads:[~2025-01-20 14:22 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-24 16:47 [PATCH 0/2] mtd: spi-nor: winbond: Add support for flashes with several dies Miquel Raynal
2024-12-24 16:47 ` Miquel Raynal
2024-12-24 16:47 ` [PATCH 1/2] mtd: spi-nor: winbond: Add support for w25q01jv Miquel Raynal
2024-12-24 16:47 ` Miquel Raynal
2024-12-24 21:15 ` Pratyush Yadav
2024-12-24 21:15 ` Pratyush Yadav
2024-12-30 10:31 ` Miquel Raynal
2024-12-30 10:31 ` Miquel Raynal
2025-01-13 14:08 ` Pratyush Yadav
2025-01-13 14:08 ` Pratyush Yadav
2025-01-14 11:07 ` Miquel Raynal
2025-01-14 11:07 ` Miquel Raynal
2025-01-15 14:03 ` Pratyush Yadav
2025-01-15 14:03 ` Pratyush Yadav
2025-01-15 19:10 ` Miquel Raynal
2025-01-15 19:10 ` Miquel Raynal
2025-01-15 20:05 ` Pratyush Yadav
2025-01-15 20:05 ` Pratyush Yadav
2025-01-20 12:47 ` Miquel Raynal
2025-01-20 12:47 ` Miquel Raynal
2025-01-20 14:21 ` Pratyush Yadav [this message]
2025-01-20 14:21 ` Pratyush Yadav
2025-01-08 18:22 ` Miquel Raynal
2025-01-08 18:22 ` Miquel Raynal
2025-01-09 16:14 ` Miquel Raynal
2025-01-09 16:14 ` Miquel Raynal
2025-01-13 13:40 ` Pratyush Yadav
2025-01-13 13:40 ` Pratyush Yadav
2024-12-24 16:47 ` [PATCH 2/2] mtd: spi-nor: winbond: Add support for w25q02jv Miquel Raynal
2024-12-24 16:47 ` Miquel Raynal
2024-12-24 21:16 ` Pratyush Yadav
2024-12-24 21:16 ` Pratyush Yadav
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=mafs0o7014lc5.fsf@kernel.org \
--to=pratyush@kernel.org \
--cc=STLin2@winbond.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=miquel.raynal@bootlin.com \
--cc=mwalle@kernel.org \
--cc=richard@nod.at \
--cc=thomas.petazzoni@bootlin.com \
--cc=tudor.ambarus@linaro.org \
--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.