summaryrefslogtreecommitdiff
path: root/arch/arm/cpu/armv7/omap3
diff options
context:
space:
mode:
authorPaul Kocialkowski <contact@paulk.fr>2015-07-20 15:17:10 +0200
committerTom Rini <trini@konsulko.com>2015-08-12 20:47:36 -0400
commita08af85f46a52dd5046ef690f0ef40261322eefb (patch)
treee6e78a232ce4d39c05cec82d7f23624bdb90a74a /arch/arm/cpu/armv7/omap3
parenta4c8bbbc289e4f853b52ce9fe604079038e644cc (diff)
omap3: Reboot mode support
Reboot mode is written in scratchpad memory before reboot in the form of a single char, that is the first letter of the reboot mode string as passed to the reboot function. This mechanism is supported on OMAP3 both my the upstream kernel and by various TI kernels. It is up to each board to make use of this mechanism or not. Signed-off-by: Paul Kocialkowski <contact@paulk.fr> Reviewed-by: Tom Rini <trini@konsulko.com>
Diffstat (limited to 'arch/arm/cpu/armv7/omap3')
-rw-r--r--arch/arm/cpu/armv7/omap3/boot.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/arch/arm/cpu/armv7/omap3/boot.c b/arch/arm/cpu/armv7/omap3/boot.c
index 66576b26c5..44d7c30662 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;
+}