aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/watchdog
diff options
context:
space:
mode:
authorStefan Roese <sr@denx.de>2007-02-07 03:45:55 -0500
committerPaul Mackerras <paulus@samba.org>2007-02-08 00:08:30 -0500
commitf31909c00332b3e8299209eaba6cec80756f802c (patch)
treef80e89d5ecd90c54e5bb079d8d175e9e2b57fbf9 /drivers/char/watchdog
parent2366fb16abcd8dea96820d3cb4f1de3a868d268c (diff)
[POWERPC] ppc: Fix booke watchdog initialization
Fix two problems in the book-e watchdog driver. a) The 4xx default period was defined wrong b) Clear status before enabling the watchdog exception Signed-off-by: Stefan Roese <sr@denx.de> Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'drivers/char/watchdog')
-rw-r--r--drivers/char/watchdog/booke_wdt.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/char/watchdog/booke_wdt.c b/drivers/char/watchdog/booke_wdt.c
index 488902231cc2..0e23f29f71ab 100644
--- a/drivers/char/watchdog/booke_wdt.c
+++ b/drivers/char/watchdog/booke_wdt.c
@@ -35,7 +35,7 @@
35#ifdef CONFIG_FSL_BOOKE 35#ifdef CONFIG_FSL_BOOKE
36#define WDT_PERIOD_DEFAULT 63 /* Ex. wdt_period=28 bus=333Mhz , reset=~40sec */ 36#define WDT_PERIOD_DEFAULT 63 /* Ex. wdt_period=28 bus=333Mhz , reset=~40sec */
37#else 37#else
38#define WDT_PERIOD_DEFAULT 4 /* Refer to the PPC40x and PPC4xx manuals */ 38#define WDT_PERIOD_DEFAULT 3 /* Refer to the PPC40x and PPC4xx manuals */
39#endif /* for timing information */ 39#endif /* for timing information */
40 40
41u32 booke_wdt_enabled = 0; 41u32 booke_wdt_enabled = 0;
@@ -48,12 +48,22 @@ u32 booke_wdt_period = WDT_PERIOD_DEFAULT;
48#endif 48#endif
49 49
50/* 50/*
51 * booke_wdt_ping:
52 */
53static __inline__ void booke_wdt_ping(void)
54{
55 mtspr(SPRN_TSR, TSR_ENW|TSR_WIS);
56}
57
58/*
51 * booke_wdt_enable: 59 * booke_wdt_enable:
52 */ 60 */
53static __inline__ void booke_wdt_enable(void) 61static __inline__ void booke_wdt_enable(void)
54{ 62{
55 u32 val; 63 u32 val;
56 64
65 /* clear status before enabling watchdog */
66 booke_wdt_ping();
57 val = mfspr(SPRN_TCR); 67 val = mfspr(SPRN_TCR);
58 val |= (TCR_WIE|TCR_WRC(WRC_CHIP)|WDTP(booke_wdt_period)); 68 val |= (TCR_WIE|TCR_WRC(WRC_CHIP)|WDTP(booke_wdt_period));
59 69
@@ -61,14 +71,6 @@ static __inline__ void booke_wdt_enable(void)
61} 71}
62 72
63/* 73/*
64 * booke_wdt_ping:
65 */
66static __inline__ void booke_wdt_ping(void)
67{
68 mtspr(SPRN_TSR, TSR_ENW|TSR_WIS);
69}
70
71/*
72 * booke_wdt_write: 74 * booke_wdt_write:
73 */ 75 */
74static ssize_t booke_wdt_write (struct file *file, const char __user *buf, 76static ssize_t booke_wdt_write (struct file *file, const char __user *buf,