diff options
author | Yuri Tikhonov <yur@emcraft.com> | 2008-02-21 14:23:42 +0100 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2008-02-22 15:54:34 +0100 |
commit | 2e721094a70a52206af2e1bf1208d9a7131f6dad (patch) | |
tree | c7253887406c79867c33639fc149dc32d3974705 | |
parent | bc77881247ee6f95d7a9ebc499d26b96bae38c9d (diff) | |
download | u-boot-imx-2e721094a70a52206af2e1bf1208d9a7131f6dad.zip u-boot-imx-2e721094a70a52206af2e1bf1208d9a7131f6dad.tar.gz u-boot-imx-2e721094a70a52206af2e1bf1208d9a7131f6dad.tar.bz2 |
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>
-rw-r--r-- | include/configs/lwmon5.h | 3 | ||||
-rw-r--r-- | lib_ppc/time.c | 14 |
2 files changed, 12 insertions, 5 deletions
diff --git a/include/configs/lwmon5.h b/include/configs/lwmon5.h index d8a2267..97e8bf1 100644 --- a/include/configs/lwmon5.h +++ b/include/configs/lwmon5.h @@ -366,12 +366,11 @@ #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 diff --git a/lib_ppc/time.c b/lib_ppc/time.c index 51e8e840..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); } /* ------------------------------------------------------------------------- */ |