From dca9220c355612beeb5b78ff1c4be54d626fbb5b Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Mon, 16 Jan 2017 07:03:48 -0700 Subject: [PATCH] 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 Reviewed-by: Bin Meng --- arch/x86/Makefile | 5 +++++ arch/x86/cpu/Makefile | 4 ++++ arch/x86/cpu/start64.S | 28 ++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 arch/x86/cpu/start64.S diff --git a/arch/x86/Makefile b/arch/x86/Makefile index dd0e22f970..4be1c353cc 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile @@ -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 diff --git a/arch/x86/cpu/Makefile b/arch/x86/cpu/Makefile index fd81310df6..97b26b0fe7 100644 --- a/arch/x86/cpu/Makefile +++ b/arch/x86/cpu/Makefile @@ -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 diff --git a/arch/x86/cpu/start64.S b/arch/x86/cpu/start64.S new file mode 100644 index 0000000000..651f16ac89 --- /dev/null +++ b/arch/x86/cpu/start64.S @@ -0,0 +1,28 @@ +/* + * 64-bit x86 Startup Code + * + * (C) Copyright 216 Google, Inc + * Written by Simon Glass + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include + +.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 .