hw/arm/spitz: Move problematic nand_init() code to realize function
nand_init() does not only create the NAND device, it also realizes the device with qdev_init_nofail() already. So we must not call nand_init() from an instance_init function like sl_nand_init(), otherwise we get superfluous NAND devices in the QOM tree after introspecting the 'sl-nand' device. So move the nand_init() to the realize function of 'sl-nand' instead. Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-id: 1532006134-7701-1-git-send-email-thuth@redhat.com Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
9d2b5a58f8
commit
07bc425ea3
@ -169,16 +169,22 @@ static void sl_nand_init(Object *obj)
|
|||||||
{
|
{
|
||||||
SLNANDState *s = SL_NAND(obj);
|
SLNANDState *s = SL_NAND(obj);
|
||||||
SysBusDevice *dev = SYS_BUS_DEVICE(obj);
|
SysBusDevice *dev = SYS_BUS_DEVICE(obj);
|
||||||
DriveInfo *nand;
|
|
||||||
|
|
||||||
s->ctl = 0;
|
s->ctl = 0;
|
||||||
|
|
||||||
|
memory_region_init_io(&s->iomem, obj, &sl_ops, s, "sl", 0x40);
|
||||||
|
sysbus_init_mmio(dev, &s->iomem);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sl_nand_realize(DeviceState *dev, Error **errp)
|
||||||
|
{
|
||||||
|
SLNANDState *s = SL_NAND(dev);
|
||||||
|
DriveInfo *nand;
|
||||||
|
|
||||||
/* FIXME use a qdev drive property instead of drive_get() */
|
/* FIXME use a qdev drive property instead of drive_get() */
|
||||||
nand = drive_get(IF_MTD, 0, 0);
|
nand = drive_get(IF_MTD, 0, 0);
|
||||||
s->nand = nand_init(nand ? blk_by_legacy_dinfo(nand) : NULL,
|
s->nand = nand_init(nand ? blk_by_legacy_dinfo(nand) : NULL,
|
||||||
s->manf_id, s->chip_id);
|
s->manf_id, s->chip_id);
|
||||||
|
|
||||||
memory_region_init_io(&s->iomem, obj, &sl_ops, s, "sl", 0x40);
|
|
||||||
sysbus_init_mmio(dev, &s->iomem);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Spitz Keyboard */
|
/* Spitz Keyboard */
|
||||||
@ -1079,6 +1085,7 @@ static void sl_nand_class_init(ObjectClass *klass, void *data)
|
|||||||
|
|
||||||
dc->vmsd = &vmstate_sl_nand_info;
|
dc->vmsd = &vmstate_sl_nand_info;
|
||||||
dc->props = sl_nand_properties;
|
dc->props = sl_nand_properties;
|
||||||
|
dc->realize = sl_nand_realize;
|
||||||
/* Reason: init() method uses drive_get() */
|
/* Reason: init() method uses drive_get() */
|
||||||
dc->user_creatable = false;
|
dc->user_creatable = false;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user