[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