qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v3 0/2] Add a property to set the ARM CPU core count
@ 2018-03-02 19:15 Alistair Francis
  2018-03-02 19:16 ` [Qemu-devel] [PATCH v3 1/2] target/arm: Add a core count property Alistair Francis
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Alistair Francis @ 2018-03-02 19:15 UTC (permalink / raw)
  To: qemu-devel, peter.maydell; +Cc: alistair.francis, alistair23


Add an ARM CPU property which allows us to set the ARM CPU core count.
V3:
 - Fix Linux user mode compile failure

V2:
 - Fix commit message and title.
 - Move the core_count default setting logic to the arm_cpu_realize()
   function.


Alistair Francis (2):
  target/arm: Add a core count property
  hw/arm: Set the core count for Xilinx's ZynqMP

 target/arm/cpu.h     | 5 +++++
 hw/arm/xlnx-zynqmp.c | 2 ++
 target/arm/cpu.c     | 6 ++++++
 target/arm/cpu64.c   | 6 ++++--
 4 files changed, 17 insertions(+), 2 deletions(-)

-- 
2.14.1

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Qemu-devel] [PATCH v3 1/2] target/arm: Add a core count property
  2018-03-02 19:15 [Qemu-devel] [PATCH v3 0/2] Add a property to set the ARM CPU core count Alistair Francis
@ 2018-03-02 19:16 ` Alistair Francis
  2018-03-02 19:16 ` [Qemu-devel] [PATCH v3 2/2] hw/arm: Set the core count for Xilinx's ZynqMP Alistair Francis
  2018-03-05 15:14 ` [Qemu-devel] [PATCH v3 0/2] Add a property to set the ARM CPU core count Peter Maydell
  2 siblings, 0 replies; 4+ messages in thread
From: Alistair Francis @ 2018-03-02 19:16 UTC (permalink / raw)
  To: qemu-devel, peter.maydell; +Cc: alistair.francis, alistair23

The cortex A53 TRM specifies that bits 24 and 25 of the L2CTLR register
specify the number of cores in the processor, not the total number of
cores in the sytem. To report this correctly on machines with multiple
CPU clusters (ARM's big.LITTLE or Xilinx's ZynqMP) we need to allow
the machine to overwrite this value. To do this let's add an optional
property.

Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
---
V3:
 - Fix Linux user compile failure
V2:
 - Fix commit message and title.
 - Move the core_count default setting logic to the arm_cpu_realize()
   function.

 target/arm/cpu.h   | 5 +++++
 target/arm/cpu.c   | 6 ++++++
 target/arm/cpu64.c | 6 ++++--
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/target/arm/cpu.h b/target/arm/cpu.h
index 8dd6b788df..3fa8fdad21 100644
--- a/target/arm/cpu.h
+++ b/target/arm/cpu.h
@@ -745,6 +745,11 @@ struct ARMCPU {
     /* Uniprocessor system with MP extensions */
     bool mp_is_up;
 
+    /* Specify the number of cores in this CPU cluster. Used for the L2CTLR
+     * register.
+     */
+    int32_t core_count;
+
     /* The instance init functions for implementation-specific subclasses
      * set these fields to specify the implementation-dependent values of
      * various constant registers and reset values of non-constant
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index 6b77aaa445..3e4e9f1873 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -939,6 +939,11 @@ static void arm_cpu_realizefn(DeviceState *dev, Error **errp)
         cs->num_ases = 1;
     }
     cpu_address_space_init(cs, ARMASIdx_NS, "cpu-memory", cs->memory);
+
+    /* No core_count specified, default to smp_cpus. */
+    if (cpu->core_count == -1) {
+        cpu->core_count = smp_cpus;
+    }
 #endif
 
     qemu_init_vcpu(cs);
@@ -1765,6 +1770,7 @@ static Property arm_cpu_properties[] = {
     DEFINE_PROP_UINT64("mp-affinity", ARMCPU,
                         mp_affinity, ARM64_AFFINITY_INVALID),
     DEFINE_PROP_INT32("node-id", ARMCPU, node_id, CPU_UNSET_NUMA_NODE_ID),
+    DEFINE_PROP_INT32("core-count", ARMCPU, core_count, -1),
     DEFINE_PROP_END_OF_LIST()
 };
 
diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c
index 4228713b19..dd9ba973f7 100644
--- a/target/arm/cpu64.c
+++ b/target/arm/cpu64.c
@@ -42,8 +42,10 @@ static inline void unset_feature(CPUARMState *env, int feature)
 #ifndef CONFIG_USER_ONLY
 static uint64_t a57_a53_l2ctlr_read(CPUARMState *env, const ARMCPRegInfo *ri)
 {
-    /* Number of processors is in [25:24]; otherwise we RAZ */
-    return (smp_cpus - 1) << 24;
+    ARMCPU *cpu = arm_env_get_cpu(env);
+
+    /* Number of cores is in [25:24]; otherwise we RAZ */
+    return (cpu->core_count - 1) << 24;
 }
 #endif
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [Qemu-devel] [PATCH v3 2/2] hw/arm: Set the core count for Xilinx's ZynqMP
  2018-03-02 19:15 [Qemu-devel] [PATCH v3 0/2] Add a property to set the ARM CPU core count Alistair Francis
  2018-03-02 19:16 ` [Qemu-devel] [PATCH v3 1/2] target/arm: Add a core count property Alistair Francis
@ 2018-03-02 19:16 ` Alistair Francis
  2018-03-05 15:14 ` [Qemu-devel] [PATCH v3 0/2] Add a property to set the ARM CPU core count Peter Maydell
  2 siblings, 0 replies; 4+ messages in thread
From: Alistair Francis @ 2018-03-02 19:16 UTC (permalink / raw)
  To: qemu-devel, peter.maydell; +Cc: alistair.francis, alistair23

Set the ARM CPU core count property for the A53's attached to the Xilnx
ZynqMP machine.

Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
---

 hw/arm/xlnx-zynqmp.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c
index 69227fd4c9..465796e97c 100644
--- a/hw/arm/xlnx-zynqmp.c
+++ b/hw/arm/xlnx-zynqmp.c
@@ -282,6 +282,8 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
                                  s->virt, "has_el2", NULL);
         object_property_set_int(OBJECT(&s->apu_cpu[i]), GIC_BASE_ADDR,
                                 "reset-cbar", &error_abort);
+        object_property_set_int(OBJECT(&s->apu_cpu[i]), num_apus,
+                                "core-count", &error_abort);
         object_property_set_bool(OBJECT(&s->apu_cpu[i]), true, "realized",
                                  &err);
         if (err) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH v3 0/2] Add a property to set the ARM CPU core count
  2018-03-02 19:15 [Qemu-devel] [PATCH v3 0/2] Add a property to set the ARM CPU core count Alistair Francis
  2018-03-02 19:16 ` [Qemu-devel] [PATCH v3 1/2] target/arm: Add a core count property Alistair Francis
  2018-03-02 19:16 ` [Qemu-devel] [PATCH v3 2/2] hw/arm: Set the core count for Xilinx's ZynqMP Alistair Francis
@ 2018-03-05 15:14 ` Peter Maydell
  2 siblings, 0 replies; 4+ messages in thread
From: Peter Maydell @ 2018-03-05 15:14 UTC (permalink / raw)
  To: Alistair Francis; +Cc: QEMU Developers, Alistair Francis

On 2 March 2018 at 19:15, Alistair Francis <alistair.francis@xilinx.com> wrote:
>
> Add an ARM CPU property which allows us to set the ARM CPU core count.
> V3:
>  - Fix Linux user mode compile failure
>
> V2:
>  - Fix commit message and title.
>  - Move the core_count default setting logic to the arm_cpu_realize()
>    function.
>
>
> Alistair Francis (2):
>   target/arm: Add a core count property
>   hw/arm: Set the core count for Xilinx's ZynqMP
>
>  target/arm/cpu.h     | 5 +++++
>  hw/arm/xlnx-zynqmp.c | 2 ++
>  target/arm/cpu.c     | 6 ++++++
>  target/arm/cpu64.c   | 6 ++++--
>  4 files changed, 17 insertions(+), 2 deletions(-)
>
> --
> 2.14.1



Applied to target-arm.next, thanks.

-- PMM

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-03-05 15:14 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-02 19:15 [Qemu-devel] [PATCH v3 0/2] Add a property to set the ARM CPU core count Alistair Francis
2018-03-02 19:16 ` [Qemu-devel] [PATCH v3 1/2] target/arm: Add a core count property Alistair Francis
2018-03-02 19:16 ` [Qemu-devel] [PATCH v3 2/2] hw/arm: Set the core count for Xilinx's ZynqMP Alistair Francis
2018-03-05 15:14 ` [Qemu-devel] [PATCH v3 0/2] Add a property to set the ARM CPU core count Peter Maydell

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).