Hi, I'm missing something obvious and need someone to point me in the right direction.
I'm finishing up mapping IRQs on a CS5530 winterminal board I've got. I know the IRQ mappings of each on-board device and slot, and I put together my irq_tables.c accordingly. However, only the first 2 entries get written to the IRQ table, even though the file designates 3. Then, when I boot the LB image, I get this warning: Inconsistent IRQ routing table size (0x40/0x50)
The 0x50 makes sense; that's the "32+16*3" from my irq_tables.c. But where is the size being set to 0x40? It seems there's a configuration I missed somewhere. My irq_tables.c is below.
thanks, Jonathan
/* 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 */
#include <arch/pirq_routing.h>
const struct irq_routing_table intel_irq_routing_table = { PIRQ_SIGNATURE, /* u32 signature */ PIRQ_VERSION, /* u16 version */ 32+16*3, /* there can be total 3 devices on the bus */ 0x00, /* Where the interrupt router lies (bus) */ (0x12<<3)|0x0, /* Where the interrupt router lies (dev) */ 0x0e00, /* IRQs devoted exclusively to PCI usage */ 0x1078, /* Vendor */ 0x0100, /* Device */ 0, /* Crap (miniport) */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* u8 rfu[11] */ 0x21, /* u8 checksum , this hase to set to some value that would give 0 after the sum of all bytes for this structure (including checksum) */ /* 0x13 = on-board USB OHCI; 0x15 = on-board NatSemi ethernet; 0x14 = miniPCI */ { /* bus, dev|fn, {link, bitmap}, {link, bitmap}, {link, bitmap}, {link, bitmap}, slot, rfu */ {0x00,(0x13<<3)|0x0, {{0x01, 0x0400}, {0x02, 0x0800}, {0x03, 0x0200}, {0x04, 0x0000}}, 0x0, 0x0}, {0x00,(0x15<<3)|0x0, {{0x02, 0x0800}, {0x03, 0x0200}, {0x04, 0x0000}, {0x01, 0x0400}}, 0x0, 0x0}, {0x00,(0x14<<3)|0x0, {{0x03, 0x0200}, {0x04, 0x0000}, {0x01, 0x0400}, {0x02, 0x0800}}, 0x0, 0x0}, } };
unsigned long write_pirq_routing_table(unsigned long addr) { return copy_pirq_routing_table(addr); }
____________________________________________________________________________________ Looking for a deal? Find great prices on flights and hotels with Yahoo! FareChase. http://farechase.yahoo.com/
On Sun, Sep 16, 2007 at 12:31:09PM -0700, Jonathan Sturges wrote:
Hi, I'm missing something obvious and need someone to point me in the right direction.
I'm finishing up mapping IRQs on a CS5530 winterminal board I've got. I know the IRQ mappings of each on-board device and slot, and I put together my irq_tables.c accordingly. However, only the first 2 entries get written to the IRQ table, even though the file designates 3. Then, when I boot the LB image, I get this warning: Inconsistent IRQ routing table size (0x40/0x50)
The 0x50 makes sense; that's the "32+16*3" from my irq_tables.c. But where is the size being set to 0x40? It seems there's a configuration I missed somewhere.
There's
default IRQ_SLOT_COUNT=2
(or similar) in the Options.lb of your board.
const struct irq_routing_table intel_irq_routing_table = { PIRQ_SIGNATURE, /* u32 signature */ PIRQ_VERSION, /* u16 version */ 32+16*3, /* there can be total 3 devices on the bus */
So this should be
32+16*IRQ_SLOT_COUNT
This may or may not fix your issue. Please report back if it does.
Uwe.