mirror of https://gitee.com/openkylin/linux.git
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
16c21ae5ca
("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
This commit is contained in:
commit
986189f9ec
|
@ -61,7 +61,7 @@ static int __init set_bios_reboot(const struct dmi_system_id *d)
|
|||
if (reboot_type != BOOT_BIOS) {
|
||||
reboot_type = BOOT_BIOS;
|
||||
pr_info("%s series board detected. Selecting %s-method for reboots.\n",
|
||||
"BIOS", d->ident);
|
||||
d->ident, "BIOS");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -117,7 +117,7 @@ static int __init set_pci_reboot(const struct dmi_system_id *d)
|
|||
if (reboot_type != BOOT_CF9) {
|
||||
reboot_type = BOOT_CF9;
|
||||
pr_info("%s series board detected. Selecting %s-method for reboots.\n",
|
||||
"PCI", d->ident);
|
||||
d->ident, "PCI");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -127,7 +127,7 @@ static int __init set_kbd_reboot(const struct dmi_system_id *d)
|
|||
if (reboot_type != BOOT_KBD) {
|
||||
reboot_type = BOOT_KBD;
|
||||
pr_info("%s series board detected. Selecting %s-method for reboot.\n",
|
||||
"KBD", d->ident);
|
||||
d->ident, "KBD");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -136,148 +136,8 @@ static int __init set_kbd_reboot(const struct dmi_system_id *d)
|
|||
* This is a single dmi_table handling all reboot quirks.
|
||||
*/
|
||||
static struct dmi_system_id __initdata reboot_dmi_table[] = {
|
||||
{ /* Handle problems with rebooting on Dell E520's */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell E520",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell DM061"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell 1300's */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell PowerEdge 1300",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 1300/"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell 300's */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell PowerEdge 300",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 300/"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell Optiplex 745's SFF */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell OptiPlex 745",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell Optiplex 745's DFF */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell OptiPlex 745",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "0MM599"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell Optiplex 745 with 0KW626 */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell OptiPlex 745",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "0KW626"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell Optiplex 330 with 0KP561 */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell OptiPlex 330",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 330"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "0KP561"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell Optiplex 360 with 0T656F */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell OptiPlex 360",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 360"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "0T656F"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell OptiPlex 760 with 0G919G */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell OptiPlex 760",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 760"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "0G919G"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell 2400's */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell PowerEdge 2400",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 2400"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell T5400's */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell Precision T5400",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T5400"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell T7400's */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell Precision T7400",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T7400"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on HP laptops */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "HP Compaq Laptop",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell XPS710 */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell XPS710",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell XPS710"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell DXP061 */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell DXP061",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell DXP061"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Sony VGN-Z540N */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Sony VGN-Z540N",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "VGN-Z540N"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on ASUS P4S800 */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "ASUS P4S800",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "P4S800"),
|
||||
},
|
||||
},
|
||||
|
||||
/* Acer */
|
||||
{ /* Handle reboot issue on Acer Aspire one */
|
||||
.callback = set_kbd_reboot,
|
||||
.ident = "Acer Aspire One A110",
|
||||
|
@ -286,6 +146,8 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "AOA110"),
|
||||
},
|
||||
},
|
||||
|
||||
/* Apple */
|
||||
{ /* Handle problems with rebooting on Apple MacBook5 */
|
||||
.callback = set_pci_reboot,
|
||||
.ident = "Apple MacBook5",
|
||||
|
@ -318,12 +180,32 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "iMac9,1"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on the Latitude E6320. */
|
||||
.callback = set_pci_reboot,
|
||||
.ident = "Dell Latitude E6320",
|
||||
|
||||
/* ASUS */
|
||||
{ /* Handle problems with rebooting on ASUS P4S800 */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "ASUS P4S800",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "P4S800"),
|
||||
},
|
||||
},
|
||||
|
||||
/* Dell */
|
||||
{ /* Handle problems with rebooting on Dell DXP061 */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell DXP061",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6320"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell DXP061"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell E520's */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell E520",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell DM061"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on the Latitude E5410. */
|
||||
|
@ -342,6 +224,14 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E5420"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on the Latitude E6320. */
|
||||
.callback = set_pci_reboot,
|
||||
.ident = "Dell Latitude E6320",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6320"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on the Latitude E6420. */
|
||||
.callback = set_pci_reboot,
|
||||
.ident = "Dell Latitude E6420",
|
||||
|
@ -350,6 +240,59 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6420"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell Optiplex 330 with 0KP561 */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell OptiPlex 330",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 330"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "0KP561"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell Optiplex 360 with 0T656F */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell OptiPlex 360",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 360"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "0T656F"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell Optiplex 745's SFF */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell OptiPlex 745",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell Optiplex 745's DFF */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell OptiPlex 745",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "0MM599"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell Optiplex 745 with 0KW626 */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell OptiPlex 745",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 745"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "0KW626"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell OptiPlex 760 with 0G919G */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell OptiPlex 760",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 760"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "0G919G"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on the OptiPlex 990. */
|
||||
.callback = set_pci_reboot,
|
||||
.ident = "Dell OptiPlex 990",
|
||||
|
@ -358,6 +301,38 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 990"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell 300's */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell PowerEdge 300",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 300/"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell 1300's */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell PowerEdge 1300",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 1300/"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell 2400's */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell PowerEdge 2400",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 2400"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on the Dell PowerEdge C6100. */
|
||||
.callback = set_pci_reboot,
|
||||
.ident = "Dell PowerEdge C6100",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "C6100"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on the Precision M6600. */
|
||||
.callback = set_pci_reboot,
|
||||
.ident = "Dell Precision M6600",
|
||||
|
@ -366,22 +341,51 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "Precision M6600"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on the Dell PowerEdge C6100. */
|
||||
.callback = set_pci_reboot,
|
||||
.ident = "Dell PowerEdge C6100",
|
||||
{ /* Handle problems with rebooting on Dell T5400's */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell Precision T5400",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "C6100"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T5400"),
|
||||
},
|
||||
},
|
||||
{ /* Some C6100 machines were shipped with vendor being 'Dell'. */
|
||||
.callback = set_pci_reboot,
|
||||
.ident = "Dell PowerEdge C6100",
|
||||
{ /* Handle problems with rebooting on Dell T7400's */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell Precision T7400",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "C6100"),
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T7400"),
|
||||
},
|
||||
},
|
||||
{ /* Handle problems with rebooting on Dell XPS710 */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Dell XPS710",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell XPS710"),
|
||||
},
|
||||
},
|
||||
|
||||
/* Hewlett-Packard */
|
||||
{ /* Handle problems with rebooting on HP laptops */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "HP Compaq Laptop",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq"),
|
||||
},
|
||||
},
|
||||
|
||||
/* Sony */
|
||||
{ /* Handle problems with rebooting on Sony VGN-Z540N */
|
||||
.callback = set_bios_reboot,
|
||||
.ident = "Sony VGN-Z540N",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "VGN-Z540N"),
|
||||
},
|
||||
},
|
||||
|
||||
{ }
|
||||
};
|
||||
|
||||
|
@ -535,10 +539,13 @@ static void native_machine_emergency_restart(void)
|
|||
|
||||
case BOOT_CF9_COND:
|
||||
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 */
|
||||
udelay(50);
|
||||
outb(cf9|6, 0xcf9); /* Actually do the reset */
|
||||
/* Actually do the reset */
|
||||
outb(cf9|reboot_code, 0xcf9);
|
||||
udelay(50);
|
||||
}
|
||||
reboot_type = BOOT_KBD;
|
||||
|
|
Loading…
Reference in New Issue