diff options
author | Paul Kocialkowski <contact@paulk.fr> | 2016-02-27 19:26:41 +0100 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2016-03-15 15:10:47 -0400 |
commit | c5412b084bf95781c54463570f96059a1d99d363 (patch) | |
tree | 85b5c729ad05a6132ccedbae3cfdcec8b1a7e542 | |
parent | 41bccb814285047c7f0da2435c8c3af1c2fd7c5b (diff) |
omap3: String-based reboot mode handling
This switches reboot mode handling to a string-based interface, that allows more
flexibility to set a common interface with the next generations of OMAP devices.
Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
Reviewed-by: Tom Rini <trini@konsulko.com>
-rw-r--r-- | arch/arm/cpu/armv7/omap3/boot.c | 14 | ||||
-rw-r--r-- | arch/arm/include/asm/arch-omap3/omap.h | 4 | ||||
-rw-r--r-- | board/lge/sniper/sniper.c | 6 |
3 files changed, 15 insertions, 9 deletions
diff --git a/arch/arm/cpu/armv7/omap3/boot.c b/arch/arm/cpu/armv7/omap3/boot.c index 44d7c30662..259c210015 100644 --- a/arch/arm/cpu/armv7/omap3/boot.c +++ b/arch/arm/cpu/armv7/omap3/boot.c @@ -57,11 +57,14 @@ u32 omap_sys_boot_device(void) return boot_devices[sys_boot]; } -char omap_reboot_mode(void) +int omap_reboot_mode(char *mode, unsigned int length) { u32 reboot_mode; char c; + if (length < 2) + return -1; + reboot_mode = readl((u32 *)(OMAP34XX_SCRATCHPAD + 4)); c = (reboot_mode >> 24) & 0xff; @@ -74,7 +77,10 @@ char omap_reboot_mode(void) c = reboot_mode & 0xff; - return c; + mode[0] = c; + mode[1] = '\0'; + + return 0; } int omap_reboot_mode_clear(void) @@ -84,11 +90,11 @@ int omap_reboot_mode_clear(void) return 0; } -int omap_reboot_mode_store(char c) +int omap_reboot_mode_store(char *mode) { u32 reboot_mode; - reboot_mode = 'B' << 24 | 'M' << 16 | c; + reboot_mode = 'B' << 24 | 'M' << 16 | mode[0]; writel(reboot_mode, (u32 *)(OMAP34XX_SCRATCHPAD + 4)); diff --git a/arch/arm/include/asm/arch-omap3/omap.h b/arch/arm/include/asm/arch-omap3/omap.h index 2c94a814ef..4044b8d725 100644 --- a/arch/arm/include/asm/arch-omap3/omap.h +++ b/arch/arm/include/asm/arch-omap3/omap.h @@ -260,9 +260,9 @@ struct omap_boot_parameters { unsigned int boot_device_descriptor; }; -char omap_reboot_mode(void); +int omap_reboot_mode(char *mode, unsigned int length); int omap_reboot_mode_clear(void); -int omap_reboot_mode_store(char c); +int omap_reboot_mode_store(char *mode); #endif #endif diff --git a/board/lge/sniper/sniper.c b/board/lge/sniper/sniper.c index f093f97e2b..b2c8e97e34 100644 --- a/board/lge/sniper/sniper.c +++ b/board/lge/sniper/sniper.c @@ -109,7 +109,7 @@ int misc_init_r(void) /* Reboot mode */ - reboot_mode[0] = omap_reboot_mode(); + omap_reboot_mode(reboot_mode, sizeof(reboot_mode)); if (keys[0]) reboot_mode[0] = 'r'; @@ -159,12 +159,12 @@ void get_board_serial(struct tag_serialnr *serialnr) void reset_misc(void) { - omap_reboot_mode_store('u'); + omap_reboot_mode_store("u"); } int fb_set_reboot_flag(void) { - return omap_reboot_mode_store('b'); + return omap_reboot_mode_store("b"); } #ifndef CONFIG_SPL_BUILD |