MLK-16218 tty: serial: fsl_lpuart: use the sg count from dma_map_sg
authorPeng Fan <peng.fan@nxp.com>
Wed, 13 Sep 2017 05:24:27 +0000 (13:24 +0800)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 20:38:32 +0000 (15:38 -0500)
The dmaengine_prep_slave_sg needs to use sg count returned
by dma_map_sg, not use sport->dma_tx_nents, because the return
value of dma_map_sg is not always same with "nents".

When enabling iommu for lpuart + edma, iommu framework may concatenate
two sgs into one.

Fixes: 6250cc30c4c4e ("tty: serial: fsl_lpuart: Use scatter/gather DMA for Tx")

Signed-off-by: Peng Fan <peng.fan@nxp.com>
drivers/tty/serial/fsl_lpuart.c

index 8fbdbeb..40569a7 100644 (file)
@@ -402,8 +402,8 @@ static void lpuart_dma_tx(struct lpuart_port *sport)
        }
 
        sport->dma_tx_desc = dmaengine_prep_slave_sg(sport->dma_tx_chan, sgl,
-                                       sport->dma_tx_nents,
-                                       DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT);
+                                       ret, DMA_MEM_TO_DEV,
+                                       DMA_PREP_INTERRUPT);
        if (!sport->dma_tx_desc) {
                dma_unmap_sg(dev, sgl, sport->dma_tx_nents, DMA_TO_DEVICE);
                dev_err(dev, "Cannot prepare TX slave DMA!\n");