Commit f45e388f authored by Andrew Bresticker's avatar Andrew Bresticker Committed by Ralf Baechle

MIPS: Provide fallback reboot/poweroff/halt implementations

If a machine-specific hook is not implemented for restart, poweroff,
or halt, fall back to halting secondary CPUs, disabling interrupts,
and spinning.  In the case of restart, attempt to restart the system
via do_kernel_restart() (which will call any registered restart
handlers) before halting.
Signed-off-by: default avatarAndrew Bresticker <abrestic@chromium.org>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: Maciej W. Rozycki <macro@linux-mips.org>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/9600/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent ea925a72
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <linux/pm.h> #include <linux/pm.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/reboot.h> #include <linux/reboot.h>
#include <linux/delay.h>
#include <asm/reboot.h> #include <asm/reboot.h>
...@@ -29,16 +30,40 @@ void machine_restart(char *command) ...@@ -29,16 +30,40 @@ void machine_restart(char *command)
{ {
if (_machine_restart) if (_machine_restart)
_machine_restart(command); _machine_restart(command);
#ifdef CONFIG_SMP
preempt_disable();
smp_send_stop();
#endif
do_kernel_restart(command);
mdelay(1000);
pr_emerg("Reboot failed -- System halted\n");
local_irq_disable();
while (1);
} }
void machine_halt(void) void machine_halt(void)
{ {
if (_machine_halt) if (_machine_halt)
_machine_halt(); _machine_halt();
#ifdef CONFIG_SMP
preempt_disable();
smp_send_stop();
#endif
local_irq_disable();
while (1);
} }
void machine_power_off(void) void machine_power_off(void)
{ {
if (pm_power_off) if (pm_power_off)
pm_power_off(); pm_power_off();
#ifdef CONFIG_SMP
preempt_disable();
smp_send_stop();
#endif
local_irq_disable();
while (1);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment