summaryrefslogtreecommitdiff
path: root/drivers/dma
diff options
context:
space:
mode:
authorRobin Gong <yibin.gong@nxp.com>2019-05-08 00:13:40 +0800
committerRobin Gong <yibin.gong@nxp.com>2019-07-22 19:15:57 +0800
commitfd073e017e317006a4c254ca5ae3ea17b6f32502 (patch)
treeb69df3dfb8666717bca4c092381465c8021d8002 /drivers/dma
parent0b6da46b7bdb2284e24757d48466268b9feb5b7c (diff)
MLK-22284-2 dmaengine: fsl-edma-v3: check dma description before register touch
Check dma desscription firstly to ignore any unexpected interrupt after channel terminate, otherwise, still have chance to touch channel register whose power has been already off. Signed-off-by: Robin Gong <yibin.gong@nxp.com> Reviewed-by: S.j. Wang <shengjiu.wang@nxp.com>
Diffstat (limited to 'drivers/dma')
-rw-r--r--drivers/dma/fsl-edma-v3.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/dma/fsl-edma-v3.c b/drivers/dma/fsl-edma-v3.c
index 1d63c6866d15..3f69dd3438f7 100644
--- a/drivers/dma/fsl-edma-v3.c
+++ b/drivers/dma/fsl-edma-v3.c
@@ -708,20 +708,20 @@ static irqreturn_t fsl_edma3_tx_handler(int irq, void *dev_id)
unsigned int intr;
void __iomem *base_addr;
+ spin_lock(&fsl_chan->vchan.lock);
+
+ /* Ignore this interrupt since channel has been disabled already */
+ if (!fsl_chan->edesc)
+ goto irq_handled;
+
base_addr = fsl_chan->membase;
intr = readl(base_addr + EDMA_CH_INT);
if (!intr)
- return IRQ_NONE;
+ goto irq_handled;
writel(1, base_addr + EDMA_CH_INT);
- spin_lock(&fsl_chan->vchan.lock);
-
- /* Ignore this interrupt since channel has been disabled already */
- if (!fsl_chan->edesc)
- goto irq_handled;
-
if (!fsl_chan->edesc->iscyclic) {
fsl_edma3_get_realcnt(fsl_chan);
list_del(&fsl_chan->edesc->vdesc.node);