blob: 89b23522e95bd960f62f3b03d937b6eed5d9c802 [file] [log] [blame]
Heinrich Schuchardt309c7752024-02-12 17:18:37 +01001// SPDX-License-Identifier: GPL-2.0-or-later
2
3#include <efi_loader.h>
4#include <asm/sbi.h>
5
6void __efi_runtime EFIAPI efi_reset_system(enum efi_reset_type reset_type,
7 efi_status_t reset_status,
8 unsigned long data_size,
9 void *reset_data)
10{
11 register unsigned long eid asm("a7") = SBI_EXT_SRST;
12 register unsigned long fid asm("a6") = SBI_EXT_SRST_RESET;
13 register unsigned long type asm("a0");
14 register unsigned long reason asm("a1") = SBI_SRST_RESET_REASON_NONE;
15
16 switch (reset_type) {
17 case EFI_RESET_WARM:
18 type = SBI_SRST_RESET_TYPE_WARM_REBOOT;
19 break;
20 case EFI_RESET_SHUTDOWN:
21 type = SBI_SRST_RESET_TYPE_SHUTDOWN;
22 break;
23 default:
24 type = SBI_SRST_RESET_TYPE_COLD_REBOOT;
25 break;
26 }
27 asm volatile ("ecall\n"
28 : : "r" (eid), "r" (fid), "r" (type), "r" (reason));
29}