public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [PATCH] dfu: dfu_sf: Read the SPI flash in 16 MiB chunks
@ 2021-09-14  3:26 Marek Vasut
  2021-09-14  9:31 ` Lukasz Majewski
  2021-10-26 13:34 ` Tom Rini
  0 siblings, 2 replies; 5+ messages in thread
From: Marek Vasut @ 2021-09-14  3:26 UTC (permalink / raw)
  To: u-boot; +Cc: Marek Vasut, Lukasz Majewski

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@denx.de>
Cc: Lukasz Majewski <lukma@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)
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-10-26 13:34 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-09-14  3:26 [PATCH] dfu: dfu_sf: Read the SPI flash in 16 MiB chunks Marek Vasut
2021-09-14  9:31 ` Lukasz Majewski
2021-10-22 22:34   ` Marek Vasut
2021-10-25  6:30     ` Lukasz Majewski
2021-10-26 13:34 ` Tom Rini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox