From: David Gibson <david@gibson.dropbear.id.au>
To: peter.maydell@linaro.org
Cc: gkurz@kaod.org, clg@kaod.org, lvivier@redhat.com,
spopovyc@redhat.com, qemu-ppc@nongnu.org, qemu-devel@nongnu.org,
Greg Kurz <groug@kaod.org>,
David Gibson <david@gibson.dropbear.id.au>
Subject: [Qemu-devel] [PULL 12/27] e500: simplify IRQ wiring
Date: Thu, 13 Dec 2018 15:01:11 +1100 [thread overview]
Message-ID: <20181213040126.6768-13-david@gibson.dropbear.id.au> (raw)
In-Reply-To: <20181213040126.6768-1-david@gibson.dropbear.id.au>
From: Greg Kurz <groug@kaod.org>
The OpenPIC have 5 outputs per connected CPU. The machine init code hence
needs a bi-dimensional array (smp_cpu lines, 5 columns) to wire up the irqs
between the PIC and the CPUs.
The current code first allocates an array of smp_cpus pointers to qemu_irq
type, then it allocates another array of smp_cpus * 5 qemu_irq and fills the
first array with pointers to each line of the second array. This is rather
convoluted.
Simplify the logic by introducing a structured type that describes all the
OpenPIC outputs for a single CPU, ie, fixed size of 5 qemu_irq, and only
allocate a smp_cpu sized array of those.
This also allows to use g_new(T, n) instead of g_malloc(sizeof(T) * n)
as recommended in HACKING.
Signed-off-by: Greg Kurz <groug@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/ppc/e500.c | 18 ++++++++----------
1 file changed, 8 insertions(+), 10 deletions(-)
diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
index e6747fce28..b20fea0dfc 100644
--- a/hw/ppc/e500.c
+++ b/hw/ppc/e500.c
@@ -685,7 +685,7 @@ static void ppce500_cpu_reset(void *opaque)
}
static DeviceState *ppce500_init_mpic_qemu(PPCE500MachineState *pms,
- qemu_irq **irqs)
+ IrqLines *irqs)
{
DeviceState *dev;
SysBusDevice *s;
@@ -705,7 +705,7 @@ static DeviceState *ppce500_init_mpic_qemu(PPCE500MachineState *pms,
k = 0;
for (i = 0; i < smp_cpus; i++) {
for (j = 0; j < OPENPIC_OUTPUT_NB; j++) {
- sysbus_connect_irq(s, k++, irqs[i][j]);
+ sysbus_connect_irq(s, k++, irqs[i].irq[j]);
}
}
@@ -713,7 +713,7 @@ static DeviceState *ppce500_init_mpic_qemu(PPCE500MachineState *pms,
}
static DeviceState *ppce500_init_mpic_kvm(const PPCE500MachineClass *pmc,
- qemu_irq **irqs, Error **errp)
+ IrqLines *irqs, Error **errp)
{
Error *err = NULL;
DeviceState *dev;
@@ -742,7 +742,7 @@ static DeviceState *ppce500_init_mpic_kvm(const PPCE500MachineClass *pmc,
static DeviceState *ppce500_init_mpic(PPCE500MachineState *pms,
MemoryRegion *ccsr,
- qemu_irq **irqs)
+ IrqLines *irqs)
{
MachineState *machine = MACHINE(pms);
const PPCE500MachineClass *pmc = PPCE500_MACHINE_GET_CLASS(pms);
@@ -806,15 +806,14 @@ void ppce500_init(MachineState *machine)
/* irq num for pin INTA, INTB, INTC and INTD is 1, 2, 3 and
* 4 respectively */
unsigned int pci_irq_nrs[PCI_NUM_PINS] = {1, 2, 3, 4};
- qemu_irq **irqs;
+ IrqLines *irqs;
DeviceState *dev, *mpicdev;
CPUPPCState *firstenv = NULL;
MemoryRegion *ccsr_addr_space;
SysBusDevice *s;
PPCE500CCSRState *ccsr;
- irqs = g_malloc0(smp_cpus * sizeof(qemu_irq *));
- irqs[0] = g_malloc0(smp_cpus * sizeof(qemu_irq) * OPENPIC_OUTPUT_NB);
+ irqs = g_new0(IrqLines, smp_cpus);
for (i = 0; i < smp_cpus; i++) {
PowerPCCPU *cpu;
CPUState *cs;
@@ -834,10 +833,9 @@ void ppce500_init(MachineState *machine)
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];
+ irqs[i].irq[OPENPIC_OUTPUT_INT] = input[PPCE500_INPUT_INT];
+ irqs[i].irq[OPENPIC_OUTPUT_CINT] = input[PPCE500_INPUT_CINT];
env->spr_cb[SPR_BOOKE_PIR].default_value = cs->cpu_index = i;
env->mpic_iack = pmc->ccsrbar_base + MPC8544_MPIC_REGS_OFFSET + 0xa0;
--
2.19.2
next prev parent reply other threads:[~2018-12-13 4:01 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-13 4:00 [Qemu-devel] [PULL 00/27] ppc-for-4.0 queue 20181213 David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 01/27] spapr: Fix ibm, max-associativity-domains property number of nodes David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 02/27] target/ppc: tcg: Implement addex instruction David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 03/27] spapr: drop redundant statement in spapr_populate_drconf_memory() David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 04/27] target/ppc: use g_new(T, n) instead of g_malloc(sizeof(T) * n) David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 05/27] spapr: " David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 06/27] ppc405_boards: " David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 07/27] ppc405_uc: " David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 08/27] ppc440_bamboo: " David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 09/27] sam460ex: " David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 10/27] virtex_ml507: " David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 11/27] mac_newworld: simplify IRQ wiring David Gibson
2018-12-13 4:01 ` David Gibson [this message]
2018-12-13 4:01 ` [Qemu-devel] [PULL 13/27] ppc/xive: introduce a XIVE interrupt source model David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 14/27] ppc/xive: add support for the LSI interrupt sources David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 15/27] ppc/xive: introduce the XiveNotifier interface David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 16/27] ppc/xive: introduce the XiveRouter model David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 17/27] ppc/xive: introduce the XIVE Event Notification Descriptors David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 18/27] spapr: initialize VSMT before initializing the IRQ backend David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 19/27] spapr: introduce a spapr_irq_init() routine David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 20/27] spapr: export and rename the xics_max_server_number() routine David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 21/27] Changes requirement for "vsubsbs" instruction David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 22/27] ppc/xive: add support for the END Event State Buffers David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 23/27] ppc/xive: introduce the XIVE interrupt thread context David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 24/27] ppc/xive: introduce a simplified XIVE presenter David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 25/27] ppc/xive: notify the CPU when the interrupt priority is more privileged David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 26/27] spapr/xive: introduce a XIVE interrupt controller David Gibson
2018-12-13 4:01 ` [Qemu-devel] [PULL 27/27] spapr/xive: use the VCPU id as a NVT identifier David Gibson
2018-12-13 7:43 ` [Qemu-devel] [PULL 00/27] ppc-for-4.0 queue 20181213 no-reply
2018-12-13 12:08 ` David Gibson
2018-12-13 12:57 ` Cédric Le Goater
2018-12-14 16:03 ` Peter Maydell
2018-12-14 17:49 ` Cédric Le Goater
2018-12-17 1:03 ` David Gibson
2018-12-17 7:41 ` [Qemu-devel] [Qemu-ppc] " Howard Spoelstra
2018-12-17 8:04 ` [Qemu-devel] " Cédric Le Goater
2018-12-17 10:11 ` Cédric Le Goater
2018-12-15 9:09 ` David Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181213040126.6768-13-david@gibson.dropbear.id.au \
--to=david@gibson.dropbear.id.au \
--cc=clg@kaod.org \
--cc=gkurz@kaod.org \
--cc=groug@kaod.org \
--cc=lvivier@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=spopovyc@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).