diff mbox

ARM: ux500: add restart support via prcmu

Message ID 1371216160-2595-1-git-send-email-fabio.baltieri@linaro.org (mailing list archive)
State New, archived
Headers show

Commit Message

Fabio Baltieri June 14, 2013, 1:22 p.m. UTC
Add necessary code to restart ux500 based machines using
prcmu_system_reset().

Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>
---

Hi Linus,

this is something I had in my tree for some time.  This adds basic
soft-reboot support for all ux500 machines using prcmu (the actual
reboot code was already there) and may also be useful as a base to add
the remaining "reboot reason" code if necessary.

This is based on your current ste-next branch.

Thanks,
Fabio

 arch/arm/mach-ux500/board-mop500.c | 4 ++++
 arch/arm/mach-ux500/cpu-db8500.c   | 1 +
 arch/arm/mach-ux500/cpu.c          | 8 ++++++++
 arch/arm/mach-ux500/setup.h        | 2 ++
 4 files changed, 15 insertions(+)

Comments

Linus Walleij June 17, 2013, 4:53 p.m. UTC | #1
On Fri, Jun 14, 2013 at 3:22 PM, Fabio Baltieri
<fabio.baltieri@linaro.org> wrote:

> Add necessary code to restart ux500 based machines using
> prcmu_system_reset().
>
> Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>
> ---
>
> Hi Linus,
>
> this is something I had in my tree for some time.  This adds basic
> soft-reboot support for all ux500 machines using prcmu (the actual
> reboot code was already there) and may also be useful as a base to add
> the remaining "reboot reason" code if necessary.
>
> This is based on your current ste-next branch.

Patch applied.

If you're meriging "reboot reason" code, rename "reason" to
"cause" everywhere. Cause and effect. Causality. Not the
age of reason.

Yours,
Linus Walleij
diff mbox

Patch

diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c
index 2d70e2b..bb569bf 100644
--- a/arch/arm/mach-ux500/board-mop500.c
+++ b/arch/arm/mach-ux500/board-mop500.c
@@ -697,6 +697,7 @@  MACHINE_START(U8500, "ST-Ericsson MOP500 platform")
 	.init_time	= ux500_timer_init,
 	.init_machine	= mop500_init_machine,
 	.init_late	= ux500_init_late,
+	.restart        = ux500_restart,
 MACHINE_END
 
 MACHINE_START(U8520, "ST-Ericsson U8520 Platform HREFP520")
@@ -706,6 +707,7 @@  MACHINE_START(U8520, "ST-Ericsson U8520 Platform HREFP520")
 	.init_time	= ux500_timer_init,
 	.init_machine	= mop500_init_machine,
 	.init_late	= ux500_init_late,
+	.restart        = ux500_restart,
 MACHINE_END
 
 MACHINE_START(HREFV60, "ST-Ericsson U8500 Platform HREFv60+")
@@ -716,6 +718,7 @@  MACHINE_START(HREFV60, "ST-Ericsson U8500 Platform HREFv60+")
 	.init_time	= ux500_timer_init,
 	.init_machine	= hrefv60_init_machine,
 	.init_late	= ux500_init_late,
+	.restart        = ux500_restart,
 MACHINE_END
 
 MACHINE_START(SNOWBALL, "Calao Systems Snowball platform")
@@ -727,4 +730,5 @@  MACHINE_START(SNOWBALL, "Calao Systems Snowball platform")
 	.init_time	= ux500_timer_init,
 	.init_machine	= snowball_init_machine,
 	.init_late	= NULL,
+	.restart        = ux500_restart,
 MACHINE_END
diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c
index 27e5566..caded58 100644
--- a/arch/arm/mach-ux500/cpu-db8500.c
+++ b/arch/arm/mach-ux500/cpu-db8500.c
@@ -326,6 +326,7 @@  DT_MACHINE_START(U8500_DT, "ST-Ericsson Ux5x0 platform (Device Tree Support)")
 	.init_machine	= u8500_init_machine,
 	.init_late	= NULL,
 	.dt_compat      = stericsson_dt_platform_compat,
+	.restart        = ux500_restart,
 MACHINE_END
 
 #endif
diff --git a/arch/arm/mach-ux500/cpu.c b/arch/arm/mach-ux500/cpu.c
index b6145ea..7490224 100644
--- a/arch/arm/mach-ux500/cpu.c
+++ b/arch/arm/mach-ux500/cpu.c
@@ -31,6 +31,14 @@ 
 #include "db8500-regs.h"
 #include "id.h"
 
+void ux500_restart(char mode, const char *cmd)
+{
+	local_irq_disable();
+	local_fiq_disable();
+
+	prcmu_system_reset(0);
+}
+
 /*
  * FIXME: Should we set up the GPIO domain here?
  *
diff --git a/arch/arm/mach-ux500/setup.h b/arch/arm/mach-ux500/setup.h
index cad3ca8..e8be021 100644
--- a/arch/arm/mach-ux500/setup.h
+++ b/arch/arm/mach-ux500/setup.h
@@ -15,6 +15,8 @@ 
 #include <linux/init.h>
 #include <linux/mfd/abx500/ab8500.h>
 
+void ux500_restart(char mode, const char *cmd);
+
 void __init ux500_map_io(void);
 extern void __init u8500_map_io(void);