Message ID | 20220130231206.34035-3-edgar.iglesias@gmail.com |
---|---|
State | New |
Headers | show |
Series | hw/arm: zynqmp: Add CRF and APU control to support PSCI | expand |
Hi Edgar, On 00:12 Mon 31 Jan , Edgar E. Iglesias wrote: > From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com> > > Make the rvbar property settable after realize. This is done > in preparation to model the ZynqMP's runtime configurable rvbar. > > Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> > --- > target/arm/cpu.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/target/arm/cpu.c b/target/arm/cpu.c > index 5a9c02a256..e30ae088fe 100644 > --- a/target/arm/cpu.c > +++ b/target/arm/cpu.c > @@ -1128,9 +1128,6 @@ static Property arm_cpu_reset_cbar_property = > static Property arm_cpu_reset_hivecs_property = > DEFINE_PROP_BOOL("reset-hivecs", ARMCPU, reset_hivecs, false); > > -static Property arm_cpu_rvbar_property = > - DEFINE_PROP_UINT64("rvbar", ARMCPU, rvbar, 0); > - > #ifndef CONFIG_USER_ONLY > static Property arm_cpu_has_el2_property = > DEFINE_PROP_BOOL("has_el2", ARMCPU, has_el2, true); > @@ -1233,7 +1230,9 @@ void arm_cpu_post_init(Object *obj) > } > > if (arm_feature(&cpu->env, ARM_FEATURE_AARCH64)) { > - qdev_property_add_static(DEVICE(obj), &arm_cpu_rvbar_property); > + object_property_add_uint64_ptr(obj, "rvbar", > + &cpu->rvbar, > + OBJ_PROP_FLAG_READWRITE); I think you may have a problem here. cpu->rvbar is used to define the reset value of the rvbar_elx registers in register_cp_regs_for_features. This is done at realize time. Changing the rvbar property after realize would fail to update the rvbar_elx register values. I guess you should also switch to a .readfn instead of a .resetvalue for those registers.
diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 5a9c02a256..e30ae088fe 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -1128,9 +1128,6 @@ static Property arm_cpu_reset_cbar_property = static Property arm_cpu_reset_hivecs_property = DEFINE_PROP_BOOL("reset-hivecs", ARMCPU, reset_hivecs, false); -static Property arm_cpu_rvbar_property = - DEFINE_PROP_UINT64("rvbar", ARMCPU, rvbar, 0); - #ifndef CONFIG_USER_ONLY static Property arm_cpu_has_el2_property = DEFINE_PROP_BOOL("has_el2", ARMCPU, has_el2, true); @@ -1233,7 +1230,9 @@ void arm_cpu_post_init(Object *obj) } if (arm_feature(&cpu->env, ARM_FEATURE_AARCH64)) { - qdev_property_add_static(DEVICE(obj), &arm_cpu_rvbar_property); + object_property_add_uint64_ptr(obj, "rvbar", + &cpu->rvbar, + OBJ_PROP_FLAG_READWRITE); } #ifndef CONFIG_USER_ONLY