+ Ashish,

On 02/04/19 6:22 AM, Marek Vasut wrote:
> Replace the ad-hoc erase operation implementation with a simple spi_mem_op
> implementation of the same functionality. This is a minor optimization and
> removal of the ad-hoc code.
> 
> This however also changes the behavior of the execution of the erase
> opcode from two separate transfer requests to the SPI NOR driver to
> one transfer request to the SPI NOR driver. The former was how U-Boot
> behaved before the SPI NOR framework was imported and the later was
> introduced by the SPI NOR framework. The former is more optimal, so
> keep that.
> 
> Signed-off-by: Marek Vasut <[email protected]>
> Cc: Horatiu Vultur <[email protected]>
> Cc: Jagan Teki <[email protected]>
> Cc: Simon Goldschmidt <[email protected]>
> Cc: Stefan Roese <[email protected]>
> Cc: Vignesh R <[email protected]>
> ---

Marek, thanks for the fix!

Jagan,

Could we get this merged before v2019.04 release as this should fix
regression wrt erase reported by Ashish.

>  drivers/mtd/spi/spi-nor-core.c | 14 ++++++--------
>  1 file changed, 6 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/mtd/spi/spi-nor-core.c b/drivers/mtd/spi/spi-nor-core.c
> index b7f0733877..c4e2f6a08f 100644
> --- a/drivers/mtd/spi/spi-nor-core.c
> +++ b/drivers/mtd/spi/spi-nor-core.c
> @@ -524,8 +524,11 @@ static int read_bar(struct spi_nor *nor, const struct 
> flash_info *info)
>   */
>  static int spi_nor_erase_sector(struct spi_nor *nor, u32 addr)
>  {
> -     u8 buf[SPI_NOR_MAX_ADDR_WIDTH];
> -     int i;
> +     struct spi_mem_op op =
> +             SPI_MEM_OP(SPI_MEM_OP_CMD(nor->erase_opcode, 1),
> +                        SPI_MEM_OP_ADDR(nor->addr_width, addr, 1),
> +                        SPI_MEM_OP_NO_DUMMY,
> +                        SPI_MEM_OP_NO_DATA);
>  
>       if (nor->erase)
>               return nor->erase(nor, addr);
> @@ -534,12 +537,7 @@ static int spi_nor_erase_sector(struct spi_nor *nor, u32 
> addr)
>        * Default implementation, if driver doesn't have a specialized HW
>        * control
>        */
> -     for (i = nor->addr_width - 1; i >= 0; i--) {
> -             buf[i] = addr & 0xff;
> -             addr >>= 8;
> -     }
> -
> -     return nor->write_reg(nor, nor->erase_opcode, buf, nor->addr_width);
> +     return spi_mem_exec_op(nor->spi, &op);
>  }
>  
>  /*
> 

-- 
Regards
Vignesh
_______________________________________________
U-Boot mailing list
[email protected]
https://lists.denx.de/listinfo/u-boot

Reply via email to