|
@@ -116,6 +116,8 @@ putstr(const char *ptr)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+#define __raw_writel(d,ad) do { *((volatile unsigned int *)(ad)) = (d); } while(0)
|
|
|
+
|
|
|
/* CONFIG_S3C2410_BOOT_WATCHDOG
|
|
|
*
|
|
|
* Simple boot-time watchdog setup, to reboot the system if there is
|
|
@@ -126,8 +128,6 @@ putstr(const char *ptr)
|
|
|
|
|
|
#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);
|
|
@@ -145,6 +145,24 @@ static void arch_decomp_wdog_start(void)
|
|
|
#define arch_decomp_wdog()
|
|
|
#endif
|
|
|
|
|
|
+#ifdef CONFIG_S3C2410_BOOT_ERROR_RESET
|
|
|
+
|
|
|
+static void arch_decomp_error(const char *x)
|
|
|
+{
|
|
|
+ putstr("\n\n");
|
|
|
+ putstr(x);
|
|
|
+ putstr("\n\n -- System resetting\n");
|
|
|
+
|
|
|
+ __raw_writel(0x4000, S3C2410_WTDAT);
|
|
|
+ __raw_writel(0x4000, S3C2410_WTCNT);
|
|
|
+ __raw_writel(S3C2410_WTCON_ENABLE | S3C2410_WTCON_DIV128 | S3C2410_WTCON_RSTEN | S3C2410_WTCON_PRESCALE(0x40), S3C2410_WTCON);
|
|
|
+
|
|
|
+ while(1);
|
|
|
+}
|
|
|
+
|
|
|
+#define arch_error arch_decomp_error
|
|
|
+#endif
|
|
|
+
|
|
|
static void error(char *err);
|
|
|
|
|
|
static void
|