x86: Add 64-bit start-up code

Add code to start up U-Boot in 64-bit mode. It is fairly simple since we are
running from RAM and SPL has done the low-level init.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
Simon Glass 2017-01-16 07:03:48 -07:00 committed by Bin Meng
parent 987116f7f6
commit dca9220c35
3 changed files with 37 additions and 0 deletions

View file

@ -3,8 +3,13 @@
#
ifeq ($(CONFIG_EFI_APP),)
ifdef CONFIG_$(SPL_)X86_64
head-y := arch/x86/cpu/start64.o
else
head-y := arch/x86/cpu/start.o
endif
endif
head-$(CONFIG_$(SPL_)X86_16BIT_INIT) += arch/x86/cpu/start16.o
head-$(CONFIG_$(SPL_)X86_16BIT_INIT) += arch/x86/cpu/resetvec.o

View file

@ -8,7 +8,11 @@
# SPDX-License-Identifier: GPL-2.0+
#
ifeq ($(CONFIG_$(SPL_)X86_64),y)
extra-y = start64.o
else
extra-y = start.o
endif
extra-$(CONFIG_$(SPL_)X86_16BIT_INIT) += resetvec.o start16.o
obj-y += interrupts.o cpu.o cpu_x86.o call64.o setjmp.o

28
arch/x86/cpu/start64.S Normal file
View file

@ -0,0 +1,28 @@
/*
* 64-bit x86 Startup Code
*
* (C) Copyright 216 Google, Inc
* Written by Simon Glass <sjg@chromium.org>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <config.h>
.section .text
.code64
.globl _start
.type _start, @function
_start:
/* Set up memory using the existing stack */
mov %rsp, %rdi
call board_init_f_alloc_reserve
mov %rax, %rsp
call board_init_f_init_reserve
call board_init_f
call board_init_f_r
/* Should not return here */
jmp .