if use the dual nic with the award bios on the epia-m i get: === Intel(R) PRO/100 Network Driver - version 2.3.30-k1 Copyright (c) 2003 Intel Corporation e100: eth0: Intel(R) PRO/100 Network Connection Hardware receive checksums enabled cpu cycle saver enabled e100: eth1: Intel(R) PRO/100 Network Connection Hardware receive checksums enabled cpu cycle saver enabled ===
but if i use linuxbios: === Intel(R) PRO/100 Network Driver - version 2.3.30-k1 Copyright (c) 2003 Intel Corporation PCI: No IRQ known for interrupt pin A of device 0000:02:04.0. Please try using pci=biosirq. e100: eth0: Intel(R) PRO/100 Network Connection Hardware receive checksums enabled cpu cycle saver enabled PCI: No IRQ known for interrupt pin A of device 0000:02:05.0. Please try using pci=biosirq. e100: eth1: Intel(R) PRO/100 Network Connection Hardware receive checksums enabled cpu cycle saver enabled === and i cannot bring the interface up. (i've not tried yet with pci=biosirq...)
everything is fine for a standard intel nic.
any idea?
and i cannot bring the interface up. (i've not tried yet with pci=biosirq...)
tried with pci=biosirq kernel commandline -- same result... maybe it is the same result because my kernel supports DIRECT pci access only? i am going to try a pci ANY access kernel now...
and i cannot bring the interface up. (i've not tried yet with pci=biosirq...)
tried with pci=biosirq kernel commandline -- same result... maybe it is the same result because my kernel supports DIRECT pci access only? i am going to try a pci ANY access kernel now...
unfort it is the same if the kernel (linux-2.6.0-test10-bk1) has bios pci enabled and i use pci=biosirq ...
what is the reason for === PCI: No IRQ known for interrupt pin A of device 0000:02:04.0. PCI: No IRQ known for interrupt pin A of device 0000:02:05.0. === if i use linuxbios?
niki
what is the reason for
PCI: No IRQ known for interrupt pin A of device 0000:02:04.0. PCI: No IRQ known for interrupt pin A of device 0000:02:05.0. === if i use linuxbios?
i have not done epia-m. this problem is due to bad irq_tables.c
run getpir under the standard bios and see what you get.
ron
On 26-Nov-2003 ron minnich wrote:
what is the reason for
PCI: No IRQ known for interrupt pin A of device 0000:02:04.0. PCI: No IRQ known for interrupt pin A of device 0000:02:05.0. === if i use linuxbios?
i have not done epia-m. this problem is due to bad irq_tables.c
run getpir under the standard bios and see what you get.
i get: === #include <arch/pirq_routing.h> const struct irq_routing_table intel_irq_routing_table = { PIRQ_SIGNATURE, /* u32 signature */ PIRQ_VERSION, /* u16 version */ 32+16*5, /* there can be total 5 devices on the bus */ 0, /* Where the interrupt router lies (bus) */ 0, /* Where the interrupt router lies (dev) */ 0x1c00, /* IRQs devoted exclusively to PCI usage */ 0, /* Vendor */ 0, /* Device */ 0, /* Crap (miniport) */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* u8 rfu[11] */ 0x78, /* u8 checksum , this hase to set to some value that would give 0 after the sum of all bytes for this structure (including checksum) */ { {0,0xa0, {{0x2, 0xdeb8}, {0x3, 0xdeb8}, {0x4, 0xdeb8}, {0x1, 0xdeb8}}, 0x1, 0}, {0,0x98, {{0x1, 0xdeb8}, {0x2, 0xdeb8}, {0x3, 0xdeb8}, {0x4, 0xdeb8}}, 0x2, 0}, {0,0x50, {{0x4, 0xdeb8}, {0x1, 0xdeb8}, {0x2, 0xdeb8}, {0x3, 0xdeb8}}, 0x3, 0}, {0,0x68, {{0x2, 0xdeb8}, {0x3, 0xdeb8}, {0x4, 0xdeb8}, {0x1, 0xdeb8}}, 0x4, 0}, {0,0x8, {{0x1, 0xdeb8}, {0x2, 0xdeb8}, {0x3, 0xdeb8}, {0x4, 0xdeb8}}, 0, 0}, } }; === which is quite different from src/mainboard/via/epia-m/irq_tables.c: === /* ethernet */ {0,0x90, {{0x3, 0xdeb8}, {0x4, 0xdeb8}, {0x2, 0xdeb8}, {0x1, 0xdeb8}}, 0x1, 0}, /* usb */ {0,0x80, {{0x2, 0xdeb8}, {0x3, 0xdeb8}, {0x4, 0xdeb8}, {0x1, 0xdeb8}}, 0x2, 0}, /* pci */ {0,0xa0, {{0x1, 0xdeb8}, {0x4, 0xdeb8}, {0x3, 0xdeb8}, {0x2, 0xdeb8}}, 0x3, 0}, /* audio */ {0,0x8d, {{0x4, 0xdeb8}, {0x3, 0xdeb8}, {0x2, 0xdeb8}, {0x1, 0xdeb8}}, 0x0, 0}, /* 1394 */ {0,0x68, {{0x4, 0xdeb8}, {0x3, 0xdeb8}, {0x2, 0xdeb8}, {0x1, 0xdeb8}}, 0x3, 0} === but almost the same as (also from src/mainboard/via/epia-m/irq_tables.c) === #if 0 { {0,0xa0, {{0x2, 0xdeb8}, {0x3, 0xdeb8}, {0x4, 0xdeb8}, {0x1, 0xdeb8}}, 0x1, 0}, {0,0x98, {{0x1, 0xdeb8}, {0x2, 0xdeb8}, {0x3, 0xdeb8}, {0x4, 0xdeb8}}, 0x2, 0}, {0,0x50, {{0x4, 0xdeb8}, {0x1, 0xdeb8}, {0x2, 0xdeb8}, {0x3, 0xdeb8}}, 0x3, 0}, {0,0x68, {{0x2, 0xdeb8}, {0x3, 0xdeb8}, {0x4, 0xdeb8}, {0x1, 0xdeb8}}, 0x4, 0}, {0,0x8, {{0x1, 0xdeb8}, {0x2, 0xdeb8}, {0x3, 0xdeb8}, {0x4, 0xdeb8}}, 0, 0}, {0x50,0, {{0, 0}, {0, 0}, {0, 0}, {0, 0}}, 0, 0} } #else ===
hmmm... who did the src/mainboard/via/epia-m/irq_tables.c code?
does this mean that if i unplug the dual nic, that i cannot use the same linuxbios anymore?
niki
i have the same problem === PCI: No IRQ known for interrupt pin A of device 0000:02:04.0. Please try using pci=biosirq. PCI: No IRQ known for interrupt pin A of device 0000:02:05.0. Please try using pci=biosirq. === with the linuxbios + the new generated irq_tables.c.
no matter if i use pci=biosirq or not (does this kernel option affect the functionality of a linuxbios system at all?).
i get this from linuxbios: === LinuxBIOS-1.0.0 Thu Nov 27 13:30:41 CET 2003 starting... Copying LinuxBIOS to ram. Jumping to LinuxBIOS. LinuxBIOS-1.0.0 Thu Nov 27 13:30:41 CET 2003 booting... Finding PCI configuration type. PCI: Using configuration type 1 Scanning PCI bus...PCI: pci_scan_bus for bus 0 PCI: 00:00.0 [1106/3123] PCI: 00:01.0 [1106/b091] PCI: 00:0d.0 [1106/3044] PCI: 00:10.0 [1106/3038] PCI: 00:10.1 [1106/3038] PCI: 00:10.2 [1106/3038] PCI: 00:10.3 [1106/3104] PCI: 00:11.0 [1106/3177] PCI: 00:11.1 [1106/0571] PCI: 00:11.5 [1106/3059] PCI: 00:12.0 [1106/3065] PCI: 00:14.0 [8086/b154] PCI: pci_scan_bus for bus 1 PCI: pci_scan_bus returning with max=01 PCI: pci_scan_bus for bus 2 PCI: 02:04.0 [8086/1229] PCI: 02:05.0 [8086/1229] PCI: pci_scan_bus returning with max=02 PCI: pci_scan_bus returning with max=02 done Allocating PCI resources... PCI: 00:00.0 register 10(00000008), read-only ignoring it PCI: 00:00.0 register 10(00000008), read-only ignoring it PCI: 00:00.0 register 10(00000008), read-only ignoring it PCI: 00:00.0 register 10(00000008), read-only ignoring it ASSIGN RESOURCES, bus 0 PCI: 00:01.0 1c <- [0x00002000 - 0x00001fff] bus 1 io PCI: 00:01.0 24 <- [0xfeb00000 - 0xfeafffff] bus 1 prefmem PCI: 00:01.0 20 <- [0xfeb00000 - 0xfeafffff] bus 1 mem PCI: 00:0d.0 10 <- [0xfeb00000 - 0xfeb007ff] mem PCI: 00:0d.0 14 <- [0x00002800 - 0x0000287f] io PCI: 00:10.0 20 <- [0x00002880 - 0x0000289f] io PCI: 00:10.1 20 <- [0x000028a0 - 0x000028bf] io PCI: 00:10.2 20 <- [0x000028c0 - 0x000028df] io PCI: 00:10.3 10 <- [0xfeb01000 - 0xfeb010ff] mem PCI: 00:11.1 20 <- [0x000028e0 - 0x000028ef] io PCI: 00:11.5 10 <- [0x00002000 - 0x000020ff] io PCI: 00:12.0 10 <- [0x00002400 - 0x000024ff] io PCI: 00:12.0 14 <- [0xfeb02000 - 0xfeb020ff] mem PCI: 00:14.0 1c <- [0x00001000 - 0x00001fff] bus 2 io PCI: 00:14.0 24 <- [0xfeb00000 - 0xfeafffff] bus 2 prefmem PCI: 00:14.0 20 <- [0xfea00000 - 0xfeafffff] bus 2 mem ASSIGN RESOURCES, bus 2 PCI: 02:04.0 10 <- [0xfea40000 - 0xfea40fff] mem PCI: 02:04.0 14 <- [0x00001000 - 0x0000103f] io PCI: 02:04.0 18 <- [0xfea00000 - 0xfea1ffff] mem PCI: 02:05.0 10 <- [0xfea41000 - 0xfea41fff] mem PCI: 02:05.0 14 <- [0x00001040 - 0x0000107f] io PCI: 02:05.0 18 <- [0xfea20000 - 0xfea3ffff] mem ASSIGNED RESOURCES, bus 2 ASSIGNED RESOURCES, bus 0 done. Enabling PCI resourcess...PCI: 00:00.0 cmd <- 06 PCI: 00:01.0 cmd <- 07 PCI: 00:0d.0 cmd <- 83 PCI: 00:10.0 cmd <- 01 PCI: 00:10.1 cmd <- 01 PCI: 00:10.2 cmd <- 01 PCI: 00:10.3 cmd <- 02 PCI: 00:11.0 cmd <- 87 PCI: 00:11.1 cmd <- 07 PCI: 00:11.5 cmd <- 01 PCI: 00:12.0 cmd <- 83 PCI: 00:14.0 cmd <- 07 PCI: 02:04.0 cmd <- 03 PCI: 02:05.0 cmd <- 03 done. Initializing PCI devices... PCI devices initialized totalram: 127M Initializing CPU #0 === [...] === Southbridge fixup setting firewire Assigning IRQ 10 to 0:d.0 Readback = 10 setting usb Assigning IRQ 11 to 0:10.0 Readback = 11 Assigning IRQ 10 to 0:10.1 Readback = 10 Assigning IRQ 12 to 0:10.2 Readback = 12 Assigning IRQ 5 to 0:10.3 Readback = 5 setting ethernet Assigning IRQ 11 to 0:12.0 Readback = 11 setting pci slot setting vt8235 slot Assigning IRQ 5 to 0:11.1 Readback = 5 Assigning IRQ 12 to 0:11.5 Readback = 12 Checking IRQ routing tables... /home/niki/packages/freebios-20031024/src/arch/i386/lib/pirq_routing.c: 30:check_pirq_routing_table() - irq_routing_table lo cated at: 0x00008a20 done. Copying IRQ routing tables to 0xf0000...done. Verifing priq routing tables copy at 0xf0000...failed Wrote linuxbios table at: 00000500 - 00000640 checksum ed05 ===
the system (booted with linuxbios+modified irq_tables.c) sayes: === PCI: Using configuration type 1 mtrr: v2.0 (20020519) ACPI: Subsystem revision 20031002 ACPI: System description tables not found ACPI-0084: *** Error: acpi_load_tables: Could not get RSDP, AE_NOT_FOUND ACPI-0134: *** Error: acpi_load_tables: Could not load tables: AE_NOT_FOUND ACPI: Unable to load the System Description Tables ACPI: ACPI tables contain no PCI IRQ routing entries PCI: Invalid ACPI-PCI IRQ routing table PCI: Probing PCI hardware PCI: Probing PCI hardware (bus 00) [...cut...] PCI: No IRQ known for interrupt pin A of device 0000:02:04.0. Please try using pci=biosirq. PCI: No IRQ known for interrupt pin A of device 0000:02:05.0. Please try using pci=biosirq. ===
=== # cat /proc/interrupts CPU0 0: 116849 XT-PIC timer 1: 8 XT-PIC i8042 2: 0 XT-PIC cascade 3: 0 XT-PIC serial 4: 257 XT-PIC serial 8: 1 XT-PIC rtc 11: 0 XT-PIC eth2 12: 0 XT-PIC VIA8233 14: 21 XT-PIC ide0 15: 1051 XT-PIC ide1 NMI: 0 ERR: 0 ===
it seems that 02:04.0 and 02:05.0 are detected... so what goes wrong? there is no ``Assigning IRQ XX to ...'' for 02:04.0 and 02:05.0 in linuxbios...
it is strange to me that all this worked with a regular (singleport) intel ethernet card!
when using the award bios the kernel sayes (regarding pci): === PCI: Using configuration type 1 mtrr: v2.0 (20020519) ACPI: Subsystem revision 20031002 ACPI: Interpreter enabled ACPI: Using PIC for interrupt routing ACPI: PCI Root Bridge [PCI0] (00:00) PCI: Probing PCI hardware (bus 00) ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 5 6 7 10 *11 12 14 15) ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 5 6 7 10 11 *12 14 15) ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 7 *10 11 12 14 15) ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 5 6 7 10 11 12 14 15) Linux Plug and Play Support v0.97 (c) Adam Belay ACPI: PCI Interrupt Link [LNKB] enabled at IRQ 12 ACPI: PCI Interrupt Link [LNKA] enabled at IRQ 11 ACPI: PCI Interrupt Link [LNKC] enabled at IRQ 10 ACPI: PCI Interrupt Link [LNKD] enabled at IRQ 5 PCI: Using ACPI for IRQ routing PCI: if you experience problems, try using option 'pci=noacpi' or even 'acpi=off' [...later...] PCI: Via IRQ fixup for 0000:00:10.0, from 0 to 11 PCI: Via IRQ fixup for 0000:00:10.1, from 255 to 12 PCI: Via IRQ fixup for 0000:00:10.2, from 255 to 10 ACPI: Power Button (FF) [PWRF] ACPI: Processor [CPU0] (supports C1 C2, 2 throttling states) isapnp: Scanning for PnP cards... isapnp: No Plug & Play device found ===
and === # cat /proc/interrupts CPU0 0: 159023 XT-PIC timer 1: 8 XT-PIC i8042 2: 0 XT-PIC cascade 3: 0 XT-PIC serial 4: 270 XT-PIC serial 8: 1 XT-PIC rtc 9: 0 XT-PIC acpi 10: 6 XT-PIC VIA8233, eth1 11: 0 XT-PIC eth2 12: 6 XT-PIC eth0 14: 21 XT-PIC ide0 15: 1049 XT-PIC ide1 NMI: 0 ERR: 0 ===
niki
i think i found the main problem:
award bios / dual ethernet nic: === # /sbin/lspci 00:00.0 Host bridge: VIA Technologies, Inc.: Unknown device 3123 00:01.0 PCI bridge: VIA Technologies, Inc. VT8633 [Apollo Pro266 AGP] 00:0d.0 FireWire (IEEE 1394): VIA Technologies, Inc. IEEE 1394 Host Controller (rev 80) 00:10.0 USB Controller: VIA Technologies, Inc. USB (rev 80) 00:10.1 USB Controller: VIA Technologies, Inc. USB (rev 80) 00:10.2 USB Controller: VIA Technologies, Inc. USB (rev 80) 00:10.3 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 82) 00:11.0 ISA bridge: VIA Technologies, Inc. VT8235 ISA Bridge 00:11.1 IDE interface: VIA Technologies, Inc. VT82C586/B/686A/B PIPC Bus Master IDE (rev 06) 00:11.5 Multimedia audio controller: VIA Technologies, Inc. VT8233 AC97 Audio Controller (rev 50) 00:12.0 Ethernet controller: VIA Technologies, Inc. VT6102 [Rhine-II] (rev 74) 00:14.0 PCI bridge: Intel Corp. 21154 PCI-to-PCI Bridge 01:00.0 VGA compatible controller: VIA Technologies, Inc.: Unknown device 3122 (rev 03) 02:04.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 0d) 02:05.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 0d) ===
award bios / std ethernet nic: === # lspci 00:00.0 Host bridge: VIA Technologies, Inc.: Unknown device 3123 00:01.0 PCI bridge: VIA Technologies, Inc. VT8633 [Apollo Pro266 AGP] 00:0d.0 FireWire (IEEE 1394): VIA Technologies, Inc. IEEE 1394 Host Controller (rev 80) 00:10.0 USB Controller: VIA Technologies, Inc. USB (rev 80) 00:10.1 USB Controller: VIA Technologies, Inc. USB (rev 80) 00:10.2 USB Controller: VIA Technologies, Inc. USB (rev 80) 00:10.3 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 82) 00:11.0 ISA bridge: VIA Technologies, Inc. VT8235 ISA Bridge 00:11.1 IDE interface: VIA Technologies, Inc. VT82C586/B/686A/B PIPC Bus Master IDE (rev 06) 00:11.5 Multimedia audio controller: VIA Technologies, Inc. VT8233 AC97 Audio Controller (rev 50) 00:12.0 Ethernet controller: VIA Technologies, Inc. VT6102 [Rhine-II] (rev 74) 00:14.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 0c) 01:00.0 VGA compatible controller: VIA Technologies, Inc.: Unknown device 3122 (rev 03) ===
the dual eth controller seems to use bus #2 ??!! the normal eth controller bus #0.
is that some sort of virtual bus? the epia-m has only one pci bus... has it?
niki
this is maybe interesting as well: === # cat /proc/iomem 00000000-0009ffff : System RAM 000a0000-000bffff : Video RAM area 000c0000-000c7fff : Video ROM 000f0000-000fffff : System ROM 00100000-1dfeffff : System RAM 00100000-00315318 : Kernel code 00315319-0043debf : Kernel data 1dff0000-1dff2fff : ACPI Non-volatile Storage 1dff3000-1dffffff : ACPI Tables d0000000-d7ffffff : 0000:00:00.0 d8000000-dbffffff : PCI Bus #01 d8000000-dbffffff : 0000:01:00.0 dc000000-ddffffff : PCI Bus #01 dc000000-dcffffff : 0000:01:00.0 de000000-de0fffff : PCI Bus #02 de000000-de01ffff : 0000:02:04.0 de000000-de01ffff : e100 de020000-de03ffff : 0000:02:05.0 de020000-de03ffff : e100 de040000-de040fff : 0000:02:05.0 de040000-de040fff : e100 de041000-de041fff : 0000:02:04.0 de041000-de041fff : e100 de100000-de1000ff : 0000:00:10.3 de101000-de1010ff : 0000:00:12.0 de101000-de1010ff : via-rhine de102000-de1027ff : 0000:00:0d.0 ffff0000-ffffffff : reserved === (award bios + dial nic)
maybe the dual nic has some extention rom code on it which is executed from the award bios... it should not be too difficult to jump to that code from linuxbios. is it?
niki
okay -- i got the dual card working -- somehow: === $ diff -u freebios-20031024.orig/src/mainboard/via/epia-m/mainboard.c freebios-20031024/src/mainboard/via/epia-m/mainboard.c --- freebios-20031024.orig/src/mainboard/via/epia-m/mainboard.c 2003-07-25 05:20:20.000000000 +0200 +++ freebios-20031024/src/mainboard/via/epia-m/mainboard.c 2003-11-28 11:02:37.948735048 +0100 @@ -8,8 +8,10 @@ static const unsigned char usbIrqs[4] = { 11, 10, 12, 5 }; static const unsigned char enetIrqs[4] = { 11, 5, 10, 12 }; static const unsigned char slotIrqs[4] = { 10, 12, 5, 11 }; +static const unsigned char dualenetaIrq[4] = { 12, 5, 11, 10 }; +static const unsigned char dualenetbIrq[4] = { 10, 12, 5, 11 }; static const unsigned char firewireIrqs[4] = {10, 12, 5, 11 }; -static const unsigned char vt8235Irqs[4] = { 5,10, 12, 11 }; +static const unsigned char vt8235Irqs[4] = { 5, 10, 12, 11 };
/* @@ -57,6 +59,12 @@ // vt8235 slot printk_info("setting vt8235 slot\n"); pci_assign_irqs(0, 0x11, vt8235Irqs); + + // dual eth card + printk_info("setting pci slot - pci-pci bridge - dual eth card (a)\n"); + pci_assign_irqs(2, 0x4, dualenetaIrq); + printk_info("setting pci slot - pci-pci bridge - dual eth card (b)\n"); + pci_assign_irqs(2, 0x5, dualenetbIrq); }
===
jan: thanks a lot for the tip with the bridge!!!
it seems that i have to play a little bit more with the interrupts. the e100.o code in linux tells me ``Disabling IRQ #10'' and/or ``Disabling IRQ #12'' (depending on the values in dualenetaIrq[4] and dualenetbIrq[4]) when bringing up the nics. and then one or both of the nics dont work...
niki
On Thu, Nov 27, 2003 at 05:14:27PM +0100, Niki Waibel wrote:
i think i found the main problem:
award bios / dual ethernet nic:
# /sbin/lspci
00:14.0 PCI bridge: Intel Corp. 21154 PCI-to-PCI Bridge
02:04.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 0d) 02:05.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 0d) ===
the dual eth controller seems to use bus #2 ??!! the normal eth controller bus #0.
is that some sort of virtual bus? the epia-m has only one pci bus... has it?
you see the pci-to-pci bridge ?
in general multi-port network-card have a pci-to-pci bridge and an interal pci-bus for the different interfaces.
niki
Jan
I think somebody just plugged in a bad irq_tables.c
So test that one you have, if it works, tell me and I'll put it into the tree.
ron