summaryrefslogtreecommitdiff
path: root/arch/arm/mach-omap2/omap3-restart.c
diff options
context:
space:
mode:
authorMakarand karvekar <mkarvekar@motorola.com>2014-05-05 15:12:23 -0500
committerMakarand Karvekar <mkarvekar@motorola.com>2014-05-06 19:37:41 +0000
commite2185bed930b65de678c2fbaaf2de6bbe3c639ef (patch)
tree376f7f09871a6bb2046f91d9ddf2c6ac3dca5c00 /arch/arm/mach-omap2/omap3-restart.c
parentc2422c0b1415d12377fd97679bbc657f932f28c2 (diff)
downloadolio-linux-3.10-e2185bed930b65de678c2fbaaf2de6bbe3c639ef.tar.xz
olio-linux-3.10-e2185bed930b65de678c2fbaaf2de6bbe3c639ef.zip
IKXCLOCK-1057 arm: mach-omap: pass panic as reason for panic reboot
"panic" string is passed as reason for panic reboot parse cmd for explicit reboot reason strings Change-Id: I0801f1207230dd9b3e182ef87ea49197e1eed362 Signed-off-by: Makarand karvekar <mkarvekar@motorola.com>
Diffstat (limited to 'arch/arm/mach-omap2/omap3-restart.c')
-rw-r--r--arch/arm/mach-omap2/omap3-restart.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/omap3-restart.c b/arch/arm/mach-omap2/omap3-restart.c
index 923c582189e..92a177654e2 100644
--- a/arch/arm/mach-omap2/omap3-restart.c
+++ b/arch/arm/mach-omap2/omap3-restart.c
@@ -28,9 +28,40 @@
* Resets the SoC. For @cmd, see the 'reboot' syscall in
* kernel/sys.c. No return value.
*/
+
+
+static int in_panic;
+
+static int panic_prep_restart(struct notifier_block *this,
+ unsigned long event, void *ptr)
+{
+ in_panic = 1;
+ return NOTIFY_DONE;
+}
+
+static struct notifier_block panic_block = {
+ .notifier_call = panic_prep_restart,
+};
+
void omap3xxx_restart(char mode, const char *cmd)
{
+ if (cmd != NULL) {
+ if ((strncmp(cmd, "bootloader", 10)) &&
+ (strncmp(cmd, "recovery", 8)))
+ cmd = NULL;
+ }
+
+ if (in_panic)
+ cmd = "panic";
+
omap3_ctrl_write_boot_mode((cmd ? (u8)*cmd : 0));
omap3xxx_prm_dpll3_reset(); /* never returns */
while (1);
}
+
+static int __init omap3xxx_restart_init(void)
+{
+ atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
+ return 0;
+}
+early_initcall(omap3xxx_restart_init);