[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 10/23] PPC: E500: Generate IRQ lines for many CPUs
From: |
Alexander Graf |
Subject: |
[Qemu-devel] [PATCH 10/23] PPC: E500: Generate IRQ lines for many CPUs |
Date: |
Thu, 21 Jul 2011 03:27:21 +0200 |
Now that we can generate multiple envs for all our virtual CPUs, we
also need to tell the MPIC that we have multiple CPUs connected and
connect them all to the respective virtual interrupt lines.
Signed-off-by: Alexander Graf <address@hidden>
---
hw/ppce500_mpc8544ds.c | 17 ++++++++++++-----
1 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/hw/ppce500_mpc8544ds.c b/hw/ppce500_mpc8544ds.c
index cefb415..7ce9bc7 100644
--- a/hw/ppce500_mpc8544ds.c
+++ b/hw/ppce500_mpc8544ds.c
@@ -237,7 +237,7 @@ static void mpc8544ds_init(ram_addr_t ram_size,
target_long initrd_size=0;
int i=0;
unsigned int pci_irq_nrs[4] = {1, 2, 3, 4};
- qemu_irq *irqs, *mpic;
+ qemu_irq **irqs, *mpic;
DeviceState *dev;
struct boot_info *boot_info;
CPUState *firstenv = NULL;
@@ -247,6 +247,8 @@ static void mpc8544ds_init(ram_addr_t ram_size,
cpu_model = "e500v2_v30";
}
+ irqs = qemu_mallocz(smp_cpus * sizeof(qemu_irq *));
+ irqs[0] = qemu_mallocz(smp_cpus * sizeof(qemu_irq) * OPENPIC_OUTPUT_NB);
for (i = 0; i < smp_cpus; i++) {
qemu_irq *input;
env = cpu_ppc_init(cpu_model);
@@ -259,6 +261,10 @@ static void mpc8544ds_init(ram_addr_t ram_size,
firstenv = env;
}
+ irqs[i] = irqs[0] + (i * OPENPIC_OUTPUT_NB);
+ input = (qemu_irq *)env->irq_inputs;
+ irqs[i][OPENPIC_OUTPUT_INT] = input[PPCE500_INPUT_INT];
+ irqs[i][OPENPIC_OUTPUT_CINT] = input[PPCE500_INPUT_CINT];
env->spr[SPR_BOOKE_PIR] = env->cpu_index = i;
/* XXX register timer? */
@@ -283,10 +289,11 @@ static void mpc8544ds_init(ram_addr_t ram_size,
"mpc8544ds.ram", ram_size));
/* MPIC */
- irqs = qemu_mallocz(sizeof(qemu_irq) * OPENPIC_OUTPUT_NB);
- irqs[OPENPIC_OUTPUT_INT] = ((qemu_irq
*)env->irq_inputs)[PPCE500_INPUT_INT];
- irqs[OPENPIC_OUTPUT_CINT] = ((qemu_irq
*)env->irq_inputs)[PPCE500_INPUT_CINT];
- mpic = mpic_init(MPC8544_MPIC_REGS_BASE, 1, &irqs, NULL);
+ mpic = mpic_init(MPC8544_MPIC_REGS_BASE, smp_cpus, irqs, NULL);
+
+ if (!mpic) {
+ cpu_abort(env, "MPIC failed to initialize\n");
+ }
/* Serial */
if (serial_hds[0]) {
--
1.6.0.2
- Re: [Qemu-devel] [PATCH 03/23] PPC: Add CPU definitions for up to 32 guest CPUs, (continued)
- [Qemu-devel] [PATCH 18/23] PPC: KVM: Remove kvmppc_read_host_property, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 08/23] PPC: Bump MPIC up to 32 supported CPUs, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 23/23] PPC: E500: Bump CPU count to 32, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 15/23] PPC: E500: Use generic kvm function for freq, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 05/23] PPC: Extend MPIC MMIO range, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 12/23] device tree: add nop_node, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 10/23] PPC: E500: Generate IRQ lines for many CPUs,
Alexander Graf <=
- [Qemu-devel] [PATCH 09/23] PPC: E500: create multiple envs, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 13/23] PPC: bamboo: Move host fdt copy to target, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 11/23] PPC: E500: Use spin code for secondary CPUs, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 20/23] PPC: E500: Update freqs for all CPUs, Alexander Graf, 2011/07/20
- [Qemu-devel] [PATCH 17/23] PPC: bamboo: Use kvm api for freq and clock frequencies, Alexander Graf, 2011/07/20