Re: [PATCH 06/10] ARM: OMAP: Fix DMA CCR programming for request line > 63, v2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



* Russell King - ARM Linux <linux@xxxxxxxxxxxxxxxx> [090112 18:16]:
> On Mon, Jan 12, 2009 at 06:10:53PM +0200, Tony Lindgren wrote:
> > * Russell King - ARM Linux <linux@xxxxxxxxxxxxxxxx> [090112 18:01]:
> > > On Mon, Jan 12, 2009 at 05:35:28PM +0200, Tony Lindgren wrote:
> > > > Well at least you could remove some parens.
> > > > How about (dma_trigger / 32) << 19 instead?
> > > 
> > > Oh, and further to my previous reply there is also the general principle
> > > of writing what you mean.  So, if you mean to clear the least significant
> > > 5 bits, write it as a mask with ~0x1f, not as a divide.
> > > 
> > > And no, you don't need ~(0x1f) - the parens there are pure noise.  ~0x1f
> > > does just as well and isn't in any way confusing to the compiler.
> > > To put it another way, parens around a single value are completely
> > > meaningless.
> > 
> > Here's this one with the extra parens removed.
> 
> If you're concerned about useless parens, then...
> 
> > diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c
> > index 692d2b4..660a4eb 100644
> > --- a/arch/arm/plat-omap/dma.c
> > +++ b/arch/arm/plat-omap/dma.c
> > @@ -279,10 +279,7 @@ void omap_set_dma_transfer_params(int lch, int data_type, int elem_count,
> >  
> >  		val = dma_read(CCR(lch));
> >  		val &= ~(3 << 19);
> > -		if (dma_trigger > 63)
> > -			val |= 1 << 20;
> > -		if (dma_trigger > 31)
> > -			val |= 1 << 19;
> > +		val |= ((dma_trigger & ~0x1f) << 14);
> >  
> >  		val &= ~(0x1f);
> >  		val |= (dma_trigger & 0x1f);
> 
> should change to:
> 
> 		val = dma_read(CCR(lch));
> 		val &= ~(3 << 19);
> 		val |= (dma_trigger & ~0x1f) << 14;
> 
> 		val &= ~0x1f;
> 		val |= dma_trigger & 0x1f;

How about this? Of course the bits should be defined for
DMA_SYNCHRO_CONTROL_UPPER and DMA_SYNCHRO_CONTROL, but that may not
count as a fix..

Tony
>From 80637cc6235ffcb8cd5ec4dd9a91cbd2b885d71b Mon Sep 17 00:00:00 2001
From: Anand Gadiyar <gadiyar@xxxxxx>
Date: Mon, 12 Jan 2009 16:01:03 +0200
Subject: [PATCH] ARM: OMAP: Fix DMA CCR programming for request line > 63, v3

Bug in existing code causes synchro control to be set +32 if request
line greater than 63 is used.

Also clean up the function a bit by removing extra parens and
clearing the bits at before write.

Reported by Wenbiao Wang.

Signed-off-by: Anand Gadiyar <gadiyar@xxxxxx>
Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx>

diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c
index 692d2b4..e77373c 100644
--- a/arch/arm/plat-omap/dma.c
+++ b/arch/arm/plat-omap/dma.c
@@ -278,14 +278,11 @@ void omap_set_dma_transfer_params(int lch, int data_type, int elem_count,
 		u32 val;
 
 		val = dma_read(CCR(lch));
-		val &= ~(3 << 19);
-		if (dma_trigger > 63)
-			val |= 1 << 20;
-		if (dma_trigger > 31)
-			val |= 1 << 19;
-
-		val &= ~(0x1f);
-		val |= (dma_trigger & 0x1f);
+
+		/* DMA_SYNCHRO_CONTROL_UPPER depends on the channel number */
+		val &= ~((3 << 19) | 0x1f);
+		val |= (dma_trigger & ~0x1f) << 14;
+		val |= dma_trigger & 0x1f;
 
 		if (sync_mode & OMAP_DMA_SYNC_FRAME)
 			val |= 1 << 5;

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux