diff mbox

[U-Boot,04/12] omap3: Reboot mode support

Message ID 1437398238-27912-5-git-send-email-contact@paulk.fr
State Accepted
Delegated to: Tom Rini
Headers show

Commit Message

Paul Kocialkowski July 20, 2015, 1:17 p.m. UTC
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>
---
 arch/arm/cpu/armv7/omap3/boot.c        | 38 ++++++++++++++++++++++++++++++++++
 arch/arm/include/asm/arch-omap3/omap.h |  7 +++++++
 2 files changed, 45 insertions(+)

Comments

Tom Rini Aug. 4, 2015, 2:07 a.m. UTC | #1
On Mon, Jul 20, 2015 at 03:17:10PM +0200, Paul Kocialkowski wrote:

> 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>
Tom Rini Aug. 13, 2015, 1:18 p.m. UTC | #2
On Mon, Jul 20, 2015 at 03:17:10PM +0200, Paul Kocialkowski wrote:

> 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>

Applied to u-boot/master, thanks!
diff mbox

Patch

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