Patchwork Bug in arch/powerpc/sysdev/fsl_gtm.c

login
register
mail settings
Submitter Jean-Denis Boyer
Date Feb. 16, 2011, 2:59 p.m.
Message ID <265ED5BA1B926340AF277A54E6A8341441FD6401F2@exchange.media5corp.com>
Download mbox | patch
Permalink /patch/83386/
State Changes Requested
Delegated to: Kumar Gala
Headers show

Comments

Jean-Denis Boyer - Feb. 16, 2011, 2:59 p.m.
Hi.
There is a bug in the function gtm_set_ref_timer16.
When called, it correctly sets the requested timer,
but the other timer that shares the register GTCFR is reset.

The parameter 'clear' passed to macro clrsetbits_8 should not be
a bitwise complement, since the macro already complements it.

Here is a patch that should fix this issue.


Regards,

Jean-Denis Boyer, Eng.
Media5 Corporation - Mediatrix, M5T, Media5Boss
4229 Garlock Street, Sherbrooke (Qu├ębec), J1L 2C8, CANADA
(819)829-8749 x5241
Kumar Gala - March 15, 2011, 3:53 p.m.
On Feb 16, 2011, at 8:59 AM, Jean-Denis Boyer wrote:

> Hi.
> There is a bug in the function gtm_set_ref_timer16.
> When called, it correctly sets the requested timer,
> but the other timer that shares the register GTCFR is reset.
> 
> The parameter 'clear' passed to macro clrsetbits_8 should not be
> a bitwise complement, since the macro already complements it.
> 
> Here is a patch that should fix this issue.
> 
> --- linux-2.6.35.11/arch/powerpc/sysdev/fsl_gtm.c
> +++ linux/arch/powerpc/sysdev/fsl_gtm.c
> @@ -203,13 +203,10 @@
> 	spin_lock_irqsave(&gtm->lock, flags);
> 
> 	/*
> -	 * Properly reset timers: stop, reset, set up prescalers, reference
> +	 * Properly set timers: stop, set up prescalers, reference
> 	 * value and clear event register.
> 	 */
> -	clrsetbits_8(tmr->gtcfr, ~(GTCFR_STP(num) | GTCFR_RST(num)),
> -				 GTCFR_STP(num) | GTCFR_RST(num));
> -
> -	setbits8(tmr->gtcfr, GTCFR_STP(num));
> +	setbits8(tmr->gtcfr, GTCFR_STP(num) | GTCFR_RST(num));
> 
> 	if (tmr->gtpsr)
> 		out_be16(tmr->gtpsr, psr);

If you'd like this applied please re-send w/proper signed-off-by

- k

Patch

--- linux-2.6.35.11/arch/powerpc/sysdev/fsl_gtm.c
+++ linux/arch/powerpc/sysdev/fsl_gtm.c
@@ -203,13 +203,10 @@ 
 	spin_lock_irqsave(&gtm->lock, flags);
 
 	/*
-	 * Properly reset timers: stop, reset, set up prescalers, reference
+	 * Properly set timers: stop, set up prescalers, reference
 	 * value and clear event register.
 	 */
-	clrsetbits_8(tmr->gtcfr, ~(GTCFR_STP(num) | GTCFR_RST(num)),
-				 GTCFR_STP(num) | GTCFR_RST(num));
-
-	setbits8(tmr->gtcfr, GTCFR_STP(num));
+	setbits8(tmr->gtcfr, GTCFR_STP(num) | GTCFR_RST(num));
 
 	if (tmr->gtpsr)
 		out_be16(tmr->gtpsr, psr);