diff options
author | Andy Green <andy.green@linaro.org> | 2015-12-07 19:51:34 +0800 |
---|---|---|
committer | Guodong Xu <guodong.xu@linaro.org> | 2017-06-06 14:23:55 +0800 |
commit | 2778883f377cf54744ce8cd7080ac51c9e7300b4 (patch) | |
tree | 79c56a42a0cdd79d6e13c2ce942e8678b42a3b3b /drivers/dma/k3dma.c | |
parent | 1eb3bbc4691937c430c5b9c3dcbe7a49d0990955 (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.c | 8 |
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) |