dmaengine: set_dma40: ignore spurious interrupts
Some DMA channels may be used by other cores in the SoC. This patch modifies the dma interrupt handler to ignore interrupts from unknown channels. Cc: Rabin Vincent <rabin.vincent@stericsson.com> Acked-by: Linus Walleij <linus.walleij@linaro.org> Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>
This commit is contained in:
parent
7407048bec
commit
53d6d68f3c
1 changed files with 12 additions and 3 deletions
|
@ -1677,13 +1677,22 @@ static irqreturn_t d40_handle_interrupt(int irq, void *data)
|
|||
row = chan / BITS_PER_LONG;
|
||||
idx = chan & (BITS_PER_LONG - 1);
|
||||
|
||||
/* ACK interrupt */
|
||||
writel(1 << idx, base->virtbase + il[row].clr);
|
||||
|
||||
if (il[row].offset == D40_PHY_CHAN)
|
||||
d40c = base->lookup_phy_chans[idx];
|
||||
else
|
||||
d40c = base->lookup_log_chans[il[row].offset + idx];
|
||||
|
||||
if (!d40c) {
|
||||
/*
|
||||
* No error because this can happen if something else
|
||||
* in the system is using the channel.
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
|
||||
/* ACK interrupt */
|
||||
writel(1 << idx, base->virtbase + il[row].clr);
|
||||
|
||||
spin_lock(&d40c->lock);
|
||||
|
||||
if (!il[row].is_error)
|
||||
|
|
Loading…
Reference in a new issue