mx6: soc: Switch to cold reset
authorDirk Behme <dirk.behme@de.bosch.com>
Mon, 9 Mar 2015 13:48:48 +0000 (14:48 +0100)
committerStefano Babic <sbabic@denx.de>
Fri, 13 Mar 2015 12:29:42 +0000 (13:29 +0100)
Disable the warm reset and enable the cold reset for a more reliable
restart ('reset'). This is taken from the Linux kernel, see imx_src_init()
in arch/arm/mach-imx/src.c.

Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
arch/arm/cpu/armv7/mx6/soc.c

index b354f700e7e1956a5009a7fd4e01dd1c2571dd34..dd3413889619ea2144c82df661b1e5238d7eee27 100644 (file)
@@ -288,6 +288,22 @@ static void set_preclk_from_osc(void)
 }
 #endif
 
+#define SRC_SCR_WARM_RESET_ENABLE      0
+
+static void init_src(void)
+{
+       struct src *src_regs = (struct src *)SRC_BASE_ADDR;
+       u32 val;
+
+       /*
+        * force warm reset sources to generate cold reset
+        * for a more reliable restart
+        */
+       val = readl(&src_regs->scr);
+       val &= ~(1 << SRC_SCR_WARM_RESET_ENABLE);
+       writel(val, &src_regs->scr);
+}
+
 int arch_cpu_init(void)
 {
        init_aips();
@@ -322,6 +338,8 @@ int arch_cpu_init(void)
        mxs_dma_init();
 #endif
 
+       init_src();
+
        return 0;
 }