summaryrefslogtreecommitdiff
path: root/arch/arm
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/cpu/armv7/omap3/boot.c38
-rw-r--r--arch/arm/include/asm/arch-omap3/omap.h7
2 files changed, 45 insertions, 0 deletions
diff --git a/arch/arm/cpu/armv7/omap3/boot.c b/arch/arm/cpu/armv7/omap3/boot.c
index 66576b2..44d7c30 100644
--- a/arch/arm/cpu/armv7/omap3/boot.c
+++ b/arch/arm/cpu/armv7/omap3/boot.c
@@ -56,3 +56,41 @@ u32 omap_sys_boot_device(void)
return boot_devices[sys_boot];
}
+
+char omap_reboot_mode(void)
+{
+ u32 reboot_mode;
+ char c;
+
+ reboot_mode = readl((u32 *)(OMAP34XX_SCRATCHPAD + 4));
+
+ c = (reboot_mode >> 24) & 0xff;
+ if (c != 'B')
+ return -1;
+
+ c = (reboot_mode >> 16) & 0xff;
+ if (c != 'M')
+ return -1;
+
+ c = reboot_mode & 0xff;
+
+ return c;
+}
+
+int omap_reboot_mode_clear(void)
+{
+ writel(0, (u32 *)(OMAP34XX_SCRATCHPAD + 4));
+
+ return 0;
+}
+
+int omap_reboot_mode_store(char c)
+{
+ u32 reboot_mode;
+
+ reboot_mode = 'B' << 24 | 'M' << 16 | c;
+
+ writel(reboot_mode, (u32 *)(OMAP34XX_SCRATCHPAD + 4));
+
+ return 0;
+}
diff --git a/arch/arm/include/asm/arch-omap3/omap.h b/arch/arm/include/asm/arch-omap3/omap.h
index 537d13b..2c94a81 100644
--- a/arch/arm/include/asm/arch-omap3/omap.h
+++ b/arch/arm/include/asm/arch-omap3/omap.h
@@ -51,6 +51,9 @@ struct control_prog_io {
/* Bit definition for CONTROL_PROG_IO1 */
#define PRG_I2C2_PULLUPRESX 0x00000001
+/* Scratchpad memory */
+#define OMAP34XX_SCRATCHPAD (OMAP34XX_CTRL_BASE + 0x910)
+
/* UART */
#define OMAP34XX_UART1 (OMAP34XX_L4_IO_BASE + 0x6a000)
#define OMAP34XX_UART2 (OMAP34XX_L4_IO_BASE + 0x6c000)
@@ -256,6 +259,10 @@ struct omap_boot_parameters {
unsigned char ch_flags;
unsigned int boot_device_descriptor;
};
+
+char omap_reboot_mode(void);
+int omap_reboot_mode_clear(void);
+int omap_reboot_mode_store(char c);
#endif
#endif