From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47472) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b5cgc-0000uC-8A for qemu-devel@nongnu.org; Wed, 25 May 2016 13:33:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1b5cga-0002cM-U5 for qemu-devel@nongnu.org; Wed, 25 May 2016 13:33:38 -0400 MIME-Version: 1.0 Sender: alistair23@gmail.com In-Reply-To: <1464173555-12800-3-git-send-email-edgar.iglesias@gmail.com> References: <1464173555-12800-1-git-send-email-edgar.iglesias@gmail.com> <1464173555-12800-3-git-send-email-edgar.iglesias@gmail.com> From: Alistair Francis Date: Wed, 25 May 2016 10:33:06 -0700 Message-ID: Content-Type: text/plain; charset=UTF-8 Subject: Re: [Qemu-devel] [PATCH v2 2/4] xlnx-zynqmp: Make the RPU subsystem optional List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Edgar E. Iglesias" Cc: "qemu-devel@nongnu.org Developers" , Edgar Iglesias , Peter Maydell , Peter Crosthwaite , qemu-arm , Alistair Francis On Wed, May 25, 2016 at 3:52 AM, Edgar E. Iglesias wrote: > From: "Edgar E. Iglesias" > > The way we currently model the RPU subsystem is of quite > limited use. In addition to that, it causes problems for > KVM and for GDB debugging. > > Make the RPU optional by adding a has_rpu property and > default to having it disabled. > > This changes the default setup from having the RPU to not > longer having it. > > Signed-off-by: Edgar E. Iglesias Reviewed-by: Alistair Francis Thanks, Alistair > --- > hw/arm/xlnx-zynqmp.c | 62 +++++++++++++++++++++++++++----------------- > include/hw/arm/xlnx-zynqmp.h | 2 ++ > 2 files changed, 40 insertions(+), 24 deletions(-) > > diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c > index 965a250..3a8af6a 100644 > --- a/hw/arm/xlnx-zynqmp.c > +++ b/hw/arm/xlnx-zynqmp.c > @@ -83,6 +83,41 @@ static inline int arm_gic_ppi_index(int cpu_nr, int ppi_index) > return GIC_NUM_SPI_INTR + cpu_nr * GIC_INTERNAL + ppi_index; > } > > +static void xlnx_zynqmp_create_rpu(XlnxZynqMPState *s, const char *boot_cpu, > + Error **errp) > +{ > + Error *err = NULL; > + int i; > + > + for (i = 0; i < XLNX_ZYNQMP_NUM_RPU_CPUS; i++) { > + char *name; > + > + object_initialize(&s->rpu_cpu[i], sizeof(s->rpu_cpu[i]), > + "cortex-r5-" TYPE_ARM_CPU); > + object_property_add_child(OBJECT(s), "rpu-cpu[*]", > + OBJECT(&s->rpu_cpu[i]), &error_abort); > + > + name = object_get_canonical_path_component(OBJECT(&s->rpu_cpu[i])); > + if (strcmp(name, boot_cpu)) { > + /* Secondary CPUs start in PSCI powered-down state */ > + object_property_set_bool(OBJECT(&s->rpu_cpu[i]), true, > + "start-powered-off", &error_abort); > + } else { > + s->boot_cpu_ptr = &s->rpu_cpu[i]; > + } > + g_free(name); > + > + object_property_set_bool(OBJECT(&s->rpu_cpu[i]), true, "reset-hivecs", > + &error_abort); > + object_property_set_bool(OBJECT(&s->rpu_cpu[i]), true, "realized", > + &err); > + if (err) { > + error_propagate(errp, err); > + return; > + } > + } > +} > + > static void xlnx_zynqmp_init(Object *obj) > { > XlnxZynqMPState *s = XLNX_ZYNQMP(obj); > @@ -95,13 +130,6 @@ static void xlnx_zynqmp_init(Object *obj) > &error_abort); > } > > - for (i = 0; i < XLNX_ZYNQMP_NUM_RPU_CPUS; i++) { > - object_initialize(&s->rpu_cpu[i], sizeof(s->rpu_cpu[i]), > - "cortex-r5-" TYPE_ARM_CPU); > - object_property_add_child(obj, "rpu-cpu[*]", OBJECT(&s->rpu_cpu[i]), > - &error_abort); > - } > - > object_property_add_link(obj, "ddr-ram", TYPE_MEMORY_REGION, > (Object **)&s->ddr_ram, > qdev_prop_allow_set_link_before_realize, > @@ -260,23 +288,8 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp) > qdev_connect_gpio_out(DEVICE(&s->apu_cpu[i]), 1, irq); > } > > - for (i = 0; i < XLNX_ZYNQMP_NUM_RPU_CPUS; i++) { > - char *name; > - > - name = object_get_canonical_path_component(OBJECT(&s->rpu_cpu[i])); > - if (strcmp(name, boot_cpu)) { > - /* Secondary CPUs start in PSCI powered-down state */ > - object_property_set_bool(OBJECT(&s->rpu_cpu[i]), true, > - "start-powered-off", &error_abort); > - } else { > - s->boot_cpu_ptr = &s->rpu_cpu[i]; > - } > - g_free(name); > - > - object_property_set_bool(OBJECT(&s->rpu_cpu[i]), true, "reset-hivecs", > - &error_abort); > - object_property_set_bool(OBJECT(&s->rpu_cpu[i]), true, "realized", > - &err); > + if (s->has_rpu) { > + xlnx_zynqmp_create_rpu(s, boot_cpu, &err); > if (err) { > error_propagate(errp, err); > return; > @@ -373,6 +386,7 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp) > static Property xlnx_zynqmp_props[] = { > DEFINE_PROP_STRING("boot-cpu", XlnxZynqMPState, boot_cpu), > DEFINE_PROP_BOOL("secure", XlnxZynqMPState, secure, false), > + DEFINE_PROP_BOOL("has_rpu", XlnxZynqMPState, has_rpu, false), > DEFINE_PROP_END_OF_LIST() > }; > > diff --git a/include/hw/arm/xlnx-zynqmp.h b/include/hw/arm/xlnx-zynqmp.h > index 38d4c8c..68f6eb0 100644 > --- a/include/hw/arm/xlnx-zynqmp.h > +++ b/include/hw/arm/xlnx-zynqmp.h > @@ -87,6 +87,8 @@ typedef struct XlnxZynqMPState { > > /* Has the ARM Security extensions? */ > bool secure; > + /* Has the RPU subsystem? */ > + bool has_rpu; > } XlnxZynqMPState; > > #define XLNX_ZYNQMP_H > -- > 2.5.0 > >