summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-imx/cpu.c16
-rw-r--r--arch/arm/mach-imx/mx7ulp/soc.c16
2 files changed, 32 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/cpu.c b/arch/arm/mach-imx/cpu.c
index 3f19f7e4e5..67db961ea6 100644
--- a/arch/arm/mach-imx/cpu.c
+++ b/arch/arm/mach-imx/cpu.c
@@ -43,7 +43,12 @@ static char *get_reset_cause(void)
struct src *src_regs = (struct src *)SRC_BASE_ADDR;
cause = readl(&src_regs->srsr);
+#ifndef CONFIG_ANDROID_BOOT_IMAGE
+ /* We will read the ssrs states later for android so we don't
+ * clear the states here.
+ */
writel(cause, &src_regs->srsr);
+#endif
reset_cause = cause;
switch (cause) {
@@ -87,6 +92,17 @@ static char *get_reset_cause(void)
}
}
+#ifdef CONFIG_ANDROID_BOOT_IMAGE
+void get_reboot_reason(char *ret)
+{
+ struct src *src_regs = (struct src *)SRC_BASE_ADDR;
+
+ strcpy(ret, (char *)get_reset_cause());
+ /* clear the srsr here, its state has been recorded in reset_cause */
+ writel(reset_cause, &src_regs->srsr);
+}
+#endif
+
u32 get_imx_reset_cause(void)
{
return reset_cause;
diff --git a/arch/arm/mach-imx/mx7ulp/soc.c b/arch/arm/mach-imx/mx7ulp/soc.c
index 81ce576334..10b2e18978 100644
--- a/arch/arm/mach-imx/mx7ulp/soc.c
+++ b/arch/arm/mach-imx/mx7ulp/soc.c
@@ -252,7 +252,12 @@ static char *get_reset_cause(char *ret)
srs = readl(reg_srs);
cause1 = readl(reg_ssrs);
+#ifndef CONFIG_ANDROID_BOOT_IMAGE
+ /* We will read the ssrs states later for android so we don't
+ * clear the states here.
+ */
writel(cause1, reg_ssrs);
+#endif
reset_cause = cause1;
@@ -292,6 +297,17 @@ static char *get_reset_cause(char *ret)
return ret;
}
+#ifdef CONFIG_ANDROID_BOOT_IMAGE
+void get_reboot_reason(char *ret)
+{
+ u32 *reg_ssrs = (u32 *)(SRC_BASE_ADDR + 0x28);
+
+ get_reset_cause(ret);
+ /* clear the ssrs here, its state has been recorded in reset_cause */
+ writel(reset_cause, reg_ssrs);
+}
+#endif
+
void arch_preboot_os(void)
{
#if defined(CONFIG_VIDEO_MXS)