diff options
author | Stefan Roese <sr@denx.de> | 2007-02-07 03:45:55 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-02-08 00:08:30 -0500 |
commit | f31909c00332b3e8299209eaba6cec80756f802c (patch) | |
tree | f80e89d5ecd90c54e5bb079d8d175e9e2b57fbf9 /drivers | |
parent | 2366fb16abcd8dea96820d3cb4f1de3a868d268c (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')
-rw-r--r-- | drivers/char/watchdog/booke_wdt.c | 20 |
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 | ||
41 | u32 booke_wdt_enabled = 0; | 41 | u32 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 | */ | ||
53 | static __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 | */ |
53 | static __inline__ void booke_wdt_enable(void) | 61 | static __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 | */ | ||
66 | static __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 | */ |
74 | static ssize_t booke_wdt_write (struct file *file, const char __user *buf, | 76 | static ssize_t booke_wdt_write (struct file *file, const char __user *buf, |