From aa131af8c46fc16a6c7e93b2c97d6a4ad00ee685 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Mon, 3 Feb 2025 17:50:20 +0000 Subject: [PATCH] spi: dw: Wait for idle after TX If this is a DMA transfer, and if there is no simultaneous RX transfer, wait for the interface to go idle before reporting that TX is done. Link: https://forums.raspberrypi.com/viewtopic.php?t=383027 Signed-off-by: Phil Elwell --- drivers/spi/spi-dw-dma.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/spi/spi-dw-dma.c b/drivers/spi/spi-dw-dma.c index b3e622fb099cea..4a66eea89d0161 100644 --- a/drivers/spi/spi-dw-dma.c +++ b/drivers/spi/spi-dw-dma.c @@ -303,6 +303,11 @@ static int dw_spi_dma_wait_tx_done(struct dw_spi *dws, dev_err(&dws->host->dev, "Tx hanged up\n"); return -EIO; } + + if (!xfer->rx_buf) { + while (dw_readl(dws, DW_SPI_SR) & DW_SPI_SR_BUSY) + cpu_relax(); + } return 0; }