Re: [PATCH 19/24] riscv: Fix to put "riscv.hart_array" devices on sysbus

2020-05-18 Thread Alistair Francis
On Sun, May 17, 2020 at 10:16 PM Markus Armbruster  wrote:
>
> riscv_sifive_e_soc_init(), riscv_sifive_u_soc_init(),
> spike_board_init(), spike_v1_10_0_board_init(),
> spike_v1_09_1_board_init(), and riscv_virt_board_init() create
> "riscv-hart_array" sysbus devices in a way that leaves them unplugged.
>
> Create them the common way that puts them into the main system bus.
> Affects machines sifive_e, sifive_u, spike, spike_v1.10, spike_v1.9.1,
> and virt.  Visible in "info qtree", here's the change for sifive_e:
>
>  bus: main-system-bus
>type System
> +  dev: riscv.hart_array, id ""
> +num-harts = 1 (0x1)
> +hartid-base = 0 (0x0)
> +cpu-type = "sifive-e31-riscv-cpu"
>dev: sifive_soc.gpio, id ""
>
> Cc: Palmer Dabbelt 
> Cc: Alistair Francis 
> Cc: Sagar Karandikar 
> Cc: Bastian Koppelmann 
> Cc: qemu-ri...@nongnu.org
> Signed-off-by: Markus Armbruster 

Reviewed-by: Alistair Francis 

Alistair

> ---
>  hw/riscv/sifive_e.c |  5 ++---
>  hw/riscv/sifive_u.c | 14 ++
>  hw/riscv/spike.c| 12 ++--
>  hw/riscv/virt.c |  4 ++--
>  4 files changed, 16 insertions(+), 19 deletions(-)
>
> diff --git a/hw/riscv/sifive_e.c b/hw/riscv/sifive_e.c
> index b53109521e..8831e6728e 100644
> --- a/hw/riscv/sifive_e.c
> +++ b/hw/riscv/sifive_e.c
> @@ -120,9 +120,8 @@ static void riscv_sifive_e_soc_init(Object *obj)
>  MachineState *ms = MACHINE(qdev_get_machine());
>  SiFiveESoCState *s = RISCV_E_SOC(obj);
>
> -object_initialize_child(obj, "cpus", &s->cpus,
> -sizeof(s->cpus), TYPE_RISCV_HART_ARRAY,
> -&error_abort, NULL);
> +sysbus_init_child_obj(obj, "cpus", &s->cpus,
> +  sizeof(s->cpus), TYPE_RISCV_HART_ARRAY);
>  object_property_set_int(OBJECT(&s->cpus), ms->smp.cpus, "num-harts",
>  &error_abort);
>  sysbus_init_child_obj(obj, "riscv.sifive.e.gpio0",
> diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c
> index 4299bdf480..bb69fd8e48 100644
> --- a/hw/riscv/sifive_u.c
> +++ b/hw/riscv/sifive_u.c
> @@ -491,10 +491,9 @@ static void riscv_sifive_u_soc_init(Object *obj)
>  &error_abort, NULL);
>  qdev_prop_set_uint32(DEVICE(&s->e_cluster), "cluster-id", 0);
>
> -object_initialize_child(OBJECT(&s->e_cluster), "e-cpus",
> -&s->e_cpus, sizeof(s->e_cpus),
> -TYPE_RISCV_HART_ARRAY, &error_abort,
> -NULL);
> +sysbus_init_child_obj(OBJECT(&s->e_cluster), "e-cpus",
> +  &s->e_cpus, sizeof(s->e_cpus),
> +  TYPE_RISCV_HART_ARRAY);
>  qdev_prop_set_uint32(DEVICE(&s->e_cpus), "num-harts", 1);
>  qdev_prop_set_uint32(DEVICE(&s->e_cpus), "hartid-base", 0);
>  qdev_prop_set_string(DEVICE(&s->e_cpus), "cpu-type", SIFIVE_E_CPU);
> @@ -504,10 +503,9 @@ static void riscv_sifive_u_soc_init(Object *obj)
>  &error_abort, NULL);
>  qdev_prop_set_uint32(DEVICE(&s->u_cluster), "cluster-id", 1);
>
> -object_initialize_child(OBJECT(&s->u_cluster), "u-cpus",
> -&s->u_cpus, sizeof(s->u_cpus),
> -TYPE_RISCV_HART_ARRAY, &error_abort,
> -NULL);
> +sysbus_init_child_obj(OBJECT(&s->u_cluster), "u-cpus",
> +  &s->u_cpus, sizeof(s->u_cpus),
> +  TYPE_RISCV_HART_ARRAY);
>  qdev_prop_set_uint32(DEVICE(&s->u_cpus), "num-harts", ms->smp.cpus - 1);
>  qdev_prop_set_uint32(DEVICE(&s->u_cpus), "hartid-base", 1);
>  qdev_prop_set_string(DEVICE(&s->u_cpus), "cpu-type", SIFIVE_U_CPU);
> diff --git a/hw/riscv/spike.c b/hw/riscv/spike.c
> index d0c4843712..01d52e758e 100644
> --- a/hw/riscv/spike.c
> +++ b/hw/riscv/spike.c
> @@ -169,8 +169,8 @@ static void spike_board_init(MachineState *machine)
>  unsigned int smp_cpus = machine->smp.cpus;
>
>  /* Initialize SOC */
> -object_initialize_child(OBJECT(machine), "soc", &s->soc, sizeof(s->soc),
> -TYPE_RISCV_HART_ARRAY, &error_abort, NULL);
> +sysbus_init_child_obj(OBJECT(machine), "soc", &s->soc, sizeof(s->soc),
> +  TYPE_RISCV_HART_ARRAY);
>  object_property_set_str(OBJECT(&s->soc), machine->cpu_type, "cpu-type",
>  &error_abort);
>  object_property_set_int(OBJECT(&s->soc), smp_cpus, "num-harts",
> @@ -275,8 +275,8 @@ static void spike_v1_10_0_board_init(MachineState 
> *machine)
>  }
>
>  /* Initialize SOC */
> -object_initialize_child(OBJECT(machine), "soc", &s->soc, sizeof(s->soc),
> -TYPE_RISCV_HART_ARRAY, &error_abort, NULL);
> +sysbus_init_child_obj(OBJECT(machine), "soc", &s->soc, sizeof(s->soc),
> +  TYPE_RISCV_HART_ARRAY);
>  object_property_set_str(OBJECT(&s->soc), SPIKE

[PATCH 19/24] riscv: Fix to put "riscv.hart_array" devices on sysbus

2020-05-17 Thread Markus Armbruster
riscv_sifive_e_soc_init(), riscv_sifive_u_soc_init(),
spike_board_init(), spike_v1_10_0_board_init(),
spike_v1_09_1_board_init(), and riscv_virt_board_init() create
"riscv-hart_array" sysbus devices in a way that leaves them unplugged.

Create them the common way that puts them into the main system bus.
Affects machines sifive_e, sifive_u, spike, spike_v1.10, spike_v1.9.1,
and virt.  Visible in "info qtree", here's the change for sifive_e:

 bus: main-system-bus
   type System
+  dev: riscv.hart_array, id ""
+num-harts = 1 (0x1)
+hartid-base = 0 (0x0)
+cpu-type = "sifive-e31-riscv-cpu"
   dev: sifive_soc.gpio, id ""

Cc: Palmer Dabbelt 
Cc: Alistair Francis 
Cc: Sagar Karandikar 
Cc: Bastian Koppelmann 
Cc: qemu-ri...@nongnu.org
Signed-off-by: Markus Armbruster 
---
 hw/riscv/sifive_e.c |  5 ++---
 hw/riscv/sifive_u.c | 14 ++
 hw/riscv/spike.c| 12 ++--
 hw/riscv/virt.c |  4 ++--
 4 files changed, 16 insertions(+), 19 deletions(-)

diff --git a/hw/riscv/sifive_e.c b/hw/riscv/sifive_e.c
index b53109521e..8831e6728e 100644
--- a/hw/riscv/sifive_e.c
+++ b/hw/riscv/sifive_e.c
@@ -120,9 +120,8 @@ static void riscv_sifive_e_soc_init(Object *obj)
 MachineState *ms = MACHINE(qdev_get_machine());
 SiFiveESoCState *s = RISCV_E_SOC(obj);
 
-object_initialize_child(obj, "cpus", &s->cpus,
-sizeof(s->cpus), TYPE_RISCV_HART_ARRAY,
-&error_abort, NULL);
+sysbus_init_child_obj(obj, "cpus", &s->cpus,
+  sizeof(s->cpus), TYPE_RISCV_HART_ARRAY);
 object_property_set_int(OBJECT(&s->cpus), ms->smp.cpus, "num-harts",
 &error_abort);
 sysbus_init_child_obj(obj, "riscv.sifive.e.gpio0",
diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c
index 4299bdf480..bb69fd8e48 100644
--- a/hw/riscv/sifive_u.c
+++ b/hw/riscv/sifive_u.c
@@ -491,10 +491,9 @@ static void riscv_sifive_u_soc_init(Object *obj)
 &error_abort, NULL);
 qdev_prop_set_uint32(DEVICE(&s->e_cluster), "cluster-id", 0);
 
-object_initialize_child(OBJECT(&s->e_cluster), "e-cpus",
-&s->e_cpus, sizeof(s->e_cpus),
-TYPE_RISCV_HART_ARRAY, &error_abort,
-NULL);
+sysbus_init_child_obj(OBJECT(&s->e_cluster), "e-cpus",
+  &s->e_cpus, sizeof(s->e_cpus),
+  TYPE_RISCV_HART_ARRAY);
 qdev_prop_set_uint32(DEVICE(&s->e_cpus), "num-harts", 1);
 qdev_prop_set_uint32(DEVICE(&s->e_cpus), "hartid-base", 0);
 qdev_prop_set_string(DEVICE(&s->e_cpus), "cpu-type", SIFIVE_E_CPU);
@@ -504,10 +503,9 @@ static void riscv_sifive_u_soc_init(Object *obj)
 &error_abort, NULL);
 qdev_prop_set_uint32(DEVICE(&s->u_cluster), "cluster-id", 1);
 
-object_initialize_child(OBJECT(&s->u_cluster), "u-cpus",
-&s->u_cpus, sizeof(s->u_cpus),
-TYPE_RISCV_HART_ARRAY, &error_abort,
-NULL);
+sysbus_init_child_obj(OBJECT(&s->u_cluster), "u-cpus",
+  &s->u_cpus, sizeof(s->u_cpus),
+  TYPE_RISCV_HART_ARRAY);
 qdev_prop_set_uint32(DEVICE(&s->u_cpus), "num-harts", ms->smp.cpus - 1);
 qdev_prop_set_uint32(DEVICE(&s->u_cpus), "hartid-base", 1);
 qdev_prop_set_string(DEVICE(&s->u_cpus), "cpu-type", SIFIVE_U_CPU);
diff --git a/hw/riscv/spike.c b/hw/riscv/spike.c
index d0c4843712..01d52e758e 100644
--- a/hw/riscv/spike.c
+++ b/hw/riscv/spike.c
@@ -169,8 +169,8 @@ static void spike_board_init(MachineState *machine)
 unsigned int smp_cpus = machine->smp.cpus;
 
 /* Initialize SOC */
-object_initialize_child(OBJECT(machine), "soc", &s->soc, sizeof(s->soc),
-TYPE_RISCV_HART_ARRAY, &error_abort, NULL);
+sysbus_init_child_obj(OBJECT(machine), "soc", &s->soc, sizeof(s->soc),
+  TYPE_RISCV_HART_ARRAY);
 object_property_set_str(OBJECT(&s->soc), machine->cpu_type, "cpu-type",
 &error_abort);
 object_property_set_int(OBJECT(&s->soc), smp_cpus, "num-harts",
@@ -275,8 +275,8 @@ static void spike_v1_10_0_board_init(MachineState *machine)
 }
 
 /* Initialize SOC */
-object_initialize_child(OBJECT(machine), "soc", &s->soc, sizeof(s->soc),
-TYPE_RISCV_HART_ARRAY, &error_abort, NULL);
+sysbus_init_child_obj(OBJECT(machine), "soc", &s->soc, sizeof(s->soc),
+  TYPE_RISCV_HART_ARRAY);
 object_property_set_str(OBJECT(&s->soc), SPIKE_V1_10_0_CPU, "cpu-type",
 &error_abort);
 object_property_set_int(OBJECT(&s->soc), smp_cpus, "num-harts",
@@ -365,8 +365,8 @@ static void spike_v1_09_1_board_init(MachineState *machine)
 }
 
 /* Initialize SOC */
-object_initialize_child(OBJECT(machine