Message ID | 20200819024220.587612-6-bauerman@linux.ibm.com |
---|---|
State | New |
Headers | show |
Series | Generalize start-powered-off property from ARM | expand |
On 8/19/20 4:42 AM, Thiago Jung Bauermann wrote: > Instead of setting CPUState::halted to 1 in main_cpu_reset(), use the > start-powered-off property which makes cpu_common_reset() initialize it > to 1 in common code. > > Also change creation of CPU object from cpu_create() to object_new() and > qdev_realize_and_unref() because cpu_create() realizes the CPU and it's not > possible to set a property after the object is realized. > > Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com> > --- > hw/mips/cps.c | 14 ++++++++++---- > 1 file changed, 10 insertions(+), 4 deletions(-) > > diff --git a/hw/mips/cps.c b/hw/mips/cps.c > index 615e1a1ad2..4a98cf2287 100644 > --- a/hw/mips/cps.c > +++ b/hw/mips/cps.c > @@ -52,9 +52,6 @@ static void main_cpu_reset(void *opaque) > CPUState *cs = CPU(cpu); > > cpu_reset(cs); > - > - /* All VPs are halted on reset. Leave powering up to CPC. */ > - cs->halted = 1; > } > > static bool cpu_mips_itu_supported(CPUMIPSState *env) > @@ -76,7 +73,7 @@ static void mips_cps_realize(DeviceState *dev, Error **errp) > bool saar_present = false; > > for (i = 0; i < s->num_vp; i++) { > - cpu = MIPS_CPU(cpu_create(s->cpu_type)); > + cpu = MIPS_CPU(object_new(s->cpu_type)); > > /* Init internal devices */ > cpu_mips_irq_init_cpu(cpu); > @@ -89,7 +86,16 @@ static void mips_cps_realize(DeviceState *dev, Error **errp) > env->itc_tag = mips_itu_get_tag_region(&s->itu); > env->itu = &s->itu; > } > + /* All VPs are halted on reset. Leave powering up to CPC. */ > + if (!object_property_set_bool(OBJECT(cpu), "start-powered-off", true, > + errp)) { > + return; Ah, better :) Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > + } > qemu_register_reset(main_cpu_reset, cpu); > + > + if (!qdev_realize_and_unref(DEVICE(cpu), NULL, errp)) { > + return; > + } > } > > cpu = MIPS_CPU(first_cpu); >
diff --git a/hw/mips/cps.c b/hw/mips/cps.c index 615e1a1ad2..4a98cf2287 100644 --- a/hw/mips/cps.c +++ b/hw/mips/cps.c @@ -52,9 +52,6 @@ static void main_cpu_reset(void *opaque) CPUState *cs = CPU(cpu); cpu_reset(cs); - - /* All VPs are halted on reset. Leave powering up to CPC. */ - cs->halted = 1; } static bool cpu_mips_itu_supported(CPUMIPSState *env) @@ -76,7 +73,7 @@ static void mips_cps_realize(DeviceState *dev, Error **errp) bool saar_present = false; for (i = 0; i < s->num_vp; i++) { - cpu = MIPS_CPU(cpu_create(s->cpu_type)); + cpu = MIPS_CPU(object_new(s->cpu_type)); /* Init internal devices */ cpu_mips_irq_init_cpu(cpu); @@ -89,7 +86,16 @@ static void mips_cps_realize(DeviceState *dev, Error **errp) env->itc_tag = mips_itu_get_tag_region(&s->itu); env->itu = &s->itu; } + /* All VPs are halted on reset. Leave powering up to CPC. */ + if (!object_property_set_bool(OBJECT(cpu), "start-powered-off", true, + errp)) { + return; + } qemu_register_reset(main_cpu_reset, cpu); + + if (!qdev_realize_and_unref(DEVICE(cpu), NULL, errp)) { + return; + } } cpu = MIPS_CPU(first_cpu);
Instead of setting CPUState::halted to 1 in main_cpu_reset(), use the start-powered-off property which makes cpu_common_reset() initialize it to 1 in common code. Also change creation of CPU object from cpu_create() to object_new() and qdev_realize_and_unref() because cpu_create() realizes the CPU and it's not possible to set a property after the object is realized. Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com> --- hw/mips/cps.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)