Hi Fabio, > From: Fabio Estevam <fabio.este...@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.este...@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.majew...@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 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot