linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] dmaengine: omap-dma: Start DMA without delay for cyclic channels
@ 2013-04-09 14:33 Peter Ujfalusi
  2013-04-10  5:04 ` Vinod Koul
  0 siblings, 1 reply; 2+ messages in thread
From: Peter Ujfalusi @ 2013-04-09 14:33 UTC (permalink / raw)
  To: Russell King - ARM Linux, Vinod Koul, Dan Williams
  Cc: Tony Lindgren, Jarkko Nikula, Santosh Shilimkar, Felipe Balbi,
	linux-kernel, linux-omap, linux-arm-kernel, Peter Meerwald,
	patches, stable

cyclic DMA is only used by audio which needs DMA to be started without a
delay.
If the DMA for audio is started using the tasklet we experience random
channel switch (to be more precise: channel shift).

Reported-by: Peter Meerwald <pmeerw@pmeerw.net>
CC: stable@vger.kernel.org  # v3.7+
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
---
Hi Vinod,

Would it be possible to send this patch for 3.9. The channel shift (or switch)
issue in audio has been noticed recently and it turns out that it has been
present since 3.7 kernel.
It would be great if 3.9 kernel could work correctly out of box...

Changes since RFCv2:
- added Acked-by from Santosh and Russell

Thank you,
Peter

 drivers/dma/omap-dma.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/drivers/dma/omap-dma.c b/drivers/dma/omap-dma.c
index 2ea3d7e..ec3fc4f 100644
--- a/drivers/dma/omap-dma.c
+++ b/drivers/dma/omap-dma.c
@@ -282,12 +282,20 @@ static void omap_dma_issue_pending(struct dma_chan *chan)
 
 	spin_lock_irqsave(&c->vc.lock, flags);
 	if (vchan_issue_pending(&c->vc) && !c->desc) {
-		struct omap_dmadev *d = to_omap_dma_dev(chan->device);
-		spin_lock(&d->lock);
-		if (list_empty(&c->node))
-			list_add_tail(&c->node, &d->pending);
-		spin_unlock(&d->lock);
-		tasklet_schedule(&d->task);
+		/*
+		 * c->cyclic is used only by audio and in this case the DMA need
+		 * to be started without delay.
+		 */
+		if (!c->cyclic) {
+			struct omap_dmadev *d = to_omap_dma_dev(chan->device);
+			spin_lock(&d->lock);
+			if (list_empty(&c->node))
+				list_add_tail(&c->node, &d->pending);
+			spin_unlock(&d->lock);
+			tasklet_schedule(&d->task);
+		} else {
+			omap_dma_start_desc(c);
+		}
 	}
 	spin_unlock_irqrestore(&c->vc.lock, flags);
 }
-- 
1.8.1.5


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

* Re: [PATCH] dmaengine: omap-dma: Start DMA without delay for cyclic channels
  2013-04-09 14:33 [PATCH] dmaengine: omap-dma: Start DMA without delay for cyclic channels Peter Ujfalusi
@ 2013-04-10  5:04 ` Vinod Koul
  0 siblings, 0 replies; 2+ messages in thread
From: Vinod Koul @ 2013-04-10  5:04 UTC (permalink / raw)
  To: Peter Ujfalusi
  Cc: Russell King - ARM Linux, Dan Williams, Tony Lindgren,
	Jarkko Nikula, Santosh Shilimkar, Felipe Balbi, linux-kernel,
	linux-omap, linux-arm-kernel, Peter Meerwald, patches, stable

On Tue, Apr 09, 2013 at 04:33:06PM +0200, Peter Ujfalusi wrote:
> cyclic DMA is only used by audio which needs DMA to be started without a
> delay.
> If the DMA for audio is started using the tasklet we experience random
> channel switch (to be more precise: channel shift).
> 
> Reported-by: Peter Meerwald <pmeerw@pmeerw.net>
> CC: stable@vger.kernel.org  # v3.7+
> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
> Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
> Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
> ---
> Hi Vinod,
> 
> Would it be possible to send this patch for 3.9. The channel shift (or switch)
> issue in audio has been noticed recently and it turns out that it has been
> present since 3.7 kernel.
> It would be great if 3.9 kernel could work correctly out of box...
Applied to fixes. I will send this to linus in a day...

--
~Vinod
> 
> Changes since RFCv2:
> - added Acked-by from Santosh and Russell
> 
> Thank you,
> Peter
> 
>  drivers/dma/omap-dma.c | 20 ++++++++++++++------
>  1 file changed, 14 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/dma/omap-dma.c b/drivers/dma/omap-dma.c
> index 2ea3d7e..ec3fc4f 100644
> --- a/drivers/dma/omap-dma.c
> +++ b/drivers/dma/omap-dma.c
> @@ -282,12 +282,20 @@ static void omap_dma_issue_pending(struct dma_chan *chan)
>  
>  	spin_lock_irqsave(&c->vc.lock, flags);
>  	if (vchan_issue_pending(&c->vc) && !c->desc) {
> -		struct omap_dmadev *d = to_omap_dma_dev(chan->device);
> -		spin_lock(&d->lock);
> -		if (list_empty(&c->node))
> -			list_add_tail(&c->node, &d->pending);
> -		spin_unlock(&d->lock);
> -		tasklet_schedule(&d->task);
> +		/*
> +		 * c->cyclic is used only by audio and in this case the DMA need
> +		 * to be started without delay.
> +		 */
> +		if (!c->cyclic) {
> +			struct omap_dmadev *d = to_omap_dma_dev(chan->device);
> +			spin_lock(&d->lock);
> +			if (list_empty(&c->node))
> +				list_add_tail(&c->node, &d->pending);
> +			spin_unlock(&d->lock);
> +			tasklet_schedule(&d->task);
> +		} else {
> +			omap_dma_start_desc(c);
> +		}
>  	}
>  	spin_unlock_irqrestore(&c->vc.lock, flags);
>  }
> -- 
> 1.8.1.5
> 

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

end of thread, other threads:[~2013-04-10  5:33 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-04-09 14:33 [PATCH] dmaengine: omap-dma: Start DMA without delay for cyclic channels Peter Ujfalusi
2013-04-10  5:04 ` Vinod Koul

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).