summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPei Xiao <xiaopei01@kylinos.cn>2026-07-20 14:08:43 +0800
committerMark Brown <broonie@kernel.org>2026-07-28 19:08:34 +0100
commit8955fbad8aad32d7e81fc75d23918e0e2cf6c5ef (patch)
tree77042263c65bba9b6c1cf03388263fad325e368c
parentfd741c46ae0365d4bfd3c14d3a049b0515b9db23 (diff)
downloadlinux-next-8955fbad8aad32d7e81fc75d23918e0e2cf6c5ef.tar.gz
linux-next-8955fbad8aad32d7e81fc75d23918e0e2cf6c5ef.zip
spi: spacemit: fix dangling TX DMA descriptor on RX prep failure
In k1_spi_dma_one(), the TX DMA descriptor is submitted via dmaengine_submit() before the RX descriptor is prepared. If k1_spi_dma_prep() fails for RX, the function jumps to the fallback path without terminating the already-submitted TX descriptor. So terminate the TX channel with dmaengine_terminate_sync() when RX descriptor preparation fails. Fixes: efcd8b9d1111 ("spi: spacemit: introduce SpacemiT K1 SPI controller driver") Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn> Link: https://patch.msgid.link/b402223ebff226782afd4c7da7db4ce34807f604.1784527556.git.xiaopei01@kylinos.cn Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--drivers/spi/spi-spacemit-k1.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/spi/spi-spacemit-k1.c b/drivers/spi/spi-spacemit-k1.c
index 215fe66d27b4..cd2955949c5c 100644
--- a/drivers/spi/spi-spacemit-k1.c
+++ b/drivers/spi/spi-spacemit-k1.c
@@ -289,8 +289,10 @@ static int k1_spi_dma_one(struct spi_controller *host, struct spi_device *spi,
/* Prepare the RX descriptor and submit it */
desc = k1_spi_dma_prep(drv_data, transfer, false);
- if (!desc)
+ if (!desc) {
+ dmaengine_terminate_sync(host->dma_tx);
goto fallback;
+ }
/* When RX is complete we also know TX has completed */
desc->callback = k1_spi_dma_callback;