[PATCH] x86: qemu: Fix broken multi-core boot

Bin Meng bmeng.cn at gmail.com
Tue Feb 2 08:04:47 CET 2021


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 at gmail.com>
---

 arch/x86/cpu/qfw_cpu.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/x86/cpu/qfw_cpu.c b/arch/x86/cpu/qfw_cpu.c
index a35de87..b959ead 100644
--- a/arch/x86/cpu/qfw_cpu.c
+++ b/arch/x86/cpu/qfw_cpu.c
@@ -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;
-- 
2.7.4



More information about the U-Boot mailing list