imx: cpu.c: give access to reset cause in spl
authorMax Krummenacher <max.krummenacher@toradex.com>
Fri, 1 Feb 2019 15:04:51 +0000 (16:04 +0100)
committerStefano Babic <sbabic@denx.de>
Fri, 15 Feb 2019 21:01:15 +0000 (22:01 +0100)
This makes get_imx_reset_cause() accessible in SPL, but keeps the SRSR
register content intact so that U-Boot proper can evaluated the
reset_cause again should this be needed.

Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
arch/arm/mach-imx/cpu.c

index 80d9ff48a4396103dac4bf3377bc242d382cbd1f..6b83f926623366cda86b14a2ec1c855046ba491a 100644 (file)
 #include <fsl_esdhc.h>
 #endif
 
-#if defined(CONFIG_DISPLAY_CPUINFO) && !defined(CONFIG_SPL_BUILD)
 static u32 reset_cause = -1;
 
-static char *get_reset_cause(void)
+u32 get_imx_reset_cause(void)
 {
-       u32 cause;
        struct src *src_regs = (struct src *)SRC_BASE_ADDR;
 
-       cause = readl(&src_regs->srsr);
-       writel(cause, &src_regs->srsr);
-       reset_cause = cause;
+       if (reset_cause == -1) {
+               reset_cause = readl(&src_regs->srsr);
+/* preserve the value for U-Boot proper */
+#if !defined(CONFIG_SPL_BUILD)
+               writel(reset_cause, &src_regs->srsr);
+#endif
+       }
+
+       return reset_cause;
+}
 
-       switch (cause) {
+#if defined(CONFIG_DISPLAY_CPUINFO) && !defined(CONFIG_SPL_BUILD)
+static char *get_reset_cause(void)
+{
+       switch (get_imx_reset_cause()) {
        case 0x00001:
        case 0x00011:
                return "POR";
@@ -77,11 +85,6 @@ static char *get_reset_cause(void)
                return "unknown reset";
        }
 }
-
-u32 get_imx_reset_cause(void)
-{
-       return reset_cause;
-}
 #endif
 
 #if defined(CONFIG_MX53) || defined(CONFIG_MX6)