From 4c0cf591b03148b9450d4009d2a3e908ec0c87a8 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Thu, 22 Mar 2012 23:33:07 +0100 Subject: wdt: make sure WDT doesn't fire inadvertently We have to set WDD and WDV to the same value to avoid watchdog errors --- firmware/src/os/wdt.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'firmware/src') diff --git a/firmware/src/os/wdt.c b/firmware/src/os/wdt.c index 8e2b73a..99d86a1 100644 --- a/firmware/src/os/wdt.c +++ b/firmware/src/os/wdt.c @@ -23,13 +23,19 @@ #include #include +#define WDT_WDD 0xFF +#define WDT_WDV 0xFF + #ifdef WDT_DEBUG #undef WDT_DEBUG #endif/*WDT_DEBUG*/ - + static void wdt_irq(u_int32_t sr) { - DEBUGPCRF("================> WATCHDOG EXPIRED !!!!!"); + if (sr & 1) + DEBUGPCRF("================> WATCHDOG EXPIRED !!!!!"); + if (sr & 2) + DEBUGPCRF("================> WATCHDOG ERROR !!!!!"); } void wdt_restart(void) @@ -41,11 +47,12 @@ void wdt_init(void) { sysirq_register(AT91SAM7_SYSIRQ_WDT, &wdt_irq); #ifdef WDT_DEBUG - AT91F_WDTSetMode(AT91C_BASE_WDTC, (0xff << 16) | + AT91F_WDTSetMode(AT91C_BASE_WDTC, (WDT_WDD << 16) | AT91C_WDTC_WDDBGHLT | AT91C_WDTC_WDIDLEHLT | - AT91C_WDTC_WDFIEN); + AT91C_WDTC_WDFIEN | WDT_WDV); #else - AT91F_WDTSetMode(AT91C_BASE_WDTC, (0x80 << 16) | - AT91C_WDTC_WDRSTEN | 0x80); + AT91F_WDTSetMode(AT91C_BASE_WDTC, (WDT_WDD << 16) | + AT91C_WDTC_WDDBGHLT | AT91C_WDTC_WDIDLEHLT | + AT91C_WDTC_WDRSTEN | WDT_WDV); #endif } -- cgit v1.2.3