diff options
Diffstat (limited to 'arch/x86_64/kernel/io_apic.c')
-rw-r--r-- | arch/x86_64/kernel/io_apic.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c index 961b519bda56..522944a000ad 100644 --- a/arch/x86_64/kernel/io_apic.c +++ b/arch/x86_64/kernel/io_apic.c | |||
@@ -44,6 +44,8 @@ int sis_apic_bug; /* not actually supported, dummy for compile */ | |||
44 | 44 | ||
45 | static int no_timer_check; | 45 | static int no_timer_check; |
46 | 46 | ||
47 | int disable_timer_pin_1 __initdata; | ||
48 | |||
47 | static DEFINE_SPINLOCK(ioapic_lock); | 49 | static DEFINE_SPINLOCK(ioapic_lock); |
48 | 50 | ||
49 | /* | 51 | /* |
@@ -297,6 +299,15 @@ void __init check_ioapic(void) | |||
297 | #endif | 299 | #endif |
298 | /* RED-PEN skip them on mptables too? */ | 300 | /* RED-PEN skip them on mptables too? */ |
299 | return; | 301 | return; |
302 | case PCI_VENDOR_ID_ATI: | ||
303 | /* All timer interrupts on atiixp | ||
304 | are doubled. Disable one. */ | ||
305 | if (disable_timer_pin_1 == 0) { | ||
306 | disable_timer_pin_1 = 1; | ||
307 | printk(KERN_INFO | ||
308 | "ATI board detected. Disabling timer pin 1.\n"); | ||
309 | } | ||
310 | return; | ||
300 | } | 311 | } |
301 | 312 | ||
302 | /* No multi-function device? */ | 313 | /* No multi-function device? */ |
@@ -1658,6 +1669,8 @@ static inline void check_timer(void) | |||
1658 | setup_nmi(); | 1669 | setup_nmi(); |
1659 | enable_8259A_irq(0); | 1670 | enable_8259A_irq(0); |
1660 | } | 1671 | } |
1672 | if (disable_timer_pin_1 > 0) | ||
1673 | clear_IO_APIC_pin(0, pin1); | ||
1661 | return; | 1674 | return; |
1662 | } | 1675 | } |
1663 | clear_IO_APIC_pin(0, pin1); | 1676 | clear_IO_APIC_pin(0, pin1); |