diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-02-25 17:02:33 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-02-25 17:02:33 -0500 |
| commit | 958ede7f1b72b29cd0d29ec88ee2bcb4c87dab61 (patch) | |
| tree | 31098a5fd8cb6b59f20d56557551881dfe8a410c | |
| parent | d40358509ee862d7e4049187bc05eba1911a2959 (diff) | |
| parent | 7f74f8f28a2bd9db9404f7d364e2097a0c42cc12 (diff) | |
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
| -rw-r--r-- | arch/x86/include/asm/acpi.h | 1 | ||||
| -rw-r--r-- | arch/x86/kernel/acpi/boot.c | 14 | ||||
| -rw-r--r-- | arch/x86/kernel/apb_timer.c | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/early-quirks.c | 16 | ||||
| -rw-r--r-- | arch/x86/kernel/reboot.c | 8 |
5 files changed, 27 insertions, 14 deletions
diff --git a/arch/x86/include/asm/acpi.h b/arch/x86/include/asm/acpi.h index 211ca3f7fd16..4ea15ca89b2b 100644 --- a/arch/x86/include/asm/acpi.h +++ b/arch/x86/include/asm/acpi.h | |||
| @@ -88,6 +88,7 @@ extern int acpi_disabled; | |||
| 88 | extern int acpi_pci_disabled; | 88 | extern int acpi_pci_disabled; |
| 89 | extern int acpi_skip_timer_override; | 89 | extern int acpi_skip_timer_override; |
| 90 | extern int acpi_use_timer_override; | 90 | extern int acpi_use_timer_override; |
| 91 | extern int acpi_fix_pin2_polarity; | ||
| 91 | 92 | ||
| 92 | extern u8 acpi_sci_flags; | 93 | extern u8 acpi_sci_flags; |
| 93 | extern int acpi_sci_override_gsi; | 94 | extern int acpi_sci_override_gsi; |
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index b3a71137983a..3e6e2d68f761 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c | |||
| @@ -72,6 +72,7 @@ u8 acpi_sci_flags __initdata; | |||
| 72 | int acpi_sci_override_gsi __initdata; | 72 | int acpi_sci_override_gsi __initdata; |
| 73 | int acpi_skip_timer_override __initdata; | 73 | int acpi_skip_timer_override __initdata; |
| 74 | int acpi_use_timer_override __initdata; | 74 | int acpi_use_timer_override __initdata; |
| 75 | int acpi_fix_pin2_polarity __initdata; | ||
| 75 | 76 | ||
| 76 | #ifdef CONFIG_X86_LOCAL_APIC | 77 | #ifdef CONFIG_X86_LOCAL_APIC |
| 77 | static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE; | 78 | 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 | return 0; | 416 | return 0; |
| 416 | } | 417 | } |
| 417 | 418 | ||
| 418 | if (acpi_skip_timer_override && | 419 | if (intsrc->source_irq == 0 && intsrc->global_irq == 2) { |
| 419 | intsrc->source_irq == 0 && intsrc->global_irq == 2) { | 420 | if (acpi_skip_timer_override) { |
| 420 | printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n"); | 421 | printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n"); |
| 421 | return 0; | 422 | return 0; |
| 423 | } | ||
| 424 | if (acpi_fix_pin2_polarity && (intsrc->inti_flags & ACPI_MADT_POLARITY_MASK)) { | ||
| 425 | intsrc->inti_flags &= ~ACPI_MADT_POLARITY_MASK; | ||
| 426 | printk(PREFIX "BIOS IRQ0 pin2 override: forcing polarity to high active.\n"); | ||
| 427 | } | ||
| 422 | } | 428 | } |
| 423 | 429 | ||
| 424 | mp_override_legacy_irq(intsrc->source_irq, | 430 | mp_override_legacy_irq(intsrc->source_irq, |
diff --git a/arch/x86/kernel/apb_timer.c b/arch/x86/kernel/apb_timer.c index 51ef31a89be9..51d4e1663066 100644 --- a/arch/x86/kernel/apb_timer.c +++ b/arch/x86/kernel/apb_timer.c | |||
| @@ -284,7 +284,7 @@ static int __init apbt_clockevent_register(void) | |||
| 284 | memcpy(&adev->evt, &apbt_clockevent, sizeof(struct clock_event_device)); | 284 | memcpy(&adev->evt, &apbt_clockevent, sizeof(struct clock_event_device)); |
| 285 | 285 | ||
| 286 | if (mrst_timer_options == MRST_TIMER_LAPIC_APBT) { | 286 | if (mrst_timer_options == MRST_TIMER_LAPIC_APBT) { |
| 287 | apbt_clockevent.rating = APBT_CLOCKEVENT_RATING - 100; | 287 | adev->evt.rating = APBT_CLOCKEVENT_RATING - 100; |
| 288 | global_clock_event = &adev->evt; | 288 | global_clock_event = &adev->evt; |
| 289 | printk(KERN_DEBUG "%s clockevent registered as global\n", | 289 | printk(KERN_DEBUG "%s clockevent registered as global\n", |
| 290 | global_clock_event->name); | 290 | global_clock_event->name); |
diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c index 76b8cd953dee..9efbdcc56425 100644 --- a/arch/x86/kernel/early-quirks.c +++ b/arch/x86/kernel/early-quirks.c | |||
| @@ -143,15 +143,10 @@ static void __init ati_bugs(int num, int slot, int func) | |||
| 143 | 143 | ||
| 144 | static u32 __init ati_sbx00_rev(int num, int slot, int func) | 144 | static u32 __init ati_sbx00_rev(int num, int slot, int func) |
| 145 | { | 145 | { |
| 146 | u32 old, d; | 146 | u32 d; |
| 147 | 147 | ||
| 148 | d = read_pci_config(num, slot, func, 0x70); | ||
| 149 | old = d; | ||
| 150 | d &= ~(1<<8); | ||
| 151 | write_pci_config(num, slot, func, 0x70, d); | ||
| 152 | d = read_pci_config(num, slot, func, 0x8); | 148 | d = read_pci_config(num, slot, func, 0x8); |
| 153 | d &= 0xff; | 149 | d &= 0xff; |
| 154 | write_pci_config(num, slot, func, 0x70, old); | ||
| 155 | 150 | ||
| 156 | return d; | 151 | return d; |
| 157 | } | 152 | } |
| @@ -160,13 +155,16 @@ static void __init ati_bugs_contd(int num, int slot, int func) | |||
| 160 | { | 155 | { |
| 161 | u32 d, rev; | 156 | u32 d, rev; |
| 162 | 157 | ||
| 163 | if (acpi_use_timer_override) | ||
| 164 | return; | ||
| 165 | |||
| 166 | rev = ati_sbx00_rev(num, slot, func); | 158 | rev = ati_sbx00_rev(num, slot, func); |
| 159 | if (rev >= 0x40) | ||
| 160 | acpi_fix_pin2_polarity = 1; | ||
| 161 | |||
| 167 | if (rev > 0x13) | 162 | if (rev > 0x13) |
| 168 | return; | 163 | return; |
| 169 | 164 | ||
| 165 | if (acpi_use_timer_override) | ||
| 166 | return; | ||
| 167 | |||
| 170 | /* check for IRQ0 interrupt swap */ | 168 | /* check for IRQ0 interrupt swap */ |
| 171 | d = read_pci_config(num, slot, func, 0x64); | 169 | d = read_pci_config(num, slot, func, 0x64); |
| 172 | if (!(d & (1<<14))) | 170 | if (!(d & (1<<14))) |
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index fc7aae1e2bc7..715037caeb43 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c | |||
| @@ -285,6 +285,14 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = { | |||
| 285 | DMI_MATCH(DMI_BOARD_NAME, "P4S800"), | 285 | DMI_MATCH(DMI_BOARD_NAME, "P4S800"), |
| 286 | }, | 286 | }, |
| 287 | }, | 287 | }, |
| 288 | { /* Handle problems with rebooting on VersaLogic Menlow boards */ | ||
| 289 | .callback = set_bios_reboot, | ||
| 290 | .ident = "VersaLogic Menlow based board", | ||
| 291 | .matches = { | ||
| 292 | DMI_MATCH(DMI_BOARD_VENDOR, "VersaLogic Corporation"), | ||
| 293 | DMI_MATCH(DMI_BOARD_NAME, "VersaLogic Menlow board"), | ||
| 294 | }, | ||
| 295 | }, | ||
| 288 | { } | 296 | { } |
| 289 | }; | 297 | }; |
| 290 | 298 | ||
