5.15-stable review patch. If anyone has any objections, please let me know. ------------------ From: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> This reverts commit 77011a1d7a1a973d1657d06b658ce20f94172827 which is commit 4e7ca0b57f3bc09ba3e4ab86bf6b7c35134bfd04 upstream. Turns out to break the 5.15.y build, it should not have been backported that far. Reported-by: Guenter Roeck <linux@xxxxxxxxxxxx> Cc: Jiaxun Yang <jiaxun.yang@xxxxxxxxxxx> Cc: Thomas Bogendoerfer <tsbogend@xxxxxxxxxxxxxxxx> Link: https://lore.kernel.org/r/135ef4fd-4fc9-40b4-b188-8e64946f47c4@xxxxxxxxxxxx Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- arch/mips/loongson64/reset.c | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) --- a/arch/mips/loongson64/reset.c +++ b/arch/mips/loongson64/reset.c @@ -11,7 +11,6 @@ #include <linux/init.h> #include <linux/kexec.h> #include <linux/pm.h> -#include <linux/reboot.h> #include <linux/slab.h> #include <asm/bootinfo.h> @@ -22,21 +21,36 @@ #include <loongson.h> #include <boot_param.h> -static int firmware_restart(struct sys_off_data *unusedd) +static void loongson_restart(char *command) { void (*fw_restart)(void) = (void *)loongson_sysconf.restart_addr; fw_restart(); - return NOTIFY_DONE; + while (1) { + if (cpu_wait) + cpu_wait(); + } } -static int firmware_poweroff(struct sys_off_data *unused) +static void loongson_poweroff(void) { void (*fw_poweroff)(void) = (void *)loongson_sysconf.poweroff_addr; fw_poweroff(); - return NOTIFY_DONE; + while (1) { + if (cpu_wait) + cpu_wait(); + } +} + +static void loongson_halt(void) +{ + pr_notice("\n\n** You can safely turn off the power now **\n\n"); + while (1) { + if (cpu_wait) + cpu_wait(); + } } #ifdef CONFIG_KEXEC @@ -140,17 +154,9 @@ static void loongson_crash_shutdown(stru static int __init mips_reboot_setup(void) { - if (loongson_sysconf.restart_addr) { - register_sys_off_handler(SYS_OFF_MODE_RESTART, - SYS_OFF_PRIO_FIRMWARE, - firmware_restart, NULL); - } - - if (loongson_sysconf.poweroff_addr) { - register_sys_off_handler(SYS_OFF_MODE_POWER_OFF, - SYS_OFF_PRIO_FIRMWARE, - firmware_poweroff, NULL); - } + _machine_restart = loongson_restart; + _machine_halt = loongson_halt; + pm_power_off = loongson_poweroff; #ifdef CONFIG_KEXEC kexec_argv = kmalloc(KEXEC_ARGV_SIZE, GFP_KERNEL);