Convert the *_orphan() device-creation calls in the hw/arm stellaris, musicpal
board files 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 SoC device for
composite children.  Names follow existing QOM conventions.

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

hw/arm/musicpal.c:1235 | cpu_create | OBJECT(machine) | "cpu" | 
musicpal_init(MachineState *machine); single CPU
hw/arm/musicpal.c:1243 | sysbus_create_simple | OBJECT(machine) | "pic" | board 
init(); primary intc
hw/arm/musicpal.c:1245 | sysbus_create_varargs | OBJECT(machine) | "pit" | 
board init(); MV88W8618 timer block
hw/arm/musicpal.c:1252 | qdev_new | OBJECT(machine) | "uart-orgate" | board 
init(); OR-IRQ combiner
hw/arm/musicpal.c:1290 | sysbus_create_simple | OBJECT(machine) | "flashcfg" | 
board init(); flash config regs
hw/arm/musicpal.c:1292 | qdev_new | OBJECT(machine) | "eth" | board init(); 
on-chip ethernet
hw/arm/musicpal.c:1301 | sysbus_create_simple | OBJECT(machine) | "wlan" | 
board init(); WLAN stub
hw/arm/musicpal.c:1303 | sysbus_create_simple | OBJECT(machine) | "misc" | 
board init(); misc regs
hw/arm/musicpal.c:1305 | sysbus_create_simple | OBJECT(machine) | "gpio" | 
board init(); GPIO block
hw/arm/musicpal.c:1307 | sysbus_create_simple | OBJECT(machine) | "i2c" | board 
init(); bit-bang GPIO I2C
hw/arm/musicpal.c:1310 | sysbus_create_simple | OBJECT(machine) | "lcd" | board 
init(); front-panel LCD
hw/arm/musicpal.c:1311 | sysbus_create_simple | OBJECT(machine) | "keys" | 
board init(); front-panel buttons
hw/arm/musicpal.c:1331 | i2c_slave_new | OBJECT(machine) | "wm8750" | board 
init(); audio codec on I2C bus
hw/arm/musicpal.c:1337 | qdev_new | OBJECT(machine) | "audio" | board init(); 
audio DMA controller
hw/arm/stellaris.c:1099 | qdev_new | soc_container | "sys" | collapse existing 
add_child; keep name
hw/arm/stellaris.c:1126 | qdev_new | soc_container | "v7m" | collapse existing 
add_child; keep name
hw/arm/stellaris.c:1146 | sysbus_create_varargs | soc_container | "adc" | board 
init(); on-SoC ADC
hw/arm/stellaris.c:1160 | qdev_new | soc_container | "gptm[*]" | collapse 
existing add_child; keep name
hw/arm/stellaris.c:1175 | qdev_new | soc_container | "wdg" | collapse existing 
add_child; keep name
hw/arm/stellaris.c:1192 | sysbus_create_simple | soc_container | "gpio[*]" | 
board init(); loop over PL061 ports
hw/arm/stellaris.c:1204 | sysbus_create_simple | soc_container | "i2c[*]" | 
board init(); loop over I2C blocks
hw/arm/stellaris.c:1212 | i2c_slave_create_simple | OBJECT(ms) | "oled-i2c" | 
board init(); external I2C OLED panel
hw/arm/stellaris.c:1219 | qdev_new | soc_container | "uart[*]" | collapse 
existing add_child; keep name
hw/arm/stellaris.c:1229 | sysbus_create_simple | soc_container | "ssi" | board 
init(); PL022 SPI
hw/arm/stellaris.c:1303 | ssi_create_peripheral | OBJECT(ms) | "ssi-sd" | board 
init(); external SD adapter on SSI bus
hw/arm/stellaris.c:1307 | qdev_new | OBJECT(ms) | "sd-card" | board init(); 
removable SD card
hw/arm/stellaris.c:1313 | qdev_new | OBJECT(ms) | "oled" | collapse existing 
add_child; keep name
hw/arm/stellaris.c:1318 | qdev_new | OBJECT(ms) | "splitter" | collapse 
existing add_child; keep name
hw/arm/stellaris.c:1340 | qdev_new | soc_container | "enet" | collapse existing 
add_child; keep name
hw/arm/stellaris.c:1360 | qdev_new | OBJECT(ms) | "gamepad" | collapse existing 
add_child; keep name

Link: https://lore.kernel.org/qemu-devel/[email protected]/
Assisted-by: Kiro
Signed-off-by: Alexander Graf <[email protected]>
---
 hw/arm/musicpal.c  | 41 ++++++++++++++++------------
 hw/arm/stellaris.c | 68 ++++++++++++++++++++--------------------------
 2 files changed, 53 insertions(+), 56 deletions(-)

diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c
index d9fe08d57b..86ea348d3d 100644
--- a/hw/arm/musicpal.c
+++ b/hw/arm/musicpal.c
@@ -1232,7 +1232,7 @@ static void musicpal_init(MachineState *machine)
         exit(EXIT_FAILURE);
     }
 
-    cpu = ARM_CPU(cpu_create_orphan(machine->cpu_type));
+    cpu = ARM_CPU(cpu_create(OBJECT(machine), "cpu", machine->cpu_type));
 
     memory_region_add_subregion(address_space_mem, 0, machine->ram);
 
@@ -1240,18 +1240,20 @@ static void musicpal_init(MachineState *machine)
                            &error_fatal);
     memory_region_add_subregion(address_space_mem, MP_SRAM_BASE, sram);
 
-    pic = sysbus_create_simple_orphan(TYPE_MV88W8618_PIC, MP_PIC_BASE,
+    pic = sysbus_create_simple(OBJECT(machine), "pic",
+                               TYPE_MV88W8618_PIC, MP_PIC_BASE,
                                qdev_get_gpio_in(DEVICE(cpu), ARM_CPU_IRQ));
-    sysbus_create_varargs_orphan(TYPE_MV88W8618_PIT, MP_PIT_BASE,
+    sysbus_create_varargs(OBJECT(machine), "pit",
+                          TYPE_MV88W8618_PIT, MP_PIT_BASE,
                           qdev_get_gpio_in(pic, MP_TIMER1_IRQ),
                           qdev_get_gpio_in(pic, MP_TIMER2_IRQ),
                           qdev_get_gpio_in(pic, MP_TIMER3_IRQ),
                           qdev_get_gpio_in(pic, MP_TIMER4_IRQ), NULL);
 
     /* Logically OR both UART IRQs together */
-    uart_orgate = qdev_new_orphan(TYPE_OR_IRQ);
+    uart_orgate = qdev_new(OBJECT(machine), "uart-orgate", TYPE_OR_IRQ);
     object_property_set_int(OBJECT(uart_orgate), "num-lines", 2, &error_fatal);
-    qdev_realize_and_unref(uart_orgate, NULL, &error_fatal);
+    qdev_realize(uart_orgate, NULL, &error_fatal);
     qdev_connect_gpio_out(uart_orgate, 0,
                           qdev_get_gpio_in(pic, MP_UART_SHARED_IRQ));
 
@@ -1287,28 +1289,31 @@ static void musicpal_init(MachineState *machine)
                               2, 0x00BF, 0x236D, 0x0000, 0x0000,
                               0x5555, 0x2AAA, 0);
     }
-    sysbus_create_simple_orphan(TYPE_MV88W8618_FLASHCFG, MP_FLASHCFG_BASE, 
NULL);
+    sysbus_create_simple(OBJECT(machine), "flashcfg",
+                         TYPE_MV88W8618_FLASHCFG, MP_FLASHCFG_BASE, NULL);
 
-    dev = qdev_new_orphan(TYPE_MV88W8618_ETH);
+    dev = qdev_new(OBJECT(machine), "eth", TYPE_MV88W8618_ETH);
     qemu_configure_nic_device(dev, true, "mv88w8618");
     object_property_set_link(OBJECT(dev), "dma-memory",
                              OBJECT(get_system_memory()), &error_fatal);
-    sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
+    sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
     sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, MP_ETH_BASE);
     sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0,
                        qdev_get_gpio_in(pic, MP_ETH_IRQ));
 
-    sysbus_create_simple_orphan("mv88w8618_wlan", MP_WLAN_BASE, NULL);
+    sysbus_create_simple(OBJECT(machine), "wlan", "mv88w8618_wlan", 
MP_WLAN_BASE, NULL);
 
-    sysbus_create_simple_orphan(TYPE_MUSICPAL_MISC, MP_MISC_BASE, NULL);
+    sysbus_create_simple(OBJECT(machine), "misc", TYPE_MUSICPAL_MISC, 
MP_MISC_BASE, NULL);
 
-    dev = sysbus_create_simple_orphan(TYPE_MUSICPAL_GPIO, MP_GPIO_BASE,
+    dev = sysbus_create_simple(OBJECT(machine), "gpio",
+                               TYPE_MUSICPAL_GPIO, MP_GPIO_BASE,
                                qdev_get_gpio_in(pic, MP_GPIO_IRQ));
-    i2c_dev = sysbus_create_simple_orphan(TYPE_GPIO_I2C, -1, NULL);
+    i2c_dev = sysbus_create_simple(OBJECT(machine), "i2c", TYPE_GPIO_I2C, -1, 
NULL);
     i2c = (I2CBus *)qdev_get_child_bus(i2c_dev, "i2c");
 
-    lcd_dev = sysbus_create_simple_orphan(TYPE_MUSICPAL_LCD, MP_LCD_BASE, 
NULL);
-    key_dev = sysbus_create_simple_orphan(TYPE_MUSICPAL_KEY, -1, NULL);
+    lcd_dev = sysbus_create_simple(OBJECT(machine), "lcd",
+                                   TYPE_MUSICPAL_LCD, MP_LCD_BASE, NULL);
+    key_dev = sysbus_create_simple(OBJECT(machine), "keys", TYPE_MUSICPAL_KEY, 
-1, NULL);
 
     /* I2C read data */
     qdev_connect_gpio_out(i2c_dev, 0,
@@ -1328,17 +1333,17 @@ static void musicpal_init(MachineState *machine)
         qdev_connect_gpio_out(key_dev, i, qdev_get_gpio_in(dev, i + 15));
     }
 
-    wm8750_dev = i2c_slave_new_orphan(TYPE_WM8750, MP_WM_ADDR);
+    wm8750_dev = i2c_slave_new(OBJECT(machine), "wm8750", TYPE_WM8750, 
MP_WM_ADDR);
     if (machine->audiodev) {
         qdev_prop_set_string(DEVICE(wm8750_dev), "audiodev", 
machine->audiodev);
     }
-    i2c_slave_realize_and_unref(wm8750_dev, i2c, &error_abort);
+    qdev_realize(DEVICE(wm8750_dev), BUS(i2c), &error_abort);
 
-    dev = qdev_new_orphan(TYPE_MV88W8618_AUDIO);
+    dev = qdev_new(OBJECT(machine), "audio", TYPE_MV88W8618_AUDIO);
     s = SYS_BUS_DEVICE(dev);
     object_property_set_link(OBJECT(dev), "wm8750", OBJECT(wm8750_dev),
                              NULL);
-    sysbus_realize_and_unref(s, &error_fatal);
+    sysbus_realize(s, &error_fatal);
     sysbus_mmio_map(s, 0, MP_AUDIO_BASE);
     sysbus_connect_irq(s, 0, qdev_get_gpio_in(pic, MP_AUDIO_IRQ));
 
diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c
index 7a18d98477..b2ff6f4d97 100644
--- a/hw/arm/stellaris.c
+++ b/hw/arm/stellaris.c
@@ -1096,8 +1096,7 @@ static void stellaris_init(MachineState *ms, 
stellaris_board_info *board)
      * Create the system-registers object early, because we will
      * need its sysclk output.
      */
-    ssys_dev = qdev_new_orphan(TYPE_STELLARIS_SYS);
-    object_property_add_child(soc_container, "sys", OBJECT(ssys_dev));
+    ssys_dev = qdev_new(soc_container, "sys", TYPE_STELLARIS_SYS);
 
     /*
      * Most devices come preprogrammed with a MAC address in the user data.
@@ -1121,10 +1120,9 @@ static void stellaris_init(MachineState *ms, 
stellaris_board_info *board)
     qdev_prop_set_uint32(ssys_dev, "dc2", board->dc2);
     qdev_prop_set_uint32(ssys_dev, "dc3", board->dc3);
     qdev_prop_set_uint32(ssys_dev, "dc4", board->dc4);
-    sysbus_realize_and_unref(SYS_BUS_DEVICE(ssys_dev), &error_fatal);
+    sysbus_realize(SYS_BUS_DEVICE(ssys_dev), &error_fatal);
 
-    armv7m = qdev_new_orphan(TYPE_ARMV7M);
-    object_property_add_child(soc_container, "v7m", OBJECT(armv7m));
+    armv7m = qdev_new(soc_container, "v7m", TYPE_ARMV7M);
     qdev_prop_set_uint32(armv7m, "num-irq", NUM_IRQ_LINES);
     qdev_prop_set_uint8(armv7m, "num-prio-bits", NUM_PRIO_BITS);
     qdev_prop_set_string(armv7m, "cpu-type", ms->cpu_type);
@@ -1135,7 +1133,7 @@ static void stellaris_init(MachineState *ms, 
stellaris_board_info *board)
     object_property_set_link(OBJECT(armv7m), "memory",
                              OBJECT(get_system_memory()), &error_abort);
     /* This will exit with an error if the user passed us a bad cpu_type */
-    sysbus_realize_and_unref(SYS_BUS_DEVICE(armv7m), &error_fatal);
+    sysbus_realize(SYS_BUS_DEVICE(armv7m), &error_fatal);
     nvic = armv7m;
 
     /* Now we can wire up the IRQ and MMIO of the system registers */
@@ -1143,7 +1141,8 @@ static void stellaris_init(MachineState *ms, 
stellaris_board_info *board)
     sysbus_connect_irq(SYS_BUS_DEVICE(ssys_dev), 0, qdev_get_gpio_in(nvic, 
28));
 
     if (DEV_CAP(1, ADC)) {
-        dev = sysbus_create_varargs_orphan(TYPE_STELLARIS_ADC, 0x40038000,
+        dev = sysbus_create_varargs(soc_container, "adc",
+                                    TYPE_STELLARIS_ADC, 0x40038000,
                                     qdev_get_gpio_in(nvic, 14),
                                     qdev_get_gpio_in(nvic, 15),
                                     qdev_get_gpio_in(nvic, 16),
@@ -1157,12 +1156,11 @@ static void stellaris_init(MachineState *ms, 
stellaris_board_info *board)
         if (DEV_CAP(2, GPTM(i))) {
             SysBusDevice *sbd;
 
-            dev = qdev_new_orphan(TYPE_STELLARIS_GPTM);
+            dev = qdev_new(soc_container, "gptm[*]", TYPE_STELLARIS_GPTM);
             sbd = SYS_BUS_DEVICE(dev);
-            object_property_add_child(soc_container, "gptm[*]", OBJECT(dev));
             qdev_connect_clock_in(dev, "clk",
                                   qdev_get_clock_out(ssys_dev, "SYSCLK"));
-            sysbus_realize_and_unref(sbd, &error_fatal);
+            sysbus_realize(sbd, &error_fatal);
             sysbus_mmio_map(sbd, 0, 0x40030000 + i * 0x1000);
             sysbus_connect_irq(sbd, 0, qdev_get_gpio_in(nvic, timer_irq[i]));
             /* TODO: This is incorrect, but we get away with it because
@@ -1172,12 +1170,11 @@ static void stellaris_init(MachineState *ms, 
stellaris_board_info *board)
     }
 
     if (DEV_CAP(1, WDT)) {
-        dev = qdev_new_orphan(TYPE_LUMINARY_WATCHDOG);
-        object_property_add_child(soc_container, "wdg", OBJECT(dev));
+        dev = qdev_new(soc_container, "wdg", TYPE_LUMINARY_WATCHDOG);
         qdev_connect_clock_in(dev, "WDOGCLK",
                               qdev_get_clock_out(ssys_dev, "SYSCLK"));
 
-        sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
+        sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
         sysbus_mmio_map(SYS_BUS_DEVICE(dev),
                         0,
                         0x40000000u);
@@ -1189,7 +1186,8 @@ static void stellaris_init(MachineState *ms, 
stellaris_board_info *board)
 
     for (i = 0; i < NUM_GPIO; i++) {
         if (DEV_CAP(4, GPIO(i))) {
-            gpio_dev[i] = sysbus_create_simple_orphan("pl061_luminary", 
gpio_addr[i],
+            gpio_dev[i] = sysbus_create_simple(soc_container, "gpio[*]",
+                                               "pl061_luminary", gpio_addr[i],
                                                qdev_get_gpio_in(nvic,
                                                                 gpio_irq[i]));
             for (j = 0; j < 8; j++) {
@@ -1201,7 +1199,8 @@ static void stellaris_init(MachineState *ms, 
stellaris_board_info *board)
 
     for (i = 0; i < NUM_I2C; i++) {
         if (DEV_CAP(2, I2C(i))) {
-            i2c_dev[i] = sysbus_create_simple_orphan(TYPE_STELLARIS_I2C, 
i2c_addr[i],
+            i2c_dev[i] = sysbus_create_simple(soc_container, "i2c[*]",
+                                              TYPE_STELLARIS_I2C, i2c_addr[i],
                                               qdev_get_gpio_in(nvic,
                                                                i2c_irq[i]));
         }
@@ -1209,24 +1208,23 @@ static void stellaris_init(MachineState *ms, 
stellaris_board_info *board)
     if (board->peripherals & BP_OLED_I2C) {
         I2CBus *bus = (I2CBus *)qdev_get_child_bus(i2c_dev[0], "i2c");
 
-        i2c_slave_create_simple_orphan(bus, "ssd0303", 0x3d);
+        i2c_slave_create_simple(OBJECT(ms), "oled-i2c", bus, "ssd0303", 0x3d);
     }
 
     for (i = 0; i < NUM_UART; i++) {
         if (DEV_CAP(2, UART(i))) {
             SysBusDevice *sbd;
 
-            dev = qdev_new_orphan("pl011_luminary");
-            object_property_add_child(soc_container, "uart[*]", OBJECT(dev));
+            dev = qdev_new(soc_container, "uart[*]", "pl011_luminary");
             sbd = SYS_BUS_DEVICE(dev);
             qdev_prop_set_chr(dev, "chardev", serial_hd(i));
-            sysbus_realize_and_unref(sbd, &error_fatal);
+            sysbus_realize(sbd, &error_fatal);
             sysbus_mmio_map(sbd, 0, 0x4000c000 + i * 0x1000);
             sysbus_connect_irq(sbd, 0, qdev_get_gpio_in(nvic, uart_irq[i]));
         }
     }
     if (DEV_CAP(2, SSI)) {
-        dev = sysbus_create_simple_orphan("pl022", 0x40008000,
+        dev = sysbus_create_simple(soc_container, "ssi", "pl022", 0x40008000,
                                    qdev_get_gpio_in(nvic, 7));
         if (board->peripherals & BP_OLED_SSI) {
             void *bus;
@@ -1300,26 +1298,22 @@ static void stellaris_init(MachineState *ms, 
stellaris_board_info *board)
              *  - Make the ssd0323 OLED controller chipselect active-low
              */
             bus = qdev_get_child_bus(dev, "ssi");
-            sddev = ssi_create_peripheral_orphan(bus, "ssi-sd");
+            sddev = ssi_create_peripheral(OBJECT(ms), "ssi-sd", bus, "ssi-sd");
 
             dinfo = drive_get(IF_SD, 0, 0);
             blk = dinfo ? blk_by_legacy_dinfo(dinfo) : NULL;
-            carddev = qdev_new_orphan(TYPE_SD_CARD_SPI);
+            carddev = qdev_new(OBJECT(ms), "sd-card", TYPE_SD_CARD_SPI);
             qdev_prop_set_drive_err(carddev, "drive", blk, &error_fatal);
-            qdev_realize_and_unref(carddev,
-                                   qdev_get_child_bus(sddev, "sd-bus"),
-                                   &error_fatal);
+            qdev_realize(carddev, qdev_get_child_bus(sddev, "sd-bus"),
+                         &error_fatal);
 
-            ssddev = qdev_new_orphan("ssd0323");
-            object_property_add_child(OBJECT(ms), "oled", OBJECT(ssddev));
+            ssddev = qdev_new(OBJECT(ms), "oled", "ssd0323");
             qdev_prop_set_uint8(ssddev, "cs", 1);
-            qdev_realize_and_unref(ssddev, bus, &error_fatal);
+            qdev_realize(ssddev, bus, &error_fatal);
 
-            gpio_d_splitter = qdev_new_orphan(TYPE_SPLIT_IRQ);
-            object_property_add_child(OBJECT(ms), "splitter",
-                                      OBJECT(gpio_d_splitter));
+            gpio_d_splitter = qdev_new(OBJECT(ms), "splitter", TYPE_SPLIT_IRQ);
             qdev_prop_set_uint32(gpio_d_splitter, "num-lines", 2);
-            qdev_realize_and_unref(gpio_d_splitter, NULL, &error_fatal);
+            qdev_realize(gpio_d_splitter, NULL, &error_fatal);
             qdev_connect_gpio_out(
                     gpio_d_splitter, 0,
                     qdev_get_gpio_in_named(sddev, SSI_GPIO_CS, 0));
@@ -1337,15 +1331,14 @@ static void stellaris_init(MachineState *ms, 
stellaris_board_info *board)
     if (DEV_CAP(4, EMAC)) {
         DeviceState *enet;
 
-        enet = qdev_new_orphan("stellaris_enet");
-        object_property_add_child(soc_container, "enet", OBJECT(enet));
+        enet = qdev_new(soc_container, "enet", "stellaris_enet");
         if (nd) {
             qdev_set_nic_properties(enet, nd);
         } else {
             qdev_prop_set_macaddr(enet, "mac", mac.a);
         }
 
-        sysbus_realize_and_unref(SYS_BUS_DEVICE(enet), &error_fatal);
+        sysbus_realize(SYS_BUS_DEVICE(enet), &error_fatal);
         sysbus_mmio_map(SYS_BUS_DEVICE(enet), 0, 0x40048000);
         sysbus_connect_irq(SYS_BUS_DEVICE(enet), 0, qdev_get_gpio_in(nvic, 
42));
     }
@@ -1357,13 +1350,12 @@ static void stellaris_init(MachineState *ms, 
stellaris_board_info *board)
         };
         DeviceState *gpad;
 
-        gpad = qdev_new_orphan(TYPE_STELLARIS_GAMEPAD);
-        object_property_add_child(OBJECT(ms), "gamepad", OBJECT(gpad));
+        gpad = qdev_new(OBJECT(ms), "gamepad", TYPE_STELLARIS_GAMEPAD);
         for (i = 0; i < ARRAY_SIZE(gpad_keycode); i++) {
             qlist_append_int(gpad_keycode_list, gpad_keycode[i]);
         }
         qdev_prop_set_array(gpad, "keycodes", gpad_keycode_list);
-        sysbus_realize_and_unref(SYS_BUS_DEVICE(gpad), &error_fatal);
+        sysbus_realize(SYS_BUS_DEVICE(gpad), &error_fatal);
 
         qdev_connect_gpio_out(gpad, 0,
                               qemu_irq_invert(gpio_in[GPIO_E][0])); /* up */
-- 
2.47.1


Reply via email to