xref: /OK3568_Linux_fs/kernel/arch/riscv/kernel/reset.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-only
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) 2012 Regents of the University of California
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #include <linux/reboot.h>
7*4882a593Smuzhiyun #include <linux/pm.h>
8*4882a593Smuzhiyun 
default_power_off(void)9*4882a593Smuzhiyun static void default_power_off(void)
10*4882a593Smuzhiyun {
11*4882a593Smuzhiyun 	while (1)
12*4882a593Smuzhiyun 		wait_for_interrupt();
13*4882a593Smuzhiyun }
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun void (*pm_power_off)(void) = NULL;
16*4882a593Smuzhiyun EXPORT_SYMBOL(pm_power_off);
17*4882a593Smuzhiyun 
machine_restart(char * cmd)18*4882a593Smuzhiyun void machine_restart(char *cmd)
19*4882a593Smuzhiyun {
20*4882a593Smuzhiyun 	do_kernel_restart(cmd);
21*4882a593Smuzhiyun 	while (1);
22*4882a593Smuzhiyun }
23*4882a593Smuzhiyun 
machine_halt(void)24*4882a593Smuzhiyun void machine_halt(void)
25*4882a593Smuzhiyun {
26*4882a593Smuzhiyun 	if (pm_power_off != NULL)
27*4882a593Smuzhiyun 		pm_power_off();
28*4882a593Smuzhiyun 	else
29*4882a593Smuzhiyun 		default_power_off();
30*4882a593Smuzhiyun }
31*4882a593Smuzhiyun 
machine_power_off(void)32*4882a593Smuzhiyun void machine_power_off(void)
33*4882a593Smuzhiyun {
34*4882a593Smuzhiyun 	if (pm_power_off != NULL)
35*4882a593Smuzhiyun 		pm_power_off();
36*4882a593Smuzhiyun 	else
37*4882a593Smuzhiyun 		default_power_off();
38*4882a593Smuzhiyun }
39