[RFC PATCH v2 053/137] hw/mips: Give onboard devices a QOM parent

Alexander Graf <[email protected]>
Newsgroups org.nongnu.qemu-arm,org.nongnu.qemu-devel,org.nongnu.qemu-riscv
Message-ID <[email protected]>
Convert the *_orphan() device-creation calls in hw/mips to the new
parented API introduced earlier in this series, so every onboard
device gets a stable path in the composition tree instead of landing
in /machine/unattached with an unstable device[N] name.

The parent for each device is the object that owns its lifetime: the
machine for board-created devices, the containing device for
composite children.  Names follow existing QOM conventions.

Per-site rationale (reviewers: dispute the modeling here):

hw/mips/boston.c:435 | qdev_new | parent | "pcie[*]" | static helper called 3x from board init; thread Object *parent as first arg
hw/mips/boston.c:691 | qdev_new | OBJECT(machine) | "boston" | board MachineClass.init()
hw/mips/boston.c:773 | pci_create_simple_multifunction | OBJECT(machine) | "ahci" | board MachineClass.init()
hw/mips/fuloong2e.c:289 | pci_new_multifunction | OBJECT(machine) | "via" | board MachineClass.init()
hw/mips/fuloong2e.c:315 | pci_new | OBJECT(machine) | "vga" | board MachineClass.init()
hw/mips/jazz.c:130 | qdev_new | parent | "dp8393x" | static helper called from board init; thread Object *parent as first arg
hw/mips/jazz.c:292 | isa_new | OBJECT(machine) | "pcspk" | board MachineClass.init() helper receiving MachineState*
hw/mips/jazz.c:299 | qdev_new | OBJECT(machine) | "g364" | board MachineClass.init() helper receiving MachineState*
hw/mips/jazz.c:316 | qdev_new | OBJECT(machine) | "vga" | board MachineClass.init() helper receiving MachineState*
hw/mips/jazz.c:332 | qdev_new | OBJECT(machine) | "esp" | board MachineClass.init() helper receiving MachineState*
hw/mips/jazz.c:363 | qdev_new | OBJECT(machine) | "i8042" | board MachineClass.init() helper receiving MachineState*
hw/mips/jazz.c:393 | qdev_new | OBJECT(machine) | "nvram" | board MachineClass.init() helper receiving MachineState*
hw/mips/jazz.c:399 | sysbus_create_simple | OBJECT(machine) | "led" | board MachineClass.init() helper receiving MachineState*
hw/mips/loongson3_virt.c:427 | qdev_new | OBJECT(machine) | "pcie" | inline helper receiving MachineState* from board init
hw/mips/loongson3_virt.c:468 | pci_create_simple | OBJECT(machine) | "ohci" | inline helper receiving MachineState* from board init
hw/mips/loongson3_virt.c:471 | usb_create_simple | OBJECT(machine) | "usb-kbd" | inline helper receiving MachineState* from board init
hw/mips/loongson3_virt.c:472 | usb_create_simple | OBJECT(machine) | "usb-tablet" | inline helper receiving MachineState* from board init
hw/mips/loongson3_virt.c:522 | qdev_new | OBJECT(machine) | "ipi" | board MachineClass.init()
hw/mips/loongson3_virt.c:530 | qdev_new | OBJECT(machine) | "liointc" | board MachineClass.init()
hw/mips/loongson3_virt.c:539 | sysbus_create_simple | OBJECT(machine) | "rtc" | board MachineClass.init()
hw/mips/malta.c:1101 | qdev_new | OBJECT(machine) | "malta" | board MachineClass.init()
hw/mips/malta.c:1230 | qdev_new | OBJECT(machine) | "gt64120" | board MachineClass.init()
hw/mips/malta.c:1237 | pci_new_multifunction | OBJECT(machine) | "piix4" | board MachineClass.init()
hw/mips/malta.c:1257 | isa_create_simple | OBJECT(machine) | "superio" | board MachineClass.init()

Link: https://lore.kernel.org/qemu-devel/[email protected]/
AI-used-for: code (refactoring)
Signed-off-by: Alexander Graf <[email protected]>
---
 hw/mips/boston.c         | 21 +++++++++++----------
 hw/mips/fuloong2e.c      |  9 +++++----
 hw/mips/jazz.c           | 36 +++++++++++++++++++-----------------
 hw/mips/loongson3_virt.c | 22 ++++++++++++----------
 hw/mips/malta.c          | 16 +++++++++-------
 5 files changed, 56 insertions(+), 48 deletions(-)

diff --git a/hw/mips/boston.c b/hw/mips/boston.c
index 770160c4e5..a156b218fb 100644
--- a/hw/mips/boston.c
+++ b/hw/mips/boston.c
@@ -424,7 +424,7 @@ static const struct fit_loader boston_fit_loader = {
 };
 
 static inline XilinxPCIEHost *
-xilinx_pcie_init(MemoryRegion *sys_mem, uint32_t bus_nr,
+xilinx_pcie_init(Object *parent, MemoryRegion *sys_mem, uint32_t bus_nr,
                  hwaddr cfg_base, uint64_t cfg_size,
                  hwaddr mmio_base, uint64_t mmio_size,
                  qemu_irq irq)
@@ -432,7 +432,7 @@ xilinx_pcie_init(MemoryRegion *sys_mem, uint32_t bus_nr,
     DeviceState *dev;
     MemoryRegion *cfg, *mmio;
 
-    dev = qdev_new_orphan(TYPE_XILINX_PCIE_HOST);
+    dev = qdev_new(parent, "pcie[*]", TYPE_XILINX_PCIE_HOST);
 
     qdev_prop_set_uint32(dev, "bus_nr", bus_nr);
     qdev_prop_set_uint64(dev, "cfg_base", cfg_base);
@@ -440,7 +440,7 @@ xilinx_pcie_init(MemoryRegion *sys_mem, uint32_t bus_nr,
     qdev_prop_set_uint64(dev, "mmio_base", mmio_base);
     qdev_prop_set_uint64(dev, "mmio_size", mmio_size);
 
-    sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
+    sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
 
     cfg = sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 0);
     memory_region_add_subregion_overlap(sys_mem, cfg_base, cfg, 0);
@@ -688,8 +688,8 @@ static void boston_mach_init(MachineState *machine)
         exit(1);
     }
 
-    dev = qdev_new_orphan(TYPE_BOSTON);
-    sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
+    dev = qdev_new(OBJECT(machine), "boston", TYPE_BOSTON);
+    sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
 
     s = BOSTON(dev);
     s->mach = machine;
@@ -727,21 +727,21 @@ static void boston_mach_init(MachineState *machine)
                              MIN(machine->ram_size, (256 * MiB)));
     memory_region_add_subregion_overlap(sys_mem, 0, ddr_low_alias, 0);
 
-    xilinx_pcie_init(sys_mem, 0,
+    xilinx_pcie_init(OBJECT(machine), sys_mem, 0,
                      boston_memmap[BOSTON_PCIE0].base,
                      boston_memmap[BOSTON_PCIE0].size,
                      boston_memmap[BOSTON_PCIE0_MMIO].base,
                      boston_memmap[BOSTON_PCIE0_MMIO].size,
                      get_cps_irq(&s->cps, 2));
 
-    xilinx_pcie_init(sys_mem, 1,
+    xilinx_pcie_init(OBJECT(machine), sys_mem, 1,
                      boston_memmap[BOSTON_PCIE1].base,
                      boston_memmap[BOSTON_PCIE1].size,
                      boston_memmap[BOSTON_PCIE1_MMIO].base,
                      boston_memmap[BOSTON_PCIE1_MMIO].size,
                      get_cps_irq(&s->cps, 1));
 
-    pcie2 = xilinx_pcie_init(sys_mem, 2,
+    pcie2 = xilinx_pcie_init(OBJECT(machine), sys_mem, 2,
                              boston_memmap[BOSTON_PCIE2].base,
                              boston_memmap[BOSTON_PCIE2].size,
                              boston_memmap[BOSTON_PCIE2_MMIO].base,
@@ -770,8 +770,9 @@ static void boston_mach_init(MachineState *machine)
     qemu_chr_fe_set_handlers(&s->lcd_display, NULL, NULL,
                              boston_lcd_event, NULL, s, NULL, true);
 
-    pdev = pci_create_simple_multifunction_orphan(&PCI_BRIDGE(&pcie2->root)->sec_bus,
-                                           PCI_DEVFN(0, 0), TYPE_ICH9_AHCI);
+    pdev = pci_create_simple_multifunction(OBJECT(machine), "ahci",
+                                    &PCI_BRIDGE(&pcie2->root)->sec_bus,
+                                    PCI_DEVFN(0, 0), TYPE_ICH9_AHCI);
     ich9 = ICH9_AHCI(pdev);
     g_assert(ARRAY_SIZE(hd) == ich9->ahci.ports);
     ide_drive_get(hd, ich9->ahci.ports);
diff --git a/hw/mips/fuloong2e.c b/hw/mips/fuloong2e.c
index 0046423d40..88d2901829 100644
--- a/hw/mips/fuloong2e.c
+++ b/hw/mips/fuloong2e.c
@@ -286,7 +286,8 @@ static void mips_fuloong2e_init(MachineState *machine)
     pci_bus = bonito_init(OBJECT(machine), (qemu_irq *)&(env->irq[2]));
 
     /* South bridge -> IP5 */
-    pci_dev = pci_new_multifunction_orphan(PCI_DEVFN(FULOONG2E_VIA_SLOT, 0),
+    pci_dev = pci_new_multifunction(OBJECT(machine), "via",
+                                    PCI_DEVFN(FULOONG2E_VIA_SLOT, 0),
                                     TYPE_VT82C686B_ISA);
 
     /* Set properties on individual devices before realizing the south bridge */
@@ -295,7 +296,7 @@ static void mips_fuloong2e_init(MachineState *machine)
         qdev_prop_set_string(dev, "audiodev", machine->audiodev);
     }
 
-    pci_realize_and_unref(pci_dev, pci_bus, &error_abort);
+    qdev_realize(DEVICE(pci_dev), BUS(pci_bus), &error_abort);
 
     object_property_add_alias(OBJECT(machine), "rtc-time",
                               object_resolve_path_component(OBJECT(pci_dev),
@@ -312,12 +313,12 @@ static void mips_fuloong2e_init(MachineState *machine)
     /* GPU */
     if (vga_interface_type != VGA_NONE) {
         vga_interface_created = true;
-        pci_dev = pci_new_orphan(-1, "ati-vga");
+        pci_dev = pci_new(OBJECT(machine), "vga", -1, "ati-vga");
         dev = DEVICE(pci_dev);
         qdev_prop_set_uint32(dev, "vgamem_mb", 16);
         qdev_prop_set_uint16(dev, "x-device-id", 0x5159);
         qdev_prop_set_uint64(dev, "x-linear-aper-size", 16 * MiB);
-        pci_realize_and_unref(pci_dev, pci_bus, &error_fatal);
+        qdev_realize(DEVICE(pci_dev), BUS(pci_bus), &error_fatal);
     }
 
     /* Populate SPD eeprom data */
diff --git a/hw/mips/jazz.c b/hw/mips/jazz.c
index 31ef357554..208e59fbeb 100644
--- a/hw/mips/jazz.c
+++ b/hw/mips/jazz.c
@@ -113,7 +113,8 @@ static const MemoryRegionOps dma_dummy_ops = {
     .endianness = DEVICE_NATIVE_ENDIAN,
 };
 
-static void mips_jazz_init_net(IOMMUMemoryRegion *rc4030_dma_mr,
+static void mips_jazz_init_net(Object *parent,
+                               IOMMUMemoryRegion *rc4030_dma_mr,
                                DeviceState *rc4030, MemoryRegion *dp8393x_prom)
 {
     DeviceState *dev;
@@ -127,14 +128,14 @@ static void mips_jazz_init_net(IOMMUMemoryRegion *rc4030_dma_mr,
         return;
     }
 
-    dev = qdev_new_orphan("dp8393x");
+    dev = qdev_new(parent, "dp8393x", "dp8393x");
     qdev_set_nic_properties(dev, nd);
     qdev_prop_set_uint8(dev, "it_shift", 2);
     qdev_prop_set_bit(dev, "big_endian", TARGET_BIG_ENDIAN);
     object_property_set_link(OBJECT(dev), "dma_mr",
                              OBJECT(rc4030_dma_mr), &error_abort);
     sysbus = SYS_BUS_DEVICE(dev);
-    sysbus_realize_and_unref(sysbus, &error_fatal);
+    sysbus_realize(sysbus, &error_fatal);
     sysbus_mmio_map(sysbus, 0, 0x80001000);
     sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(rc4030, 4));
 
@@ -289,16 +290,16 @@ static void mips_jazz_init(MachineState *machine,
     isa_bus_register_input_irqs(isa_bus, i8259);
     i8257_dma_init(OBJECT(rc4030), isa_bus, 0);
     pit = i8254_pit_init(isa_bus, 0x40, 0, NULL);
-    pcspk = isa_new_orphan(TYPE_PC_SPEAKER);
+    pcspk = isa_new(OBJECT(machine), "pcspk", TYPE_PC_SPEAKER);
     object_property_set_link(OBJECT(pcspk), "pit", OBJECT(pit), &error_fatal);
-    isa_realize_and_unref(pcspk, isa_bus, &error_fatal);
+    qdev_realize(DEVICE(pcspk), BUS(isa_bus), &error_fatal);
 
     /* Video card */
     switch (jazz_model) {
     case JAZZ_MAGNUM:
-        dev = qdev_new_orphan("sysbus-g364");
+        dev = qdev_new(OBJECT(machine), "g364", "sysbus-g364");
         sysbus = SYS_BUS_DEVICE(dev);
-        sysbus_realize_and_unref(sysbus, &error_fatal);
+        sysbus_realize(sysbus, &error_fatal);
         sysbus_mmio_map(sysbus, 0, 0x60080000);
         sysbus_mmio_map(sysbus, 1, 0x40000000);
         sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(rc4030, 3));
@@ -313,10 +314,10 @@ static void mips_jazz_init(MachineState *machine,
         }
         break;
     case JAZZ_PICA61:
-        dev = qdev_new_orphan(TYPE_VGA_MMIO);
+        dev = qdev_new(OBJECT(machine), "vga", TYPE_VGA_MMIO);
         qdev_prop_set_uint8(dev, "it_shift", 0);
         sysbus = SYS_BUS_DEVICE(dev);
-        sysbus_realize_and_unref(sysbus, &error_fatal);
+        sysbus_realize(sysbus, &error_fatal);
         sysbus_mmio_map(sysbus, 0, 0x60000000);
         sysbus_mmio_map(sysbus, 1, 0x400a0000);
         sysbus_mmio_map(sysbus, 2, VBE_DISPI_LFB_PHYSICAL_ADDRESS);
@@ -326,10 +327,10 @@ static void mips_jazz_init(MachineState *machine,
     }
 
     /* Network controller */
-    mips_jazz_init_net(rc4030_dma_mr, rc4030, dp8393x_prom);
+    mips_jazz_init_net(OBJECT(machine), rc4030_dma_mr, rc4030, dp8393x_prom);
 
     /* SCSI adapter */
-    dev = qdev_new_orphan(TYPE_SYSBUS_ESP);
+    dev = qdev_new(OBJECT(machine), "esp", TYPE_SYSBUS_ESP);
     sysbus_esp = SYSBUS_ESP(dev);
     esp = &sysbus_esp->esp;
     esp->dma_memory_read = rc4030_dma_read;
@@ -340,7 +341,7 @@ static void mips_jazz_init(MachineState *machine,
     esp->dma_enabled = 1;
 
     sysbus = SYS_BUS_DEVICE(dev);
-    sysbus_realize_and_unref(sysbus, &error_fatal);
+    sysbus_realize(sysbus, &error_fatal);
     sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(rc4030, 5));
     sysbus_mmio_map(sysbus, 0, 0x80002000);
 
@@ -360,10 +361,10 @@ static void mips_jazz_init(MachineState *machine,
     memory_region_add_subregion(address_space, 0x80004000, rtc);
 
     /* Keyboard (i8042) */
-    i8042 = I8042_MMIO(qdev_new_orphan(TYPE_I8042_MMIO));
+    i8042 = I8042_MMIO(qdev_new(OBJECT(machine), "i8042", TYPE_I8042_MMIO));
     qdev_prop_set_uint64(DEVICE(i8042), "mask", 1);
     qdev_prop_set_uint32(DEVICE(i8042), "size", 0x1000);
-    sysbus_realize_and_unref(SYS_BUS_DEVICE(i8042), &error_fatal);
+    sysbus_realize(SYS_BUS_DEVICE(i8042), &error_fatal);
 
     qdev_connect_gpio_out(DEVICE(i8042), I8042_KBD_IRQ,
                           qdev_get_gpio_in(rc4030, 6));
@@ -390,13 +391,14 @@ static void mips_jazz_init(MachineState *machine,
     /* FIXME: missing Jazz sound at 0x8000c000, rc4030[2] */
 
     /* NVRAM */
-    dev = qdev_new_orphan("ds1225y");
+    dev = qdev_new(OBJECT(machine), "nvram", "ds1225y");
     sysbus = SYS_BUS_DEVICE(dev);
-    sysbus_realize_and_unref(sysbus, &error_fatal);
+    sysbus_realize(sysbus, &error_fatal);
     sysbus_mmio_map(sysbus, 0, 0x80009000);
 
     /* LED indicator */
-    sysbus_create_simple_orphan("jazz-led", 0x8000f000, NULL);
+    sysbus_create_simple(OBJECT(machine), "led", "jazz-led",
+                         0x8000f000, NULL);
 
     g_free(dmas);
 }
diff --git a/hw/mips/loongson3_virt.c b/hw/mips/loongson3_virt.c
index 6f2ac8ba90..9ab1edceb2 100644
--- a/hw/mips/loongson3_virt.c
+++ b/hw/mips/loongson3_virt.c
@@ -424,8 +424,8 @@ static inline void loongson3_virt_devices_init(MachineState *machine,
     MachineClass *mc = MACHINE_GET_CLASS(machine);
     LoongsonMachineState *s = LOONGSON_MACHINE(machine);
 
-    dev = qdev_new_orphan(TYPE_GPEX_HOST);
-    sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
+    dev = qdev_new(OBJECT(machine), "pcie", TYPE_GPEX_HOST);
+    sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
     pci_bus = PCI_HOST_BRIDGE(dev)->bus;
 
     s->ecam_alias = g_new0(MemoryRegion, 1);
@@ -465,11 +465,12 @@ static inline void loongson3_virt_devices_init(MachineState *machine,
     if (defaults_enabled() && object_class_by_name("pci-ohci")) {
         USBBus *usb_bus;
 
-        pci_create_simple_orphan(pci_bus, -1, "pci-ohci");
+        pci_create_simple(OBJECT(machine), "ohci", pci_bus, -1, "pci-ohci");
         usb_bus = USB_BUS(object_resolve_type_unambiguous(TYPE_USB_BUS,
                                                           &error_abort));
-        usb_create_simple_orphan(usb_bus, "usb-kbd");
-        usb_create_simple_orphan(usb_bus, "usb-tablet");
+        usb_create_simple(OBJECT(machine), "usb-kbd", usb_bus, "usb-kbd");
+        usb_create_simple(OBJECT(machine), "usb-tablet", usb_bus,
+                          "usb-tablet");
     }
 
     pci_init_nic_devices(pci_bus, mc->default_nic);
@@ -519,16 +520,16 @@ static void mips_loongson3_virt_init(MachineState *machine)
 
     memory_region_init(iocsr, OBJECT(machine), "loongson3.iocsr", UINT32_MAX);
 
-    ipi = qdev_new_orphan(TYPE_LOONGSON_IPI);
+    ipi = qdev_new(OBJECT(machine), "ipi", TYPE_LOONGSON_IPI);
     qdev_prop_set_uint32(ipi, "num-cpu", machine->smp.cpus);
-    sysbus_realize_and_unref(SYS_BUS_DEVICE(ipi), &error_fatal);
+    sysbus_realize(SYS_BUS_DEVICE(ipi), &error_fatal);
     memory_region_add_subregion(iocsr, SMP_IPI_MAILBOX,
                             sysbus_mmio_get_region(SYS_BUS_DEVICE(ipi), 0));
     memory_region_add_subregion(iocsr, MAIL_SEND_ADDR,
                             sysbus_mmio_get_region(SYS_BUS_DEVICE(ipi), 1));
 
-    liointc = qdev_new_orphan("loongson.liointc");
-    sysbus_realize_and_unref(SYS_BUS_DEVICE(liointc), &error_fatal);
+    liointc = qdev_new(OBJECT(machine), "liointc", "loongson.liointc");
+    sysbus_realize(SYS_BUS_DEVICE(liointc), &error_fatal);
 
     sysbus_mmio_map(SYS_BUS_DEVICE(liointc), 0, virt_memmap[VIRT_LIOINTC].base);
 
@@ -536,7 +537,8 @@ static void mips_loongson3_virt_init(MachineState *machine)
                    qdev_get_gpio_in(liointc, UART_IRQ), 115200, serial_hd(0),
                    DEVICE_LITTLE_ENDIAN);
 
-    sysbus_create_simple_orphan("goldfish_rtc", virt_memmap[VIRT_RTC].base,
+    sysbus_create_simple(OBJECT(machine), "rtc", "goldfish_rtc",
+                         virt_memmap[VIRT_RTC].base,
                          qdev_get_gpio_in(liointc, RTC_IRQ));
 
     cpuclk = clock_new(OBJECT(machine), "cpu-refclk");
diff --git a/hw/mips/malta.c b/hw/mips/malta.c
index ea11299af8..ebd1456657 100644
--- a/hw/mips/malta.c
+++ b/hw/mips/malta.c
@@ -1098,8 +1098,8 @@ void mips_malta_init(MachineState *machine)
     PCIDevice *piix4;
     DeviceState *dev;
 
-    s = MIPS_MALTA(qdev_new_orphan(TYPE_MIPS_MALTA));
-    sysbus_realize_and_unref(SYS_BUS_DEVICE(s), &error_fatal);
+    s = MIPS_MALTA(qdev_new(OBJECT(machine), "malta", TYPE_MIPS_MALTA));
+    sysbus_realize(SYS_BUS_DEVICE(s), &error_fatal);
 
     /* create CPU */
     mips_create_cpu(machine, s, &cbus_irq, &i8259_irq);
@@ -1227,16 +1227,17 @@ void mips_malta_init(MachineState *machine)
     stl_p(memory_region_get_ram_ptr(bios_copy) + 0x10, 0x00000420);
 
     /* Northbridge */
-    dev = qdev_new_orphan("gt64120");
+    dev = qdev_new(OBJECT(machine), "gt64120", "gt64120");
     qdev_prop_set_bit(dev, "cpu-little-endian", !TARGET_BIG_ENDIAN);
-    sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
+    sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
     pci_bus = PCI_BUS(qdev_get_child_bus(dev, "pci"));
     pci_bus_map_irqs(pci_bus, malta_pci_slot_get_pirq);
 
     /* Southbridge */
-    piix4 = pci_new_multifunction_orphan(PIIX4_PCI_DEVFN, TYPE_PIIX4_PCI_DEVICE);
+    piix4 = pci_new_multifunction(OBJECT(machine), "piix4",
+                                  PIIX4_PCI_DEVFN, TYPE_PIIX4_PCI_DEVICE);
     qdev_prop_set_uint32(DEVICE(piix4), "smb_io_base", 0x1100);
-    pci_realize_and_unref(piix4, pci_bus, &error_fatal);
+    qdev_realize(DEVICE(piix4), BUS(pci_bus), &error_fatal);
     isa_bus = ISA_BUS(qdev_get_child_bus(DEVICE(piix4), "isa.0"));
 
     dev = DEVICE(object_resolve_path_component(OBJECT(piix4), "ide"));
@@ -1254,7 +1255,8 @@ void mips_malta_init(MachineState *machine)
     g_free(smbus_eeprom_buf);
 
     /* Super I/O: SMS FDC37M817 */
-    isa_create_simple_orphan(isa_bus, TYPE_FDC37M81X_SUPERIO);
+    isa_create_simple(OBJECT(machine), "superio", isa_bus,
+                      TYPE_FDC37M81X_SUPERIO);
 
     /* Network card */
     network_init(pci_bus);
-- 
2.47.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.