[PATCH] x86-64: Revert timer routing behaviour back to 2.6.16 state
authorAndi Kleen <ak@suse.de>
Sat, 21 Oct 2006 16:37:03 +0000 (18:37 +0200)
committerAndi Kleen <andi@basil.nowhere.org>
Sat, 21 Oct 2006 16:37:03 +0000 (18:37 +0200)
By default route the 8254 over the 8259 and only disable
it on ATI boards where this causes double timer interrupts.

This should unbreak some Nvidia boards where the timer doesn't
seem to tick of it isn't enabled in the 8259. At least one
VIA board also seemed to have a little trouble with the disabled
8259.

For 2.6.20 we'll try both dynamically without black listing, but I think
for .19 this is the safer approach because it has been already well tested
in earlier kernels. This also makes the x86-64 behaviour the same
as i386.

Command line options can change all this of course.

Signed-off-by: Andi Kleen <ak@suse.de>
arch/x86_64/kernel/early-quirks.c
arch/x86_64/kernel/io_apic.c
include/asm-x86_64/proto.h

index 208e38a372c107f0704dd16e77f56437c404f1e4..2b1245d8625849de6033eda814ed72b860faf232 100644 (file)
@@ -61,10 +61,11 @@ static void nvidia_bugs(void)
 
 static void ati_bugs(void)
 {
-#if 1 /* for testing */
-       printk("ATI board detected\n");
-#endif
-       /* No bugs right now */
+       if (timer_over_8254 == 1) {
+               timer_over_8254 = 0;
+               printk(KERN_INFO
+               "ATI board detected. Disabling timer routing over 8254.\n");
+       }
 }
 
 struct chipset {
index 8a9a357875b72d66a4ce0ddae14a5d347c973045..b000017e4b5da80f336588e321982217599cf848 100644 (file)
@@ -57,7 +57,7 @@ static int no_timer_check;
 
 static int disable_timer_pin_1 __initdata;
 
-int timer_over_8254 __initdata = 0;
+int timer_over_8254 __initdata = 1;
 
 /* Where if anywhere is the i8259 connect in external int mode */
 static struct { int pin, apic; } ioapic_i8259 = { -1, -1 };
index c181fef786e43adcd4b114fa9922aa6a725ff2b9..e72cfcdf53448d262ce0b549de267ae470f8ebe1 100644 (file)
@@ -122,6 +122,8 @@ extern int fix_aperture;
 extern int reboot_force;
 extern int notsc_setup(char *);
 
+extern int timer_over_8254;
+
 extern int gsi_irq_sharing(int gsi);
 
 extern void smp_local_timer_interrupt(void);