2019-08-24 12:02:12

by Tudor Ambarus

[permalink] [raw]
Subject: [PATCH v2 3/7] mtd: spi_nor: Move manufacturer quad_enable() in ->default_init()

From: Tudor Ambarus <[email protected]>

The goal is to move the quad_enable manufacturer specific init in the
nor->manufacturer->fixups->default_init()

The legacy quad_enable() implementation is spansion_quad_enable(),
select this method by default.

Set specific manufacturer fixups->default_init() hooks to overwrite
the default quad_enable() implementation when needed.

Signed-off-by: Tudor Ambarus <[email protected]>
---
drivers/mtd/spi-nor/spi-nor.c | 48 ++++++++++++++++++++++++++-----------------
1 file changed, 29 insertions(+), 19 deletions(-)

diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
index 27951e5a01e2..c9514dfd7d6d 100644
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
@@ -4150,13 +4150,38 @@ static int spi_nor_parse_sfdp(struct spi_nor *nor,
return err;
}

+static void macronix_set_default_init(struct spi_nor *nor)
+{
+ nor->params.quad_enable = macronix_quad_enable;
+}
+
+static void st_micron_set_default_init(struct spi_nor *nor)
+{
+ nor->params.quad_enable = NULL;
+}
+
/**
* spi_nor_manufacturer_init_params() - Initialize the flash's parameters and
- * settings based on ->default_init() hook.
+ * settings based on MFR register and ->default_init() hook.
* @nor: pointer to a 'struct spi-nor'.
*/
static void spi_nor_manufacturer_init_params(struct spi_nor *nor)
{
+ /* Init flash parameters based on MFR */
+ switch (JEDEC_MFR(nor->info)) {
+ case SNOR_MFR_MACRONIX:
+ macronix_set_default_init(nor);
+ break;
+
+ case SNOR_MFR_ST:
+ case SNOR_MFR_MICRON:
+ st_micron_set_default_init(nor);
+ break;
+
+ default:
+ break;
+ }
+
if (nor->info->fixups && nor->info->fixups->default_init)
nor->info->fixups->default_init(nor);
}
@@ -4168,6 +4193,9 @@ static int spi_nor_init_params(struct spi_nor *nor)
const struct flash_info *info = nor->info;
u8 i, erase_mask;

+ /* Initialize legacy flash parameters and settings. */
+ params->quad_enable = spansion_quad_enable;
+
/* Set SPI NOR sizes. */
params->size = (u64)info->sector_size * info->n_sectors;
params->page_size = info->page_size;
@@ -4233,24 +4261,6 @@ static int spi_nor_init_params(struct spi_nor *nor)
SPINOR_OP_SE);
spi_nor_init_uniform_erase_map(map, erase_mask, params->size);

- /* Select the procedure to set the Quad Enable bit. */
- if (params->hwcaps.mask & (SNOR_HWCAPS_READ_QUAD |
- SNOR_HWCAPS_PP_QUAD)) {
- switch (JEDEC_MFR(info)) {
- case SNOR_MFR_MACRONIX:
- params->quad_enable = macronix_quad_enable;
- break;
-
- case SNOR_MFR_ST:
- case SNOR_MFR_MICRON:
- break;
-
- default:
- /* Kept only for backward compatibility purpose. */
- params->quad_enable = spansion_quad_enable;
- break;
- }
- }

spi_nor_manufacturer_init_params(nor);

--
2.9.5


2019-08-25 11:48:27

by Boris Brezillon

[permalink] [raw]
Subject: Re: [PATCH v2 3/7] mtd: spi_nor: Move manufacturer quad_enable() in ->default_init()

On Sat, 24 Aug 2019 12:00:41 +0000
<[email protected]> wrote:

> From: Tudor Ambarus <[email protected]>
>
> The goal is to move the quad_enable manufacturer specific init in the
> nor->manufacturer->fixups->default_init()
>
> The legacy quad_enable() implementation is spansion_quad_enable(),
> select this method by default.
>
> Set specific manufacturer fixups->default_init() hooks to overwrite
> the default quad_enable() implementation when needed.
>
> Signed-off-by: Tudor Ambarus <[email protected]>
> ---
> drivers/mtd/spi-nor/spi-nor.c | 48 ++++++++++++++++++++++++++-----------------
> 1 file changed, 29 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
> index 27951e5a01e2..c9514dfd7d6d 100644
> --- a/drivers/mtd/spi-nor/spi-nor.c
> +++ b/drivers/mtd/spi-nor/spi-nor.c
> @@ -4150,13 +4150,38 @@ static int spi_nor_parse_sfdp(struct spi_nor *nor,
> return err;
> }
>
> +static void macronix_set_default_init(struct spi_nor *nor)
> +{
> + nor->params.quad_enable = macronix_quad_enable;

Since it's now supposed to be the default QE implementation I'd
recommend renaming the function into default_quad_enable() (this can be
done in a separate patch).

Reviewed-by: Boris Brezillon <[email protected]>

> +}
> +
> +static void st_micron_set_default_init(struct spi_nor *nor)
> +{
> + nor->params.quad_enable = NULL;
> +}
> +
> /**
> * spi_nor_manufacturer_init_params() - Initialize the flash's parameters and
> - * settings based on ->default_init() hook.
> + * settings based on MFR register and ->default_init() hook.
> * @nor: pointer to a 'struct spi-nor'.
> */
> static void spi_nor_manufacturer_init_params(struct spi_nor *nor)
> {
> + /* Init flash parameters based on MFR */
> + switch (JEDEC_MFR(nor->info)) {
> + case SNOR_MFR_MACRONIX:
> + macronix_set_default_init(nor);
> + break;
> +
> + case SNOR_MFR_ST:
> + case SNOR_MFR_MICRON:
> + st_micron_set_default_init(nor);
> + break;
> +
> + default:
> + break;
> + }
> +
> if (nor->info->fixups && nor->info->fixups->default_init)
> nor->info->fixups->default_init(nor);
> }
> @@ -4168,6 +4193,9 @@ static int spi_nor_init_params(struct spi_nor *nor)
> const struct flash_info *info = nor->info;
> u8 i, erase_mask;
>
> + /* Initialize legacy flash parameters and settings. */
> + params->quad_enable = spansion_quad_enable;
> +
> /* Set SPI NOR sizes. */
> params->size = (u64)info->sector_size * info->n_sectors;
> params->page_size = info->page_size;
> @@ -4233,24 +4261,6 @@ static int spi_nor_init_params(struct spi_nor *nor)
> SPINOR_OP_SE);
> spi_nor_init_uniform_erase_map(map, erase_mask, params->size);
>
> - /* Select the procedure to set the Quad Enable bit. */
> - if (params->hwcaps.mask & (SNOR_HWCAPS_READ_QUAD |
> - SNOR_HWCAPS_PP_QUAD)) {
> - switch (JEDEC_MFR(info)) {
> - case SNOR_MFR_MACRONIX:
> - params->quad_enable = macronix_quad_enable;
> - break;
> -
> - case SNOR_MFR_ST:
> - case SNOR_MFR_MICRON:
> - break;
> -
> - default:
> - /* Kept only for backward compatibility purpose. */
> - params->quad_enable = spansion_quad_enable;
> - break;
> - }
> - }
>
> spi_nor_manufacturer_init_params(nor);
>

2019-08-25 13:09:17

by Tudor Ambarus

[permalink] [raw]
Subject: Re: [PATCH v2 3/7] mtd: spi_nor: Move manufacturer quad_enable() in ->default_init()



On 08/25/2019 02:47 PM, Boris Brezillon wrote:
> External E-Mail
>
>
> On Sat, 24 Aug 2019 12:00:41 +0000
> <[email protected]> wrote:
>
>> From: Tudor Ambarus <[email protected]>
>>
>> The goal is to move the quad_enable manufacturer specific init in the
>> nor->manufacturer->fixups->default_init()
>>
>> The legacy quad_enable() implementation is spansion_quad_enable(),
>> select this method by default.
>>
>> Set specific manufacturer fixups->default_init() hooks to overwrite
>> the default quad_enable() implementation when needed.
>>
>> Signed-off-by: Tudor Ambarus <[email protected]>
>> ---
>> drivers/mtd/spi-nor/spi-nor.c | 48 ++++++++++++++++++++++++++-----------------
>> 1 file changed, 29 insertions(+), 19 deletions(-)
>>
>> diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
>> index 27951e5a01e2..c9514dfd7d6d 100644
>> --- a/drivers/mtd/spi-nor/spi-nor.c
>> +++ b/drivers/mtd/spi-nor/spi-nor.c
>> @@ -4150,13 +4150,38 @@ static int spi_nor_parse_sfdp(struct spi_nor *nor,
>> return err;
>> }
>>
>> +static void macronix_set_default_init(struct spi_nor *nor)
>> +{
>> + nor->params.quad_enable = macronix_quad_enable;
>
> Since it's now supposed to be the default QE implementation I'd
> recommend renaming the function into default_quad_enable() (this can be
> done in a separate patch).

You are referring to spansion_quad_enable. Yes, you made a patch that stops
prefixing generic functions with a manufacturer name, will follow.
https://patchwork.ozlabs.org/patch/1009264/

>
> Reviewed-by: Boris Brezillon <[email protected]>
>
>> +}
>> +
>> +static void st_micron_set_default_init(struct spi_nor *nor)
>> +{
>> + nor->params.quad_enable = NULL;
>> +}
>> +
>> /**
>> * spi_nor_manufacturer_init_params() - Initialize the flash's parameters and
>> - * settings based on ->default_init() hook.
>> + * settings based on MFR register and ->default_init() hook.
>> * @nor: pointer to a 'struct spi-nor'.
>> */
>> static void spi_nor_manufacturer_init_params(struct spi_nor *nor)
>> {
>> + /* Init flash parameters based on MFR */
>> + switch (JEDEC_MFR(nor->info)) {
>> + case SNOR_MFR_MACRONIX:
>> + macronix_set_default_init(nor);
>> + break;
>> +
>> + case SNOR_MFR_ST:
>> + case SNOR_MFR_MICRON:
>> + st_micron_set_default_init(nor);
>> + break;
>> +
>> + default:
>> + break;
>> + }
>> +
>> if (nor->info->fixups && nor->info->fixups->default_init)
>> nor->info->fixups->default_init(nor);
>> }
>> @@ -4168,6 +4193,9 @@ static int spi_nor_init_params(struct spi_nor *nor)
>> const struct flash_info *info = nor->info;
>> u8 i, erase_mask;
>>
>> + /* Initialize legacy flash parameters and settings. */
>> + params->quad_enable = spansion_quad_enable;
>> +
>> /* Set SPI NOR sizes. */
>> params->size = (u64)info->sector_size * info->n_sectors;
>> params->page_size = info->page_size;
>> @@ -4233,24 +4261,6 @@ static int spi_nor_init_params(struct spi_nor *nor)
>> SPINOR_OP_SE);
>> spi_nor_init_uniform_erase_map(map, erase_mask, params->size);
>>
>> - /* Select the procedure to set the Quad Enable bit. */
>> - if (params->hwcaps.mask & (SNOR_HWCAPS_READ_QUAD |
>> - SNOR_HWCAPS_PP_QUAD)) {
>> - switch (JEDEC_MFR(info)) {
>> - case SNOR_MFR_MACRONIX:
>> - params->quad_enable = macronix_quad_enable;
>> - break;
>> -
>> - case SNOR_MFR_ST:
>> - case SNOR_MFR_MICRON:
>> - break;
>> -
>> - default:
>> - /* Kept only for backward compatibility purpose. */
>> - params->quad_enable = spansion_quad_enable;
>> - break;
>> - }
>> - }
>>
>> spi_nor_manufacturer_init_params(nor);
>>
>
>
>