lwmon5: enable hardware watchdog
authorYuri Tikhonov <yur@emcraft.com>
Thu, 21 Feb 2008 13:23:42 +0000 (14:23 +0100)
committerWolfgang Denk <wd@denx.de>
Fri, 22 Feb 2008 14:54:34 +0000 (15:54 +0100)
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>
include/configs/lwmon5.h
lib_ppc/time.c

index d8a2267b9a5c85240037c36abe73ba08006ac0c3..97e8bf1c50291db57a138a292fffefb7c1eec8ba 100644 (file)
 #define CFG_PCI_SUBSYS_VENDORID 0x10e8 /* AMCC                         */
 #define CFG_PCI_SUBSYS_ID       0xcafe /* Whatever                     */
 
-#if 0
 /*
  * ToDo: Watchdog is not test fully, so exclude it for now
  */
 #define CONFIG_HW_WATCHDOG     1       /* Use external HW-Watchdog     */
-#endif
+#define CONFIG_WD_PERIOD       40000   /* in usec */
 
 /*
  * For booting Linux, the board info and command line data
index 51e8e8406dc318f69492ac147889d81007fb5e45..2649d5ffdca9b0bfe6162b5bdd7cf9925c769f42 100644 (file)
@@ -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);
 }
 
 /* ------------------------------------------------------------------------- */