diff options
Diffstat (limited to 'arch/i386')
-rw-r--r-- | arch/i386/kernel/acpi/earlyquirk.c | 7 | ||||
-rw-r--r-- | arch/i386/kernel/io_apic.c | 4 | ||||
-rw-r--r-- | arch/i386/kernel/setup.c | 5 |
3 files changed, 16 insertions, 0 deletions
diff --git a/arch/i386/kernel/acpi/earlyquirk.c b/arch/i386/kernel/acpi/earlyquirk.c index f1b9d2a46dab..087ecc67e9b3 100644 --- a/arch/i386/kernel/acpi/earlyquirk.c +++ b/arch/i386/kernel/acpi/earlyquirk.c | |||
@@ -15,6 +15,13 @@ static int __init check_bridge(int vendor, int device) | |||
15 | if (vendor == PCI_VENDOR_ID_NVIDIA) { | 15 | if (vendor == PCI_VENDOR_ID_NVIDIA) { |
16 | acpi_skip_timer_override = 1; | 16 | acpi_skip_timer_override = 1; |
17 | } | 17 | } |
18 | /* | ||
19 | * ATI IXP chipsets get double timer interrupts. | ||
20 | * For now just do this for all ATI chipsets. | ||
21 | * FIXME: this needs to be checked for the non ACPI case too. | ||
22 | */ | ||
23 | if (vendor == PCI_VENDOR_ID_ATI) | ||
24 | disable_timer_pin_1 = 1; | ||
18 | return 0; | 25 | return 0; |
19 | } | 26 | } |
20 | 27 | ||
diff --git a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c index 35d3ce26a544..378313b0cce9 100644 --- a/arch/i386/kernel/io_apic.c +++ b/arch/i386/kernel/io_apic.c | |||
@@ -60,6 +60,8 @@ int sis_apic_bug = -1; | |||
60 | */ | 60 | */ |
61 | int nr_ioapic_registers[MAX_IO_APICS]; | 61 | int nr_ioapic_registers[MAX_IO_APICS]; |
62 | 62 | ||
63 | int disable_timer_pin_1 __initdata; | ||
64 | |||
63 | /* | 65 | /* |
64 | * Rough estimation of how many shared IRQs there are, can | 66 | * Rough estimation of how many shared IRQs there are, can |
65 | * be changed anytime. | 67 | * be changed anytime. |
@@ -2211,6 +2213,8 @@ static inline void check_timer(void) | |||
2211 | setup_nmi(); | 2213 | setup_nmi(); |
2212 | enable_8259A_irq(0); | 2214 | enable_8259A_irq(0); |
2213 | } | 2215 | } |
2216 | if (disable_timer_pin_1 > 0) | ||
2217 | clear_IO_APIC_pin(0, pin1); | ||
2214 | return; | 2218 | return; |
2215 | } | 2219 | } |
2216 | clear_IO_APIC_pin(0, pin1); | 2220 | clear_IO_APIC_pin(0, pin1); |
diff --git a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c index f3d808451d25..dc39ca6a7eca 100644 --- a/arch/i386/kernel/setup.c +++ b/arch/i386/kernel/setup.c | |||
@@ -851,6 +851,11 @@ static void __init parse_cmdline_early (char ** cmdline_p) | |||
851 | #endif | 851 | #endif |
852 | 852 | ||
853 | #ifdef CONFIG_X86_LOCAL_APIC | 853 | #ifdef CONFIG_X86_LOCAL_APIC |
854 | if (!memcmp(from, "disable_timer_pin_1", 19)) | ||
855 | disable_timer_pin_1 = 1; | ||
856 | if (!memcmp(from, "enable_timer_pin_1", 18)) | ||
857 | disable_timer_pin_1 = -1; | ||
858 | |||
854 | /* disable IO-APIC */ | 859 | /* disable IO-APIC */ |
855 | else if (!memcmp(from, "noapic", 6)) | 860 | else if (!memcmp(from, "noapic", 6)) |
856 | disable_ioapic_setup(); | 861 | disable_ioapic_setup(); |