[1/4] hw/arm/xlx-zynqmp: Realize cluster after putting RPUs in it

Message ID 20190108163008.7006-2-peter.maydell@linaro.org
State Superseded
Headers show
Series
  • tcg: support heterogenous CPU clusters
Related show

Commit Message

Peter Maydell Jan. 8, 2019, 4:30 p.m.
Currently the cluster implementation doesn't have any constraints
on the ordering of realizing the TYPE_CPU_CLUSTER and populating it
with child objects. We want to impose a constraint that realize
must happen only after all the child objects are added, so move
the realize of rpu_cluster. (The apu_cluster is already
realized after child population.)

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

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

-- 
2.19.2

Comments

Luc Michel Jan. 10, 2019, 3:11 p.m. | #1
On 1/8/19 5:30 PM, Peter Maydell wrote:
> Currently the cluster implementation doesn't have any constraints

> on the ordering of realizing the TYPE_CPU_CLUSTER and populating it

> with child objects. We want to impose a constraint that realize

> must happen only after all the child objects are added, so move

> the realize of rpu_cluster. (The apu_cluster is already

> realized after child population.)

> 

> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Reviewed-by: Luc Michel <luc.michel@greensocs.com>


> ---

>  hw/arm/xlnx-zynqmp.c | 4 ++--

>  1 file changed, 2 insertions(+), 2 deletions(-)

> 

> diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c

> index c67ac2e64ac..370b0e44a38 100644

> --- a/hw/arm/xlnx-zynqmp.c

> +++ b/hw/arm/xlnx-zynqmp.c

> @@ -183,8 +183,6 @@ static void xlnx_zynqmp_create_rpu(XlnxZynqMPState *s, const char *boot_cpu,

>                              &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;

>  

> @@ -212,6 +210,8 @@ static void xlnx_zynqmp_create_rpu(XlnxZynqMPState *s, const char *boot_cpu,

>              return;

>          }

>      }

> +

> +    qdev_init_nofail(DEVICE(&s->rpu_cluster));

>  }

>  

>  static void xlnx_zynqmp_init(Object *obj)

>
Alistair Francis Jan. 10, 2019, 7:52 p.m. | #2
On Tue, Jan 8, 2019 at 8:30 AM Peter Maydell <peter.maydell@linaro.org> wrote:
>

> Currently the cluster implementation doesn't have any constraints

> on the ordering of realizing the TYPE_CPU_CLUSTER and populating it

> with child objects. We want to impose a constraint that realize

> must happen only after all the child objects are added, so move

> the realize of rpu_cluster. (The apu_cluster is already

> realized after child population.)

>

> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>


Reviewed-by: Alistair Francis <alistair.francis@wdc.com>


Alistair

> ---

>  hw/arm/xlnx-zynqmp.c | 4 ++--

>  1 file changed, 2 insertions(+), 2 deletions(-)

>

> diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c

> index c67ac2e64ac..370b0e44a38 100644

> --- a/hw/arm/xlnx-zynqmp.c

> +++ b/hw/arm/xlnx-zynqmp.c

> @@ -183,8 +183,6 @@ static void xlnx_zynqmp_create_rpu(XlnxZynqMPState *s, const char *boot_cpu,

>                              &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;

>

> @@ -212,6 +210,8 @@ static void xlnx_zynqmp_create_rpu(XlnxZynqMPState *s, const char *boot_cpu,

>              return;

>          }

>      }

> +

> +    qdev_init_nofail(DEVICE(&s->rpu_cluster));

>  }

>

>  static void xlnx_zynqmp_init(Object *obj)

> --

> 2.19.2

>

>

Patch

diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c
index c67ac2e64ac..370b0e44a38 100644
--- a/hw/arm/xlnx-zynqmp.c
+++ b/hw/arm/xlnx-zynqmp.c
@@ -183,8 +183,6 @@  static void xlnx_zynqmp_create_rpu(XlnxZynqMPState *s, const char *boot_cpu,
                             &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;
 
@@ -212,6 +210,8 @@  static void xlnx_zynqmp_create_rpu(XlnxZynqMPState *s, const char *boot_cpu,
             return;
         }
     }
+
+    qdev_init_nofail(DEVICE(&s->rpu_cluster));
 }
 
 static void xlnx_zynqmp_init(Object *obj)