]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
x86: mp_init: Set up the CPU numbers at the start
authorSimon Glass <sjg@chromium.org>
Fri, 17 Jul 2020 14:48:13 +0000 (08:48 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Mon, 20 Jul 2020 01:46:44 +0000 (09:46 +0800)
At present each CPU is given a number when it starts itself up. While this
saves a tiny amount of time by doing the device-tree read in parallel, it
is confusing that the numbering happens on the fly.

Move this code into mp_init() and do it at the start.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
arch/x86/cpu/mp_init.c

index df43f71572a911c70fe3a1380019b42f9ba9915c..6f6de49df0edee6029dfccc03e74420b8e709016 100644 (file)
@@ -444,12 +444,6 @@ static int mp_init_cpu(struct udevice *cpu, void *unused)
 {
        struct cpu_platdata *plat = dev_get_parent_platdata(cpu);
 
-       /*
-        * Multiple APs are brought up simultaneously and they may get the same
-        * seq num in the uclass_resolve_seq() during device_probe(). To avoid
-        * this, set req_seq to the reg number in the device tree in advance.
-        */
-       cpu->req_seq = dev_read_u32_default(cpu, "reg", -1);
        plat->ucode_version = microcode_read_rev();
        plat->device_id = gd->arch.x86_device;
 
@@ -465,13 +459,8 @@ int mp_init(void)
        int num_aps, num_cpus;
        atomic_t *ap_count;
        struct udevice *cpu;
-       int ret;
-
-       /* This will cause the CPUs devices to be bound */
        struct uclass *uc;
-       ret = uclass_get(UCLASS_CPU, &uc);
-       if (ret)
-               return ret;
+       int ret;
 
        if (IS_ENABLED(CONFIG_QFW)) {
                ret = qemu_cpu_fixup();
@@ -479,6 +468,14 @@ int mp_init(void)
                        return ret;
        }
 
+       /*
+        * Multiple APs are brought up simultaneously and they may get the same
+        * seq num in the uclass_resolve_seq() during device_probe(). To avoid
+        * this, set req_seq to the reg number in the device tree in advance.
+        */
+       uclass_id_foreach_dev(UCLASS_CPU, cpu, uc)
+               cpu->req_seq = dev_read_u32_default(cpu, "reg", -1);
+
        ret = init_bsp(&cpu);
        if (ret) {
                debug("Cannot init boot CPU: err=%d\n", ret);