All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2/2] dma: tegra: fix residual calculation for cyclic case
@ 2012-07-02  8:22 ` Laxman Dewangan
  0 siblings, 0 replies; 18+ messages in thread
From: Laxman Dewangan @ 2012-07-02  8:22 UTC (permalink / raw)
  To: vinod.koul-ral2JQCrhuEAvxtiuMwx3w,
	dan.j.williams-ral2JQCrhuEAvxtiuMwx3w,
	swarren-DDmLM1+adcrQT0dZR+AlfA
  Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA, Laxman Dewangan

In cyclic mode of DMA, the byte transferred can be more
than the requested size and in this case, calculating
residuals based on the current position of DMA transfer to
bytes requested i.e. bytes required to transfer to reach
bytes requested from current DMA position.

Signed-off-by: Laxman Dewangan <ldewangan-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
---
 drivers/dma/tegra20-apb-dma.c |   15 +++++++++------
 1 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/dma/tegra20-apb-dma.c b/drivers/dma/tegra20-apb-dma.c
index 340c617..d52dbc6 100644
--- a/drivers/dma/tegra20-apb-dma.c
+++ b/drivers/dma/tegra20-apb-dma.c
@@ -731,6 +731,7 @@ static enum dma_status tegra_dma_tx_status(struct dma_chan *dc,
 	struct tegra_dma_sg_req *sg_req;
 	enum dma_status ret;
 	unsigned long flags;
+	unsigned int residual;
 
 	spin_lock_irqsave(&tdc->lock, flags);
 
@@ -744,9 +745,10 @@ static enum dma_status tegra_dma_tx_status(struct dma_chan *dc,
 	/* Check on wait_ack desc status */
 	list_for_each_entry(dma_desc, &tdc->free_dma_desc, node) {
 		if (dma_desc->txd.cookie == cookie) {
-			dma_set_residue(txstate,
-				dma_desc->bytes_requested -
-				dma_desc->bytes_transferred);
+			residual =  dma_desc->bytes_requested -
+					(dma_desc->bytes_transferred %
+						dma_desc->bytes_requested);
+			dma_set_residue(txstate, residual);
 			ret = dma_desc->dma_status;
 			spin_unlock_irqrestore(&tdc->lock, flags);
 			return ret;
@@ -757,9 +759,10 @@ static enum dma_status tegra_dma_tx_status(struct dma_chan *dc,
 	list_for_each_entry(sg_req, &tdc->pending_sg_req, node) {
 		dma_desc = sg_req->dma_desc;
 		if (dma_desc->txd.cookie == cookie) {
-			dma_set_residue(txstate,
-				dma_desc->bytes_requested -
-				dma_desc->bytes_transferred);
+			residual =  dma_desc->bytes_requested -
+					(dma_desc->bytes_transferred %
+						dma_desc->bytes_requested);
+			dma_set_residue(txstate, residual);
 			ret = dma_desc->dma_status;
 			spin_unlock_irqrestore(&tdc->lock, flags);
 			return ret;
-- 
1.7.1.1

^ permalink raw reply related	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2012-07-13  6:46 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-02  8:22 [PATCH 2/2] dma: tegra: fix residual calculation for cyclic case Laxman Dewangan
2012-07-02  8:22 ` Laxman Dewangan
2012-07-02  8:22 ` [PATCH 1/2] dma: tegra: rename driver and compatible to match with dts Laxman Dewangan
2012-07-02  8:22   ` Laxman Dewangan
     [not found]   ` <1341217328-6676-2-git-send-email-ldewangan-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-07-02 16:01     ` Stephen Warren
2012-07-02 16:01       ` Stephen Warren
2012-07-13  3:21     ` Vinod Koul
2012-07-13  3:21       ` Vinod Koul
     [not found] ` <1341217328-6676-1-git-send-email-ldewangan-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-07-02 16:02   ` [PATCH 2/2] dma: tegra: fix residual calculation for cyclic case Stephen Warren
2012-07-02 16:02     ` Stephen Warren
     [not found]     ` <4FF1C62B.5070005-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-07-13  3:15       ` Vinod Koul
2012-07-13  3:15         ` Vinod Koul
2012-07-13  5:39         ` Laxman Dewangan
2012-07-13  5:39           ` Laxman Dewangan
     [not found]           ` <4FFFB476.9050006-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-07-13  6:28             ` Vinod Koul
2012-07-13  6:28               ` Vinod Koul
2012-07-13  6:39               ` Laxman Dewangan
2012-07-13  6:39                 ` Laxman Dewangan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.