Message ID | 20220406174303.2022038-2-edgar.iglesias@xilinx.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | hw/arm: versal: Add Cortex-R5s and CRL | expand |
-----Original Message----- From: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Sent: 06 April 2022 18:43 To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org; peter.maydell@linaro.org; richard.henderson@linaro.org; alistair@alistair23.me; luc@lmichel.fr; f4bug@amsat.org; frasse.iglesias@gmail.com; Francisco Eduardo Iglesias <figlesia@xilinx.com>; Sai Pavan Boddu <saipava@xilinx.com>; Frederic Konrad <fkonrad@xilinx.com>; Edgar Iglesias <edgari@xilinx.com>; edgar.iglesias@amd.com Subject: [PATCH v1 1/4] hw/arm: versal: Create an APU CPU Cluster From: "Edgar E. Iglesias" <edgar.iglesias@amd.com> Create an APU CPU Cluster. This is in preparation to add the RPU. Signed-off-by: Edgar E. Iglesias <edgar.iglesias@amd.com> --- hw/arm/xlnx-versal.c | 9 ++++++++- include/hw/arm/xlnx-versal.h | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/hw/arm/xlnx-versal.c b/hw/arm/xlnx-versal.c index 2551dfc22d..4415ee413f 100644 --- a/hw/arm/xlnx-versal.c +++ b/hw/arm/xlnx-versal.c @@ -34,10 +34,15 @@ static void versal_create_apu_cpus(Versal *s) { int i; + object_initialize_child(OBJECT(s), "apu-cluster", &s->fpd.apu.cluster, + TYPE_CPU_CLUSTER); + qdev_prop_set_uint32(DEVICE(&s->fpd.apu.cluster), "cluster-id", 0); + for (i = 0; i < ARRAY_SIZE(s->fpd.apu.cpu); i++) { Object *obj; - object_initialize_child(OBJECT(s), "apu-cpu[*]", &s->fpd.apu.cpu[i], + object_initialize_child(OBJECT(&s->fpd.apu.cluster), + "apu-cpu[*]", &s->fpd.apu.cpu[i], XLNX_VERSAL_ACPU_TYPE); obj = OBJECT(&s->fpd.apu.cpu[i]); if (i) { @@ -52,6 +57,8 @@ static void versal_create_apu_cpus(Versal *s) &error_abort); qdev_realize(DEVICE(obj), NULL, &error_fatal); } + + qdev_realize(DEVICE(&s->fpd.apu.cluster), NULL, &error_fatal); } static void versal_create_apu_gic(Versal *s, qemu_irq *pic) diff --git a/include/hw/arm/xlnx-versal.h b/include/hw/arm/xlnx-versal.h index 0728316ec7..d2d3028e18 100644 --- a/include/hw/arm/xlnx-versal.h +++ b/include/hw/arm/xlnx-versal.h @@ -14,6 +14,7 @@ #include "hw/sysbus.h" #include "hw/arm/boot.h" +#include "hw/cpu/cluster.h" #include "hw/or-irq.h" #include "hw/sd/sdhci.h" #include "hw/intc/arm_gicv3.h" @@ -49,6 +50,7 @@ struct Versal { struct { struct { MemoryRegion mr; + CPUClusterState cluster; ARMCPU cpu[XLNX_VERSAL_NR_ACPUS]; GICv3State gic; } apu; -- 2.25.1 Reviewed-by: Frederic Konrad <fkonrad@amd.com>
On Wed, Apr 06, 2022 at 06:43:00PM +0100, Edgar E. Iglesias wrote: > From: "Edgar E. Iglesias" <edgar.iglesias@amd.com> > > Create an APU CPU Cluster. This is in preparation to add the RPU. > > Signed-off-by: Edgar E. Iglesias <edgar.iglesias@amd.com> Reviewed-by: Francisco Iglesias <francisco.iglesias@amd.com> > --- > hw/arm/xlnx-versal.c | 9 ++++++++- > include/hw/arm/xlnx-versal.h | 2 ++ > 2 files changed, 10 insertions(+), 1 deletion(-) > > diff --git a/hw/arm/xlnx-versal.c b/hw/arm/xlnx-versal.c > index 2551dfc22d..4415ee413f 100644 > --- a/hw/arm/xlnx-versal.c > +++ b/hw/arm/xlnx-versal.c > @@ -34,10 +34,15 @@ static void versal_create_apu_cpus(Versal *s) > { > int i; > > + object_initialize_child(OBJECT(s), "apu-cluster", &s->fpd.apu.cluster, > + TYPE_CPU_CLUSTER); > + qdev_prop_set_uint32(DEVICE(&s->fpd.apu.cluster), "cluster-id", 0); > + > for (i = 0; i < ARRAY_SIZE(s->fpd.apu.cpu); i++) { > Object *obj; > > - object_initialize_child(OBJECT(s), "apu-cpu[*]", &s->fpd.apu.cpu[i], > + object_initialize_child(OBJECT(&s->fpd.apu.cluster), > + "apu-cpu[*]", &s->fpd.apu.cpu[i], > XLNX_VERSAL_ACPU_TYPE); > obj = OBJECT(&s->fpd.apu.cpu[i]); > if (i) { > @@ -52,6 +57,8 @@ static void versal_create_apu_cpus(Versal *s) > &error_abort); > qdev_realize(DEVICE(obj), NULL, &error_fatal); > } > + > + qdev_realize(DEVICE(&s->fpd.apu.cluster), NULL, &error_fatal); > } > > static void versal_create_apu_gic(Versal *s, qemu_irq *pic) > diff --git a/include/hw/arm/xlnx-versal.h b/include/hw/arm/xlnx-versal.h > index 0728316ec7..d2d3028e18 100644 > --- a/include/hw/arm/xlnx-versal.h > +++ b/include/hw/arm/xlnx-versal.h > @@ -14,6 +14,7 @@ > > #include "hw/sysbus.h" > #include "hw/arm/boot.h" > +#include "hw/cpu/cluster.h" > #include "hw/or-irq.h" > #include "hw/sd/sdhci.h" > #include "hw/intc/arm_gicv3.h" > @@ -49,6 +50,7 @@ struct Versal { > struct { > struct { > MemoryRegion mr; > + CPUClusterState cluster; > ARMCPU cpu[XLNX_VERSAL_NR_ACPUS]; > GICv3State gic; > } apu; > -- > 2.25.1 >
diff --git a/hw/arm/xlnx-versal.c b/hw/arm/xlnx-versal.c index 2551dfc22d..4415ee413f 100644 --- a/hw/arm/xlnx-versal.c +++ b/hw/arm/xlnx-versal.c @@ -34,10 +34,15 @@ static void versal_create_apu_cpus(Versal *s) { int i; + object_initialize_child(OBJECT(s), "apu-cluster", &s->fpd.apu.cluster, + TYPE_CPU_CLUSTER); + qdev_prop_set_uint32(DEVICE(&s->fpd.apu.cluster), "cluster-id", 0); + for (i = 0; i < ARRAY_SIZE(s->fpd.apu.cpu); i++) { Object *obj; - object_initialize_child(OBJECT(s), "apu-cpu[*]", &s->fpd.apu.cpu[i], + object_initialize_child(OBJECT(&s->fpd.apu.cluster), + "apu-cpu[*]", &s->fpd.apu.cpu[i], XLNX_VERSAL_ACPU_TYPE); obj = OBJECT(&s->fpd.apu.cpu[i]); if (i) { @@ -52,6 +57,8 @@ static void versal_create_apu_cpus(Versal *s) &error_abort); qdev_realize(DEVICE(obj), NULL, &error_fatal); } + + qdev_realize(DEVICE(&s->fpd.apu.cluster), NULL, &error_fatal); } static void versal_create_apu_gic(Versal *s, qemu_irq *pic) diff --git a/include/hw/arm/xlnx-versal.h b/include/hw/arm/xlnx-versal.h index 0728316ec7..d2d3028e18 100644 --- a/include/hw/arm/xlnx-versal.h +++ b/include/hw/arm/xlnx-versal.h @@ -14,6 +14,7 @@ #include "hw/sysbus.h" #include "hw/arm/boot.h" +#include "hw/cpu/cluster.h" #include "hw/or-irq.h" #include "hw/sd/sdhci.h" #include "hw/intc/arm_gicv3.h" @@ -49,6 +50,7 @@ struct Versal { struct { struct { MemoryRegion mr; + CPUClusterState cluster; ARMCPU cpu[XLNX_VERSAL_NR_ACPUS]; GICv3State gic; } apu;