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 18static 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 30static 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 41static 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 50static 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 59arch_initcall(mips_reboot_setup); 60