mirror of
https://github.com/qemu/qemu.git
synced 2025-07-29 14:43:25 +00:00
hw/arm: Fix Integrator/CM initialization
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 <jakub@jermar.eu> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
0c74e95bf8
commit
e9d9ee234f
@ -252,6 +252,26 @@ static void integratorcm_init(Object *obj)
|
|||||||
/* ??? What should the high bits of this value be? */
|
/* ??? What should the high bits of this value be? */
|
||||||
s->cm_auxosc = 0x0007feff;
|
s->cm_auxosc = 0x0007feff;
|
||||||
s->cm_sdram = 0x00011122;
|
s->cm_sdram = 0x00011122;
|
||||||
|
memcpy(integrator_spd + 73, "QEMU-MEMORY", 11);
|
||||||
|
s->cm_init = 0x00000112;
|
||||||
|
s->cm_refcnt_offset = muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL), 24,
|
||||||
|
1000);
|
||||||
|
memory_region_init_ram(&s->flash, obj, "integrator.flash", 0x100000,
|
||||||
|
&error_fatal);
|
||||||
|
vmstate_register_ram_global(&s->flash);
|
||||||
|
|
||||||
|
memory_region_init_io(&s->iomem, obj, &integratorcm_ops, s,
|
||||||
|
"integratorcm", 0x00800000);
|
||||||
|
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) {
|
if (s->memsz >= 256) {
|
||||||
integrator_spd[31] = 64;
|
integrator_spd[31] = 64;
|
||||||
s->cm_sdram |= 0x10;
|
s->cm_sdram |= 0x10;
|
||||||
@ -267,20 +287,6 @@ static void integratorcm_init(Object *obj)
|
|||||||
} else {
|
} else {
|
||||||
integrator_spd[31] = 2;
|
integrator_spd[31] = 2;
|
||||||
}
|
}
|
||||||
memcpy(integrator_spd + 73, "QEMU-MEMORY", 11);
|
|
||||||
s->cm_init = 0x00000112;
|
|
||||||
s->cm_refcnt_offset = muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL), 24,
|
|
||||||
1000);
|
|
||||||
memory_region_init_ram(&s->flash, obj, "integrator.flash", 0x100000,
|
|
||||||
&error_fatal);
|
|
||||||
vmstate_register_ram_global(&s->flash);
|
|
||||||
|
|
||||||
memory_region_init_io(&s->iomem, obj, &integratorcm_ops, s,
|
|
||||||
"integratorcm", 0x00800000);
|
|
||||||
sysbus_init_mmio(dev, &s->iomem);
|
|
||||||
|
|
||||||
integratorcm_do_remap(s);
|
|
||||||
/* ??? Save/restore. */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Integrator/CP hardware emulation. */
|
/* Integrator/CP hardware emulation. */
|
||||||
@ -633,6 +639,7 @@ static void core_class_init(ObjectClass *klass, void *data)
|
|||||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||||
|
|
||||||
dc->props = core_properties;
|
dc->props = core_properties;
|
||||||
|
dc->realize = integratorcm_realize;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo core_info = {
|
static const TypeInfo core_info = {
|
||||||
|
Loading…
Reference in New Issue
Block a user