[U-Boot-Users] lwmon5: enable hardware watchdog
Wolfgang Denk
wd at denx.de
Thu Feb 21 14:23:42 CET 2008
From: Yuri Tikhonov <yur at 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 at 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--
More information about the U-Boot
mailing list