[PATCH 2/3] spi: stm32-qspi: Increase read throughput in indirect mode

Patrick DELAUNAY patrick.delaunay at foss.st.com
Mon Jan 19 14:01:26 CET 2026


Hi,

On 12/16/25 16:31, Patrice Chotard wrote:
> When WATCHDOG_RESET() was replaced by schedule() in commit
> 29caf9305b6f ("cyclic: Use schedule() instead of WATCHDOG_RESET()")
> we not only reset the watchdog but also call the cyclic infrastructure
> which takes time and has impact on read accesses performances.
>
> Move schedule() from _stm32_qspi_read_fifo() to _stm32_qspi_poll()
> and call schedule() only every 1MB chunk of data.
>
> Test performed by reading 64MB on sNOR on stm32mp157c-ev1 board:
>
>            before      after    ratio
> Read  :  201 KB/s    520KB/s   +258%
>
> Signed-off-by: Patrice Chotard <patrice.chotard at foss.st.com>
> ---
>   drivers/spi/stm32_qspi.c | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/spi/stm32_qspi.c b/drivers/spi/stm32_qspi.c
> index 3216ec8010e..1778f8c1458 100644
> --- a/drivers/spi/stm32_qspi.c
> +++ b/drivers/spi/stm32_qspi.c
> @@ -165,7 +165,6 @@ static int _stm32_qspi_wait_cmd(struct stm32_qspi_priv *priv,
>   static void _stm32_qspi_read_fifo(u8 *val, void __iomem *addr)
>   {
>   	*val = readb(addr);
> -	schedule();
>   }
>   
>   static void _stm32_qspi_write_fifo(u8 *val, void __iomem *addr)
> @@ -200,6 +199,9 @@ static int _stm32_qspi_poll(struct stm32_qspi_priv *priv,
>   		}
>   
>   		fifo(buf++, &priv->regs->dr);
> +
> +		if (!(len % SZ_1M))
> +			schedule();
>   	}
>   
>   	return 0;
>

Reviewed-by: Patrick Delaunay <patrick.delaunay at foss.st.com>

Thanks
Patrick




More information about the U-Boot mailing list