mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-18 10:54:37 +00:00

On RISC-V systems system the Supervisory Binary Interface provides system reset and poweroff. Use it at EFI runtime. Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
29 lines
811 B
C
29 lines
811 B
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#include <efi_loader.h>
|
|
#include <asm/sbi.h>
|
|
|
|
void __efi_runtime EFIAPI efi_reset_system(enum efi_reset_type reset_type,
|
|
efi_status_t reset_status,
|
|
unsigned long data_size,
|
|
void *reset_data)
|
|
{
|
|
register unsigned long eid asm("a7") = SBI_EXT_SRST;
|
|
register unsigned long fid asm("a6") = SBI_EXT_SRST_RESET;
|
|
register unsigned long type asm("a0");
|
|
register unsigned long reason asm("a1") = SBI_SRST_RESET_REASON_NONE;
|
|
|
|
switch (reset_type) {
|
|
case EFI_RESET_WARM:
|
|
type = SBI_SRST_RESET_TYPE_WARM_REBOOT;
|
|
break;
|
|
case EFI_RESET_SHUTDOWN:
|
|
type = SBI_SRST_RESET_TYPE_SHUTDOWN;
|
|
break;
|
|
default:
|
|
type = SBI_SRST_RESET_TYPE_COLD_REBOOT;
|
|
break;
|
|
}
|
|
asm volatile ("ecall\n"
|
|
: : "r" (eid), "r" (fid), "r" (type), "r" (reason));
|
|
}
|