From 3443e22713e0b5430e082f64f4ef477a0730d221 Mon Sep 17 00:00:00 2001
From: Phil Elwell <phil@raspberrypi.com>
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 <phil@raspberrypi.com>
---
 drivers/spi/spi-dw-dma.c | 6 ++++++
 1 file changed, 6 insertions(+)

--- a/drivers/spi/spi-dw-dma.c
+++ b/drivers/spi/spi-dw-dma.c
@@ -304,6 +304,12 @@ static int dw_spi_dma_wait_tx_done(struc
 		return -EIO;
 	}
 
+	if (!xfer->rx_buf) {
+		delay.value = dws->n_bytes * BITS_PER_BYTE;
+		while (dw_readl(dws, DW_SPI_SR) & DW_SPI_SR_BUSY)
+			spi_delay_exec(&delay, xfer);
+	}
+
 	return 0;
 }
 
