[PATCH] dfu: dfu_sf: Read the SPI flash in 16 MiB chunks

Lukasz Majewski lukma at denx.de
Tue Sep 14 11:31:18 CEST 2021


On Tue, 14 Sep 2021 05:26:51 +0200
Marek Vasut <marex at denx.de> wrote:

> Not all SPI flashes and controllers can do continuous transfer longer
> than 16 MiB, so perform the DFU read in 16 MiB chunks.
> 
> Signed-off-by: Marek Vasut <marex at denx.de>
> Cc: Lukasz Majewski <lukma at denx.de>
> ---
>  drivers/dfu/dfu_sf.c | 14 ++++++++++++--
>  1 file changed, 12 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/dfu/dfu_sf.c b/drivers/dfu/dfu_sf.c
> index 7e64ab772f0..b72493ced86 100644
> --- a/drivers/dfu/dfu_sf.c
> +++ b/drivers/dfu/dfu_sf.c
> @@ -24,8 +24,18 @@ static int dfu_get_medium_size_sf(struct
> dfu_entity *dfu, u64 *size) static int dfu_read_medium_sf(struct
> dfu_entity *dfu, u64 offset, void *buf, long *len)
>  {
> -	return spi_flash_read(dfu->data.sf.dev, dfu->data.sf.start +
> offset,
> -		*len, buf);
> +	long seglen = *len;
> +	int ret;
> +
> +	if (seglen > (16 << 20))
> +		seglen = (16 << 20);
> +
> +	ret = spi_flash_read(dfu->data.sf.dev, dfu->data.sf.start +
> offset,
> +		seglen, buf);
> +	if (!ret)
> +		*len = seglen;
> +
> +	return ret;
>  }
>  
>  static u64 find_sector(struct dfu_entity *dfu, u64 start, u64 offset)

Reviewed-by: Lukasz Majewski <lukma at denx.de>


Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20210914/59a14a3b/attachment.sig>


More information about the U-Boot mailing list