summaryrefslogtreecommitdiff
path: root/arch/arm/cpu/armv7
diff options
context:
space:
mode:
authorDirk Behme <dirk.behme@de.bosch.com>2015-03-09 14:48:48 +0100
committerStefano Babic <sbabic@denx.de>2015-03-13 13:29:42 +0100
commit9d16c52f62a4cd017ac3530002ccc8ea9ffde58f (patch)
treefb247e644b34899ef4718281dfe107cda1b0b8d7 /arch/arm/cpu/armv7
parent0c1842a01f2b5383064b81862fcbc438146497fa (diff)
downloadu-boot-imx-9d16c52f62a4cd017ac3530002ccc8ea9ffde58f.zip
u-boot-imx-9d16c52f62a4cd017ac3530002ccc8ea9ffde58f.tar.gz
u-boot-imx-9d16c52f62a4cd017ac3530002ccc8ea9ffde58f.tar.bz2
mx6: soc: Switch to cold reset
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>
Diffstat (limited to 'arch/arm/cpu/armv7')
-rw-r--r--arch/arm/cpu/armv7/mx6/soc.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/arch/arm/cpu/armv7/mx6/soc.c b/arch/arm/cpu/armv7/mx6/soc.c
index b354f70..dd34138 100644
--- a/arch/arm/cpu/armv7/mx6/soc.c
+++ b/arch/arm/cpu/armv7/mx6/soc.c
@@ -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;
}