]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
dmaengine: at_xdmac: fix a bug in transfer residue computation
authorCyrille Pitchen <cyrille.pitchen@atmel.com>
Thu, 13 Nov 2014 10:52:42 +0000 (11:52 +0100)
committerVinod Koul <vinod.koul@intel.com>
Mon, 17 Nov 2014 08:37:20 +0000 (14:07 +0530)
The total size of the transfer was wrong in at_xdmac_prep_slave_sg()
resulting in bad computation of the transfer residue by
at_xdmac_tx_status().

Signed-off-by: Cyrille Pitchen <cyrille.pitchen@atmel.com>
Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/at_xdmac.c

index fa9d75adf4d73171142595a5c60508dcad742513..bf2aacbbf4ccd2f52572f6f835ecaeaad7ac3778 100644 (file)
@@ -562,6 +562,7 @@ at_xdmac_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
        struct scatterlist      *sg;
        int                     i;
        u32                     cfg;
+       unsigned int            xfer_size = 0;
 
        if (!sgl)
                return NULL;
@@ -637,12 +638,13 @@ at_xdmac_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
                dev_dbg(chan2dev(chan), "%s: add desc 0x%p to descs_list 0x%p\n",
                         __func__, desc, first);
                list_add_tail(&desc->desc_node, &first->descs_list);
+               xfer_size += len;
        }
 
        spin_unlock_bh(&atchan->lock);
 
        first->tx_dma_desc.flags = flags;
-       first->xfer_size = sg_len;
+       first->xfer_size = xfer_size;
        first->direction = direction;
 
        return &first->tx_dma_desc;