Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: x86 quirk: Fix polarity for IRQ0 pin2 override on SB800 systems x86/mrst: Fix apb timer rating when lapic timer is used x86: Fix reboot problem on VersaLogic Menlow boards
This commit is contained in:
Коммит
958ede7f1b
|
@ -88,6 +88,7 @@ extern int acpi_disabled;
|
||||||
extern int acpi_pci_disabled;
|
extern int acpi_pci_disabled;
|
||||||
extern int acpi_skip_timer_override;
|
extern int acpi_skip_timer_override;
|
||||||
extern int acpi_use_timer_override;
|
extern int acpi_use_timer_override;
|
||||||
|
extern int acpi_fix_pin2_polarity;
|
||||||
|
|
||||||
extern u8 acpi_sci_flags;
|
extern u8 acpi_sci_flags;
|
||||||
extern int acpi_sci_override_gsi;
|
extern int acpi_sci_override_gsi;
|
||||||
|
|
|
@ -72,6 +72,7 @@ u8 acpi_sci_flags __initdata;
|
||||||
int acpi_sci_override_gsi __initdata;
|
int acpi_sci_override_gsi __initdata;
|
||||||
int acpi_skip_timer_override __initdata;
|
int acpi_skip_timer_override __initdata;
|
||||||
int acpi_use_timer_override __initdata;
|
int acpi_use_timer_override __initdata;
|
||||||
|
int acpi_fix_pin2_polarity __initdata;
|
||||||
|
|
||||||
#ifdef CONFIG_X86_LOCAL_APIC
|
#ifdef CONFIG_X86_LOCAL_APIC
|
||||||
static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE;
|
static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE;
|
||||||
|
@ -415,10 +416,15 @@ acpi_parse_int_src_ovr(struct acpi_subtable_header * header,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (acpi_skip_timer_override &&
|
if (intsrc->source_irq == 0 && intsrc->global_irq == 2) {
|
||||||
intsrc->source_irq == 0 && intsrc->global_irq == 2) {
|
if (acpi_skip_timer_override) {
|
||||||
printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n");
|
printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
if (acpi_fix_pin2_polarity && (intsrc->inti_flags & ACPI_MADT_POLARITY_MASK)) {
|
||||||
|
intsrc->inti_flags &= ~ACPI_MADT_POLARITY_MASK;
|
||||||
|
printk(PREFIX "BIOS IRQ0 pin2 override: forcing polarity to high active.\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_override_legacy_irq(intsrc->source_irq,
|
mp_override_legacy_irq(intsrc->source_irq,
|
||||||
|
|
|
@ -284,7 +284,7 @@ static int __init apbt_clockevent_register(void)
|
||||||
memcpy(&adev->evt, &apbt_clockevent, sizeof(struct clock_event_device));
|
memcpy(&adev->evt, &apbt_clockevent, sizeof(struct clock_event_device));
|
||||||
|
|
||||||
if (mrst_timer_options == MRST_TIMER_LAPIC_APBT) {
|
if (mrst_timer_options == MRST_TIMER_LAPIC_APBT) {
|
||||||
apbt_clockevent.rating = APBT_CLOCKEVENT_RATING - 100;
|
adev->evt.rating = APBT_CLOCKEVENT_RATING - 100;
|
||||||
global_clock_event = &adev->evt;
|
global_clock_event = &adev->evt;
|
||||||
printk(KERN_DEBUG "%s clockevent registered as global\n",
|
printk(KERN_DEBUG "%s clockevent registered as global\n",
|
||||||
global_clock_event->name);
|
global_clock_event->name);
|
||||||
|
|
|
@ -143,15 +143,10 @@ static void __init ati_bugs(int num, int slot, int func)
|
||||||
|
|
||||||
static u32 __init ati_sbx00_rev(int num, int slot, int func)
|
static u32 __init ati_sbx00_rev(int num, int slot, int func)
|
||||||
{
|
{
|
||||||
u32 old, d;
|
u32 d;
|
||||||
|
|
||||||
d = read_pci_config(num, slot, func, 0x70);
|
|
||||||
old = d;
|
|
||||||
d &= ~(1<<8);
|
|
||||||
write_pci_config(num, slot, func, 0x70, d);
|
|
||||||
d = read_pci_config(num, slot, func, 0x8);
|
d = read_pci_config(num, slot, func, 0x8);
|
||||||
d &= 0xff;
|
d &= 0xff;
|
||||||
write_pci_config(num, slot, func, 0x70, old);
|
|
||||||
|
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
@ -160,11 +155,14 @@ static void __init ati_bugs_contd(int num, int slot, int func)
|
||||||
{
|
{
|
||||||
u32 d, rev;
|
u32 d, rev;
|
||||||
|
|
||||||
if (acpi_use_timer_override)
|
rev = ati_sbx00_rev(num, slot, func);
|
||||||
|
if (rev >= 0x40)
|
||||||
|
acpi_fix_pin2_polarity = 1;
|
||||||
|
|
||||||
|
if (rev > 0x13)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
rev = ati_sbx00_rev(num, slot, func);
|
if (acpi_use_timer_override)
|
||||||
if (rev > 0x13)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* check for IRQ0 interrupt swap */
|
/* check for IRQ0 interrupt swap */
|
||||||
|
|
|
@ -285,6 +285,14 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {
|
||||||
DMI_MATCH(DMI_BOARD_NAME, "P4S800"),
|
DMI_MATCH(DMI_BOARD_NAME, "P4S800"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{ /* Handle problems with rebooting on VersaLogic Menlow boards */
|
||||||
|
.callback = set_bios_reboot,
|
||||||
|
.ident = "VersaLogic Menlow based board",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_BOARD_VENDOR, "VersaLogic Corporation"),
|
||||||
|
DMI_MATCH(DMI_BOARD_NAME, "VersaLogic Menlow board"),
|
||||||
|
},
|
||||||
|
},
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче