diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-11-01 09:16:26 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-11-21 04:47:48 -0500 |
commit | e879c862fb81b986095ae7a4676b2281c2f97957 (patch) | |
tree | bd7793e9e9924ff4b5826d14267125e8dc22afdd /arch/arm/kernel | |
parent | 5aafec15bdc54cf0722696c95091d7bd674bfcad (diff) |
ARM: restart: only perform setup for restart when soft-restarting
We only need to set the system up for a soft-restart if we're going to
be doing a soft-restart. Provide a new function (soft_restart()) which
does the setup and final call for this, and make platforms use it.
Eliminate the call to setup_restart() from the default handler.
This means that platforms arch_reset() function is no longer called with
the page tables prepared for a soft-restart, and caches will still be
enabled.
Acked-by: Nicolas Pitre <nico@linaro.org>
Acked-by: Will Deacon <will.deacon@arm.com>
Acked-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Acked-by: Kukjin Kim <kgene.kim@samsung.com>
Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
Acked-by: Viresh Kumar <viresh.kumar@st.com>
Acked-by: Krzysztof Ha■asa <khc@pm.waw.pl>
Acked-by: Paul Mundt <lethal@linux-sh.org>
Acked-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Acked-by: Wan ZongShun <mcuos.com@gmail.com>
Acked-by: Eric Miao <eric.y.miao@gmail.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/process.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 4181738452fc..1e8b3e2de7a3 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c | |||
@@ -92,7 +92,7 @@ static int __init hlt_setup(char *__unused) | |||
92 | __setup("nohlt", nohlt_setup); | 92 | __setup("nohlt", nohlt_setup); |
93 | __setup("hlt", hlt_setup); | 93 | __setup("hlt", hlt_setup); |
94 | 94 | ||
95 | void arm_machine_restart(char mode, const char *cmd) | 95 | void soft_restart(unsigned long addr) |
96 | { | 96 | { |
97 | /* Disable interrupts first */ | 97 | /* Disable interrupts first */ |
98 | local_irq_disable(); | 98 | local_irq_disable(); |
@@ -114,7 +114,16 @@ void arm_machine_restart(char mode, const char *cmd) | |||
114 | /* Push out any further dirty data, and ensure cache is empty */ | 114 | /* Push out any further dirty data, and ensure cache is empty */ |
115 | flush_cache_all(); | 115 | flush_cache_all(); |
116 | 116 | ||
117 | /* Now call the architecture specific reboot code. */ | 117 | cpu_reset(addr); |
118 | } | ||
119 | |||
120 | void arm_machine_restart(char mode, const char *cmd) | ||
121 | { | ||
122 | /* Disable interrupts first */ | ||
123 | local_irq_disable(); | ||
124 | local_fiq_disable(); | ||
125 | |||
126 | /* Call the architecture specific reboot code. */ | ||
118 | arch_reset(mode, cmd); | 127 | arch_reset(mode, cmd); |
119 | } | 128 | } |
120 | 129 | ||