From: Patrice Chotard Date: Tue, 16 Dec 2025 15:31:52 +0000 (+0100) Subject: spi: stm32-ospi: Increase read throughput in indirect mode X-Git-Tag: v2026.04-rc2~43^2~11 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9e8bc1c6be751b59e1d782dff3c0cc8703cc18d4;p=thirdparty%2Fu-boot.git spi: stm32-ospi: Increase read throughput in indirect mode Schedule() is called every u8/u16 or u32 read accesses which is overkill. Move schedule() from stm32_ospi_read_fifo() to stm32_ospi_tx_poll() and call schedule() only every 1MB chunk of data. Test performed by reading 64MB on sNOR on stm32mp257f-ev1 board: before after ratio Read : 10.6MB/s 14.2MB/s +34% Reviewed-by: Patrick Delaunay Signed-off-by: Patrice Chotard --- diff --git a/drivers/spi/stm32_ospi.c b/drivers/spi/stm32_ospi.c index 01b8f8e4987..9e143a73559 100644 --- a/drivers/spi/stm32_ospi.c +++ b/drivers/spi/stm32_ospi.c @@ -142,7 +142,6 @@ static void stm32_ospi_read_fifo(void *val, phys_addr_t addr, u8 len) case sizeof(u8): *((u8 *)val) = readb_relaxed(addr); }; - schedule(); } static void stm32_ospi_write_fifo(void *val, phys_addr_t addr, u8 len) @@ -200,6 +199,9 @@ int stm32_ospi_tx_poll(struct udevice *dev, void *buf, u32 len, bool read) fifo(buf, regs_base + OSPI_DR, step); len -= step; buf += step; + + if (!(len % SZ_1M)) + schedule(); } return 0;