IO-APIC and 2.1.123/2.1.124pre1

Eastep, Tom (eastep@loc1.tandem.com)
Wed, 30 Sep 1998 15:24:12 -0700


I've been unable to boot 2.1.123 or 2.1.124pre1 unless I use the 2.1.122 version
of arch/i386/kernel/io_apic.c and there have been several other reports of this
type of problem on linux-kernel.

I now have some additional information.

Under 2.1.122, I see the following during boot:

ENABLING IO-APIC IRQs
init IO_APIC IRQs
IO-APIC pin 0broken BIOS, changing pin 10 to edge
broken BIOS, changing pin 11 to edge
broken BIOS, changing pin 15 to edge
not connected.
number of MP IRQ sources: 15.
number of IO-APIC registers: 16.
testing the IO APIC.......................
.... register #00: 00000000
....... : physical APIC id: 00
.... register #01: 000F0011
....... : max redirection entries: 000F
....... [IO-APIC cannot route PCI PIRQ 0-3]
....... : IO APIC version: 0011
.... register #02: 00000000
....... : arbitration: 00
.... IRQ redirection table:
NR Log Phy Mask Trig IRR Pol Stat Dest Deli Vect:
00 000 00 1 0 0 0 0 0 0 00
01 000 00 0 0 0 0 0 1 1 59
02 0FF 0F 0 0 0 0 0 1 1 51
03 000 00 0 0 0 0 0 1 1 61
04 000 00 0 0 0 0 0 1 1 69
05 000 00 0 0 0 0 0 1 1 71
06 000 00 0 0 0 0 0 1 1 79
07 000 00 0 0 0 0 0 1 1 81
08 000 00 0 0 0 0 0 1 1 89
09 000 00 0 0 0 0 0 1 1 91
0a 000 00 0 0 0 0 0 1 1 99
0b 000 00 0 0 0 0 0 1 1 A1
0c 000 00 0 0 0 0 0 1 1 A9
0d 000 00 1 0 0 0 0 0 0 00
0e 000 00 0 0 0 0 0 1 1 B1
0f 000 00 0 0 0 0 0 1 1 B9

In particular, notice that irqs 10,11 and 15 are reported with broken bios.
These irqs correspond to my three PCI cards:

[eastep@hozomeen eastep]$ cat /proc/interrupts
CPU0 CPU1
0: 15839 22265 IO-APIC-edge timer
1: 234 358 IO-APIC-edge keyboard
2: 0 0 XT-PIC cascade
5: 110 184 IO-APIC-edge soundblaster
7: 0 0 IO-APIC-edge parport0
10: 2833 3061 IO-APIC-edge aic7xxx
11: 13 17 IO-APIC-edge HP J2585A
12: 3345 4990 IO-APIC-edge PS/2 Mouse
13: 1 0 XT-PIC fpu
15: 74 128 IO-APIC-edge Intel EtherExpress Pro 10/100 Ethern
et
NMI: 0
IPI: 0

With 2.1.123, I do not see the broken BIOS messages but the IRQ redirection
table looks as follows (hope this is correct as it flys by rather quickly):

NR Log Phy Mask Trig IRR Pol Stat Dest Deli Vect:
00 000 00 1 0 0 0 0 0 0 00
01 000 00 0 0 0 0 0 1 1 59
02 0FF 0F 0 0 0 0 0 1 1 51
03 000 00 0 0 0 0 0 1 1 61
04 000 00 0 0 0 0 0 1 1 69
05 000 00 0 0 0 0 0 1 1 71
06 000 00 0 0 0 0 0 1 1 79
07 000 00 0 0 0 0 0 1 1 81
08 000 00 0 0 0 0 0 1 1 89
09 000 00 0 0 0 0 0 1 1 91
0a 0FF 0F 1 1 0 1 0 1 1 99
0b 0FF 0F 1 1 0 1 0 1 1 A1
0c 000 00 0 0 0 0 0 1 1 A9
0d 000 00 1 0 0 0 0 0 0 00
0e 000 00 0 0 0 0 0 1 1 B1
0f 0FF 0F 1 1 0 1 0 1 1 B9

Since irq 10 is disabled (mask = 1), the aic7880 repeatedly times out during
unit detection.

I've discovered that the following patch will cause 2.1.124pre1 to work like
2.1.122:

--- linux/arch/i386/kernel/orig.io_apic.c Wed Sep 30 15:01:38 1998
+++ linux/arch/i386/kernel/io_apic.c Wed Sep 30 15:02:06 1998
@@ -351,7 +351,7 @@
{
case MP_BUS_ISA: /* ISA pin */
{
- polarity = default_ISA_polarity(idx);
+ polarity = 0;
break;
}
case MP_BUS_PCI: /* PCI pin */

Again, the hardware is:

HP Vectra XU 6/150 (dual ppro 150, KX chipset)

Hope this helps...

-Tom

-- 
Tom Eastep	
COMPAQ Computer Corporation
Enterprise Computing Group
Tandem Division
tom.eastep@compaq.com

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/