Commit 986189f9 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'x86-reboot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 reboot changes from Ingo Molnar:
 "Misc changes - the only one with functional impact should be commit
  16c21ae5 ("reboot: Allow specifying warm/cold reset for CF9 boot
  type") which extends cold/warm reboot handling to the 0xCF9 reboot
  method"

* 'x86-reboot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/reboot: Correct pr_info() log message in the set_bios/pci/kbd_reboot()
  x86/reboot: Sort reboot DMI quirks by vendor
  x86/reboot: Remove the duplicate C6100 entry in the reboot quirks list
  reboot: Allow specifying warm/cold reset for CF9 boot type
parents 2934578e 6d9153bb
...@@ -61,7 +61,7 @@ static int __init set_bios_reboot(const struct dmi_system_id *d) ...@@ -61,7 +61,7 @@ static int __init set_bios_reboot(const struct dmi_system_id *d)
if (reboot_type != BOOT_BIOS) { if (reboot_type != BOOT_BIOS) {
reboot_type = BOOT_BIOS; reboot_type = BOOT_BIOS;
pr_info("%s series board detected. Selecting %s-method for reboots.\n", pr_info("%s series board detected. Selecting %s-method for reboots.\n",
"BIOS", d->ident); d->ident, "BIOS");
} }
return 0; return 0;
} }
...@@ -117,7 +117,7 @@ static int __init set_pci_reboot(const struct dmi_system_id *d) ...@@ -117,7 +117,7 @@ static int __init set_pci_reboot(const struct dmi_system_id *d)
if (reboot_type != BOOT_CF9) { if (reboot_type != BOOT_CF9) {
reboot_type = BOOT_CF9; reboot_type = BOOT_CF9;
pr_info("%s series board detected. Selecting %s-method for reboots.\n", pr_info("%s series board detected. Selecting %s-method for reboots.\n",
"PCI", d->ident); d->ident, "PCI");
} }
return 0; return 0;
} }
...@@ -127,7 +127,7 @@ static int __init set_kbd_reboot(const struct dmi_system_id *d) ...@@ -127,7 +127,7 @@ static int __init set_kbd_reboot(const struct dmi_system_id *d)
if (reboot_type != BOOT_KBD) { if (reboot_type != BOOT_KBD) {
reboot_type = BOOT_KBD; reboot_type = BOOT_KBD;
pr_info("%s series board detected. Selecting %s-method for reboot.\n", pr_info("%s series board detected. Selecting %s-method for reboot.\n",
"KBD", d->ident); d->ident, "KBD");
} }
return 0; return 0;
} }
...@@ -136,252 +136,256 @@ static int __init set_kbd_reboot(const struct dmi_system_id *d) ...@@ -136,252 +136,256 @@ static int __init set_kbd_reboot(const struct dmi_system_id *d)
* This is a single dmi_table handling all reboot quirks. * This is a single dmi_table handling all reboot quirks.
*/ */
static struct dmi_system_id __initdata reboot_dmi_table[] = { static struct dmi_system_id __initdata reboot_dmi_table[] = {
{ /* Handle problems with rebooting on Dell E520's */
.callback = set_bios_reboot, /* Acer */
.ident = "Dell E520", { /* Handle reboot issue on Acer Aspire one */
.callback = set_kbd_reboot,
.ident = "Acer Aspire One A110",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
DMI_MATCH(DMI_PRODUCT_NAME, "Dell DM061"), DMI_MATCH(DMI_PRODUCT_NAME, "AOA110"),
}, },
}, },
{ /* Handle problems with rebooting on Dell 1300's */
.callback = set_bios_reboot, /* Apple */
.ident = "Dell PowerEdge 1300", { /* Handle problems with rebooting on Apple MacBook5 */
.callback = set_pci_reboot,
.ident = "Apple MacBook5",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 1300/"), DMI_MATCH(DMI_PRODUCT_NAME, "MacBook5"),
}, },
}, },
{ /* Handle problems with rebooting on Dell 300's */ { /* Handle problems with rebooting on Apple MacBookPro5 */
.callback = set_bios_reboot, .callback = set_pci_reboot,
.ident = "Dell PowerEdge 300", .ident = "Apple MacBookPro5",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 300/"), DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5"),
}, },
}, },
{ /* Handle problems with rebooting on Dell Optiplex 745's SFF */ { /* Handle problems with rebooting on Apple Macmini3,1 */
.callback = set_bios_reboot, .callback = set_pci_reboot,
.ident = "Dell OptiPlex 745", .ident = "Apple Macmini3,1",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"), DMI_MATCH(DMI_PRODUCT_NAME, "Macmini3,1"),
}, },
}, },
{ /* Handle problems with rebooting on Dell Optiplex 745's DFF */ { /* Handle problems with rebooting on the iMac9,1. */
.callback = set_bios_reboot, .callback = set_pci_reboot,
.ident = "Dell OptiPlex 745", .ident = "Apple iMac9,1",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"), DMI_MATCH(DMI_PRODUCT_NAME, "iMac9,1"),
DMI_MATCH(DMI_BOARD_NAME, "0MM599"),
}, },
}, },
{ /* Handle problems with rebooting on Dell Optiplex 745 with 0KW626 */
/* ASUS */
{ /* Handle problems with rebooting on ASUS P4S800 */
.callback = set_bios_reboot, .callback = set_bios_reboot,
.ident = "Dell OptiPlex 745", .ident = "ASUS P4S800",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"), DMI_MATCH(DMI_BOARD_NAME, "P4S800"),
DMI_MATCH(DMI_BOARD_NAME, "0KW626"),
}, },
}, },
{ /* Handle problems with rebooting on Dell Optiplex 330 with 0KP561 */
/* Dell */
{ /* Handle problems with rebooting on Dell DXP061 */
.callback = set_bios_reboot, .callback = set_bios_reboot,
.ident = "Dell OptiPlex 330", .ident = "Dell DXP061",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 330"), DMI_MATCH(DMI_PRODUCT_NAME, "Dell DXP061"),
DMI_MATCH(DMI_BOARD_NAME, "0KP561"),
}, },
}, },
{ /* Handle problems with rebooting on Dell Optiplex 360 with 0T656F */ { /* Handle problems with rebooting on Dell E520's */
.callback = set_bios_reboot, .callback = set_bios_reboot,
.ident = "Dell OptiPlex 360", .ident = "Dell E520",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 360"), DMI_MATCH(DMI_PRODUCT_NAME, "Dell DM061"),
DMI_MATCH(DMI_BOARD_NAME, "0T656F"),
}, },
}, },
{ /* Handle problems with rebooting on Dell OptiPlex 760 with 0G919G */ { /* Handle problems with rebooting on the Latitude E5410. */
.callback = set_bios_reboot, .callback = set_pci_reboot,
.ident = "Dell OptiPlex 760", .ident = "Dell Latitude E5410",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 760"), DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E5410"),
DMI_MATCH(DMI_BOARD_NAME, "0G919G"),
}, },
}, },
{ /* Handle problems with rebooting on Dell 2400's */ { /* Handle problems with rebooting on the Latitude E5420. */
.callback = set_bios_reboot, .callback = set_pci_reboot,
.ident = "Dell PowerEdge 2400", .ident = "Dell Latitude E5420",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 2400"), DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E5420"),
}, },
}, },
{ /* Handle problems with rebooting on Dell T5400's */ { /* Handle problems with rebooting on the Latitude E6320. */
.callback = set_bios_reboot, .callback = set_pci_reboot,
.ident = "Dell Precision T5400", .ident = "Dell Latitude E6320",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T5400"), DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6320"),
}, },
}, },
{ /* Handle problems with rebooting on Dell T7400's */ { /* Handle problems with rebooting on the Latitude E6420. */
.callback = set_bios_reboot, .callback = set_pci_reboot,
.ident = "Dell Precision T7400", .ident = "Dell Latitude E6420",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T7400"), DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6420"),
}, },
}, },
{ /* Handle problems with rebooting on HP laptops */ { /* Handle problems with rebooting on Dell Optiplex 330 with 0KP561 */
.callback = set_bios_reboot, .callback = set_bios_reboot,
.ident = "HP Compaq Laptop", .ident = "Dell OptiPlex 330",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq"), DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 330"),
DMI_MATCH(DMI_BOARD_NAME, "0KP561"),
}, },
}, },
{ /* Handle problems with rebooting on Dell XPS710 */ { /* Handle problems with rebooting on Dell Optiplex 360 with 0T656F */
.callback = set_bios_reboot, .callback = set_bios_reboot,
.ident = "Dell XPS710", .ident = "Dell OptiPlex 360",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "Dell XPS710"), DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 360"),
DMI_MATCH(DMI_BOARD_NAME, "0T656F"),
}, },
}, },
{ /* Handle problems with rebooting on Dell DXP061 */ { /* Handle problems with rebooting on Dell Optiplex 745's SFF */
.callback = set_bios_reboot, .callback = set_bios_reboot,
.ident = "Dell DXP061", .ident = "Dell OptiPlex 745",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "Dell DXP061"), DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"),
}, },
}, },
{ /* Handle problems with rebooting on Sony VGN-Z540N */ { /* Handle problems with rebooting on Dell Optiplex 745's DFF */
.callback = set_bios_reboot, .callback = set_bios_reboot,
.ident = "Sony VGN-Z540N", .ident = "Dell OptiPlex 745",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "VGN-Z540N"), DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"),
DMI_MATCH(DMI_BOARD_NAME, "0MM599"),
}, },
}, },
{ /* Handle problems with rebooting on ASUS P4S800 */ { /* Handle problems with rebooting on Dell Optiplex 745 with 0KW626 */
.callback = set_bios_reboot, .callback = set_bios_reboot,
.ident = "ASUS P4S800", .ident = "Dell OptiPlex 745",
.matches = {
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
DMI_MATCH(DMI_BOARD_NAME, "P4S800"),
},
},
{ /* Handle reboot issue on Acer Aspire one */
.callback = set_kbd_reboot,
.ident = "Acer Aspire One A110",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "AOA110"), DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"),
DMI_MATCH(DMI_BOARD_NAME, "0KW626"),
}, },
}, },
{ /* Handle problems with rebooting on Apple MacBook5 */ { /* Handle problems with rebooting on Dell OptiPlex 760 with 0G919G */
.callback = set_pci_reboot, .callback = set_bios_reboot,
.ident = "Apple MacBook5", .ident = "Dell OptiPlex 760",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "MacBook5"), DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 760"),
DMI_MATCH(DMI_BOARD_NAME, "0G919G"),
}, },
}, },
{ /* Handle problems with rebooting on Apple MacBookPro5 */ { /* Handle problems with rebooting on the OptiPlex 990. */
.callback = set_pci_reboot, .callback = set_pci_reboot,
.ident = "Apple MacBookPro5", .ident = "Dell OptiPlex 990",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5"), DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 990"),
}, },
}, },
{ /* Handle problems with rebooting on Apple Macmini3,1 */ { /* Handle problems with rebooting on Dell 300's */
.callback = set_pci_reboot, .callback = set_bios_reboot,
.ident = "Apple Macmini3,1", .ident = "Dell PowerEdge 300",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
DMI_MATCH(DMI_PRODUCT_NAME, "Macmini3,1"), DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 300/"),
}, },
}, },
{ /* Handle problems with rebooting on the iMac9,1. */ { /* Handle problems with rebooting on Dell 1300's */
.callback = set_pci_reboot, .callback = set_bios_reboot,
.ident = "Apple iMac9,1", .ident = "Dell PowerEdge 1300",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
DMI_MATCH(DMI_PRODUCT_NAME, "iMac9,1"), DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 1300/"),
}, },
}, },
{ /* Handle problems with rebooting on the Latitude E6320. */ { /* Handle problems with rebooting on Dell 2400's */
.callback = set_pci_reboot, .callback = set_bios_reboot,
.ident = "Dell Latitude E6320", .ident = "Dell PowerEdge 2400",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6320"), DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 2400"),
}, },
}, },
{ /* Handle problems with rebooting on the Latitude E5410. */ { /* Handle problems with rebooting on the Dell PowerEdge C6100. */
.callback = set_pci_reboot, .callback = set_pci_reboot,
.ident = "Dell Latitude E5410", .ident = "Dell PowerEdge C6100",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Dell"),
DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E5410"), DMI_MATCH(DMI_PRODUCT_NAME, "C6100"),
}, },
}, },
{ /* Handle problems with rebooting on the Latitude E5420. */ { /* Handle problems with rebooting on the Precision M6600. */
.callback = set_pci_reboot, .callback = set_pci_reboot,
.ident = "Dell Latitude E5420", .ident = "Dell Precision M6600",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E5420"), DMI_MATCH(DMI_PRODUCT_NAME, "Precision M6600"),
}, },
}, },
{ /* Handle problems with rebooting on the Latitude E6420. */ { /* Handle problems with rebooting on Dell T5400's */
.callback = set_pci_reboot, .callback = set_bios_reboot,
.ident = "Dell Latitude E6420", .ident = "Dell Precision T5400",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6420"), DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T5400"),
}, },
}, },
{ /* Handle problems with rebooting on the OptiPlex 990. */ { /* Handle problems with rebooting on Dell T7400's */
.callback = set_pci_reboot, .callback = set_bios_reboot,
.ident = "Dell OptiPlex 990", .ident = "Dell Precision T7400",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 990"), DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T7400"),
}, },
}, },
{ /* Handle problems with rebooting on the Precision M6600. */ { /* Handle problems with rebooting on Dell XPS710 */
.callback = set_pci_reboot, .callback = set_bios_reboot,
.ident = "Dell Precision M6600", .ident = "Dell XPS710",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "Precision M6600"), DMI_MATCH(DMI_PRODUCT_NAME, "Dell XPS710"),
}, },
}, },
{ /* Handle problems with rebooting on the Dell PowerEdge C6100. */
.callback = set_pci_reboot, /* Hewlett-Packard */
.ident = "Dell PowerEdge C6100", { /* Handle problems with rebooting on HP laptops */
.callback = set_bios_reboot,
.ident = "HP Compaq Laptop",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
DMI_MATCH(DMI_PRODUCT_NAME, "C6100"), DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq"),
}, },
}, },
{ /* Some C6100 machines were shipped with vendor being 'Dell'. */
.callback = set_pci_reboot, /* Sony */
.ident = "Dell PowerEdge C6100", { /* Handle problems with rebooting on Sony VGN-Z540N */
.callback = set_bios_reboot,
.ident = "Sony VGN-Z540N",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell"), DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
DMI_MATCH(DMI_PRODUCT_NAME, "C6100"), DMI_MATCH(DMI_PRODUCT_NAME, "VGN-Z540N"),
}, },
}, },
{ } { }
}; };
...@@ -535,10 +539,13 @@ static void native_machine_emergency_restart(void) ...@@ -535,10 +539,13 @@ static void native_machine_emergency_restart(void)
case BOOT_CF9_COND: case BOOT_CF9_COND:
if (port_cf9_safe) { if (port_cf9_safe) {
u8 cf9 = inb(0xcf9) & ~6; u8 reboot_code = reboot_mode == REBOOT_WARM ?
0x06 : 0x0E;
u8 cf9 = inb(0xcf9) & ~reboot_code;
outb(cf9|2, 0xcf9); /* Request hard reset */ outb(cf9|2, 0xcf9); /* Request hard reset */
udelay(50); udelay(50);
outb(cf9|6, 0xcf9); /* Actually do the reset */ /* Actually do the reset */
outb(cf9|reboot_code, 0xcf9);
udelay(50); udelay(50);
} }
reboot_type = BOOT_KBD; reboot_type = BOOT_KBD;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment