]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
DMAENGINE: ste_dma40: no premature stop
authorJonas Aaberg <jonas.aberg@stericsson.com>
Sun, 20 Jun 2010 21:26:01 +0000 (21:26 +0000)
committerDan Williams <dan.j.williams@intel.com>
Wed, 23 Jun 2010 01:01:55 +0000 (18:01 -0700)
Correct bug that could cause paused channels to stop.

Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/dma/ste_dma40.c

index aa098a672605ca2b77e282183d195c6dcc22cdeb..8c46bb803dbbc02588a813701eb80dedf4892c6e 100644 (file)
@@ -508,6 +508,7 @@ static int d40_channel_execute_command(struct d40_chan *d40c,
        void __iomem *active_reg;
        int ret = 0;
        unsigned long flags;
+       u32 wmask;
 
        spin_lock_irqsave(&d40c->base->execmd_lock, flags);
 
@@ -525,7 +526,9 @@ static int d40_channel_execute_command(struct d40_chan *d40c,
                        goto done;
        }
 
-       writel(command << D40_CHAN_POS(d40c->phy_chan->num), active_reg);
+       wmask = 0xffffffff & ~(D40_CHAN_POS_MASK(d40c->phy_chan->num));
+       writel(wmask | (command << D40_CHAN_POS(d40c->phy_chan->num)),
+              active_reg);
 
        if (command == D40_DMA_SUSPEND_REQ) {