[SeaBIOS] [RFC PATCH 0/2] Q35/ICH9 interrupt routing

Alex Williamson alex.williamson at redhat.com
Mon Jan 21 22:21:16 CET 2013

I was trying to revive the patch to add Qemu INTx routing support for
Q35 and stumbled on some rather broken interrupt routing problems.
Sadly a seabios release claiming Q35 support snuck out already, but
I'd like to at least discuss these before Qemu 1.4 even though they
may not get fixed for that release either.

ICH9 adds 4 more PCI interrupt routing registers, so in addition to
the previous PIRQ[A:D], we now also have PIRQ[E:H].  AIUI, each pin
can operate in either PIC or APIC mode based on whether the IRQEN bit
of each register is clear or set respectively.  In PIC mode bits 3:0
of the PIRQn register identifiy the ISA compatible interrupt to
trigger.  In APIC mode each PIRQn is statically mapped to an APIC
pin, where PIRQA->16, PIRQB->17, ..., PIRQH->23.

The first problem we encounter is that the system boots into PIC mode
but we're programming the PIRQn registers into APIC mode.  After
fixing that, we quickly notice that seabios has a single function for
programming PCI interrupt line registers based on the PIIX mapping
of PIRQn registers.  A comment in the Qemu source indicates the
slot:pin to PIRQn mapping is arbitrary so long as Qemu and ACPI
match, disregarding that boot ROMs may also use interrupts and have
no ACPI support.  Solutions to this are either to create an ICH9
specific mapping function or to adjust slot:pin mappings to match
PIIX.  I've done the latter here, but it's incomplete as slots 25-31
have directly programmable mappings.

I'm looking for comments on how to proceed.  Do we want to try to
meld ICH9 to be more PIIX compatible or do we want to do our own
thing.  I suspect there are still a number of holes in ICH9 irq
programming no matter which path we take and these in particular
are likely to be challenging for migration compatibility.  Thanks,



Alex Williamson (2):
      q35: Fix PIC-mode interrupt setup
      q35: Fix ACPI _PRT routing to match PIIX

 src/pciinit.c         |    6 +--
 src/q35-acpi-dsdt.dsl |  100 +++++++++++++++++++++++++------------------------
 2 files changed, 52 insertions(+), 54 deletions(-)

More information about the SeaBIOS mailing list