[PATCH 2/2] riscv: Restart via EFI runtime services when available

From: Atish Patra

Date: Mon Jun 15 2026 - 19:29:03 EST


From: Atish Patra <atishp@xxxxxxxx>

Firmware-preferred reset and EFI capsule update support requires reset
via EFI runtime services rather than direction M-mode firmware invocation
via SBI. Unlike poweroff, restart mechanism is directly controlled from
machine_restart function though.

Prefer the EFI runtime ResetSystem() service for restart when UEFI
runtime services are available.

Signed-off-by: Atish Patra <atishp@xxxxxxxx>
---
arch/riscv/kernel/reset.c | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/arch/riscv/kernel/reset.c b/arch/riscv/kernel/reset.c
index 912288572226..541e2162c85a 100644
--- a/arch/riscv/kernel/reset.c
+++ b/arch/riscv/kernel/reset.c
@@ -3,6 +3,7 @@
* Copyright (C) 2012 Regents of the University of California
*/

+#include <linux/efi.h>
#include <linux/reboot.h>
#include <linux/pm.h>

@@ -17,6 +18,12 @@ EXPORT_SYMBOL(pm_power_off);

void machine_restart(char *cmd)
{
+ /*
+ * UpdateCapsule() depends on the system being reset via ResetSystem().
+ */
+ if (efi_enabled(EFI_RUNTIME_SERVICES))
+ efi_reboot(reboot_mode, NULL);
+
do_kernel_restart(cmd);
while (1);
}

--
2.53.0-Meta