[U-Boot-Users] lwmon5: enable hardware watchdog

From: Yuri Tikhonov yur@emcraft.com
Some boards (e.g. lwmon5) may use rather small watchdog intervals, so causing it to reboot the board if U-Boot does a long busy-wait with udelay(). Thus, for these boards we have to restart WD more frequently.
This patch splits the busy-wait udelay() into smaller, predefined, intervals, so that the watchdog timer may be resetted with the configurable (CONFIG_WD_PERIOD) interval.
Signed-off-by: Yuri Tikhonov yur@emcraft.com -- diff --git a/include/configs/lwmon5.h b/include/configs/lwmon5.h index ca852ac..9c7f6d0 100644 --- a/include/configs/lwmon5.h +++ b/include/configs/lwmon5.h @@ -453,9 +453,10 @@ #define CFG_PCI_SUBSYS_VENDORID 0x10e8 /* AMCC */ #define CFG_PCI_SUBSYS_ID 0xcafe /* Whatever */
-#if 0 +#if 1 /* Until the Lwmon5's Watch-Dog is not supported in Linux, turn it off */ #define CONFIG_HW_WATCHDOG 1 /* Use external HW-Watchdog */ +#define CONFIG_WD_PERIOD 40000 /* in usec */ #endif
/* diff --git a/lib_ppc/time.c b/lib_ppc/time.c index 51e8e84..2649d5f 100644 --- a/lib_ppc/time.c +++ b/lib_ppc/time.c @@ -23,6 +23,9 @@
#include <common.h>
+#ifndef CONFIG_WD_PERIOD +# define CONFIG_WD_PERIOD (10 * 1000 * 1000) /* 10 seconds default*/ +#endif
/* ------------------------------------------------------------------------- */
@@ -53,9 +56,14 @@ unsigned long usec2ticks(unsigned long usec) */ void udelay(unsigned long usec) { - ulong ticks = usec2ticks (usec); - - wait_ticks (ticks); + ulong ticks, kv; + + do { + kv = usec > CONFIG_WD_PERIOD ? CONFIG_WD_PERIOD : usec; + ticks = usec2ticks (kv); + wait_ticks (ticks); + usec -= kv; + } while(usec); }
/* ------------------------------------------------------------------------- */
--Boundary-00=_cbbsH0dvu7Ak8rA--
participants (1)
-
Wolfgang Denk