diff options
Diffstat (limited to 'target/linux/layerscape/patches-5.4/806-dma-0023-MLK-22284-2-dmaengine-fsl-edma-v3-check-dma-descript.patch')
-rw-r--r-- | target/linux/layerscape/patches-5.4/806-dma-0023-MLK-22284-2-dmaengine-fsl-edma-v3-check-dma-descript.patch | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/target/linux/layerscape/patches-5.4/806-dma-0023-MLK-22284-2-dmaengine-fsl-edma-v3-check-dma-descript.patch b/target/linux/layerscape/patches-5.4/806-dma-0023-MLK-22284-2-dmaengine-fsl-edma-v3-check-dma-descript.patch new file mode 100644 index 0000000000..c073dd5c6a --- /dev/null +++ b/target/linux/layerscape/patches-5.4/806-dma-0023-MLK-22284-2-dmaengine-fsl-edma-v3-check-dma-descript.patch @@ -0,0 +1,47 @@ +From 89885c09160b04ae2eec82cf9b35117ff6aa4c5d Mon Sep 17 00:00:00 2001 +From: Robin Gong <yibin.gong@nxp.com> +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 <yibin.gong@nxp.com> +Reviewed-by: S.j. Wang <shengjiu.wang@nxp.com> +(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); |