diff options
author | Wu Zhangjin <wuzhangjin@gmail.com> | 2010-01-27 09:39:46 -0500 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2010-02-27 06:53:17 -0500 |
commit | fc48c41af81b953578a54f80ad07d2f1efa81378 (patch) | |
tree | ef93c5ecfbd419ef835e14f44d10f20f9d4d3952 /arch | |
parent | e52dd9fc6b9e0c17b220bd38371ff15032a1a155 (diff) |
MIPS: Loongson: Cleanup the halt and poweroff action
In the old source code, I have let halt and poweroff do the same action,
but in reality, they have different meanings.
As the manpage of shutdown shows:
-r Reboot after shutdown.
-H Halt action is to halt or drop into boot monitor on systems that support it.
-P Halt action is to turn off the power.
and in the real world, some machines(e.g. NAS) did not provide a power
button and the shutdown works as reset, so, we need to provide a
mechanism to let the users turn off the power safely without breaking
the system, such a mechanism is "halt", which only put the system into a
dead loop or a power-save mode and print some information to the screen
to tell the users to turn off the power safely.
$ shutdown -hH now /* loongson_halt, not turn off the power */
$ shutdown -hP now /* loongson_poweroff, work as poweroff */
Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
Tested-by: Liu Shiwei <liushiwei@gmail.com>
Cc: Liu Shiwei <liushiwei@gmail.com>
Cc: linux-mips <linux-mips@linux-mips.org>
Patchwork: http://patchwork.linux-mips.org/patch/883/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/mips/loongson/common/reset.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/arch/mips/loongson/common/reset.c b/arch/mips/loongson/common/reset.c index 33dff188b4de..4bd9c18b07a5 100644 --- a/arch/mips/loongson/common/reset.c +++ b/arch/mips/loongson/common/reset.c | |||
@@ -25,17 +25,26 @@ static void loongson_restart(char *command) | |||
25 | ((void (*)(void))ioremap_nocache(LOONGSON_BOOT_BASE, 4)) (); | 25 | ((void (*)(void))ioremap_nocache(LOONGSON_BOOT_BASE, 4)) (); |
26 | } | 26 | } |
27 | 27 | ||
28 | static void loongson_halt(void) | 28 | static void loongson_poweroff(void) |
29 | { | 29 | { |
30 | mach_prepare_shutdown(); | 30 | mach_prepare_shutdown(); |
31 | unreachable(); | 31 | unreachable(); |
32 | } | 32 | } |
33 | 33 | ||
34 | static void loongson_halt(void) | ||
35 | { | ||
36 | pr_notice("\n\n** You can safely turn off the power now **\n\n"); | ||
37 | while (1) { | ||
38 | if (cpu_wait) | ||
39 | cpu_wait(); | ||
40 | } | ||
41 | } | ||
42 | |||
34 | static int __init mips_reboot_setup(void) | 43 | static int __init mips_reboot_setup(void) |
35 | { | 44 | { |
36 | _machine_restart = loongson_restart; | 45 | _machine_restart = loongson_restart; |
37 | _machine_halt = loongson_halt; | 46 | _machine_halt = loongson_halt; |
38 | pm_power_off = loongson_halt; | 47 | pm_power_off = loongson_poweroff; |
39 | 48 | ||
40 | return 0; | 49 | return 0; |
41 | } | 50 | } |