Re: [Qemu-devel] [PATCH v2] hw/arm: Fix Integrator/CM initialization

2016-09-29 Thread Peter Maydell
On 25 September 2016 at 13:35, Jakub Jermář  wrote:
>
> Initialization of a class instance cannot depend on its own properties
> as these are not yet set.  Move parts of integratorcm_init() that depend
> on the "memsz" property to the newly added integratorcm_realize().
>
> This fixes: https://bugs.launchpad.net/qemu/+bug/1624726
>
> Signed-off-by: Jakub Jermar 
> ---
>  hw/arm/integratorcp.c | 35 +--
>  1 file changed, 21 insertions(+), 14 deletions(-)

Applied to target-arm.next, thanks.

(PS: if you need to send patches in future, sending them inline
rather than as attachments works better with some of our patch
handling tools.)

thanks
-- PMM



[Qemu-devel] [PATCH v2] hw/arm: Fix Integrator/CM initialization

2016-09-25 Thread Jakub Jermář

Initialization of a class instance cannot depend on its own properties
as these are not yet set.  Move parts of integratorcm_init() that depend
on the "memsz" property to the newly added integratorcm_realize().

This fixes: https://bugs.launchpad.net/qemu/+bug/1624726

Signed-off-by: Jakub Jermar 
---
 hw/arm/integratorcp.c | 35 +--
 1 file changed, 21 insertions(+), 14 deletions(-)

diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c
index 96dc150..039812a 100644
--- a/hw/arm/integratorcp.c
+++ b/hw/arm/integratorcp.c
@@ -252,6 +252,26 @@ static void integratorcm_init(Object *obj)
 /* ??? What should the high bits of this value be?  */
 s->cm_auxosc = 0x0007feff;
 s->cm_sdram = 0x00011122;
+memcpy(integrator_spd + 73, "QEMU-MEMORY", 11);
+s->cm_init = 0x0112;
+s->cm_refcnt_offset = muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL), 24,
+   1000);
+memory_region_init_ram(&s->flash, obj, "integrator.flash", 0x10,
+   &error_fatal);
+vmstate_register_ram_global(&s->flash);
+
+memory_region_init_io(&s->iomem, obj, &integratorcm_ops, s,
+  "integratorcm", 0x0080);
+sysbus_init_mmio(dev, &s->iomem);
+
+integratorcm_do_remap(s);
+/* ??? Save/restore.  */
+}
+
+static void integratorcm_realize(DeviceState *d, Error **errp)
+{
+IntegratorCMState *s = INTEGRATOR_CM(d);
+
 if (s->memsz >= 256) {
 integrator_spd[31] = 64;
 s->cm_sdram |= 0x10;
@@ -267,20 +287,6 @@ static void integratorcm_init(Object *obj)
 } else {
 integrator_spd[31] = 2;
 }
-memcpy(integrator_spd + 73, "QEMU-MEMORY", 11);
-s->cm_init = 0x0112;
-s->cm_refcnt_offset = muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL), 24,
-   1000);
-memory_region_init_ram(&s->flash, obj, "integrator.flash", 0x10,
-   &error_fatal);
-vmstate_register_ram_global(&s->flash);
-
-memory_region_init_io(&s->iomem, obj, &integratorcm_ops, s,
-  "integratorcm", 0x0080);
-sysbus_init_mmio(dev, &s->iomem);
-
-integratorcm_do_remap(s);
-/* ??? Save/restore.  */
 }
 
 /* Integrator/CP hardware emulation.  */
@@ -633,6 +639,7 @@ static void core_class_init(ObjectClass *klass, void *data)
 DeviceClass *dc = DEVICE_CLASS(klass);
 
 dc->props = core_properties;
+dc->realize = integratorcm_realize;
 }
 
 static const TypeInfo core_info = {