blob: c073dd5c6abcb511b2df49326fb37e88f45855a9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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);
|