summaryrefslogtreecommitdiff
path: root/arch/arm
diff options
context:
space:
mode:
authorJason Liu <jason.hui@linaro.org>2011-04-20 00:47:04 +0000
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>2011-04-27 19:38:05 +0200
commit7517a793f0d972da1f89fb0fd7855c305e9a9804 (patch)
tree3230a373c3bd4906a758a753044b17210090da21 /arch/arm
parenta770975ab6b7fe2c9e0753b16009b3d9abb00cdb (diff)
MX5: factor out boot cause funciton to common code
factor out boot cause function to common code to avoid the duplicate code in each board support package Signed-off-by: Jason Liu <jason.hui@linaro.org>
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/cpu/armv7/mx5/soc.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/arch/arm/cpu/armv7/mx5/soc.c b/arch/arm/cpu/armv7/mx5/soc.c
index 09500b3b9f..6f4e8db74d 100644
--- a/arch/arm/cpu/armv7/mx5/soc.c
+++ b/arch/arm/cpu/armv7/mx5/soc.c
@@ -77,6 +77,33 @@ u32 get_cpu_rev(void)
return system_rev;
}
+static char *get_reset_cause(void)
+{
+ u32 cause;
+ struct src *src_regs = (struct src *)SRC_BASE_ADDR;
+
+ cause = readl(&src_regs->srsr);
+ writel(cause, &src_regs->srsr);
+
+ switch (cause) {
+ case 0x00001:
+ return "POR";
+ case 0x00004:
+ return "CSU";
+ case 0x00008:
+ return "IPP USER";
+ case 0x00010:
+ return "WDOG";
+ case 0x00020:
+ return "JTAG HIGH-Z";
+ case 0x00040:
+ return "JTAG SW";
+ case 0x10000:
+ return "WARM BOOT";
+ default:
+ return "unknown reset";
+ }
+}
#if defined(CONFIG_DISPLAY_CPUINFO)
int print_cpuinfo(void)
@@ -89,6 +116,7 @@ int print_cpuinfo(void)
(cpurev & 0x000F0) >> 4,
(cpurev & 0x0000F) >> 0,
mxc_get_clock(MXC_ARM_CLK) / 1000000);
+ printf("Reset cause: %s\n", get_reset_cause());
return 0;
}
#endif