From: Luc Michel <luc.michel@greensocs.com>
To: qemu-devel@nongnu.org
Cc: "Luc Michel" <luc.michel@greensocs.com>,
qemu-arm@nongnu.org, "Peter Maydell" <peter.maydell@linaro.org>,
saipava@xilinx.com, edgari@xilinx.com, alistair@alistair23.me,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
mark.burton@greensocs.com,
"Eduardo Habkost" <ehabkost@redhat.com>
Subject: [Qemu-devel] [PATCH v8 16/16] arm/xlnx-zynqmp: put APUs and RPUs in separate CPU clusters
Date: Fri, 7 Dec 2018 10:01:34 +0100 [thread overview]
Message-ID: <20181207090135.7651-17-luc.michel@greensocs.com> (raw)
In-Reply-To: <20181207090135.7651-1-luc.michel@greensocs.com>
Create two separate CPU clusters for APUs and RPUs.
Signed-off-by: Luc Michel <luc.michel@greensocs.com>
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
---
include/hw/arm/xlnx-zynqmp.h | 3 +++
hw/arm/xlnx-zynqmp.c | 23 +++++++++++++++++++----
2 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/include/hw/arm/xlnx-zynqmp.h b/include/hw/arm/xlnx-zynqmp.h
index 98f925ab84..591515c760 100644
--- a/include/hw/arm/xlnx-zynqmp.h
+++ b/include/hw/arm/xlnx-zynqmp.h
@@ -29,10 +29,11 @@
#include "hw/dma/xlnx_dpdma.h"
#include "hw/dma/xlnx-zdma.h"
#include "hw/display/xlnx_dp.h"
#include "hw/intc/xlnx-zynqmp-ipi.h"
#include "hw/timer/xlnx-zynqmp-rtc.h"
+#include "hw/cpu/cluster.h"
#define TYPE_XLNX_ZYNQMP "xlnx,zynqmp"
#define XLNX_ZYNQMP(obj) OBJECT_CHECK(XlnxZynqMPState, (obj), \
TYPE_XLNX_ZYNQMP)
@@ -75,10 +76,12 @@
typedef struct XlnxZynqMPState {
/*< private >*/
DeviceState parent_obj;
/*< public >*/
+ CPUClusterState apu_cluster;
+ CPUClusterState rpu_cluster;
ARMCPU apu_cpu[XLNX_ZYNQMP_NUM_APU_CPUS];
ARMCPU rpu_cpu[XLNX_ZYNQMP_NUM_RPU_CPUS];
GICState gic;
MemoryRegion gic_mr[XLNX_ZYNQMP_GIC_REGIONS][XLNX_ZYNQMP_GIC_ALIASES];
diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c
index c195040350..c67ac2e64a 100644
--- a/hw/arm/xlnx-zynqmp.c
+++ b/hw/arm/xlnx-zynqmp.c
@@ -176,16 +176,23 @@ static void xlnx_zynqmp_create_rpu(XlnxZynqMPState *s, const char *boot_cpu,
{
Error *err = NULL;
int i;
int num_rpus = MIN(smp_cpus - XLNX_ZYNQMP_NUM_APU_CPUS, XLNX_ZYNQMP_NUM_RPU_CPUS);
+ object_initialize_child(OBJECT(s), "rpu-cluster", &s->rpu_cluster,
+ sizeof(s->rpu_cluster), TYPE_CPU_CLUSTER,
+ &error_abort, NULL);
+ qdev_prop_set_uint32(DEVICE(&s->rpu_cluster), "cluster-id", 1);
+
+ qdev_init_nofail(DEVICE(&s->rpu_cluster));
+
for (i = 0; i < num_rpus; i++) {
char *name;
object_initialize(&s->rpu_cpu[i], sizeof(s->rpu_cpu[i]),
"cortex-r5f-" TYPE_ARM_CPU);
- object_property_add_child(OBJECT(s), "rpu-cpu[*]",
+ object_property_add_child(OBJECT(&s->rpu_cluster), "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 */
@@ -211,14 +218,20 @@ static void xlnx_zynqmp_init(Object *obj)
{
XlnxZynqMPState *s = XLNX_ZYNQMP(obj);
int i;
int num_apus = MIN(smp_cpus, XLNX_ZYNQMP_NUM_APU_CPUS);
+ object_initialize_child(obj, "apu-cluster", &s->apu_cluster,
+ sizeof(s->apu_cluster), TYPE_CPU_CLUSTER,
+ &error_abort, NULL);
+ qdev_prop_set_uint32(DEVICE(&s->apu_cluster), "cluster-id", 0);
+
for (i = 0; i < num_apus; i++) {
- object_initialize_child(obj, "apu-cpu[*]", &s->apu_cpu[i],
- sizeof(s->apu_cpu[i]),
- "cortex-a53-" TYPE_ARM_CPU, &error_abort, NULL);
+ object_initialize_child(OBJECT(&s->apu_cluster), "apu-cpu[*]",
+ &s->apu_cpu[i], sizeof(s->apu_cpu[i]),
+ "cortex-a53-" TYPE_ARM_CPU, &error_abort,
+ NULL);
}
sysbus_init_child_obj(obj, "gic", &s->gic, sizeof(s->gic),
gic_class_name());
@@ -331,10 +344,12 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
qdev_prop_set_uint32(DEVICE(&s->gic), "num-cpu", num_apus);
qdev_prop_set_bit(DEVICE(&s->gic), "has-security-extensions", s->secure);
qdev_prop_set_bit(DEVICE(&s->gic),
"has-virtualization-extensions", s->virt);
+ qdev_init_nofail(DEVICE(&s->apu_cluster));
+
/* Realize APUs before realizing the GIC. KVM requires this. */
for (i = 0; i < num_apus; i++) {
char *name;
object_property_set_int(OBJECT(&s->apu_cpu[i]), QEMU_PSCI_CONDUIT_SMC,
--
2.19.2
next prev parent reply other threads:[~2018-12-07 9:02 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-07 9:01 [Qemu-devel] [PATCH v8 00/16] gdbstub: support for the multiprocess extension Luc Michel
2018-12-07 9:01 ` [Qemu-devel] [PATCH v8 01/16] hw/cpu: introduce CPU clusters Luc Michel
2018-12-07 9:01 ` [Qemu-devel] [PATCH v8 02/16] gdbstub: introduce GDB processes Luc Michel
2018-12-07 9:01 ` [Qemu-devel] [PATCH v8 03/16] gdbstub: add multiprocess support to '?' packets Luc Michel
2018-12-07 9:01 ` [Qemu-devel] [PATCH v8 04/16] gdbstub: add multiprocess support to 'H' and 'T' packets Luc Michel
2018-12-08 0:55 ` Alistair Francis
2018-12-07 9:01 ` [Qemu-devel] [PATCH v8 05/16] gdbstub: add multiprocess support to vCont packets Luc Michel
2018-12-07 9:01 ` [Qemu-devel] [PATCH v8 06/16] gdbstub: add multiprocess support to 'sC' packets Luc Michel
2018-12-07 9:01 ` [Qemu-devel] [PATCH v8 07/16] gdbstub: add multiprocess support to (f|s)ThreadInfo and ThreadExtraInfo Luc Michel
2018-12-12 17:35 ` Alistair Francis
2019-01-29 4:56 ` Max Filippov
2019-01-29 10:05 ` Peter Maydell
2019-01-29 20:25 ` Max Filippov
2018-12-07 9:01 ` [Qemu-devel] [PATCH v8 08/16] gdbstub: add multiprocess support to Xfer:features:read: Luc Michel
2018-12-07 9:01 ` [Qemu-devel] [PATCH v8 09/16] gdbstub: add multiprocess support to gdb_vm_state_change() Luc Michel
2018-12-07 9:01 ` [Qemu-devel] [PATCH v8 10/16] gdbstub: add multiprocess support to 'D' packets Luc Michel
2018-12-07 9:01 ` [Qemu-devel] [PATCH v8 11/16] gdbstub: add support for extended mode packet Luc Michel
2018-12-07 9:01 ` [Qemu-devel] [PATCH v8 12/16] gdbstub: add support for vAttach packets Luc Michel
2018-12-07 9:01 ` [Qemu-devel] [PATCH v8 13/16] gdbstub: processes initialization on new peer connection Luc Michel
2018-12-07 9:01 ` [Qemu-devel] [PATCH v8 14/16] gdbstub: gdb_set_stop_cpu: ignore request when process is not attached Luc Michel
2018-12-07 9:01 ` [Qemu-devel] [PATCH v8 15/16] gdbstub: add multiprocess extension support Luc Michel
2018-12-07 9:01 ` Luc Michel [this message]
2018-12-17 8:23 ` [Qemu-devel] [PATCH v8 00/16] gdbstub: support for the multiprocess extension Luc Michel
2018-12-17 12:43 ` Peter Maydell
2019-01-04 15:12 ` Peter Maydell
2019-01-07 8:56 ` Luc Michel
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=20181207090135.7651-17-luc.michel@greensocs.com \
--to=luc.michel@greensocs.com \
--cc=alistair@alistair23.me \
--cc=edgari@xilinx.com \
--cc=ehabkost@redhat.com \
--cc=f4bug@amsat.org \
--cc=mark.burton@greensocs.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=saipava@xilinx.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).