qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
To: David Gibson <david@gibson.dropbear.id.au>
Cc: thuth@redhat.com, qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Subject: Re: [PATCH 3/7] macio: move heathrow PIC inside macio-oldworld device
Date: Tue, 29 Dec 2020 14:12:43 +0000	[thread overview]
Message-ID: <640f8263-b996-620b-6687-85f29beb662f@ilande.co.uk> (raw)
In-Reply-To: <20201228070833.GE6952@yekko.fritz.box>

On 28/12/2020 07:08, David Gibson wrote:

> On Sat, Dec 19, 2020 at 10:42:25AM +0000, Mark Cave-Ayland wrote:
> 
> Really needs a commit message.

This is currently explained in the cover letter: it's moving the PIC to the macio 
device as per real hardware (which also nicely removes the need for compulsory object 
property links which currently trip up some of the automated QOM introspection 
tests). I'll add something along these lines for the next revision.

>> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
>> ---
>>   hw/misc/macio/macio.c         | 20 +++++------
>>   hw/ppc/mac_oldworld.c         | 66 +++++++++++++++++------------------
>>   include/hw/misc/macio/macio.h |  2 +-
>>   3 files changed, 43 insertions(+), 45 deletions(-)
>>
>> diff --git a/hw/misc/macio/macio.c b/hw/misc/macio/macio.c
>> index bb601f782c..cfb87da6c9 100644
>> --- a/hw/misc/macio/macio.c
>> +++ b/hw/misc/macio/macio.c
>> @@ -140,7 +140,7 @@ static void macio_oldworld_realize(PCIDevice *d, Error **errp)
>>   {
>>       MacIOState *s = MACIO(d);
>>       OldWorldMacIOState *os = OLDWORLD_MACIO(d);
>> -    DeviceState *pic_dev = DEVICE(os->pic);
>> +    DeviceState *pic_dev = DEVICE(&os->pic);
>>       Error *err = NULL;
>>       SysBusDevice *sysbus_dev;
>>   
>> @@ -150,6 +150,14 @@ static void macio_oldworld_realize(PCIDevice *d, Error **errp)
>>           return;
>>       }
>>   
>> +    /* Heathrow PIC */
>> +    if (!qdev_realize(DEVICE(&os->pic), BUS(&s->macio_bus), errp)) {
>> +        return;
>> +    }
>> +    sysbus_dev = SYS_BUS_DEVICE(&os->pic);
>> +    memory_region_add_subregion(&s->bar, 0x0,
>> +                                sysbus_mmio_get_region(sysbus_dev, 0));
>> +
>>       qdev_prop_set_uint64(DEVICE(&s->cuda), "timebase-frequency",
>>                            s->frequency);
>>       if (!qdev_realize(DEVICE(&s->cuda), BUS(&s->macio_bus), errp)) {
>> @@ -175,11 +183,6 @@ static void macio_oldworld_realize(PCIDevice *d, Error **errp)
>>                                   sysbus_mmio_get_region(sysbus_dev, 0));
>>       pmac_format_nvram_partition(&os->nvram, os->nvram.size);
>>   
>> -    /* Heathrow PIC */
>> -    sysbus_dev = SYS_BUS_DEVICE(os->pic);
>> -    memory_region_add_subregion(&s->bar, 0x0,
>> -                                sysbus_mmio_get_region(sysbus_dev, 0));
>> -
>>       /* IDE buses */
>>       macio_realize_ide(s, &os->ide[0],
>>                         qdev_get_gpio_in(pic_dev, OLDWORLD_IDE0_IRQ),
>> @@ -218,10 +221,7 @@ static void macio_oldworld_init(Object *obj)
>>       DeviceState *dev;
>>       int i;
>>   
>> -    object_property_add_link(obj, "pic", TYPE_HEATHROW,
>> -                             (Object **) &os->pic,
>> -                             qdev_prop_allow_set_link_before_realize,
>> -                             0);
>> +    object_initialize_child(OBJECT(s), "pic", &os->pic, TYPE_HEATHROW);
>>   
>>       object_initialize_child(OBJECT(s), "cuda", &s->cuda, TYPE_CUDA);
>>   
>> diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c
>> index e58e0525fe..44ee99be88 100644
>> --- a/hw/ppc/mac_oldworld.c
>> +++ b/hw/ppc/mac_oldworld.c
>> @@ -98,7 +98,7 @@ static void ppc_heathrow_init(MachineState *machine)
>>       MACIOIDEState *macio_ide;
>>       ESCCState *escc;
>>       SysBusDevice *s;
>> -    DeviceState *dev, *pic_dev;
>> +    DeviceState *dev, *pic_dev, *grackle_dev;
>>       BusState *adb_bus;
>>       uint64_t bios_addr;
>>       int bios_size;
>> @@ -227,10 +227,17 @@ static void ppc_heathrow_init(MachineState *machine)
>>           }
>>       }
>>   
>> +    /* Timebase Frequency */
>> +    if (kvm_enabled()) {
>> +        tbfreq = kvmppc_get_tbfreq();
>> +    } else {
>> +        tbfreq = TBFREQ;
>> +    }
>> +
>>       /* Grackle PCI host bridge */
>> -    dev = qdev_new(TYPE_GRACKLE_PCI_HOST_BRIDGE);
>> -    qdev_prop_set_uint32(dev, "ofw-addr", 0x80000000);
>> -    s = SYS_BUS_DEVICE(dev);
>> +    grackle_dev = qdev_new(TYPE_GRACKLE_PCI_HOST_BRIDGE);
>> +    qdev_prop_set_uint32(grackle_dev, "ofw-addr", 0x80000000);
>> +    s = SYS_BUS_DEVICE(grackle_dev);
>>       sysbus_realize_and_unref(s, &error_fatal);
>>   
>>       sysbus_mmio_map(s, 0, GRACKLE_BASE);
>> @@ -242,14 +249,30 @@ static void ppc_heathrow_init(MachineState *machine)
>>       memory_region_add_subregion(get_system_memory(), 0xfe000000,
>>                                   sysbus_mmio_get_region(s, 3));
>>   
>> -    /* XXX: we register only 1 output pin for heathrow PIC */
>> -    pic_dev = qdev_new(TYPE_HEATHROW);
>> -    sysbus_realize_and_unref(SYS_BUS_DEVICE(pic_dev), &error_fatal);
>> +    pci_bus = PCI_HOST_BRIDGE(grackle_dev)->bus;
>> +
>> +    /* MacIO */
>> +    macio = pci_new(PCI_DEVFN(16, 0), TYPE_OLDWORLD_MACIO);
>> +    dev = DEVICE(macio);
>> +    qdev_prop_set_uint64(dev, "frequency", tbfreq);
>> +
>> +    escc = ESCC(object_resolve_path_component(OBJECT(macio), "escc"));
>> +    qdev_prop_set_chr(DEVICE(escc), "chrA", serial_hd(0));
>> +    qdev_prop_set_chr(DEVICE(escc), "chrB", serial_hd(1));
>> +
>> +    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(grackle_dev, i,
>> +                              qdev_get_gpio_in(pic_dev, 0x15 + i));
>> +    }
>>   
>>       /* Connect the heathrow PIC outputs to the 6xx bus */
>>       for (i = 0; i < smp_cpus; i++) {
>>           switch (PPC_INPUT(env)) {
>>           case PPC_FLAGS_INPUT_6xx:
>> +            /* XXX: we register only 1 output pin for heathrow PIC */
>>               qdev_connect_gpio_out(pic_dev, 0,
>>                   ((qemu_irq *)env->irq_inputs)[PPC6xx_INPUT_INT]);
>>               break;
>> @@ -259,40 +282,14 @@ static void ppc_heathrow_init(MachineState *machine)
>>           }
>>       }
>>   
>> -    /* Timebase Frequency */
>> -    if (kvm_enabled()) {
>> -        tbfreq = kvmppc_get_tbfreq();
>> -    } else {
>> -        tbfreq = TBFREQ;
>> -    }
>> -
>> -    for (i = 0; i < 4; i++) {
>> -        qdev_connect_gpio_out(dev, i, qdev_get_gpio_in(pic_dev, 0x15 + i));
>> -    }
>> -
>> -    pci_bus = PCI_HOST_BRIDGE(dev)->bus;
>> -
>>       pci_vga_init(pci_bus);
>>   
>>       for (i = 0; i < nb_nics; i++) {
>>           pci_nic_init_nofail(&nd_table[i], pci_bus, "ne2k_pci", NULL);
>>       }
>>   
>> +    /* MacIO IDE */
>>       ide_drive_get(hd, ARRAY_SIZE(hd));
>> -
>> -    /* MacIO */
>> -    macio = pci_new(PCI_DEVFN(16, 0), TYPE_OLDWORLD_MACIO);
>> -    dev = DEVICE(macio);
>> -    qdev_prop_set_uint64(dev, "frequency", tbfreq);
>> -    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));
>> -    qdev_prop_set_chr(DEVICE(escc), "chrB", serial_hd(1));
>> -
>> -    pci_realize_and_unref(macio, pci_bus, &error_fatal);
>> -
>>       macio_ide = MACIO_IDE(object_resolve_path_component(OBJECT(macio),
>>                                                           "ide[0]"));
>>       macio_ide_init_drives(macio_ide, hd);
>> @@ -301,6 +298,7 @@ static void ppc_heathrow_init(MachineState *machine)
>>                                                           "ide[1]"));
>>       macio_ide_init_drives(macio_ide, &hd[MAX_IDE_DEVS]);
>>   
>> +    /* MacIO CUDA/ADB */
>>       dev = DEVICE(object_resolve_path_component(OBJECT(macio), "cuda"));
>>       adb_bus = qdev_get_child_bus(dev, "adb.0");
>>       dev = qdev_new(TYPE_ADB_KEYBOARD);
>> diff --git a/include/hw/misc/macio/macio.h b/include/hw/misc/macio/macio.h
>> index 22b4e64b2c..707dfab50c 100644
>> --- a/include/hw/misc/macio/macio.h
>> +++ b/include/hw/misc/macio/macio.h
>> @@ -99,7 +99,7 @@ struct OldWorldMacIOState {
>>       MacIOState parent_obj;
>>       /*< public >*/
>>   
>> -    HeathrowState *pic;
>> +    HeathrowState pic;
>>   
>>       MacIONVRAMState nvram;
>>       MACIOIDEState ide[2];

ATB,

Mark.


  reply	other threads:[~2020-12-29 14:14 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-19 10:42 [PATCH 0/7] macio: remove PIC object property links Mark Cave-Ayland
2020-12-19 10:42 ` [PATCH 1/7] mac_oldworld: remove duplicate bus check for PPC_INPUT(env) Mark Cave-Ayland
2020-12-28  7:06   ` David Gibson
2020-12-19 10:42 ` [PATCH 2/7] mac_oldworld: move initialisation of grackle before heathrow Mark Cave-Ayland
2020-12-28  7:07   ` David Gibson
2020-12-29 14:07     ` Mark Cave-Ayland
2020-12-19 10:42 ` [PATCH 3/7] macio: move heathrow PIC inside macio-oldworld device Mark Cave-Ayland
2020-12-28  7:08   ` David Gibson
2020-12-29 14:12     ` Mark Cave-Ayland [this message]
2020-12-19 10:42 ` [PATCH 4/7] mac_newworld: delay wiring of PCI IRQs in New World machine Mark Cave-Ayland
2020-12-19 10:42 ` [PATCH 5/7] macio: move OpenPIC inside macio-newworld device Mark Cave-Ayland
2020-12-19 10:42 ` [PATCH 6/7] macio: wire macio GPIOs to OpenPIC using sysbus IRQs Mark Cave-Ayland
2020-12-19 10:42 ` [PATCH 7/7] macio: don't set user_creatable to false Mark Cave-Ayland

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=640f8263-b996-620b-6687-85f29beb662f@ilande.co.uk \
    --to=mark.cave-ayland@ilande.co.uk \
    --cc=david@gibson.dropbear.id.au \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).