dmaengine: tegra: Add terminate() for Tegra234
authorAkhil R <akhilrajeev@nvidia.com>
Wed, 20 Jul 2022 10:40:44 +0000 (16:10 +0530)
committerVinod Koul <vkoul@kernel.org>
Tue, 26 Jul 2022 12:42:21 +0000 (18:12 +0530)
commit36834c67016794b8fa03d7672a5b7f2cc4529298
tree789e003fff27c00dd24c8d847d1189431aedbb98
parent37a0d69d00f50f2a0c387bbbbb2946e771af243d
dmaengine: tegra: Add terminate() for Tegra234

In certain cases where the DMA client bus gets corrupted or if the
end device ceases to send/receive data, DMA can wait indefinitely
for the data to be received/sent. Attempting to terminate the transfer
will put the DMA in pause flush mode and it remains there.

The channel is irrecoverable once this pause times out in Tegra194 and
earlier chips. Whereas, from Tegra234, it can be recovered by disabling
the channel and reprograming it.

Hence add a new terminate() function that ignores the outcome of
dma_pause() so that terminate_all() can proceed to disable the channel.

Signed-off-by: Akhil R <akhilrajeev@nvidia.com>
Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
Link: https://lore.kernel.org/r/20220720104045.16099-3-akhilrajeev@nvidia.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/tegra186-gpc-dma.c