aboutsummaryrefslogtreecommitdiff
path: root/lib_ppc/time.c
diff options
context:
space:
mode:
authorYuri Tikhonov2008-02-21 14:23:42 +0100
committerWolfgang Denk2008-02-22 15:54:34 +0100
commit2e721094a70a52206af2e1bf1208d9a7131f6dad (patch)
treec7253887406c79867c33639fc149dc32d3974705 /lib_ppc/time.c
parentbc77881247ee6f95d7a9ebc499d26b96bae38c9d (diff)
lwmon5: enable hardware watchdog
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>
Diffstat (limited to 'lib_ppc/time.c')
-rw-r--r--lib_ppc/time.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/lib_ppc/time.c b/lib_ppc/time.c
index 51e8e8406dc..2649d5ffdca 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);
}
/* ------------------------------------------------------------------------- */