Previously, U-Boot’s PSCI-based implementation of `efi_reset_system()`
was always enabled when `CONFIG_PSCI_RESET` was set, but it did not
handle additional arguments required for specialized reset modes. This
caused issues where special reboot requests (e.g., bootloader, EDL)
were ignored, resulting in a normal reboot.

This change introduces a new configuration option,
`CONFIG_EFI_PSCI_RESET_RUNTIME`, to explicitly control whether the
runtime PSCI-specific EFI reset implementation is enabled. By default,
the PSCI EFI reset is disabled unless this config is selected, allowing
the kernel to handle the reset logic and pass the necessary arguments
for the intended reset mode correctly.

Signed-off-by: Aswin Murugan <[email protected]>
---
 drivers/firmware/psci.c |  4 ++--
 lib/efi_loader/Kconfig  | 10 ++++++++++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/firmware/psci.c b/drivers/firmware/psci.c
index 2e3223e1c32..009c6153d0c 100644
--- a/drivers/firmware/psci.c
+++ b/drivers/firmware/psci.c
@@ -244,7 +244,7 @@ static void __maybe_unused do_psci_probe(void)
        uclass_get_device_by_name(UCLASS_FIRMWARE, DRIVER_NAME, &dev);
 }
 
-#if IS_ENABLED(CONFIG_EFI_LOADER) && IS_ENABLED(CONFIG_PSCI_RESET)
+#if IS_ENABLED(CONFIG_EFI_PSCI_RESET_RUNTIME)
 efi_status_t efi_reset_system_init(void)
 {
        do_psci_probe();
@@ -266,7 +266,7 @@ void __efi_runtime EFIAPI efi_reset_system(enum 
efi_reset_type reset_type,
        while (1)
                ;
 }
-#endif /* IS_ENABLED(CONFIG_EFI_LOADER) && IS_ENABLED(CONFIG_PSCI_RESET) */
+#endif /* IS_ENABLED(CONFIG_EFI_PSCI_RESET_RUNTIME) */
 
 #ifdef CONFIG_PSCI_RESET
 void reset_misc(void)
diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
index 13e44be1d06..23c9e5cd1ea 100644
--- a/lib/efi_loader/Kconfig
+++ b/lib/efi_loader/Kconfig
@@ -106,6 +106,16 @@ config EFI_HAVE_RUNTIME_RESET
        depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
                   SANDBOX || SYSRESET_SBI || SYSRESET_X86
 
+config EFI_PSCI_RESET_RUNTIME
+       bool "EFI Runtime PSCI Reset Support"
+       depends on ARM_PSCI_FW
+       help
+         Enable PSCI-based reset implementation for EFI runtime services.
+         This allows the EFI runtime to perform system resets and power-off
+         operations using the ARM Power State Coordination Interface (PSCI)
+         firmware interface, providing a standardized method for system
+         power management across different ARM platforms.
+
 endmenu
 
 menu "UEFI Variables"
-- 
2.34.1

Reply via email to