summaryrefslogtreecommitdiff
path: root/drivers/dma/k3dma.c
diff options
context:
space:
mode:
authorAndy Green <andy.green@linaro.org>2015-12-07 19:51:34 +0800
committerGuodong Xu <guodong.xu@linaro.org>2017-06-06 14:23:55 +0800
commit2778883f377cf54744ce8cd7080ac51c9e7300b4 (patch)
tree79c56a42a0cdd79d6e13c2ce942e8678b42a3b3b /drivers/dma/k3dma.c
parent1eb3bbc4691937c430c5b9c3dcbe7a49d0990955 (diff)
k3dma: Fix "nobody cared" message seen on any error
As it was before, as soon as the DMAC IP felt there was an error he would return IRQ_NONE since no actual transfer had completed. After spinning on that for 100K interrupts, Linux yanks the IRQ with a "nobody cared" error. This patch lets it handle the interrupt and keep the IRQ alive. Signed-off-by: Andy Green <andy.green@linaro.org> [jstultz: Forward ported to 4.4] Signed-off-by: John Stultz <john.stultz@linaro.org>
Diffstat (limited to 'drivers/dma/k3dma.c')
-rw-r--r--drivers/dma/k3dma.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/dma/k3dma.c b/drivers/dma/k3dma.c
index 8dd050c0e2b8..c2906a8216ca 100644
--- a/drivers/dma/k3dma.c
+++ b/drivers/dma/k3dma.c
@@ -220,11 +220,13 @@ static irqreturn_t k3_dma_int_handler(int irq, void *dev_id)
writel_relaxed(err1, d->base + INT_ERR1_RAW);
writel_relaxed(err2, d->base + INT_ERR2_RAW);
- if (irq_chan) {
+ if (irq_chan)
tasklet_schedule(&d->task);
+
+ if (irq_chan || err1 || err2)
return IRQ_HANDLED;
- } else
- return IRQ_NONE;
+
+ return IRQ_NONE;
}
static int k3_dma_start_txd(struct k3_dma_chan *c)