[LinuxBIOS] Missing IRQ table entries; irq_tables.c problem?

Jonathan Sturges jonathansturges at yahoo.com
Sun Sep 16 21:31:09 CEST 2007

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.


/* 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.

More information about the coreboot mailing list