Commit 48b73970 authored by Huacai Chen's avatar Huacai Chen Committed by Hongchen Zhang
Browse files

LoongArch: Cleanup reset routines with new API

mainline inclusion
from mainline-v6.0-rc3
commit da48b67c
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I5OHOB


CVE: NA

--------------------------------

Cleanup reset routines by using new do_kernel_power_off() instead of old
pm_power_off(), and then simplify the whole file (reset.c) organization
by inlining some functions. This cleanup also fix a poweroff error if EFI
runtime is disabled.

Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
parent cc72b92e
Loading
Loading
Loading
Loading
+0 −10
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
 */
#ifndef _ASM_REBOOT_H
#define _ASM_REBOOT_H

extern void (*pm_restart)(void);

#endif /* _ASM_REBOOT_H */
+20 −48
Original line number Diff line number Diff line
@@ -15,10 +15,16 @@
#include <acpi/reboot.h>
#include <asm/idle.h>
#include <asm/loongarch.h>
#include <asm/reboot.h>

static void default_halt(void)
void (*pm_power_off)(void);
EXPORT_SYMBOL(pm_power_off);

void machine_halt(void)
{
#ifdef CONFIG_SMP
	preempt_disable();
	smp_send_stop();
#endif
	local_irq_disable();
	clear_csr_ecfg(ECFG0_IM);

@@ -30,8 +36,13 @@ static void default_halt(void)
	}
}

static void default_poweroff(void)
void machine_power_off(void)
{
#ifdef CONFIG_SMP
	preempt_disable();
	smp_send_stop();
#endif

#ifdef CONFIG_EFI
	efi.reset_system(EFI_RESET_SHUTDOWN, EFI_SUCCESS, 0, NULL);
#endif
@@ -40,8 +51,13 @@ static void default_poweroff(void)
	}
}

static void default_restart(void)
void machine_restart(char *command)
{
#ifdef CONFIG_SMP
	preempt_disable();
	smp_send_stop();
#endif
	do_kernel_restart(command);
#ifdef CONFIG_EFI
	if (efi_capsule_pending(NULL))
		efi_reboot(REBOOT_WARM, NULL);
@@ -55,47 +71,3 @@ static void default_restart(void)
		__arch_cpu_idle();
	}
}

void (*pm_restart)(void);
EXPORT_SYMBOL(pm_restart);

void (*pm_power_off)(void);
EXPORT_SYMBOL(pm_power_off);

void machine_halt(void)
{
#ifdef CONFIG_SMP
	preempt_disable();
	smp_send_stop();
#endif
	default_halt();
}

void machine_power_off(void)
{
#ifdef CONFIG_SMP
	preempt_disable();
	smp_send_stop();
#endif
	pm_power_off();
}

void machine_restart(char *command)
{
#ifdef CONFIG_SMP
	preempt_disable();
	smp_send_stop();
#endif
	do_kernel_restart(command);
	pm_restart();
}

static int __init loongarch_reboot_setup(void)
{
	pm_restart = default_restart;
	pm_power_off = default_poweroff;

	return 0;
}

arch_initcall(loongarch_reboot_setup);