diff options
| author | Ben Dooks <ben-linux@org.rmk.(none)> | 2005-03-03 07:53:43 +0000 |
|---|---|---|
| committer | Russell King <rmk@flint.arm.linux.org.uk> | 2005-03-03 07:53:43 +0000 |
| commit | 9bbbf278d2fd68a4796e825c3e4ae1d7d77c4874 (patch) | |
| tree | 71aa8774c3a296566800e7e737e5e7601a32c99b /include | |
| parent | 5a2ddbe1afc638a80c1c0cda65e13c003349028a (diff) | |
[ARM PATCH] 2502/1: S3C2410 - watchdog during kernel uncompression
Patch from Ben Dooks
Enable the watchdog at the start of the kernel uncompression
stage, so that if any errors occur before the kernel reaches
the stage where it can start running processes then the system
will be reset.
Signed-off-by: Ben Dooks
Signed-off-by: Russell King
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-arm/arch-s3c2410/uncompress.h | 63 |
1 files changed, 48 insertions, 15 deletions
diff --git a/include/asm-arm/arch-s3c2410/uncompress.h b/include/asm-arm/arch-s3c2410/uncompress.h index fa240af7f591..ad4252e27799 100644 --- a/include/asm-arm/arch-s3c2410/uncompress.h +++ b/include/asm-arm/arch-s3c2410/uncompress.h @@ -15,6 +15,7 @@ * 12-Mar-2004 BJD Updated header protection * 12-Oct-2004 BJD Take account of debug uart configuration * 15-Nov-2004 BJD Fixed uart configuration + * 22-Feb-2005 BJD Added watchdog to uncompress */ #ifndef __ASM_ARCH_UNCOMPRESS_H @@ -25,12 +26,16 @@ /* defines for UART registers */ #include "asm/arch/regs-serial.h" #include "asm/arch/regs-gpio.h" +#include "asm/arch/regs-watchdog.h" #include <asm/arch/map.h> /* working in physical space... */ #undef S3C2410_GPIOREG +#undef S3C2410_WDOGREG + #define S3C2410_GPIOREG(x) ((S3C2410_PA_GPIO + (x))) +#define S3C2410_WDOGREG(x) ((S3C2410_PA_WATCHDOG + (x))) /* how many bytes we allow into the FIFO at a time in FIFO mode */ #define FIFO_MAX (14) @@ -56,21 +61,6 @@ uart_rd(unsigned int reg) } -/* currently we do not need the watchdog... */ -#define arch_decomp_wdog() - - -static void error(char *err); - -static void -arch_decomp_setup(void) -{ - /* we may need to setup the uart(s) here if we are not running - * on an BAST... the BAST will have left the uarts configured - * after calling linux. - */ -} - /* we can deal with the case the UARTs are being run * in FIFO mode, so that we don't hold up our execution * waiting for tx to happen... @@ -122,4 +112,47 @@ putstr(const char *ptr) } } +/* CONFIG_S3C2410_BOOT_WATCHDOG + * + * Simple boot-time watchdog setup, to reboot the system if there is + * any problem with the boot process +*/ + +#ifdef CONFIG_S3C2410_BOOT_WATCHDOG + +#define WDOG_COUNT (0xff00) + +#define __raw_writel(d,ad) do { *((volatile unsigned int *)(ad)) = (d); } while(0) + +static inline void arch_decomp_wdog(void) +{ + __raw_writel(WDOG_COUNT, S3C2410_WTCNT); +} + +static void arch_decomp_wdog_start(void) +{ + __raw_writel(WDOG_COUNT, S3C2410_WTDAT); + __raw_writel(WDOG_COUNT, S3C2410_WTCNT); + __raw_writel(S3C2410_WTCON_ENABLE | S3C2410_WTCON_DIV128 | S3C2410_WTCON_RSTEN | S3C2410_WTCON_PRESCALE(0x40), S3C2410_WTCON); +} + +#else +#define arch_decomp_wdog_start() +#define arch_decomp_wdog() +#endif + +static void error(char *err); + +static void +arch_decomp_setup(void) +{ + /* we may need to setup the uart(s) here if we are not running + * on an BAST... the BAST will have left the uarts configured + * after calling linux. + */ + + arch_decomp_wdog_start(); +} + + #endif /* __ASM_ARCH_UNCOMPRESS_H */ |
