aboutsummaryrefslogtreecommitdiff
path: root/arch/x86
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2019-10-20 21:37:55 -0600
committerBin Meng <bmeng.cn@gmail.com>2019-11-03 07:20:28 +0800
commit0e72ac715007a85cf89683883bd84bdcfa185b0a (patch)
treeefb1c2578a24c7764809cdb06881442875a0eec5 /arch/x86
parentece3a4607010226082f2e08afa37419e01ad853f (diff)
downloadu-boot-0e72ac715007a85cf89683883bd84bdcfa185b0a.zip
u-boot-0e72ac715007a85cf89683883bd84bdcfa185b0a.tar.gz
u-boot-0e72ac715007a85cf89683883bd84bdcfa185b0a.tar.bz2
x86: Move CPU init to before spl_init()
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>
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/cpu/start_from_spl.S1
-rw-r--r--arch/x86/lib/spl.c4
-rw-r--r--arch/x86/lib/tpl.c5
3 files changed, 10 insertions, 0 deletions
diff --git a/arch/x86/cpu/start_from_spl.S b/arch/x86/cpu/start_from_spl.S
index a73b4d7..22cab2d 100644
--- a/arch/x86/cpu/start_from_spl.S
+++ b/arch/x86/cpu/start_from_spl.S
@@ -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
diff --git a/arch/x86/lib/spl.c b/arch/x86/lib/spl.c
index a8eaafe..1677f80 100644
--- a/arch/x86/lib/spl.c
+++ b/arch/x86/lib/spl.c
@@ -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__);
diff --git a/arch/x86/lib/tpl.c b/arch/x86/lib/tpl.c
index 6ca3f7b..363984f 100644
--- a/arch/x86/lib/tpl.c
+++ b/arch/x86/lib/tpl.c
@@ -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__);