On 26/08/19 5:39 PM, tudor.amba...@microchip.com wrote:
> From: Tudor Ambarus <tudor.amba...@microchip.com>
> 
> Parsing of flash parameters were interleaved with setting of the
> nor addr width. Dedicate a function for setting nor addr width.
> 
> Signed-off-by: Tudor Ambarus <tudor.amba...@microchip.com>
> Reviewed-by: Boris Brezillon <boris.brezil...@collabora.com>
> ---

Reviewed-by: Vignesh Raghavendra <vigne...@ti.com>

Regards
Vignesh

> v3: no changes
> 
>  drivers/mtd/spi-nor/spi-nor.c | 50 
> ++++++++++++++++++++++++++-----------------
>  1 file changed, 30 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
> index dcda96a20f6c..d13317d1f372 100644
> --- a/drivers/mtd/spi-nor/spi-nor.c
> +++ b/drivers/mtd/spi-nor/spi-nor.c
> @@ -4739,6 +4739,33 @@ static const struct flash_info *spi_nor_match_id(const 
> char *name)
>       return NULL;
>  }
>  
> +static int spi_nor_set_addr_width(struct spi_nor *nor)
> +{
> +     if (nor->addr_width) {
> +             /* already configured from SFDP */
> +     } else if (nor->info->addr_width) {
> +             nor->addr_width = nor->info->addr_width;
> +     } else if (nor->mtd.size > 0x1000000) {
> +             /* enable 4-byte addressing if the device exceeds 16MiB */
> +             nor->addr_width = 4;
> +     } else {
> +             nor->addr_width = 3;
> +     }
> +
> +     if (nor->addr_width > SPI_NOR_MAX_ADDR_WIDTH) {
> +             dev_err(nor->dev, "address width is too large: %u\n",
> +                     nor->addr_width);
> +             return -EINVAL;
> +     }
> +
> +     /* Set 4byte opcodes when possible. */
> +     if (nor->addr_width == 4 && nor->flags & SNOR_F_4B_OPCODES &&
> +         !(nor->flags & SNOR_F_HAS_4BAIT))
> +             spi_nor_set_4byte_opcodes(nor);
> +
> +     return 0;
> +}
> +
>  int spi_nor_scan(struct spi_nor *nor, const char *name,
>                const struct spi_nor_hwcaps *hwcaps)
>  {
> @@ -4885,29 +4912,12 @@ int spi_nor_scan(struct spi_nor *nor, const char 
> *name,
>       if (ret)
>               return ret;
>  
> -     if (nor->addr_width) {
> -             /* already configured from SFDP */
> -     } else if (info->addr_width) {
> -             nor->addr_width = info->addr_width;
> -     } else if (mtd->size > 0x1000000) {
> -             /* enable 4-byte addressing if the device exceeds 16MiB */
> -             nor->addr_width = 4;
> -     } else {
> -             nor->addr_width = 3;
> -     }
> -
>       if (info->flags & SPI_NOR_4B_OPCODES)
>               nor->flags |= SNOR_F_4B_OPCODES;
>  
> -     if (nor->addr_width == 4 && nor->flags & SNOR_F_4B_OPCODES &&
> -         !(nor->flags & SNOR_F_HAS_4BAIT))
> -             spi_nor_set_4byte_opcodes(nor);
> -
> -     if (nor->addr_width > SPI_NOR_MAX_ADDR_WIDTH) {
> -             dev_err(dev, "address width is too large: %u\n",
> -                     nor->addr_width);
> -             return -EINVAL;
> -     }
> +     ret = spi_nor_set_addr_width(nor);
> +     if (ret)
> +             return ret;
>  
>       /* Send all the required SPI flash commands to initialize device */
>       ret = spi_nor_init(nor);
> 

-- 
Regards
Vignesh

Reply via email to