MX35: add reset cause as provided by other i.MX
authorStefano Babic <sbabic@denx.de>
Fri, 5 Aug 2011 10:21:37 +0000 (12:21 +0200)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Thu, 3 Nov 2011 21:56:17 +0000 (22:56 +0100)
Signed-off-by: Stefano Babic <sbabic@denx.de>
arch/arm/cpu/arm1136/mx35/generic.c

index 1b9809b2f85f57bcc71664130a1c24a52ca521a6..ac4838f03440c17e0edbe03d29f56c1ef4fab339 100644 (file)
@@ -422,12 +422,39 @@ U_BOOT_CMD(
        ""
 );
 
+static char *get_reset_cause(void)
+{
+       /* read RCSR register from CCM module */
+       struct ccm_regs *ccm =
+               (struct ccm_regs *)IMX_CCM_BASE;
+
+       u32 cause = readl(&ccm->rcsr) & 0x0F;
+
+       switch (cause) {
+       case 0x0000:
+               return "POR";
+       case 0x0002:
+               return "JTAG";
+       case 0x0004:
+               return "RST";
+       case 0x0008:
+               return "WDOG";
+       default:
+               return "unknown reset";
+       }
+}
+
 #if defined(CONFIG_DISPLAY_CPUINFO)
 int print_cpuinfo(void)
 {
-       printf("CPU:   Freescale i.MX35 at %d MHz\n",
+       u32 srev = get_cpu_rev();
+
+       printf("CPU:   Freescale i.MX35 rev %d.%d at %d MHz.\n",
+               (srev & 0xF0) >> 4, (srev & 0x0F),
                get_mcu_main_clk() / 1000000);
-       /* mxc_dump_clocks(); */
+
+       printf("Reset cause: %s\n", get_reset_cause());
+
        return 0;
 }
 #endif