From 89885c09160b04ae2eec82cf9b35117ff6aa4c5d Mon Sep 17 00:00:00 2001 From: Robin Gong Date: Wed, 8 May 2019 00:13:40 +0800 Subject: [PATCH] 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 Reviewed-by: S.j. Wang (cherry picked from commit fd073e017e317006a4c254ca5ae3ea17b6f32502) --- drivers/dma/fsl-edma-v3.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) --- 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( 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);