From ce64610d0eb88372908acdec25dfe5b7232c65bc Mon Sep 17 00:00:00 2001 From: Vipin Deep Kaur Date: Tue, 30 Jun 2020 14:20:12 +0530 Subject: [PATCH] spi: spi-msm-geni: Propagate missing change from 4.19 to 5.4 Propagate following change from 4.19 to 5.4 for SPI driver. 'commit 185ecd35b11f ("spi: spi-geni-qcom: Reset the dma engine on failure")'. Change-Id: I3839d5bc773e7d7ea71ba6ff611f55f4869000f3 Signed-off-by: Vipin Deep Kaur --- drivers/spi/spi-msm-geni.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/drivers/spi/spi-msm-geni.c b/drivers/spi/spi-msm-geni.c index 53471261536a..2d13016dc500 100644 --- a/drivers/spi/spi-msm-geni.c +++ b/drivers/spi/spi-msm-geni.c @@ -1106,12 +1106,30 @@ static void handle_fifo_timeout(struct spi_geni_master *mas, "Failed to cancel/abort m_cmd\n"); } if (mas->cur_xfer_mode == SE_DMA) { - if (xfer->tx_buf) + if (xfer->tx_buf) { + reinit_completion(&mas->xfer_done); + writel_relaxed(1, mas->base + + SE_DMA_TX_FSM_RST); + timeout = + wait_for_completion_timeout(&mas->xfer_done, HZ); + if (!timeout) + dev_err(mas->dev, + "DMA TX RESET failed\n"); geni_se_tx_dma_unprep(mas->wrapper_dev, xfer->tx_dma, xfer->len); - if (xfer->rx_buf) + } + if (xfer->rx_buf) { + reinit_completion(&mas->xfer_done); + writel_relaxed(1, mas->base + + SE_DMA_RX_FSM_RST); + timeout = + wait_for_completion_timeout(&mas->xfer_done, HZ); + if (!timeout) + dev_err(mas->dev, + "DMA RX RESET failed\n"); geni_se_rx_dma_unprep(mas->wrapper_dev, - xfer->rx_dma, xfer->len); + xfer->rx_dma, xfer->len); + } } }