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> (cherry picked from commit fd073e017e317006a4c254ca5ae3ea17b6f32502)5.4-rM2-2.2.x-imx-squashed
parent
cfe6412faa
commit
7d7fb3da1c
|
@ -708,20 +708,20 @@ static irqreturn_t fsl_edma3_tx_handler(int irq, void *dev_id)
|
|||
unsigned int intr;
|
||||
void __iomem *base_addr;
|
||||
|
||||
base_addr = fsl_chan->membase;
|
||||
|
||||
intr = readl(base_addr + EDMA_CH_INT);
|
||||
if (!intr)
|
||||
return IRQ_NONE;
|
||||
|
||||
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;
|
||||
|
||||
base_addr = fsl_chan->membase;
|
||||
|
||||
intr = readl(base_addr + EDMA_CH_INT);
|
||||
if (!intr)
|
||||
goto irq_handled;
|
||||
|
||||
writel(1, base_addr + EDMA_CH_INT);
|
||||
|
||||
if (!fsl_chan->edesc->iscyclic) {
|
||||
fsl_edma3_get_realcnt(fsl_chan);
|
||||
list_del(&fsl_chan->edesc->vdesc.node);
|
||||
|
|
Loading…
Reference in New Issue