Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2
xen
23795-intel-ich10-quirk.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 23795-intel-ich10-quirk.patch of Package xen
References: bnc#683580 # HG changeset patch # User Jan Beulich <jbeulich@novell.com> # Date 1314443678 -3600 # Node ID e17f70940d1f57fe04dde3bf4e243f75c89f0d0e # Parent 4705eca37c9fac9d13867a856bdcfa8b7bad56c6 x86: work around certain Intel BIOSes causing (transient) hangs during boot They apparently leave the USB legacy emulation bits set in ICH10's SMI Control and Enable register, but fail to handle the resulting SMIs gracefully. The hangs can apparently extend indefinitely, but are commonly observed to last between a few seconds and a minute. This assumes that only ICH10-based systems on Intel main boards with Intel BIOS may be affected. Until Intel comes up with a more precise identification of affected BIOSes, all Intel ones on Intel boards will get this workaround applied. Signed-off-by: Jan Beulich <jbeulich@novell.com> Index: xen-4.1.2-testing/xen/arch/x86/dmi_scan.c =================================================================== --- xen-4.1.2-testing.orig/xen/arch/x86/dmi_scan.c +++ xen-4.1.2-testing/xen/arch/x86/dmi_scan.c @@ -10,6 +10,8 @@ #include <asm/system.h> #include <xen/dmi.h> #include <xen/efi.h> +#include <xen/pci.h> +#include <xen/pci_regs.h> #define bt_ioremap(b,l) ((void *)__acpi_map_table(b,l)) #define bt_iounmap(b,l) ((void)0) @@ -278,6 +280,28 @@ static __init int broken_toshiba_keyboar return 0; } +static int __init ich10_bios_quirk(struct dmi_system_id *d) +{ + u32 port, smictl; + + if ( pci_conf_read16(0, 0x1f, 0, PCI_VENDOR_ID) != 0x8086 ) + return 0; + + switch ( pci_conf_read16(0, 0x1f, 0, PCI_DEVICE_ID) ) { + case 0x3a14: + case 0x3a16: + case 0x3a18: + case 0x3a1a: + port = (pci_conf_read16(0, 0x1f, 0, 0x40) & 0xff80) + 0x30; + smictl = inl(port); + /* turn off LEGACY_USB{,2}_EN if enabled */ + if ( smictl & 0x20008 ) + outl(smictl & ~0x20008, port); + break; + } + + return 0; +} #ifdef CONFIG_ACPI_SLEEP static __init int reset_videomode_after_s3(struct dmi_blacklist *d) @@ -363,6 +387,18 @@ static __initdata struct dmi_blacklist d } }, #endif + { ich10_bios_quirk, "Intel board & BIOS", + /* + * BIOS leaves legacy USB emulation enabled while + * SMM can't properly handle it. + */ + { + MATCH(DMI_BOARD_VENDOR, "Intel Corp"), + MATCH(DMI_BIOS_VENDOR, "Intel Corp"), + NO_MATCH, NO_MATCH + } + }, + #ifdef CONFIG_ACPI_BOOT /* * If your system is blacklisted here, but you find that acpi=force
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor