From: Aiden Park <aiden.p...@intel.com> This supports 64-bit U-Boot as a Slim Bootloader payload.
Signed-off-by: Aiden Park <aiden.p...@intel.com> --- arch/x86/cpu/slimbootloader/Makefile | 9 +++++++-- arch/x86/cpu/slimbootloader/entry64.S | 14 ++++++++++++++ arch/x86/cpu/slimbootloader/slimbootloader.c | 17 +++++++++++++++-- 3 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 arch/x86/cpu/slimbootloader/entry64.S diff --git a/arch/x86/cpu/slimbootloader/Makefile b/arch/x86/cpu/slimbootloader/Makefile index aac9fa3db8..79fa699501 100644 --- a/arch/x86/cpu/slimbootloader/Makefile +++ b/arch/x86/cpu/slimbootloader/Makefile @@ -1,5 +1,10 @@ # SPDX-License-Identifier: GPL-2.0+ # -# Copyright (C) 2019 Intel Corporation <www.intel.com> +# Copyright (C) 2019-2020 Intel Corporation <www.intel.com> -obj-y += car.o slimbootloader.o sdram.o serial.o +ifeq ($(CONFIG_X86_64),y) +obj-y += entry64.o +else +obj-y += car.o +endif +obj-y += slimbootloader.o sdram.o serial.o diff --git a/arch/x86/cpu/slimbootloader/entry64.S b/arch/x86/cpu/slimbootloader/entry64.S new file mode 100644 index 0000000000..5e101e18a9 --- /dev/null +++ b/arch/x86/cpu/slimbootloader/entry64.S @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (C) 2020 Intel Corporation <www.intel.com> + */ + +#include <generated/asm-offsets.h> + +.section .text + +.globl init_64bit_entry +init_64bit_entry: + /* Save hob pointer parameter */ + mov %rcx, %r10 + jmp init_64bit_entry_ret diff --git a/arch/x86/cpu/slimbootloader/slimbootloader.c b/arch/x86/cpu/slimbootloader/slimbootloader.c index 21dcfb2142..7857e4cd8b 100644 --- a/arch/x86/cpu/slimbootloader/slimbootloader.c +++ b/arch/x86/cpu/slimbootloader/slimbootloader.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0+ /* - * Copyright (C) 2019 Intel Corporation <www.intel.com> + * Copyright (C) 2019-2020 Intel Corporation <www.intel.com> */ #include <common.h> @@ -43,11 +43,23 @@ static void tsc_init(void) int arch_cpu_init(void) { + int ret = 0; + tsc_init(); - return x86_cpu_init_f(); +#if !CONFIG_IS_ENABLED(X86_64) + ret = x86_cpu_init_f(); +#endif + return ret; } +#if CONFIG_IS_ENABLED(X86_64) +int set_hob_list(void *hob_list) +{ + gd->arch.hob_list = hob_list; + return 0; +} +#else int checkcpu(void) { return 0; @@ -57,3 +69,4 @@ int print_cpuinfo(void) { return default_print_cpuinfo(); } +#endif -- 2.20.1