Commit 99757d5574 for qemu.org

commit 99757d557437dbcf57a3d43fe7427fe89f248ef3
Author: Alistair Francis <alistair.francis@wdc.com>
Date:   Thu Mar 12 14:31:55 2026 +1000

    hw/arm: fsl-imx7: Don't call qdev_get_machine in soc init

    Calling qdev_get_machine() in the soc_init function would result in
    the following assert

        ../hw/core/qdev.c:858: qdev_get_machine: Assertion `dev' failed.

    when trying to run

        ./qemu-system-aarch64 -S -display none -M virt -device fsl-imx7,help

    as the machine wasn't created yet. We call qdev_get_machine() to obtain
    the number of CPUs in the machine. So instead of initialising the CPUs in
    the SoC init let's instead do it in the realise where the machine
    will exist.

    Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
    Tested-by: Markus Armbruster <armbru@redhat.com>
    Message-ID: <20260312043158.4191378-5-alistair.francis@wdc.com>
    Signed-off-by: Thomas Huth <thuth@redhat.com>

diff --git a/hw/arm/fsl-imx7.c b/hw/arm/fsl-imx7.c
index 9a230d222f..2defa498d3 100644
--- a/hw/arm/fsl-imx7.c
+++ b/hw/arm/fsl-imx7.c
@@ -32,20 +32,10 @@

 static void fsl_imx7_init(Object *obj)
 {
-    MachineState *ms = MACHINE(qdev_get_machine());
     FslIMX7State *s = FSL_IMX7(obj);
     char name[NAME_SIZE];
     int i;

-    /*
-     * CPUs
-     */
-    for (i = 0; i < MIN(ms->smp.cpus, FSL_IMX7_NUM_CPUS); i++) {
-        snprintf(name, NAME_SIZE, "cpu%d", i);
-        object_initialize_child(obj, name, &s->cpu[i],
-                                ARM_CPU_TYPE_NAME("cortex-a7"));
-    }
-
     /*
      * A7MPCORE
      */
@@ -179,6 +169,15 @@ static void fsl_imx7_realize(DeviceState *dev, Error **errp)
         return;
     }

+    /*
+     * CPUs
+     */
+    for (i = 0; i < smp_cpus; i++) {
+        snprintf(name, NAME_SIZE, "cpu%d", i);
+        object_initialize_child(OBJECT(dev), name, &s->cpu[i],
+                                ARM_CPU_TYPE_NAME("cortex-a7"));
+    }
+
     /*
      * CPUs
      */