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

Marek Vasut marex at denx.de
Sat Oct 23 00:34:49 CEST 2021


On 9/14/21 11:31 AM, Lukasz Majewski wrote:
> 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>

Is there going to be a PR with this or shall Tom pick it directly, since 
it is just one patch ?


More information about the U-Boot mailing list