[PATCH v3 3/3] mtd: spi-nor: Favor the BFPT-parsed set_4byte_addr_mode method

Tudor.Ambarus at microchip.com Tudor.Ambarus at microchip.com
Thu Apr 14 02:32:35 PDT 2022


On 4/14/22 12:21, Michael Walle wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> Am 2022-04-11 14:53, schrieb Tudor Ambarus:
>> JESD216 SFDP defines in the BFPT standard methods to enter and exit the
>> 4-Byte Address Mode. The flash parameters and settings that are
>> retrieved
>> from SFDP have higher precedence than the static initialized ones,
>> because
>> they should be more accurate and less error prone than those
>> initialized
>> statically. Favor the BFPT-parsed set_4byte_addr_mode method and use
>> the
>> generic core methods where possible.
>> This patch may introduce regressions in case BFPT contains wrong data.
>> The
>> fix is to introduce a post_bfpt() fixup hook and update the wrong BFPT
>> data.
>>
>> Signed-off-by: Tudor Ambarus <tudor.ambarus at microchip.com>
>> Reviewed-by: Pratyush Yadav <p.yadav at ti.com>
>> ---
>> v3: no changes
>>
>>  drivers/mtd/spi-nor/core.c      |  7 ++++++-
>>  drivers/mtd/spi-nor/macronix.c  | 10 ++++++++--
>>  drivers/mtd/spi-nor/micron-st.c |  9 ++++++---
>>  3 files changed, 20 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c
>> index 4d45cda4f9d3..888516d98884 100644
>> --- a/drivers/mtd/spi-nor/core.c
>> +++ b/drivers/mtd/spi-nor/core.c
>> @@ -2416,6 +2416,8 @@ static void spi_nor_init_fixup_flags(struct
>> spi_nor *nor)
>>   */
>>  static void spi_nor_late_init_params(struct spi_nor *nor)
>>  {
>> +     struct spi_nor_flash_parameter *params = nor->params;
>> +
>>       if (nor->manufacturer && nor->manufacturer->fixups &&
>>           nor->manufacturer->fixups->late_init)
>>               nor->manufacturer->fixups->late_init(nor);
>> @@ -2423,6 +2425,10 @@ static void spi_nor_late_init_params(struct
>> spi_nor *nor)
>>       if (nor->info->fixups && nor->info->fixups->late_init)
>>               nor->info->fixups->late_init(nor);
>>
>> +     /* Default method kept for backward compatibility. */
>> +     if (!params->set_4byte_addr_mode)
>> +             params->set_4byte_addr_mode = spi_nor_set_4byte_addr_mode_brwr;
> 
> Can this be moved past..
> 
>> +
>>       spi_nor_init_flags(nor);
>>       spi_nor_init_fixup_flags(nor);
> 
> .. these two lines, so it is next to the "set default
> locking ops"?
> 

sure

>>
>> @@ -2490,7 +2496,6 @@ static void spi_nor_init_default_params(struct
>> spi_nor *nor)
>>       struct device_node *np = spi_nor_get_flash_node(nor);
>>
>>       params->quad_enable = spi_nor_sr2_bit1_quad_enable;
>> -     params->set_4byte_addr_mode = spi_nor_set_4byte_addr_mode_brwr;
>>       params->otp.org = &info->otp_org;
>>
>>       /* Default to 16-bit Write Status (01h) Command */
>> diff --git a/drivers/mtd/spi-nor/macronix.c
>> b/drivers/mtd/spi-nor/macronix.c
>> index 85e8655d362c..c267cbcc7f1d 100644
>> --- a/drivers/mtd/spi-nor/macronix.c
>> +++ b/drivers/mtd/spi-nor/macronix.c
>> @@ -105,12 +105,18 @@ static const struct flash_info
>> macronix_nor_parts[] = {
>>  static void macronix_nor_default_init(struct spi_nor *nor)
>>  {
>>       nor->params->quad_enable = spi_nor_sr1_bit6_quad_enable;
>> -     nor->params->set_4byte_addr_mode =
>> -             spi_nor_set_4byte_addr_mode_en4b_ex4b;
>> +}
>> +
>> +static void macronix_nor_late_init(struct spi_nor *nor)
>> +{
>> +     if (!nor->params->set_4byte_addr_mode)
>> +             nor->params->set_4byte_addr_mode =
>> +                     spi_nor_set_4byte_addr_mode_en4b_ex4b;
> 
> This is more of a general question. Can we have this in one
> line? IMHO this looks awful and since linux nowadays relaxed the
> 80 chars rule a bit and we have such long names.. I think it makes
> sense to allow some lines to be longer than 80 chars.

I still split my terminal in multiple windows and pretty much read
code in a 80 chars limit. But I won't argue with you, it seems you
care about it, so I'll change it.

> 
>>  }
>>
>>  static const struct spi_nor_fixups macronix_nor_fixups = {
>>       .default_init = macronix_nor_default_init,
>> +     .late_init = macronix_nor_late_init,
>>  };
>>
>>  const struct spi_nor_manufacturer spi_nor_macronix = {
>> diff --git a/drivers/mtd/spi-nor/micron-st.c
>> b/drivers/mtd/spi-nor/micron-st.c
>> index 2d1cbb1f37c8..9e9b107f2018 100644
>> --- a/drivers/mtd/spi-nor/micron-st.c
>> +++ b/drivers/mtd/spi-nor/micron-st.c
>> @@ -414,14 +414,17 @@ static void micron_st_nor_default_init(struct
>> spi_nor *nor)
>>       nor->flags |= SNOR_F_HAS_LOCK;
>>       nor->flags &= ~SNOR_F_HAS_16BIT_SR;
>>       nor->params->quad_enable = NULL;
>> -     nor->params->set_4byte_addr_mode =
>> -             spi_nor_set_4byte_addr_mode_wren_en4b_ex4b;
>>  }
>>
>>  static void micron_st_nor_late_init(struct spi_nor *nor)
>>  {
>> +     struct spi_nor_flash_parameter *params = nor->params;
>> +
>>       if (nor->info->mfr_flags & USE_FSR)
>> -             nor->params->ready = micron_st_nor_ready;
>> +             params->ready = micron_st_nor_ready;
>> +     if (!params->set_4byte_addr_mode)
>> +             params->set_4byte_addr_mode =
>> +                     spi_nor_set_4byte_addr_mode_wren_en4b_ex4b;
> 
> same here.
> 

sure

Thanks,
ta




More information about the linux-mtd mailing list