[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 07/14] mips_malta: move i8259 initialization after p
From: |
Avi Kivity |
Subject: |
[Qemu-devel] [PATCH 07/14] mips_malta: move i8259 initialization after piix4 initialization |
Date: |
Sun, 25 Sep 2011 15:50:42 +0300 |
i8259 is an ISA device (or at least, depends on the ISA infrastructure to
register its ioport); and the ISA bus is supplied by piix4. Later patches
make this dependency explicit.
Use qemu_irq_proxy() to stop the cycle by adding an extra layer of
indirection.
Signed-off-by: Avi Kivity <address@hidden>
---
hw/mips_malta.c | 20 +++++++++++++++-----
1 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/hw/mips_malta.c b/hw/mips_malta.c
index 0110daa..1ec1228 100644
--- a/hw/mips_malta.c
+++ b/hw/mips_malta.c
@@ -778,7 +778,7 @@ void mips_malta_init (ram_addr_t ram_size,
int64_t kernel_entry;
PCIBus *pci_bus;
CPUState *env;
- qemu_irq *i8259;
+ qemu_irq *i8259 = NULL, *isa_irq;
qemu_irq *cpu_exit_irq;
int piix4_devfn;
i2c_bus *smbus;
@@ -928,17 +928,27 @@ void mips_malta_init (ram_addr_t ram_size,
cpu_mips_irq_init_cpu(env);
cpu_mips_clock_init(env);
- /* Interrupt controller */
- /* The 8259 is attached to the MIPS CPU INT0 pin, ie interrupt 2 */
- i8259 = i8259_init(env->irq[2]);
+ /*
+ * We have a circular dependency problem: pci_bus depends on isa_irq,
+ * isa_irq is provided by i8259, i8259 depends on ISA, ISA depends
+ * on piix4, and piix4 depends on pci_bus. To stop the cycle we have
+ * qemu_irq_proxy() adds an extra bit of indirection, allowing us
+ * to resolve the isa_irq -> i8259 dependency after i8259 is initialized.
+ */
+ isa_irq = qemu_irq_proxy(&i8259, 16);
/* Northbridge */
- pci_bus = gt64120_register(i8259);
+ pci_bus = gt64120_register(isa_irq);
/* Southbridge */
ide_drive_get(hd, MAX_IDE_BUS);
piix4_devfn = piix4_init(pci_bus, 80);
+
+ /* Interrupt controller */
+ /* The 8259 is attached to the MIPS CPU INT0 pin, ie interrupt 2 */
+ i8259 = i8259_init(env->irq[2]);
+
isa_bus_irqs(i8259);
pci_piix4_ide_init(pci_bus, hd, piix4_devfn + 1);
usb_uhci_piix4_init(pci_bus, piix4_devfn + 2);
--
1.7.6.3
- [Qemu-devel] [PULL 00/14] Memory API conversion batch 9: ISA, Avi Kivity, 2011/09/25
- [Qemu-devel] [PATCH 01/14] pci: add pci_address_space_io(), Avi Kivity, 2011/09/25
- [Qemu-devel] [PATCH 03/14] isa: add isa_register_ioport(), Avi Kivity, 2011/09/25
- [Qemu-devel] [PATCH 09/14] mips_r4k: initialize i8259 after the ISA bus, Avi Kivity, 2011/09/25
- [Qemu-devel] [PATCH 04/14] pc: Re-order pc_init1 to initialize the ISA bus before ISA devices, Avi Kivity, 2011/09/25
- [Qemu-devel] [PATCH 02/14] isa: Pass i/o address space to isa_bus_new, Avi Kivity, 2011/09/25
- [Qemu-devel] [PATCH 07/14] mips_malta: move i8259 initialization after piix4 initialization,
Avi Kivity <=
- [Qemu-devel] [PATCH 14/14] fdc: Convert isabus_fdc_init1 to MemoryRegion, Avi Kivity, 2011/09/25
- [Qemu-devel] [PATCH 06/14] i8254: Convert to MemoryRegion, Avi Kivity, 2011/09/25
- [Qemu-devel] [PATCH 11/14] i8259: Convert to MemoryRegion, Avi Kivity, 2011/09/25
- [Qemu-devel] [PATCH 10/14] ppc_prep: initialize i8259 after the ISA bus, Avi Kivity, 2011/09/25
- [Qemu-devel] [PATCH 05/14] cs4231a: Convert to MemoryRegion, Avi Kivity, 2011/09/25
- [Qemu-devel] [PATCH 13/14] serial: Convert serial_isa_initfn to MemoryRegion, Avi Kivity, 2011/09/25
- [Qemu-devel] [PATCH 08/14] mips_jazz: initialize i8259 after the ISA bus, Avi Kivity, 2011/09/25
- [Qemu-devel] [PATCH 12/14] pckbd: Convert to MemoryRegion, Avi Kivity, 2011/09/25
- Re: [Qemu-devel] [PULL 00/14] Memory API conversion batch 9: ISA, Anthony Liguori, 2011/09/26