nForce3 (Compaq R3000) timer fix
Jung-uk Kim
jkim at niksun.com
Wed Jan 26 08:49:16 PST 2005
This is (hopefully) the last patch of the series, which fixes infamous
'8254 timer not connected to IO-APIC' problem for nForce2+. Linux
people had a hack here:
http://lkml.org/lkml/2003/12/21/7
(Note: 2.6.10 has more refined version.)
The attached patch requires the previous 'skip_timer_override' hack
posted here:
http://docs.freebsd.org/cgi/mid.cgi?200501192214.27401.jkim
After the patch, you need to set 'hw.apic.skip_set_extint=1' from
loader or loader.conf. Be careful with spelling; this is 'apic', not
'acpi' this time. ;-)
With verbose boot logging, we should see:
ioapic0: intpin 0 -> ISA IRQ 0 (edge, high)
instead of:
ioapic0: Routing external 8259A's -> intpin 0
ioapic0: intpin 0 -> ExtINT (edge, high)
I was able to run this laptop overnight without 'device atpic'. ;-) I
think somebody (jhb and peter, I guess) should double check if this
is okay. I tried many combinations including 'options SMP' and all
seemed to be fine so far.
Finally I can run this laptop at full speed (2 GHz) under heavy load
with 'acpi_ppc' driver!
http://www.spa.is.uec.ac.jp/~nfukuda/software/
Enjoy,
Jung-uk Kim
-------------- next part --------------
--- src/sys/amd64/amd64/io_apic.c.orig Fri Oct 8 01:21:14 2004
+++ src/sys/amd64/amd64/io_apic.c Tue Jan 25 21:49:50 2005
@@ -148,6 +148,9 @@
#endif
TUNABLE_INT("hw.apic.mixed_mode", &mixed_mode_active);
+static int skip_set_extint = 0;
+TUNABLE_INT("hw.apic.skip_set_extint", &skip_set_extint);
+
static __inline void
_ioapic_eoi_source(struct intsrc *isrc)
{
@@ -551,7 +554,7 @@
* and that pins 1-15 are ISA interrupts. Assume that all
* other pins are PCI interrupts.
*/
- if (intpin->io_vector == 0)
+ if (intpin->io_vector == 0 && skip_set_extint != 1)
ioapic_set_extint(io, i);
else if (intpin->io_vector < IOAPIC_ISA_INTS) {
intpin->io_bus = APIC_BUS_ISA;
More information about the freebsd-amd64
mailing list