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);
|
||||
SysBusDevice *dev = SYS_BUS_DEVICE(obj);
|
||||
DriveInfo *nand;
|
||||
|
||||
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() */
|
||||
nand = drive_get(IF_MTD, 0, 0);
|
||||
s->nand = nand_init(nand ? blk_by_legacy_dinfo(nand) : NULL,
|
||||
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 */
|
||||
@ -1079,6 +1085,7 @@ static void sl_nand_class_init(ObjectClass *klass, void *data)
|
||||
|
||||
dc->vmsd = &vmstate_sl_nand_info;
|
||||
dc->props = sl_nand_properties;
|
||||
dc->realize = sl_nand_realize;
|
||||
/* Reason: init() method uses drive_get() */
|
||||
dc->user_creatable = false;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user