[U-Boot] [PATCH] mtd: spi: Replace ad-hoc default implementation with spi_mem_op

Ashish Kumar ashish.kumar at nxp.com
Thu Apr 4 06:10:43 UTC 2019



> -----Original Message-----
> From: Vignesh Raghavendra <vigneshr at ti.com>
> Sent: Tuesday, April 2, 2019 10:04 AM
> To: Marek Vasut <marek.vasut at gmail.com>; u-boot at lists.denx.de
> Cc: Marek Vasut <marek.vasut+renesas at gmail.com>; Horatiu Vultur
> <horatiu.vultur at microchip.com>; Jagan Teki <jagan at openedev.com>; Simon
> Goldschmidt <simon.k.r.goldschmidt at gmail.com>; Stefan Roese <sr at denx.de>;
> Ashish Kumar <ashish.kumar at nxp.com>
> Subject: Re: [PATCH] mtd: spi: Replace ad-hoc default implementation with
> spi_mem_op
> 
> + 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 <marek.vasut+renesas at gmail.com>
> > Cc: Horatiu Vultur <horatiu.vultur at microchip.com>
> > Cc: Jagan Teki <jagan at openedev.com>
> > Cc: Simon Goldschmidt <simon.k.r.goldschmidt at gmail.com>
> > Cc: Stefan Roese <sr at denx.de>
> > Cc: Vignesh R <vigneshr at ti.com>
> > ---
> 
> 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.


Yes, follow patch reverts back to old method of erase implementation.
Tested-by: Ashish Kumar <Ashish.kumar at nxp.com>

Regards
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


More information about the U-Boot mailing list