davinci: Fix watchdog reset code
authorDavid Griego <dgriego@mvista.com>
Mon, 1 Jun 2009 18:41:54 +0000 (11:41 -0700)
committerKevin Hilman <khilman@deeprootsystems.com>
Wed, 26 Aug 2009 07:56:56 +0000 (10:56 +0300)
The davinci reset routine, davinci_watchdog_reset(), sets the
TCR register instead of the TGCR register as it should to put
the WDT into its "Initial State".

It also writes the WDTCR register without the proper WDKEY
which is pointless since the register will be write-protected.

Signed-off-by: David Griego <dgriego@mvista.com>
Signed-off-by: Mark A. Greer <mgreer@mvista.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
arch/arm/mach-davinci/time.c

index 0884ca57bfb09c961d60baf15d8cbe0c55b5479d..ca85d1871762dd52d4282e1e5f34a59b46ca91f2 100644 (file)
@@ -420,11 +420,11 @@ void davinci_watchdog_reset(void)
 
        /* reset timer, set mode to 64-bit watchdog, and unreset */
        tgcr = 0;
-       __raw_writel(tgcr, base + TCR);
+       __raw_writel(tgcr, base + TGCR);
        tgcr = TGCR_TIMMODE_64BIT_WDOG << TGCR_TIMMODE_SHIFT;
        tgcr |= (TGCR_UNRESET << TGCR_TIM12RS_SHIFT) |
                (TGCR_UNRESET << TGCR_TIM34RS_SHIFT);
-       __raw_writel(tgcr, base + TCR);
+       __raw_writel(tgcr, base + TGCR);
 
        /* clear counter and period regs */
        __raw_writel(0, base + TIM12);
@@ -432,12 +432,8 @@ void davinci_watchdog_reset(void)
        __raw_writel(0, base + PRD12);
        __raw_writel(0, base + PRD34);
 
-       /* enable */
-       wdtcr = __raw_readl(base + WDTCR);
-       wdtcr |= WDTCR_WDEN_ENABLE << WDTCR_WDEN_SHIFT;
-       __raw_writel(wdtcr, base + WDTCR);
-
        /* put watchdog in pre-active state */
+       wdtcr = __raw_readl(base + WDTCR);
        wdtcr = (WDTCR_WDKEY_SEQ0 << WDTCR_WDKEY_SHIFT) |
                (WDTCR_WDEN_ENABLE << WDTCR_WDEN_SHIFT);
        __raw_writel(wdtcr, base + WDTCR);
This page took 0.025707 seconds and 5 git commands to generate.