x86, reboot: Add EFI and CF9 reboot methods into the default list
[firefly-linux-kernel-4.4.55.git] / arch / x86 / kernel / reboot.c
index c752cb43e52f192f431a5f2ab91b9366e42ef5b0..f6012953e0d8895d29e9b07d8a22482fb27ccf57 100644 (file)
@@ -464,9 +464,12 @@ void __attribute__((weak)) mach_reboot_fixups(void)
  * 2) If still alive, write to the keyboard controller
  * 3) If still alive, write to the ACPI reboot register again
  * 4) If still alive, write to the keyboard controller again
+ * 5) If still alive, call the EFI runtime service to reboot
+ * 6) If still alive, write to the PCI IO port 0xCF9 to reboot
+ * 7) If still alive, inform BIOS to do a proper reboot
  *
  * If the machine is still alive at this stage, it gives up. We default to
- * following the same pattern, except that if we're still alive after (4) we'll
+ * following the same pattern, except that if we're still alive after (7) we'll
  * try to force a triple fault and then cycle between hitting the keyboard
  * controller and doing that
  */
@@ -502,7 +505,7 @@ static void native_machine_emergency_restart(void)
                                attempt = 1;
                                reboot_type = BOOT_ACPI;
                        } else {
-                               reboot_type = BOOT_TRIPLE;
+                               reboot_type = BOOT_EFI;
                        }
                        break;
 
@@ -510,13 +513,15 @@ static void native_machine_emergency_restart(void)
                        load_idt(&no_idt);
                        __asm__ __volatile__("int3");
 
+                       /* We're probably dead after this, but... */
                        reboot_type = BOOT_KBD;
                        break;
 
                case BOOT_BIOS:
                        machine_real_restart(MRR_BIOS);
 
-                       reboot_type = BOOT_KBD;
+                       /* We're probably dead after this, but... */
+                       reboot_type = BOOT_TRIPLE;
                        break;
 
                case BOOT_ACPI:
@@ -530,7 +535,7 @@ static void native_machine_emergency_restart(void)
                                                 EFI_RESET_WARM :
                                                 EFI_RESET_COLD,
                                                 EFI_SUCCESS, 0, NULL);
-                       reboot_type = BOOT_KBD;
+                       reboot_type = BOOT_CF9;
                        break;
 
                case BOOT_CF9:
@@ -548,7 +553,7 @@ static void native_machine_emergency_restart(void)
                                outb(cf9|reboot_code, 0xcf9);
                                udelay(50);
                        }
-                       reboot_type = BOOT_KBD;
+                       reboot_type = BOOT_BIOS;
                        break;
                }
        }