qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v2 5/7] macio: move OpenPIC inside macio-newworld device


From: David Gibson
Subject: Re: [PATCH v2 5/7] macio: move OpenPIC inside macio-newworld device
Date: Thu, 31 Dec 2020 17:48:22 +1100

On Tue, Dec 29, 2020 at 05:56:17PM +0000, Mark Cave-Ayland wrote:
> The OpenPIC device is located within the macio device on real hardware so 
> make it
> a child of the macio-newworld device. This also removes the need for setting 
> and
> checking a separate PIC object property link on the macio-newworld device 
> which
> currently causes the automated QOM introspection tests to fail.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>

> ---
>  hw/misc/macio/macio.c         | 19 +++++++++----------
>  hw/ppc/mac_newworld.c         | 25 +++++++++++--------------
>  include/hw/misc/macio/macio.h |  2 +-
>  3 files changed, 21 insertions(+), 25 deletions(-)
> 
> diff --git a/hw/misc/macio/macio.c b/hw/misc/macio/macio.c
> index cfb87da6c9..36be77cede 100644
> --- a/hw/misc/macio/macio.c
> +++ b/hw/misc/macio/macio.c
> @@ -273,7 +273,7 @@ static void macio_newworld_realize(PCIDevice *d, Error 
> **errp)
>  {
>      MacIOState *s = MACIO(d);
>      NewWorldMacIOState *ns = NEWWORLD_MACIO(d);
> -    DeviceState *pic_dev = DEVICE(ns->pic);
> +    DeviceState *pic_dev = DEVICE(&ns->pic);
>      Error *err = NULL;
>      SysBusDevice *sysbus_dev;
>      MemoryRegion *timer_memory = NULL;
> @@ -284,17 +284,19 @@ static void macio_newworld_realize(PCIDevice *d, Error 
> **errp)
>          return;
>      }
>  
> +    /* OpenPIC */
> +    qdev_prop_set_uint32(pic_dev, "model", OPENPIC_MODEL_KEYLARGO);
> +    sysbus_dev = SYS_BUS_DEVICE(&ns->pic);
> +    sysbus_realize_and_unref(sysbus_dev, &error_fatal);
> +    memory_region_add_subregion(&s->bar, 0x40000,
> +                                sysbus_mmio_get_region(sysbus_dev, 0));
> +
>      sysbus_dev = SYS_BUS_DEVICE(&s->escc);
>      sysbus_connect_irq(sysbus_dev, 0, qdev_get_gpio_in(pic_dev,
>                                                         NEWWORLD_ESCCB_IRQ));
>      sysbus_connect_irq(sysbus_dev, 1, qdev_get_gpio_in(pic_dev,
>                                                         NEWWORLD_ESCCA_IRQ));
>  
> -    /* OpenPIC */
> -    sysbus_dev = SYS_BUS_DEVICE(ns->pic);
> -    memory_region_add_subregion(&s->bar, 0x40000,
> -                                sysbus_mmio_get_region(sysbus_dev, 0));
> -
>      /* IDE buses */
>      macio_realize_ide(s, &ns->ide[0],
>                        qdev_get_gpio_in(pic_dev, NEWWORLD_IDE0_IRQ),
> @@ -369,10 +371,7 @@ static void macio_newworld_init(Object *obj)
>      NewWorldMacIOState *ns = NEWWORLD_MACIO(obj);
>      int i;
>  
> -    object_property_add_link(obj, "pic", TYPE_OPENPIC,
> -                             (Object **) &ns->pic,
> -                             qdev_prop_allow_set_link_before_realize,
> -                             0);
> +    object_initialize_child(OBJECT(s), "pic", &ns->pic, TYPE_OPENPIC);
>  
>      object_initialize_child(OBJECT(s), "gpio", &ns->gpio, TYPE_MACIO_GPIO);
>  
> diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c
> index 708bb2f1ab..e991db4add 100644
> --- a/hw/ppc/mac_newworld.c
> +++ b/hw/ppc/mac_newworld.c
> @@ -293,18 +293,6 @@ static void ppc_core99_init(MachineState *machine)
>          }
>      }
>  
> -    pic_dev = qdev_new(TYPE_OPENPIC);
> -    qdev_prop_set_uint32(pic_dev, "model", OPENPIC_MODEL_KEYLARGO);
> -    s = SYS_BUS_DEVICE(pic_dev);
> -    sysbus_realize_and_unref(s, &error_fatal);
> -    k = 0;
> -    for (i = 0; i < smp_cpus; i++) {
> -        for (j = 0; j < OPENPIC_OUTPUT_NB; j++) {
> -            sysbus_connect_irq(s, k++, openpic_irqs[i].irq[j]);
> -        }
> -    }
> -    g_free(openpic_irqs);
> -
>      if (PPC_INPUT(env) == PPC_FLAGS_INPUT_970) {
>          /* 970 gets a U3 bus */
>          /* Uninorth AGP bus */
> @@ -378,8 +366,6 @@ static void ppc_core99_init(MachineState *machine)
>      qdev_prop_set_uint64(dev, "frequency", tbfreq);
>      qdev_prop_set_bit(dev, "has-pmu", has_pmu);
>      qdev_prop_set_bit(dev, "has-adb", has_adb);
> -    object_property_set_link(OBJECT(macio), "pic", OBJECT(pic_dev),
> -                             &error_abort);
>  
>      escc = ESCC(object_resolve_path_component(OBJECT(macio), "escc"));
>      qdev_prop_set_chr(DEVICE(escc), "chrA", serial_hd(0));
> @@ -387,6 +373,7 @@ static void ppc_core99_init(MachineState *machine)
>  
>      pci_realize_and_unref(macio, pci_bus, &error_fatal);
>  
> +    pic_dev = DEVICE(object_resolve_path_component(OBJECT(macio), "pic"));
>      for (i = 0; i < 4; i++) {
>          qdev_connect_gpio_out(DEVICE(uninorth_pci), i,
>                                qdev_get_gpio_in(pic_dev, 0x1b + i));
> @@ -407,6 +394,16 @@ static void ppc_core99_init(MachineState *machine)
>          }
>      }
>  
> +    /* OpenPIC */
> +    s = SYS_BUS_DEVICE(pic_dev);
> +    k = 0;
> +    for (i = 0; i < smp_cpus; i++) {
> +        for (j = 0; j < OPENPIC_OUTPUT_NB; j++) {
> +            sysbus_connect_irq(s, k++, openpic_irqs[i].irq[j]);
> +        }
> +    }
> +    g_free(openpic_irqs);
> +
>      /* We only emulate 2 out of 3 IDE controllers for now */
>      ide_drive_get(hd, ARRAY_SIZE(hd));
>  
> diff --git a/include/hw/misc/macio/macio.h b/include/hw/misc/macio/macio.h
> index 707dfab50c..6c05f3bfd2 100644
> --- a/include/hw/misc/macio/macio.h
> +++ b/include/hw/misc/macio/macio.h
> @@ -115,7 +115,7 @@ struct NewWorldMacIOState {
>  
>      bool has_pmu;
>      bool has_adb;
> -    OpenPICState *pic;
> +    OpenPICState pic;
>      MACIOIDEState ide[2];
>      MacIOGPIOState gpio;
>  };

-- 
David Gibson                    | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
                                | _way_ _around_!
http://www.ozlabs.org/~dgibson

Attachment: signature.asc
Description: PGP signature


reply via email to

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