xref: /openbmc/linux/arch/sparc/kernel/reboot.c (revision 597473720f4dc69749542bfcfed4a927a43d935e)
1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
2a88b5ba8SSam Ravnborg /* reboot.c: reboot/shutdown/halt/poweroff handling
3a88b5ba8SSam Ravnborg  *
4a88b5ba8SSam Ravnborg  * Copyright (C) 2008 David S. Miller <davem@davemloft.net>
5a88b5ba8SSam Ravnborg  */
6a88b5ba8SSam Ravnborg #include <linux/kernel.h>
7a88b5ba8SSam Ravnborg #include <linux/reboot.h>
8066bcacaSPaul Gortmaker #include <linux/export.h>
9a88b5ba8SSam Ravnborg #include <linux/pm.h>
10*88ca0557SRob Herring #include <linux/of.h>
11a88b5ba8SSam Ravnborg 
12a88b5ba8SSam Ravnborg #include <asm/oplib.h>
13a88b5ba8SSam Ravnborg #include <asm/prom.h>
14d550bbd4SDavid Howells #include <asm/setup.h>
15a88b5ba8SSam Ravnborg 
16a88b5ba8SSam Ravnborg /* sysctl - toggle power-off restriction for serial console
17a88b5ba8SSam Ravnborg  * systems in machine_power_off()
18a88b5ba8SSam Ravnborg  */
19a88b5ba8SSam Ravnborg int scons_pwroff = 1;
20a88b5ba8SSam Ravnborg 
21a88b5ba8SSam Ravnborg /* This isn't actually used, it exists merely to satisfy the
22a88b5ba8SSam Ravnborg  * reference in kernel/sys.c
23a88b5ba8SSam Ravnborg  */
24a88b5ba8SSam Ravnborg void (*pm_power_off)(void) = machine_power_off;
25a88b5ba8SSam Ravnborg EXPORT_SYMBOL(pm_power_off);
26a88b5ba8SSam Ravnborg 
machine_power_off(void)27a88b5ba8SSam Ravnborg void machine_power_off(void)
28a88b5ba8SSam Ravnborg {
29*88ca0557SRob Herring 	if (!of_node_is_type(of_console_device, "serial") || scons_pwroff)
30a88b5ba8SSam Ravnborg 		prom_halt_power_off();
31a88b5ba8SSam Ravnborg 
32a88b5ba8SSam Ravnborg 	prom_halt();
33a88b5ba8SSam Ravnborg }
34a88b5ba8SSam Ravnborg 
machine_halt(void)35a88b5ba8SSam Ravnborg void machine_halt(void)
36a88b5ba8SSam Ravnborg {
37a88b5ba8SSam Ravnborg 	prom_halt();
38a88b5ba8SSam Ravnborg 	panic("Halt failed!");
39a88b5ba8SSam Ravnborg }
40a88b5ba8SSam Ravnborg 
machine_restart(char * cmd)41a88b5ba8SSam Ravnborg void machine_restart(char *cmd)
42a88b5ba8SSam Ravnborg {
43a88b5ba8SSam Ravnborg 	char *p;
44a88b5ba8SSam Ravnborg 
45a88b5ba8SSam Ravnborg 	p = strchr(reboot_command, '\n');
46a88b5ba8SSam Ravnborg 	if (p)
47a88b5ba8SSam Ravnborg 		*p = 0;
48a88b5ba8SSam Ravnborg 	if (cmd)
49a88b5ba8SSam Ravnborg 		prom_reboot(cmd);
50a88b5ba8SSam Ravnborg 	if (*reboot_command)
51a88b5ba8SSam Ravnborg 		prom_reboot(reboot_command);
52a88b5ba8SSam Ravnborg 	prom_reboot("");
53a88b5ba8SSam Ravnborg 	panic("Reboot failed!");
54a88b5ba8SSam Ravnborg }
55a88b5ba8SSam Ravnborg 
56