[coreboot] unexpected exception errors loading vga rom

ron minnich rminnich at gmail.com
Thu Apr 30 16:55:24 CEST 2009

On Thu, Apr 30, 2009 at 5:37 AM, Joseph Smith <joe at settoplinux.org> wrote:

> Well, along the way I did learn a lot more about irq tables. Like each line
> in irq_tables.c is not actually a device but a route to the device/s. There
> can be multiple devices on a route. For example all of my USB devices are
> on the same route:

I think this is a mistinterpretaion. In PCI-speak, there is one
device. Each device has several functions.

A device itself has only one wire -- there is one physical wire for
that chip or device. It is called the interrupt line.

For reasons too long to go into here (basically, the PCI SIG made a
slight mistake in designing interrupts) we need to have the
IRQ table so we know mapping of IRQ wire from device to IRQ wire of
bus/interrupt router, e.g. INTA of a chip/device may map to INTC of
the bus and hence the interrupt router.

>                       |- USB #1        |- USB #2      |- USB #3       |-
> {0x00,(0x1d<<3)|0x0, {{0x60, 0x1ef8}, {0x63, 0x1ef8}, {0x62, 0x1ef8},
> {0x6b, 0x01ef8}}, 0x0, 0x0},
> is the same as:
> {0x00,(0x1d<<3)|0x0, {{0x60, 0x1ef8}, {0x00, 0x0000}, {0x00, 0x0000},
> {0x00, 0x00000}}, 0x0, 0x0}, /* [A] USB UHCI 1 */
> {0x00,(0x1d<<3)|0x1, {{0x60, 0x1ef8}, {0x63, 0x1ef8}, {0x00, 0x0000},
> {0x00, 0x00000}}, 0x0, 0x0}, /* [B] USB UHCI 2 */
> {0x00,(0x1d<<3)|0x2, {{0x60, 0x1ef8}, {0x63, 0x1ef8}, {0x62, 0x1ef8},
> {0x00, 0x00000}}, 0x0, 0x0}, /* [C] USB UHCI 3 */
> {0x00,(0x1d<<3)|0x7, {{0x60, 0x1ef8}, {0x63, 0x1ef8}, {0x62, 0x1ef8},
> {0x6b, 0x01ef8}}, 0x0, 0x0}, /* [D] EHCI */

no, not really. Functions don't have interrupts. The device itself has
an interrupt.

> I never really understood this until now. Also the "bus, dev|fn," can be
> diseaving becuase it only tells you the first device on the route INTA.

It tells you about that device. Those other things you mentioned are
functions of that device.

> If no one objects I would really like to add a section to the
> http://www.coreboot.org/Creating_Valid_IRQ_Tables page breaking down
> irq_tables.c and explaining what each part means. I think this would help
> people understand this very confusing process a little more.

I think your explanation is not really correct; you might want to
re-read the spec fot that table to see what it's about. As it is
you're going to confuse people :-)

I made this mistake myself on geode once before marc pointed it out to me.

I will be glad when this aspect of PCI is gone.

More information about the coreboot mailing list