mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-09-20 01:44:10 +03:00
58 lines
1.8 KiB
Diff
58 lines
1.8 KiB
Diff
|
Allow watchdog to set its iterrupt as pending when it is configured
|
||
|
for timer mode (in other words, allow emitting interrupt).
|
||
|
Also add macros for all Watchdog Control Register flags.
|
||
|
|
||
|
Signed-off-by: Vitaly Kuzmichev <vkuzmichev@mvista.com>
|
||
|
---
|
||
|
arch/arm/include/asm/smp_twd.h | 6 ++++++
|
||
|
drivers/watchdog/mpcore_wdt.c | 15 +++++++++++----
|
||
|
2 files changed, 17 insertions(+), 4 deletions(-)
|
||
|
|
||
|
--- a/arch/arm/include/asm/smp_twd.h
|
||
|
+++ b/arch/arm/include/asm/smp_twd.h
|
||
|
@@ -18,6 +18,12 @@
|
||
|
#define TWD_TIMER_CONTROL_PERIODIC (1 << 1)
|
||
|
#define TWD_TIMER_CONTROL_IT_ENABLE (1 << 2)
|
||
|
|
||
|
+#define TWD_WDOG_CONTROL_ENABLE (1 << 0)
|
||
|
+#define TWD_WDOG_CONTROL_PERIODIC (1 << 1)
|
||
|
+#define TWD_WDOG_CONTROL_IT_ENABLE (1 << 2)
|
||
|
+#define TWD_WDOG_CONTROL_TIMER_MODE (0 << 3)
|
||
|
+#define TWD_WDOG_CONTROL_WATCHDOG_MODE (1 << 3)
|
||
|
+
|
||
|
struct clock_event_device;
|
||
|
|
||
|
extern void __iomem *twd_base;
|
||
|
--- a/drivers/watchdog/mpcore_wdt.c
|
||
|
+++ b/drivers/watchdog/mpcore_wdt.c
|
||
|
@@ -118,18 +118,25 @@ static void mpcore_wdt_stop(struct mpcor
|
||
|
|
||
|
static void mpcore_wdt_start(struct mpcore_wdt *wdt)
|
||
|
{
|
||
|
+ u32 mode;
|
||
|
+
|
||
|
dev_printk(KERN_INFO, wdt->dev, "enabling watchdog.\n");
|
||
|
|
||
|
/* This loads the count register but does NOT start the count yet */
|
||
|
mpcore_wdt_keepalive(wdt);
|
||
|
|
||
|
+ /* Setup watchdog - prescale=256, enable=1 */
|
||
|
+ mode = (255 << 8) | TWD_WDOG_CONTROL_ENABLE;
|
||
|
+
|
||
|
if (mpcore_noboot) {
|
||
|
- /* Enable watchdog - prescale=256, watchdog mode=0, enable=1 */
|
||
|
- writel(0x0000FF01, wdt->base + TWD_WDOG_CONTROL);
|
||
|
+ /* timer mode, send interrupt */
|
||
|
+ mode |= TWD_WDOG_CONTROL_TIMER_MODE |
|
||
|
+ TWD_WDOG_CONTROL_IT_ENABLE;
|
||
|
} else {
|
||
|
- /* Enable watchdog - prescale=256, watchdog mode=1, enable=1 */
|
||
|
- writel(0x0000FF09, wdt->base + TWD_WDOG_CONTROL);
|
||
|
+ /* watchdog mode */
|
||
|
+ mode |= TWD_WDOG_CONTROL_WATCHDOG_MODE;
|
||
|
}
|
||
|
+ writel(mode, wdt->base + TWD_WDOG_CONTROL);
|
||
|
}
|
||
|
|
||
|
static int mpcore_wdt_set_heartbeat(int t)
|