[PATCH 4/8] x86: slimbootloader: Support 64-bit operation
Simon Glass
sjg at chromium.org
Sun Apr 26 22:15:51 CEST 2020
Hi Aiden,
On Tue, 21 Apr 2020 at 18:45, <aiden.park at intel.com> wrote:
>
> From: Aiden Park <aiden.park at intel.com>
>
> This supports 64-bit U-Boot as a Slim Bootloader payload.
>
> Signed-off-by: Aiden Park <aiden.park at 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)
Can you use if() instead of #if ?
> + ret = x86_cpu_init_f();
> +#endif
> + return ret;
> }
>
> +#if CONFIG_IS_ENABLED(X86_64)
It should be safe to define both of these functions so I don't think
you need the #ifdef
> +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
>
Regards,
Simon
More information about the U-Boot
mailing list