[LinuxBIOS] IRQ problem

Thomas Ekstrand thomas.ekstrand at gmail.com
Thu May 24 13:46:03 CEST 2007


Hi!

I have trouble getting some Interrupts. I have used getpir to create a
 irq_tables.c but I get a warning message during startup:
"Inconsistent IRQ routing table size (0xd0/0xc0)"

mainly it is the network interfaces that does not work. It feels like
i have missed a leap in the IRQ configuration. I have not yet been
able to understand the importance and use of the mptable.c for IRQ
configuration, is this my source of trouble?

I've attached some output when booted from linuxbios and the created
irq_tables.c in use.

linuxbios also fail to map the tg3 net interfaces through MSI which
the standard bios does, but it maps the intel net interfaces through
MSI... how come?


Thanks for any help!
/Thomas
-------------- next part --------------

cat /proc/interrupts 
           CPU0       CPU1
  0:     441647       3902    IO-APIC-edge  timer
  2:          0          0          XT-PIC  cascade
  4:        966          0    IO-APIC-edge  serial
  8:          0          0    IO-APIC-edge  rtc
 10:        629          0   IO-APIC-level  ehci_hcd:usb1
 14:          8          0    IO-APIC-edge  ide0
 15:          0          0   IO-APIC-level  libata
 50:          0          0   IO-APIC-level  eth0
 58:          0          0   IO-APIC-level  eth1
114:          0          0         PCI-MSI  eth2
122:          0          0         PCI-MSI  eth3
161:          0          0   IO-APIC-level  eth4
NMI:        483         77
LOC:     442107     444806
ERR:          0
MIS:          0
-------------- next part --------------

lspci 
00:01.0 Class : 0604 : 1166 : 0036 
00:02.0 Class : 0600 : 1166 : 0205 
00:02.1 Class : 0101 : 1166 : 0214 
00:02.2 Class : 0601 : 1166 : 0234 
00:02.3 Class : 0880 : 1166 : 0238 (rev 01)
00:02.4 Class : 0800 : 1166 : 0235 
00:02.5 Class : 0800 : 1166 : 0235 
00:02.6 Class : 0800 : 1166 : 0235 
00:03.0 Class : 0c03 : 1166 : 0223 (rev 01)
00:03.1 Class : 0c03 : 1166 : 0223 (rev 01)
00:03.2 Class : 0c03 : 1166 : 0223 (rev 01)
00:04.0 Class : 0200 : 8086 : 1209 (rev 10)
00:06.0 Class : 0604 : 1166 : 0130 (rev a3)
00:07.0 Class : 0604 : 1166 : 0130 (rev a3)
00:08.0 Class : 0604 : 1166 : 0132 (rev a3)
00:09.0 Class : 0604 : 1166 : 0132 (rev a3)
00:0a.0 Class : 0604 : 1166 : 0132 (rev a3)
00:0b.0 Class : 0604 : 1166 : 0132 (rev a3)
00:18.0 Class : 0600 : 1022 : 1100 
00:18.1 Class : 0600 : 1022 : 1101 
00:18.2 Class : 0600 : 1022 : 1102 
00:18.3 Class : 0600 : 1022 : 1103 
01:0d.0 Class : 0604 : 1166 : 0104 (rev c0)
01:0e.0 Class : 0104 : 1166 : 024a 
01:0e.1 Class : 0104 : 1166 : 024a 
04:04.0 Class : 0200 : 14e4 : 166a (rev 03)
04:04.1 Class : 0200 : 14e4 : 166a (rev 03)
07:00.0 Class : 0200 : 8086 : 105e (rev 06)
07:00.1 Class : 0200 : 8086 : 105e (rev 06)

-------------- next part --------------

lspci -v 
00:01.0 Class 0604: 1166:0036
        Flags: bus master, fast devsel, latency 64
        Bus: primary=00, secondary=01, subordinate=02, sec-latency=64
        I/O behind bridge: 00001000-00001fff
        Memory behind bridge: fc000000-fc0fffff
        Prefetchable memory behind bridge: 0000000088000000-0000000088000000
        Capabilities: [90] PCI-X bridge device
        Capabilities: [a0] HyperTransport: MSI Mapping
        Capabilities: [b0] HyperTransport: Slave or Primary Interface
        Capabilities: [d8] #0d [0000]

00:02.0 Class 0600: 1166:0205
        Subsystem: 161f:3050
        Flags: bus master, medium devsel, latency 64

00:02.1 Class 0101: 1166:0214 (prog-if 8a)
        Subsystem: 1166:0214
        Flags: medium devsel
        I/O ports at <ignored>
        I/O ports at <ignored>
        I/O ports at <ignored>
        I/O ports at <ignored>
        I/O ports at 3c70 [size=16]

00:02.2 Class 0601: 1166:0234
        Subsystem: 1166:0230
        Flags: bus master, medium devsel, latency 0

00:02.3 Class 0880: 1166:0238 (rev 01)
        Subsystem: 161f:3050
        Flags: medium devsel
        Memory at fc320000 (32-bit, non-prefetchable) [size=4K]

00:02.4 Class 0800: 1166:0235 (prog-if 20)
        Subsystem: 161f:3050
        Flags: bus master, medium devsel, latency 0
        Memory at fc321000 (32-bit, non-prefetchable) [size=4K]

00:02.5 Class 0800: 1166:0235 (prog-if 20)
        Subsystem: 161f:3050
        Flags: bus master, medium devsel, latency 0
        Memory at fc322000 (32-bit, non-prefetchable) [size=4K]

00:02.6 Class 0800: 1166:0235 (prog-if 20)
        Subsystem: 161f:3050
        Flags: bus master, medium devsel, latency 0
        Memory at fc323000 (32-bit, non-prefetchable) [size=4K]

00:03.0 Class 0c03: 1166:0223 (rev 01) (prog-if 10)
        Subsystem: 1166:0223
        Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 10
        Memory at fc324000 (32-bit, non-prefetchable) [size=4K]
        I/O ports at 3000 [size=256]
        Capabilities: [dc] Power Management version 2

00:03.1 Class 0c03: 1166:0223 (rev 01) (prog-if 10)
        Subsystem: 1166:0223
        Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 10
        Memory at fc325000 (32-bit, non-prefetchable) [size=4K]
        I/O ports at 3400 [size=256]
        Capabilities: [dc] Power Management version 2

00:03.2 Class 0c03: 1166:0223 (rev 01) (prog-if 20)
        Subsystem: 1166:0223
        Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 10
        Memory at fc326000 (32-bit, non-prefetchable) [size=4K]
        I/O ports at 3800 [size=256]
        Capabilities: [dc] Power Management version 2

00:04.0 Class 0200: 8086:1209 (rev 10)
        Subsystem: 14d0:1229
        Flags: bus master, medium devsel, latency 64, IRQ 161
        Memory at fc327000 (32-bit, non-prefetchable) [size=4K]
        I/O ports at 3c00 [size=64]
        Memory at fc300000 (32-bit, non-prefetchable) [size=128K]
        Capabilities: [dc] Power Management version 2

00:06.0 Class 0604: 1166:0130 (rev a3)
        Flags: bus master, fast devsel, latency 64
        Bus: primary=00, secondary=03, subordinate=03, sec-latency=64
        Capabilities: [90] PCI-X bridge device
        Capabilities: [a0] HyperTransport: MSI Mapping
        Capabilities: [b0] HyperTransport: Slave or Primary Interface

00:07.0 Class 0604: 1166:0130 (rev a3)
        Flags: bus master, fast devsel, latency 64
        Bus: primary=00, secondary=04, subordinate=04, sec-latency=64
        Memory behind bridge: fc100000-fc1fffff
        Capabilities: [90] PCI-X bridge device
        Capabilities: [a0] HyperTransport: MSI Mapping

00:08.0 Class 0604: 1166:0132 (rev a3)
        Flags: bus master, fast devsel, latency 0
        Bus: primary=00, secondary=05, subordinate=05, sec-latency=64
        Capabilities: [a0] HyperTransport: MSI Mapping
        Capabilities: [b0] Express Root Port (Slot-) IRQ 0

00:09.0 Class 0604: 1166:0132 (rev a3)
        Flags: bus master, fast devsel, latency 0
        Bus: primary=00, secondary=06, subordinate=06, sec-latency=64
        Capabilities: [a0] HyperTransport: MSI Mapping
        Capabilities: [b0] Express Root Port (Slot-) IRQ 0

00:0a.0 Class 0604: 1166:0132 (rev a3)
        Flags: bus master, fast devsel, latency 0
        Bus: primary=00, secondary=07, subordinate=07, sec-latency=64
        I/O behind bridge: 00002000-00002fff
        Memory behind bridge: fc200000-fc2fffff
        Capabilities: [a0] HyperTransport: MSI Mapping
        Capabilities: [b0] Express Root Port (Slot-) IRQ 0

00:0b.0 Class 0604: 1166:0132 (rev a3)
        Flags: bus master, fast devsel, latency 0
        Bus: primary=00, secondary=08, subordinate=08, sec-latency=64
        Capabilities: [a0] HyperTransport: MSI Mapping
        Capabilities: [b0] Express Root Port (Slot-) IRQ 0

00:18.0 Class 0600: 1022:1100
        Flags: fast devsel
        Capabilities: [80] HyperTransport: Host or Secondary Interface
        Capabilities: [a0] HyperTransport: Host or Secondary Interface
        Capabilities: [c0] HyperTransport: Host or Secondary Interface

00:18.1 Class 0600: 1022:1101
        Flags: fast devsel

00:18.2 Class 0600: 1022:1102
        Flags: fast devsel

00:18.3 Class 0600: 1022:1103
        Flags: fast devsel

01:0d.0 Class 0604: 1166:0104 (rev c0)
        Flags: bus master, 66MHz, medium devsel, latency 64
        Bus: primary=01, secondary=02, subordinate=02, sec-latency=64
        Capabilities: [90] PCI-X bridge device
        Capabilities: [88] #0d [0000]

01:0e.0 Class 0104: 1166:024a (prog-if 80)
        Subsystem: 1166:0242
        Flags: bus master, medium devsel, latency 64, IRQ 15
        I/O ports at 1030 [size=8]
        I/O ports at 1070 [size=4]
        I/O ports at 1040 [size=8]
        I/O ports at 1080 [size=4]
        I/O ports at 1000 [size=32]
        Memory at fc000000 (32-bit, non-prefetchable) [size=8K]
        [virtual] Expansion ROM at 88000000 [disabled] [size=128K]
        Capabilities: [60] PCI-X non-bridge device
        Capabilities: [90] Power Management version 2
        Capabilities: [a0] Message Signalled Interrupts: 64bit- Queue=0/0 Enable
-

01:0e.1 Class 0104: 1166:024a (prog-if 8f)
        Subsystem: 1166:0242
        Flags: 66MHz, medium devsel, IRQ 15
        I/O ports at 1050 [size=8]
        I/O ports at 1090 [size=4]
        I/O ports at 1060 [size=8]
        I/O ports at 10a0 [size=4]
        I/O ports at 1020 [size=16]
        Capabilities: [60] PCI-X non-bridge device
        Capabilities: [90] Power Management version 2
        Capabilities: [a0] Message Signalled Interrupts: 64bit- Queue=0/0 Enable
-

04:04.0 Class 0200: 14e4:166a (rev 03)
        Subsystem: 14e4:166a
        Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 50
        Memory at fc100000 (64-bit, non-prefetchable) [size=64K]
        Memory at fc110000 (64-bit, non-prefetchable) [size=64K]
        Capabilities: [40] PCI-X non-bridge device
        Capabilities: [48] Power Management version 2
        Capabilities: [50] Vital Product Data
        Capabilities: [58] Message Signalled Interrupts: 64bit+ Queue=0/3 Enable
-

04:04.1 Class 0200: 14e4:166a (rev 03)
        Subsystem: 14e4:166a
        Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 58
        Memory at fc120000 (64-bit, non-prefetchable) [size=64K]
        Memory at fc130000 (64-bit, non-prefetchable) [size=64K]
        Capabilities: [40] PCI-X non-bridge device
        Capabilities: [48] Power Management version 2
        Capabilities: [50] Vital Product Data
        Capabilities: [58] Message Signalled Interrupts: 64bit+ Queue=0/3 Enable
-

07:00.0 Class 0200: 8086:105e (rev 06)
        Subsystem: 14d0:0800
        Flags: bus master, fast devsel, latency 0, IRQ 114
        Memory at fc200000 (32-bit, non-prefetchable) [size=128K]
        I/O ports at 2000 [size=32]
        Expansion ROM at fc220000 [disabled] [size=128K]
        Capabilities: [c8] Power Management version 2
        Capabilities: [d0] Message Signalled Interrupts: 64bit+ Queue=0/0 Enable
+
        Capabilities: [e0] Express Endpoint IRQ 0

07:00.1 Class 0200: 8086:105e (rev 06)
        Subsystem: 14d0:0800
        Flags: bus master, fast devsel, latency 0, IRQ 122
        Memory at fc240000 (32-bit, non-prefetchable) [size=128K]
        I/O ports at 2020 [size=32]
        Expansion ROM at fc260000 [disabled] [size=128K]
        Capabilities: [c8] Power Management version 2
        Capabilities: [d0] Message Signalled Interrupts: 64bit+ Queue=0/0 Enable
+
        Capabilities: [e0] Express Endpoint IRQ 0
-------------- next part --------------
/* This file was generated by getpir.c, do not modify! 
   (but if you do, please run checkpir on it to verify)
 * Contains the IRQ Routing Table dumped directly from your memory, which BIOS sets up
 *
 * Documentation at : http://www.microsoft.com/hwdev/busbios/PCIIRQ.HTM
*/

#ifdef GETPIR
#include "pirq_routing.h"
#else
#include <arch/pirq_routing.h>
#endif

const struct irq_routing_table intel_irq_routing_table = {
	PIRQ_SIGNATURE,  /* u32 signature */
	PIRQ_VERSION,    /* u16 version   */
	32+16*10,	 /* there can be total 10 devices on the bus */
	0x00,		 /* Where the interrupt router lies (bus) */
	(0x02<<3)|0x0,   /* Where the interrupt router lies (dev) */
	0,		 /* IRQs devoted exclusively to PCI usage */
	0x1166,		 /* Vendor */
	0x36,		 /* Device */
	0,		 /* Crap (miniport) */
	{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* u8 rfu[11] */
	0x51,         /*  u8 checksum , this hase to set to some value that would give 0 after the sum of all bytes for this structure (including checksum) */
	{
		/* bus,     dev|fn,   {link, bitmap}, {link, bitmap}, {link, bitmap}, {link, bitmap},  slot, rfu */
		{0x01,(0x0e<<3)|0x0, {{0x07, 0x0800}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
		{0x00,(0x03<<3)|0x0, {{0x01, 0x0400}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
		{0x04,(0x04<<3)|0x0, {{0x22, 0xdefa}, {0x23, 0xdefa}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
		{0x00,(0x04<<3)|0x0, {{0x21, 0xdefa}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
		{0x02,(0x04<<3)|0x0, {{0x20, 0xdefa}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
		{0x07,(0x00<<3)|0x0, {{0x26, 0xdefa}, {0x26, 0xdefa}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
		{0x05,(0x00<<3)|0x0, {{0x25, 0xdefa}, {0x25, 0xdefa}, {0x25, 0xdefa}, {0x25, 0x0defa}}, 0x1, 0x0},
		{0x06,(0x00<<3)|0x0, {{0x24, 0xdefa}, {0x24, 0xdefa}, {0x24, 0xdefa}, {0x24, 0x0defa}}, 0x1, 0x0},
		{0x08,(0x00<<3)|0x0, {{0x27, 0xdefa}, {0x27, 0xdefa}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
		{0x00,(0x05<<3)|0x0, {{0x28, 0xdefa}, {0x29, 0xdefa}, {0x2a, 0xdefa}, {0x2b, 0x0defa}}, 0x1, 0x0},
	}
};

unsigned long write_pirq_routing_table(unsigned long addr)
{
return copy_pirq_routing_table(addr);
}



More information about the coreboot mailing list