diff options
-rw-r--r-- | arch/arm/cpu/armv7/omap3/boot.c | 38 | ||||
-rw-r--r-- | arch/arm/include/asm/arch-omap3/omap.h | 7 |
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 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; +} diff --git a/arch/arm/include/asm/arch-omap3/omap.h b/arch/arm/include/asm/arch-omap3/omap.h index 537d13b263..2c94a814ef 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 |