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>
(cherry picked from commit
398cee2ad110c4f183e553af0564fbdcbe8548cb)
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_ptail) *
sdmac->period_len - sdmac->chn_real_count;
else