#include <asm-offsets.h>
 #include <config.h>
+#include <efi_loader.h>
 #include <version.h>
 #include <asm/macro.h>
 #include <asm/psci.h>
  * x0~x7: input arguments
  * x0~x3: output arguments
  */
-static void hvc_call(struct pt_regs *args)
+static void EFI_RUNTIME_TEXT hvc_call(struct pt_regs *args)
 {
        asm volatile(
                "ldr x0, %0\n"
  * x0~x3: output arguments
  */
 
-void smc_call(struct pt_regs *args)
+void EFI_RUNTIME_TEXT smc_call(struct pt_regs *args)
 {
        asm volatile(
                "ldr x0, %0\n"
  * use PSCI on U-Boot running below a hypervisor, please detect
  * this and set the flag accordingly.
  */
-static const bool use_smc_for_psci = true;
+static const EFI_RUNTIME_DATA bool use_smc_for_psci = true;
 
-void __noreturn psci_system_reset(void)
+void __noreturn EFI_RUNTIME_TEXT psci_system_reset(void)
 {
        struct pt_regs regs;
 
                ;
 }
 
-void __noreturn psci_system_off(void)
+void __noreturn EFI_RUNTIME_TEXT psci_system_off(void)
 {
        struct pt_regs regs;
 
 {
        psci_system_reset();
 }
+
+#ifdef CONFIG_EFI_LOADER
+void EFI_RUNTIME_TEXT EFIAPI efi_reset_system(
+                       enum efi_reset_type reset_type,
+                       efi_status_t reset_status,
+                       unsigned long data_size, void *reset_data)
+{
+       switch (reset_type) {
+       case EFI_RESET_COLD:
+       case EFI_RESET_WARM:
+               psci_system_reset();
+               break;
+       case EFI_RESET_SHUTDOWN:
+               psci_system_off();
+               break;
+       }
+
+       while (1) { }
+}
+#endif /* CONFIG_EFI_LOADER */
 #endif /* CONFIG_PSCI_RESET */