Re: [PATCH v13 1/4] mtd: spi-nor: Retain nor->addr_width at 4BAIT parse

Takahiro Kuwano
2022-04-21T10:49:00Z

On 4/21/2022 7:38 PM, Tudor.Ambarus@microchip.com wrote:
> On 4/21/22 12:40, tkuw584924@gmail.com wrote:
>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>>
>> From: Takahiro Kuwano <Takahiro.Kuwano@infineon.com>
>>
>> In 4BAIT parse, keep nor->addr_width because it may be used as
>> current address mode in SMPT parse later on.
>>
>> Signed-off-by: Takahiro Kuwano <Takahiro.Kuwano@infineon.com>
>> ---
>> drivers/mtd/spi-nor/core.c | 7 ++++++-
>> drivers/mtd/spi-nor/sfdp.c | 1 -
>> 2 files changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c
>> index 40ba45328975..87603a99938f 100644
>> --- a/drivers/mtd/spi-nor/core.c
>> +++ b/drivers/mtd/spi-nor/core.c
>> @@ -2210,7 +2210,12 @@ static int spi_nor_default_setup(struct spi_nor *nor,
>> static int spi_nor_set_addr_width(struct spi_nor *nor)
>> {
>> if (nor->addr_width) {
>> - /* already configured from SFDP */
>> + /*
>> + * Already configured from SFDP. Use an address width of 4 in
>> + * case the device has 4byte opcodes.
>> + */
>> + if (nor->addr_width == 3 && nor->flags & SNOR_F_HAS_4BAIT)
>> + nor->addr_width = 4;
>> } else if (nor->read_proto == SNOR_PROTO_8_8_8_DTR) {
>
> Can we have this instead?
>
> commit 61d73dea7e63db4c7a3ffaa7f2b5068fb71c2d8b
> Author: Takahiro Kuwano <Takahiro.Kuwano@infineon.com>
> Date: Thu Apr 21 18:40:21 2022 +0900
>
> mtd: spi-nor: Retain nor->addr_width at 4BAIT parse
>
> In 4BAIT parse, keep nor->addr_width because it may be used as
> current address mode in SMPT parse later on.
>
> Signed-off-by: Takahiro Kuwano <Takahiro.Kuwano@infineon.com>
> Reviewed-by: Tudor Ambarus <tudor.ambarus@microchip.com>
>
> diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c
> index 2bfa84100d38..7095bf897318 100644
> --- a/drivers/mtd/spi-nor/core.c
> +++ b/drivers/mtd/spi-nor/core.c
> @@ -2272,6 +2272,9 @@ static int spi_nor_default_setup(struct spi_nor *nor,
>
> static int spi_nor_set_addr_width(struct spi_nor *nor)
> {
> + if (nor->flags & SNOR_F_HAS_4BAIT)
> + nor->addr_width = 4;
> +
> if (nor->addr_width) {
> /* already configured from SFDP */
> } else if (nor->read_proto == SNOR_PROTO_8_8_8_DTR) {
> diff --git a/drivers/mtd/spi-nor/sfdp.c b/drivers/mtd/spi-nor/sfdp.c
> index a5211543d30d..b2cc3bfe0d5c 100644
> --- a/drivers/mtd/spi-nor/sfdp.c
> +++ b/drivers/mtd/spi-nor/sfdp.c
> @@ -1098,7 +1098,6 @@ static int spi_nor_parse_4bait(struct spi_nor *nor,
> * Spansion memory. However this quirk is no longer needed with new
> * SFDP compliant memories.
> */
> - nor->addr_width = 4;
> nor->flags |= SNOR_F_4B_OPCODES | SNOR_F_HAS_4BAIT;
>
> /* fall through */
>
Yes, thanks!