aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Williamson <alex.williamson@redhat.com>2013-02-15 14:11:35 -0700
committerKevin O'Connor <kevin@koconnor.net>2013-02-24 12:01:48 -0500
commit2b577261e1d216b8cf2a57b095c4a753faf41455 (patch)
tree80388b2debba498fcdff365854c0a33f2d5f4aee
parente5fe4f966bfdc4766c2cacc2f73756487a77f1b8 (diff)
downloadseabios-2b577261e1d216b8cf2a57b095c4a753faf41455.zip
seabios-2b577261e1d216b8cf2a57b095c4a753faf41455.tar.gz
seabios-2b577261e1d216b8cf2a57b095c4a753faf41455.tar.bz2
seabios q35: Enable all PIRQn IRQs at startup
We seem to use the IRQEN bit of the PIRQn registers interchangeably to select APIC mode or to disable an IRQ. I can't decide if we're intending to disable the IRQ or select APIC mode here, but in either case it prevents PIC mode assigned devices from working. When seabios writes IRQEN to these registers, qemu interprets that as APIC mode, so while the boot ROM driver is waiting for an interrupt on ISA compatible IRQ 10 or 11, KVM is injecting interrupts to APIC pins 16 - 23. Devices on the root bus use PIRQE:H while the root ports use PIRQA:D. Enable them all so we don't limit where we support boot ROMs. The guest will later disable unused IRQs with the ACPI _DIS method. Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
-rw-r--r--src/pciinit.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/src/pciinit.c b/src/pciinit.c
index a406bbd..857e8af 100644
--- a/src/pciinit.c
+++ b/src/pciinit.c
@@ -143,11 +143,9 @@ void mch_isa_bridge_init(struct pci_device *dev, void *arg)
/* activate irq remapping in LPC */
/* PIRQ[A-D] routing */
- pci_config_writeb(bdf, ICH9_LPC_PIRQA_ROUT + i,
- irq | ICH9_LPC_PIRQ_ROUT_IRQEN);
+ pci_config_writeb(bdf, ICH9_LPC_PIRQA_ROUT + i, irq);
/* PIRQ[E-H] routing */
- pci_config_writeb(bdf, ICH9_LPC_PIRQE_ROUT + i,
- irq | ICH9_LPC_PIRQ_ROUT_IRQEN);
+ pci_config_writeb(bdf, ICH9_LPC_PIRQE_ROUT + i, irq);
}
outb(elcr[0], ICH9_LPC_PORT_ELCR1);
outb(elcr[1], ICH9_LPC_PORT_ELCR2);