qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [Qemu-arm] [PATCH] hw/arm/spitz: Move problematic nand_


From: Philippe Mathieu-Daudé
Subject: Re: [Qemu-devel] [Qemu-arm] [PATCH] hw/arm/spitz: Move problematic nand_init() code to realize function
Date: Thu, 19 Jul 2018 22:35:25 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1

On 07/19/2018 10:15 AM, Thomas Huth wrote:
> 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 <address@hidden>

Reviewed-by: Philippe Mathieu-Daudé <address@hidden>

> ---
>  hw/arm/spitz.c | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/hw/arm/spitz.c b/hw/arm/spitz.c
> index 3cc27a1..c4bc3de 100644
> --- a/hw/arm/spitz.c
> +++ b/hw/arm/spitz.c
> @@ -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;
>  }
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]