diff options
| author | Patrice Chotard <[email protected]> | 2025-12-16 16:31:52 +0100 |
|---|---|---|
| committer | Patrice Chotard <[email protected]> | 2026-01-29 10:47:57 +0100 |
| commit | 9e8bc1c6be751b59e1d782dff3c0cc8703cc18d4 (patch) | |
| tree | 107492ba63dfa0c37af613e0fc996c487faff965 | |
| parent | 6a1bdb7e952d5841f42742fefa907cae5dc8d50a (diff) | |
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 <[email protected]>
Signed-off-by: Patrice Chotard <[email protected]>
| -rw-r--r-- | drivers/spi/stm32_ospi.c | 4 |
1 files changed, 3 insertions, 1 deletions
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; |
