x86: Move CPU init to before spl_init()
authorSimon Glass <sjg@chromium.org>
Mon, 21 Oct 2019 03:37:55 +0000 (21:37 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Sat, 2 Nov 2019 23:20:28 +0000 (07:20 +0800)
At present we call spl_init() before identifying the CPU. This is not a
good idea - e.g. if bootstage is enabled then it will try to set up the
timer which works better if the CPU is identified.

Put explicit code at each entry pointer to identify the CPU.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
arch/x86/cpu/start_from_spl.S
arch/x86/lib/spl.c
arch/x86/lib/tpl.c

index a73b4d7c4597f7a5df030aa46d0e41b66fa08cc5..22cab2dd6cedf2956c294e543537c4a7f0b0b011 100644 (file)
@@ -31,6 +31,7 @@ _start:
 
        call    board_init_f_init_reserve
 
+       call    x86_cpu_reinit_f
        xorl    %eax, %eax
        call    board_init_f
        call    board_init_f_r
index a8eaafeb5b5f4d91b451e29661b9470ca6f35e1c..1677f80b25c23421435c213bdfeea046de981231 100644 (file)
@@ -67,6 +67,10 @@ static int x86_spl_init(void)
        int ret;
 
        debug("%s starting\n", __func__);
+       if (IS_ENABLED(TPL))
+               ret = x86_cpu_reinit_f();
+       else
+               ret = x86_cpu_init_f();
        ret = spl_init();
        if (ret) {
                debug("%s: spl_init() failed\n", __func__);
index 6ca3f7b1f20ba42259e43adffa2a05ec7aeb92d8..363984f7f2737da88d703952b0f9b4a69e6b202c 100644 (file)
@@ -24,6 +24,11 @@ static int x86_tpl_init(void)
        int ret;
 
        debug("%s starting\n", __func__);
+       ret = x86_cpu_init_tpl();
+       if (ret) {
+               debug("%s: x86_cpu_init_tpl() failed\n", __func__);
+               return ret;
+       }
        ret = spl_init();
        if (ret) {
                debug("%s: spl_init() failed\n", __func__);