MIPS: Loongson: Add UEFI-like firmware interface (LEFI) support
[firefly-linux-kernel-4.4.55.git] / arch / mips / loongson / common / reset.c
index 65bfbb5d06f442efbd6601600097f94124cc171c..a60715e11306b272bc0402a8f8351a2afec5fc48 100644 (file)
@@ -16,6 +16,7 @@
 #include <asm/reboot.h>
 
 #include <loongson.h>
+#include <boot_param.h>
 
 static inline void loongson_reboot(void)
 {
@@ -37,17 +38,37 @@ static inline void loongson_reboot(void)
 
 static void loongson_restart(char *command)
 {
+#ifndef CONFIG_LEFI_FIRMWARE_INTERFACE
        /* do preparation for reboot */
        mach_prepare_reboot();
 
        /* reboot via jumping to boot base address */
        loongson_reboot();
+#else
+       void (*fw_restart)(void) = (void *)loongson_sysconf.restart_addr;
+
+       fw_restart();
+       while (1) {
+               if (cpu_wait)
+                       cpu_wait();
+       }
+#endif
 }
 
 static void loongson_poweroff(void)
 {
+#ifndef CONFIG_LEFI_FIRMWARE_INTERFACE
        mach_prepare_shutdown();
        unreachable();
+#else
+       void (*fw_poweroff)(void) = (void *)loongson_sysconf.poweroff_addr;
+
+       fw_poweroff();
+       while (1) {
+               if (cpu_wait)
+                       cpu_wait();
+       }
+#endif
 }
 
 static void loongson_halt(void)