Commit 955a9169 authored by Dave Jones's avatar Dave Jones Committed by Linus Torvalds

[PATCH] DMI updates.

- moves functions around to match where they are in 2.4
  (makes syncing easier)
- Adds some extra entries
parent 4e5cad0a
...@@ -273,6 +273,76 @@ static __init int apm_is_horked(struct dmi_blacklist *d) ...@@ -273,6 +273,76 @@ static __init int apm_is_horked(struct dmi_blacklist *d)
return 0; return 0;
} }
/*
* Some machines, usually laptops, can't handle an enabled local APIC.
* The symptoms include hangs or reboots when suspending or resuming,
* attaching or detaching the power cord, or entering BIOS setup screens
* through magic key sequences.
*/
static int __init local_apic_kills_bios(struct dmi_blacklist *d)
{
#ifdef CONFIG_X86_LOCAL_APIC
extern int dont_enable_local_apic;
if (!dont_enable_local_apic) {
dont_enable_local_apic = 1;
printk(KERN_WARNING "%s with broken BIOS detected. "
"Refusing to enable the local APIC.\n",
d->ident);
}
#endif
return 0;
}
/*
* The Microstar 6163-2 (a.k.a Pro) mainboard will hang shortly after
* resumes, and also at what appears to be asynchronous APM events,
* if the local APIC is enabled.
*/
static int __init apm_kills_local_apic(struct dmi_blacklist *d)
{
#ifdef CONFIG_X86_LOCAL_APIC
extern int dont_enable_local_apic;
if (apm_info.bios.version && !dont_enable_local_apic) {
dont_enable_local_apic = 1;
printk(KERN_WARNING "%s with broken BIOS detected. "
"Refusing to enable the local APIC.\n",
d->ident);
}
#endif
return 0;
}
/*
* The Intel AL440LX mainboard will hang randomly if the local APIC
* timer is running and the APM BIOS hasn't been disabled.
*/
static int __init apm_kills_local_apic_timer(struct dmi_blacklist *d)
{
#ifdef CONFIG_X86_LOCAL_APIC
extern int dont_use_local_apic_timer;
if (apm_info.bios.version && !dont_use_local_apic_timer) {
dont_use_local_apic_timer = 1;
printk(KERN_WARNING "%s with broken BIOS detected. "
"The local APIC timer will not be used.\n",
d->ident);
}
#endif
return 0;
}
/*
* Don't access SMBus on IBM systems which get corrupted eeproms
*/
static __init int disable_smbus(struct dmi_blacklist *d)
{
if (is_unsafe_smbus == 0) {
is_unsafe_smbus = 1;
printk(KERN_INFO "%s machine detected. Disabling SMBus accesses.\n", d->ident);
}
return 0;
}
/* /*
* Work around broken HP Pavilion Notebooks which assign USB to * Work around broken HP Pavilion Notebooks which assign USB to
* IRQ 9 even though it is actually wired to IRQ 11 * IRQ 9 even though it is actually wired to IRQ 11
...@@ -350,6 +420,7 @@ static __init int swab_apm_power_in_minutes(struct dmi_blacklist *d) ...@@ -350,6 +420,7 @@ static __init int swab_apm_power_in_minutes(struct dmi_blacklist *d)
* The MP1.4 table is right however and so SMP kernels tend to work. * The MP1.4 table is right however and so SMP kernels tend to work.
*/ */
extern int skip_ioapic_setup;
static __init int broken_pirq(struct dmi_blacklist *d) static __init int broken_pirq(struct dmi_blacklist *d)
{ {
printk(KERN_INFO " *** Possibly defective BIOS detected (irqtable)\n"); printk(KERN_INFO " *** Possibly defective BIOS detected (irqtable)\n");
...@@ -357,6 +428,9 @@ static __init int broken_pirq(struct dmi_blacklist *d) ...@@ -357,6 +428,9 @@ static __init int broken_pirq(struct dmi_blacklist *d)
printk(KERN_INFO " *** If you see IRQ problems, in paticular SCSI resets and hangs at boot\n"); printk(KERN_INFO " *** If you see IRQ problems, in paticular SCSI resets and hangs at boot\n");
printk(KERN_INFO " *** contact your hardware vendor and ask about updates.\n"); printk(KERN_INFO " *** contact your hardware vendor and ask about updates.\n");
printk(KERN_INFO " *** Building an SMP kernel may evade the bug some of the time.\n"); printk(KERN_INFO " *** Building an SMP kernel may evade the bug some of the time.\n");
#ifdef CONFIG_X86_IO_APIC
skip_ioapic_setup = 0;
#endif
return 0; return 0;
} }
...@@ -403,75 +477,6 @@ static __init int broken_ps2_resume(struct dmi_blacklist *d) ...@@ -403,75 +477,6 @@ static __init int broken_ps2_resume(struct dmi_blacklist *d)
return 0; return 0;
} }
/*
* Some machines, usually laptops, can't handle an enabled local APIC.
* The symptoms include hangs or reboots when suspending or resuming,
* attaching or detaching the power cord, or entering BIOS setup screens
* through magic key sequences.
*/
static int __init local_apic_kills_bios(struct dmi_blacklist *d)
{
#ifdef CONFIG_X86_LOCAL_APIC
extern int dont_enable_local_apic;
if (!dont_enable_local_apic) {
dont_enable_local_apic = 1;
printk(KERN_WARNING "%s with broken BIOS detected. "
"Refusing to enable the local APIC.\n",
d->ident);
}
#endif
return 0;
}
/*
* The Microstar 6163-2 (a.k.a Pro) mainboard will hang shortly after
* resumes, and also at what appears to be asynchronous APM events,
* if the local APIC is enabled.
*/
static int __init apm_kills_local_apic(struct dmi_blacklist *d)
{
#ifdef CONFIG_X86_LOCAL_APIC
extern int dont_enable_local_apic;
if (apm_info.bios.version && !dont_enable_local_apic) {
dont_enable_local_apic = 1;
printk(KERN_WARNING "%s with broken BIOS detected. "
"Refusing to enable the local APIC.\n",
d->ident);
}
#endif
return 0;
}
/*
* The Intel AL440LX mainboard will hang randomly if the local APIC
* timer is running and the APM BIOS hasn't been disabled.
*/
static int __init apm_kills_local_apic_timer(struct dmi_blacklist *d)
{
#ifdef CONFIG_X86_LOCAL_APIC
extern int dont_use_local_apic_timer;
if (apm_info.bios.version && !dont_use_local_apic_timer) {
dont_use_local_apic_timer = 1;
printk(KERN_WARNING "%s with broken BIOS detected. "
"The local APIC timer will not be used.\n",
d->ident);
}
#endif
return 0;
}
/*
* Don't access SMBus on IBM systems which get corrupted eeproms
*/
static __init int disable_smbus(struct dmi_blacklist *d)
{
if (is_unsafe_smbus == 0) {
is_unsafe_smbus = 1;
printk(KERN_INFO "%s machine detected. Disabling SMBus accesses.\n", d->ident);
}
return 0;
}
/* /*
* Simple "print if true" callback * Simple "print if true" callback
...@@ -555,6 +560,17 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={ ...@@ -555,6 +560,17 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
MATCH(DMI_BIOS_VERSION, "Version1.01"), MATCH(DMI_BIOS_VERSION, "Version1.01"),
NO_MATCH, NO_MATCH, NO_MATCH, NO_MATCH,
} }, } },
{ apm_is_horked, "Intel D850MD", { /* APM crashes */
MATCH(DMI_BIOS_VENDOR, "Intel Corp."),
MATCH(DMI_BIOS_VERSION, "MV85010A.86A.0016.P07.0201251536"),
NO_MATCH, NO_MATCH,
} },
{ apm_is_horked, "Dell XPS-Z", { /* APM crashes */
MATCH(DMI_BIOS_VENDOR, "Intel Corp."),
MATCH(DMI_BIOS_VERSION, "A11"),
MATCH(DMI_PRODUCT_NAME, "XPS-Z"),
NO_MATCH,
} },
{ apm_is_horked, "Sharp PC-PJ/AX", { /* APM crashes */ { apm_is_horked, "Sharp PC-PJ/AX", { /* APM crashes */
MATCH(DMI_SYS_VENDOR, "SHARP"), MATCH(DMI_SYS_VENDOR, "SHARP"),
MATCH(DMI_PRODUCT_NAME, "PC-PJ/AX"), MATCH(DMI_PRODUCT_NAME, "PC-PJ/AX"),
...@@ -637,12 +653,19 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={ ...@@ -637,12 +653,19 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
MATCH(DMI_BIOS_VERSION, "R0208P1"), MATCH(DMI_BIOS_VERSION, "R0208P1"),
MATCH(DMI_BIOS_DATE, "11/09/00"), NO_MATCH MATCH(DMI_BIOS_DATE, "11/09/00"), NO_MATCH
} }, } },
{ swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-C1VE */ { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-C1VE */
MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"), MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"),
MATCH(DMI_BIOS_VERSION, "R0204P1"), MATCH(DMI_BIOS_VERSION, "R0204P1"),
MATCH(DMI_BIOS_DATE, "09/12/00"), NO_MATCH MATCH(DMI_BIOS_DATE, "09/12/00"), NO_MATCH
} }, } },
{ swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-C1VE */
MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"),
MATCH(DMI_BIOS_VERSION, "WXPO1Z3"),
MATCH(DMI_BIOS_DATE, "10/26/01"), NO_MATCH
} },
/* Machines which have problems handling enabled local APICs */ /* Machines which have problems handling enabled local APICs */
{ local_apic_kills_bios, "Dell Inspiron", { { local_apic_kills_bios, "Dell Inspiron", {
......
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