x86: qemu: Fix broken multi-core boot
authorBin Meng <bmeng.cn@gmail.com>
Tue, 2 Feb 2021 07:04:47 +0000 (15:04 +0800)
committerBin Meng <bmeng.cn@gmail.com>
Wed, 3 Feb 2021 14:54:56 +0000 (22:54 +0800)
Unfortunately the multi-core boot for QEMU x86 has been broken since
commit 77a5e2d3bc61 ("x86: mp_init: Set up the CPU numbers at the start").

In order to support QEMU x86 multi-core boot, the /cpus node must be
bound before any actual fix up in qemu_cpu_fixup(). This adds the
uclass_get() call to ensure this, just like what was done before.

Fixes: 77a5e2d3bc61 ("x86: mp_init: Set up the CPU numbers at the start")
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
arch/x86/cpu/qfw_cpu.c

index a35de87..b959ead 100644 (file)
@@ -17,10 +17,16 @@ int qemu_cpu_fixup(void)
        int ret;
        int cpu_num;
        int cpu_online;
+       struct uclass *uc;
        struct udevice *dev, *pdev;
        struct cpu_plat *plat;
        char *cpu;
 
+       /* This will cause the CPUs devices to be bound */
+       ret = uclass_get(UCLASS_CPU, &uc);
+       if (ret)
+               return ret;
+
        /* first we need to find '/cpus' */
        for (device_find_first_child(dm_root(), &pdev);
             pdev;