diff mbox

[02/11] ARM: use the common machine reset handling

Message ID 20131031062958.576361964@linux.com (mailing list archive)
State New, archived
Headers show

Commit Message

Domenico Andreoli Oct. 31, 2013, 6:27 a.m. UTC
From: Domenico Andreoli <domenico.andreoli@linux.com>

Proof of concept: ARM as a consumer of the machine reset hooks.

Cc: Russell King <linux@arm.linux.org.uk>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Olof Johansson <olof@lixom.net>
Cc: Will Deacon <will.deacon@arm.com>
Cc: linux-arch@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Signed-off-by: Domenico Andreoli <domenico.andreoli@linux.com>
---
 arch/arm/kernel/process.c |   14 ++++++++------
 kernel/power/Kconfig      |    1 +
 2 files changed, 9 insertions(+), 6 deletions(-)
diff mbox

Patch

Index: b/arch/arm/kernel/process.c
===================================================================
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -33,6 +33,7 @@ 
 #include <linux/cpuidle.h>
 #include <linux/leds.h>
 #include <linux/reboot.h>
+#include <linux/machine_reset.h>
 
 #include <asm/cacheflush.h>
 #include <asm/idmap.h>
@@ -114,17 +115,13 @@  void soft_restart(unsigned long addr)
 	BUG();
 }
 
-static void null_restart(enum reboot_mode reboot_mode, const char *cmd)
-{
-}
-
 /*
  * Function pointers to optional machine specific functions
  */
 void (*pm_power_off)(void);
 EXPORT_SYMBOL(pm_power_off);
 
-void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd) = null_restart;
+void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
 EXPORT_SYMBOL_GPL(arm_pm_restart);
 
 /*
@@ -217,6 +214,8 @@  void machine_power_off(void)
 
 	if (pm_power_off)
 		pm_power_off();
+	else
+		default_power_off();
 }
 
 /*
@@ -235,7 +234,10 @@  void machine_restart(char *cmd)
 	local_irq_disable();
 	smp_send_stop();
 
-	arm_pm_restart(reboot_mode, cmd);
+	if (arm_pm_restart)
+		arm_pm_restart(reboot_mode, cmd);
+	else
+		default_restart(reboot_mode, cmd);
 
 	/* Give a grace period for failure to restart of 1s */
 	mdelay(1000);
Index: b/kernel/power/Kconfig
===================================================================
--- a/kernel/power/Kconfig
+++ b/kernel/power/Kconfig
@@ -297,3 +297,4 @@  config CPU_PM
 config MACHINE_RESET
 	bool
 	default n
+	depends on ARM