1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * 4 * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology 5 * Author: Fuxin Zhang, zhangfx@lemote.com 6 * Copyright (C) 2009 Lemote, Inc. 7 * Author: Zhangjin Wu, wuzhangjin@gmail.com 8 */ 9 #include <linux/init.h> 10 #include <linux/pm.h> 11 12 #include <asm/idle.h> 13 #include <asm/reboot.h> 14 15 #include <loongson.h> 16 #include <boot_param.h> 17 18 static void loongson_restart(char *command) 19 { 20 21 void (*fw_restart)(void) = (void *)loongson_sysconf.restart_addr; 22 23 fw_restart(); 24 while (1) { 25 if (cpu_wait) 26 cpu_wait(); 27 } 28 } 29 30 static void loongson_poweroff(void) 31 { 32 void (*fw_poweroff)(void) = (void *)loongson_sysconf.poweroff_addr; 33 34 fw_poweroff(); 35 while (1) { 36 if (cpu_wait) 37 cpu_wait(); 38 } 39 } 40 41 static void loongson_halt(void) 42 { 43 pr_notice("\n\n** You can safely turn off the power now **\n\n"); 44 while (1) { 45 if (cpu_wait) 46 cpu_wait(); 47 } 48 } 49 50 static int __init mips_reboot_setup(void) 51 { 52 _machine_restart = loongson_restart; 53 _machine_halt = loongson_halt; 54 pm_power_off = loongson_poweroff; 55 56 return 0; 57 } 58 59 arch_initcall(mips_reboot_setup); 60