summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Kocialkowski <contact@paulk.fr>2016-02-27 19:26:41 +0100
committerTom Rini <trini@konsulko.com>2016-03-15 15:10:47 -0400
commitc5412b084bf95781c54463570f96059a1d99d363 (patch)
tree85b5c729ad05a6132ccedbae3cfdcec8b1a7e542
parent41bccb814285047c7f0da2435c8c3af1c2fd7c5b (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.c14
-rw-r--r--arch/arm/include/asm/arch-omap3/omap.h4
-rw-r--r--board/lge/sniper/sniper.c6
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