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 .