Skip to content
Snippets Groups Projects
Commit faec3f98 authored by Paul Kocialkowski's avatar Paul Kocialkowski Committed by Tom Rini
Browse files

omap4: Reboot mode support


Reboot mode is written to SAR memory before reboot in the form of a string.

This mechanism is supported on OMAP4 by various TI kernels.

It is up to each board to make use of this mechanism or not.

Signed-off-by: default avatarPaul Kocialkowski <contact@paulk.fr>
parent e66782e6
No related branches found
No related tags found
No related merge requests found
...@@ -58,3 +58,44 @@ u32 omap_sys_boot_device(void) ...@@ -58,3 +58,44 @@ u32 omap_sys_boot_device(void)
return boot_devices[sys_boot]; return boot_devices[sys_boot];
} }
int omap_reboot_mode(char *mode, unsigned int length)
{
unsigned int limit;
unsigned int i;
if (length < 2)
return -1;
limit = (length < OMAP_REBOOT_REASON_SIZE) ? length :
OMAP_REBOOT_REASON_SIZE;
for (i = 0; i < (limit - 1); i++)
mode[i] = readb((u8 *)(OMAP44XX_SAR_RAM_BASE +
OMAP_REBOOT_REASON_OFFSET + i));
mode[i] = '\0';
return 0;
}
int omap_reboot_mode_clear(void)
{
writeb(0, (u8 *)(OMAP44XX_SAR_RAM_BASE + OMAP_REBOOT_REASON_OFFSET));
return 0;
}
int omap_reboot_mode_store(char *mode)
{
unsigned int i;
for (i = 0; i < (OMAP_REBOOT_REASON_SIZE - 1) && mode[i] != '\0'; i++)
writeb(mode[i], (u8 *)(OMAP44XX_SAR_RAM_BASE +
OMAP_REBOOT_REASON_OFFSET + i));
writeb('\0', (u8 *)(OMAP44XX_SAR_RAM_BASE +
OMAP_REBOOT_REASON_OFFSET + i));
return 0;
}
...@@ -120,6 +120,10 @@ struct s32ktimer { ...@@ -120,6 +120,10 @@ struct s32ktimer {
/* ABB tranxdone mask */ /* ABB tranxdone mask */
#define OMAP_ABB_MPU_TXDONE_MASK (0x1 << 7) #define OMAP_ABB_MPU_TXDONE_MASK (0x1 << 7)
#define OMAP44XX_SAR_RAM_BASE 0x4a326000
#define OMAP_REBOOT_REASON_OFFSET 0xA0C
#define OMAP_REBOOT_REASON_SIZE 0x0F
/* Boot parameters */ /* Boot parameters */
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
struct omap_boot_parameters { struct omap_boot_parameters {
...@@ -129,6 +133,10 @@ struct omap_boot_parameters { ...@@ -129,6 +133,10 @@ struct omap_boot_parameters {
unsigned char reset_reason; unsigned char reset_reason;
unsigned char ch_flags; unsigned char ch_flags;
}; };
int omap_reboot_mode(char *mode, unsigned int length);
int omap_reboot_mode_clear(void);
int omap_reboot_mode_store(char *mode);
#endif #endif
#endif #endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment