]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
MLK-9768: dma: imx-sdma: fix UART loopback random failed
authorRobin Gong <b38343@freescale.com>
Mon, 8 Dec 2014 09:30:40 +0000 (17:30 +0800)
committerNitin Garg <nitin.garg@freescale.com>
Fri, 16 Jan 2015 03:18:39 +0000 (21:18 -0600)
For UART, we need use old chn_real_count to know the real rx count even in
cylic dma mode, because UART driver use cyclic mode to increase performance
without any data loss.

Signed-off-by: Robin Gong <b38343@freescale.com>
drivers/dma/imx-sdma.c

index 5f97c964efa9a67b8d24a70a54390cc5ad9583f6..36c0b9294a60a24b6c6cd499561339c37b4a389b 100644 (file)
@@ -1358,7 +1358,12 @@ static enum dma_status sdma_tx_status(struct dma_chan *chan,
        struct sdma_channel *sdmac = to_sdma_chan(chan);
        u32 residue;
 
-       if (sdmac->flags & IMX_DMA_SG_LOOP)
+       /*
+        * For uart rx data may not receive fully, use old chn_real_count to
+        * know the real rx count.
+        */
+       if ((sdmac->flags & IMX_DMA_SG_LOOP) &&
+               (sdmac->peripheral_type != IMX_DMATYPE_UART))
                residue = (sdmac->num_bd - sdmac->buf_tail) * sdmac->period_len;
        else
                residue = sdmac->chn_count - sdmac->chn_real_count;