On Tue, Feb 12, 2019 at 07:24:19PM +0100, Greg Kurz wrote: > This will be needed by PHB hotplug in order to access the "phandle" > property of the interrupt controller node. > > Reviewed-by: Cédric Le Goater <c...@kaod.org> > Signed-off-by: Greg Kurz <gr...@kaod.org>
Reviewed-by: David Gibson <da...@gibson.dropbear.id.au> > --- > v4: - folded some changes from patches 15, 16 and 17 of v3 > - dropped useless helpers > --- > hw/intc/spapr_xive.c | 9 ++++----- > hw/intc/xics_spapr.c | 2 +- > hw/ppc/spapr_irq.c | 21 ++++++++++++++++++++- > include/hw/ppc/spapr_irq.h | 1 + > include/hw/ppc/spapr_xive.h | 3 +++ > include/hw/ppc/xics_spapr.h | 2 ++ > 6 files changed, 31 insertions(+), 7 deletions(-) > > diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c > index 815263ca72ab..f14e436ad4b9 100644 > --- a/hw/intc/spapr_xive.c > +++ b/hw/intc/spapr_xive.c > @@ -317,6 +317,9 @@ static void spapr_xive_realize(DeviceState *dev, Error > **errp) > /* Map all regions */ > spapr_xive_map_mmio(xive); > > + xive->nodename = g_strdup_printf("interrupt-controller@%" PRIx64, > + xive->tm_base + XIVE_TM_USER_PAGE * (1 << > TM_SHIFT)); > + > qemu_register_reset(spapr_xive_reset, dev); > } > > @@ -1443,7 +1446,6 @@ void spapr_dt_xive(sPAPRMachineState *spapr, uint32_t > nr_servers, void *fdt, > cpu_to_be32(7), /* start */ > cpu_to_be32(0xf8), /* count */ > }; > - gchar *nodename; > > /* Thread Interrupt Management Area : User (ring 3) and OS (ring 2) */ > timas[0] = cpu_to_be64(xive->tm_base + > @@ -1453,10 +1455,7 @@ void spapr_dt_xive(sPAPRMachineState *spapr, uint32_t > nr_servers, void *fdt, > XIVE_TM_OS_PAGE * (1ull << TM_SHIFT)); > timas[3] = cpu_to_be64(1ull << TM_SHIFT); > > - nodename = g_strdup_printf("interrupt-controller@%" PRIx64, > - xive->tm_base + XIVE_TM_USER_PAGE * (1 << > TM_SHIFT)); > - _FDT(node = fdt_add_subnode(fdt, 0, nodename)); > - g_free(nodename); > + _FDT(node = fdt_add_subnode(fdt, 0, xive->nodename)); > > _FDT(fdt_setprop_string(fdt, node, "device_type", "power-ivpe")); > _FDT(fdt_setprop(fdt, node, "reg", timas, sizeof(timas))); > diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c > index e2d8b3818336..53bda6661b2a 100644 > --- a/hw/intc/xics_spapr.c > +++ b/hw/intc/xics_spapr.c > @@ -254,7 +254,7 @@ void spapr_dt_xics(sPAPRMachineState *spapr, uint32_t > nr_servers, void *fdt, > }; > int node; > > - _FDT(node = fdt_add_subnode(fdt, 0, "interrupt-controller")); > + _FDT(node = fdt_add_subnode(fdt, 0, XICS_NODENAME)); > > _FDT(fdt_setprop_string(fdt, node, "device_type", > "PowerPC-External-Interrupt-Presentation")); > diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c > index 3fc34d7c8a43..b8d725e251ba 100644 > --- a/hw/ppc/spapr_irq.c > +++ b/hw/ppc/spapr_irq.c > @@ -256,6 +256,11 @@ static void spapr_irq_reset_xics(sPAPRMachineState > *spapr, Error **errp) > /* TODO: create the KVM XICS device */ > } > > +static const char *spapr_irq_get_nodename_xics(sPAPRMachineState *spapr) > +{ > + return XICS_NODENAME; > +} > + > #define SPAPR_IRQ_XICS_NR_IRQS 0x1000 > #define SPAPR_IRQ_XICS_NR_MSIS \ > (XICS_IRQ_BASE + SPAPR_IRQ_XICS_NR_IRQS - SPAPR_IRQ_MSI) > @@ -276,6 +281,7 @@ sPAPRIrq spapr_irq_xics = { > .post_load = spapr_irq_post_load_xics, > .reset = spapr_irq_reset_xics, > .set_irq = spapr_irq_set_irq_xics, > + .get_nodename = spapr_irq_get_nodename_xics, > }; > > /* > @@ -415,6 +421,11 @@ static void spapr_irq_set_irq_xive(void *opaque, int > srcno, int val) > xive_source_set_irq(&spapr->xive->source, srcno, val); > } > > +static const char *spapr_irq_get_nodename_xive(sPAPRMachineState *spapr) > +{ > + return spapr->xive->nodename; > +} > + > /* > * XIVE uses the full IRQ number space. Set it to 8K to be compatible > * with XICS. > @@ -438,6 +449,7 @@ sPAPRIrq spapr_irq_xive = { > .post_load = spapr_irq_post_load_xive, > .reset = spapr_irq_reset_xive, > .set_irq = spapr_irq_set_irq_xive, > + .get_nodename = spapr_irq_get_nodename_xive, > }; > > /* > @@ -585,6 +597,11 @@ static void spapr_irq_set_irq_dual(void *opaque, int > srcno, int val) > spapr_irq_current(spapr)->set_irq(spapr, srcno, val); > } > > +static const char *spapr_irq_get_nodename_dual(sPAPRMachineState *spapr) > +{ > + return spapr_irq_current(spapr)->get_nodename(spapr); > +} > + > /* > * Define values in sync with the XIVE and XICS backend > */ > @@ -615,7 +632,8 @@ sPAPRIrq spapr_irq_dual = { > .cpu_intc_create = spapr_irq_cpu_intc_create_dual, > .post_load = spapr_irq_post_load_dual, > .reset = spapr_irq_reset_dual, > - .set_irq = spapr_irq_set_irq_dual > + .set_irq = spapr_irq_set_irq_dual, > + .get_nodename = spapr_irq_get_nodename_dual, > }; > > /* > @@ -751,4 +769,5 @@ sPAPRIrq spapr_irq_xics_legacy = { > .cpu_intc_create = spapr_irq_cpu_intc_create_xics, > .post_load = spapr_irq_post_load_xics, > .set_irq = spapr_irq_set_irq_xics, > + .get_nodename = spapr_irq_get_nodename_xics, > }; > diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h > index 0e6c65d55430..ad7127355441 100644 > --- a/include/hw/ppc/spapr_irq.h > +++ b/include/hw/ppc/spapr_irq.h > @@ -48,6 +48,7 @@ typedef struct sPAPRIrq { > int (*post_load)(sPAPRMachineState *spapr, int version_id); > void (*reset)(sPAPRMachineState *spapr, Error **errp); > void (*set_irq)(void *opaque, int srcno, int val); > + const char *(*get_nodename)(sPAPRMachineState *spapr); > } sPAPRIrq; > > extern sPAPRIrq spapr_irq_xics; > diff --git a/include/hw/ppc/spapr_xive.h b/include/hw/ppc/spapr_xive.h > index 885ca169cb29..2c57a59a3f5b 100644 > --- a/include/hw/ppc/spapr_xive.h > +++ b/include/hw/ppc/spapr_xive.h > @@ -26,6 +26,9 @@ typedef struct sPAPRXive { > XiveENDSource end_source; > hwaddr end_base; > > + /* DT */ > + gchar *nodename; > + > /* Routing table */ > XiveEAS *eat; > uint32_t nr_irqs; > diff --git a/include/hw/ppc/xics_spapr.h b/include/hw/ppc/xics_spapr.h > index b1ab27d022cf..b8d924baf437 100644 > --- a/include/hw/ppc/xics_spapr.h > +++ b/include/hw/ppc/xics_spapr.h > @@ -29,6 +29,8 @@ > > #include "hw/ppc/spapr.h" > > +#define XICS_NODENAME "interrupt-controller" > + > void spapr_dt_xics(sPAPRMachineState *spapr, uint32_t nr_servers, void *fdt, > uint32_t phandle); > int xics_kvm_init(sPAPRMachineState *spapr, Error **errp); > -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature