Commit 958ede7f authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'x86-fixes-for-linus' of...

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
parents d4035850 7f74f8f2
...@@ -88,6 +88,7 @@ extern int acpi_disabled; ...@@ -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; ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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,13 +155,16 @@ static void __init ati_bugs_contd(int num, int slot, int func) ...@@ -160,13 +155,16 @@ static void __init ati_bugs_contd(int num, int slot, int func)
{ {
u32 d, rev; u32 d, rev;
if (acpi_use_timer_override)
return;
rev = ati_sbx00_rev(num, slot, func); rev = ati_sbx00_rev(num, slot, func);
if (rev >= 0x40)
acpi_fix_pin2_polarity = 1;
if (rev > 0x13) if (rev > 0x13)
return; return;
if (acpi_use_timer_override)
return;
/* check for IRQ0 interrupt swap */ /* check for IRQ0 interrupt swap */
d = read_pci_config(num, slot, func, 0x64); d = read_pci_config(num, slot, func, 0x64);
if (!(d & (1<<14))) if (!(d & (1<<14)))
......
...@@ -285,6 +285,14 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = { ...@@ -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"),
},
},
{ } { }
}; };
......
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