[U-Boot] [PATCH] dfu: dfu_sf: Use the erase sector size for erase operations

Lukasz Majewski l.majewski at samsung.com
Tue Sep 22 09:46:43 CEST 2015


Hi Fabio,

> From: Fabio Estevam <fabio.estevam at freescale.com>
> 
> SPI NOR flashes need to erase the entire sector size and we cannot
> pass any arbitrary length for the erase operation.
> 
> To illustrate the problem:
> 
> Copying data from PC to DFU device
> Download    [=========================] 100%       478208 bytes
> Download done.
> state(7) = dfuMANIFEST, status(0) = No error condition is present
> state(10) = dfuERROR, status(14) = Something went wrong, but the
> device does not know what it was
> Done!
> 
> In this case, the binary has 478208 bytes and the M25P32 SPI NOR
> has an erase sector of 64kB.
> 
> 478208  = 7 entire sectors of 64kiB + 19456 bytes.
> 
> Erasing the first seven 64 kB sectors works fine, but when trying
> to erase the remainding 19456 causes problem and the board hangs.
> 
> Fix the issue by always erasing with the erase sector size.
> 
> Signed-off-by: Fabio Estevam <fabio.estevam at freescale.com>
> ---
>  drivers/dfu/dfu_sf.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/dfu/dfu_sf.c b/drivers/dfu/dfu_sf.c
> index c3d3c3b..448d95d 100644
> --- a/drivers/dfu/dfu_sf.c
> +++ b/drivers/dfu/dfu_sf.c
> @@ -28,7 +28,8 @@ static int dfu_write_medium_sf(struct dfu_entity
> *dfu, {
>  	int ret;
>  
> -	ret = spi_flash_erase(dfu->data.sf.dev, offset, *len);
> +	ret = spi_flash_erase(dfu->data.sf.dev, offset,
> +			      dfu->data.sf.dev->sector_size);
>  	if (ret)
>  		return ret;
>  

Acked-by: Lukasz Majewski <l.majewski at samsung.com>

Applied to u-boot-dfu tree.

Thanks for your work.

I'm looking forward for more patches :-)

-- 
Best regards,

Lukasz Majewski

Samsung R&D Institute Poland (SRPOL) | Linux Platform Group


More information about the U-Boot mailing list