[U-Boot] [PATCH v2 24/63] x86: Add 64-bit start-up code

Bin Meng bmeng.cn at gmail.com
Wed Dec 28 03:59:50 CET 2016


Hi Simon,

On Sun, Nov 20, 2016 at 4:25 AM, Simon Glass <sjg at chromium.org> wrote:
> 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 at chromium.org>
> ---
>
> Changes in v2: None
>
>  arch/x86/Makefile      |  5 +++++
>  arch/x86/cpu/Makefile  |  4 ++++
>  arch/x86/cpu/start64.S | 39 +++++++++++++++++++++++++++++++++++++++
>  3 files changed, 48 insertions(+)
>  create mode 100644 arch/x86/cpu/start64.S
>
> diff --git a/arch/x86/Makefile b/arch/x86/Makefile
> index dd0e22f..4be1c35 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 fd81310..97b26b0 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 0000000..9eadc35
> --- /dev/null
> +++ b/arch/x86/cpu/start64.S
> @@ -0,0 +1,39 @@
> +/*
> + * 64-bit x86 Startup Code
> + *
> + * (C) Copyright 216 Google, Inc
> + * Written by Simon Glass <sjg at chromium.org>
> + *
> + * SPDX-License-Identifier:    GPL-2.0+
> + */
> +
> +#include <config.h>
> +#include <asm/global_data.h>
> +#include <asm/post.h>
> +#include <asm/processor.h>
> +#include <asm/processor-flags.h>
> +#include <generated/generic-asm-offsets.h>
> +#include <generated/asm-offsets.h>

I guess not every header file above is being used, can you double
check and remove useless includes?

> +
> +.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
> +
> +       callq   board_init_f
> +       callq   board_init_f_r
> +

for consistency, can we just use "call"

> +       /* Should not return here */
> +       jmp     .
> +
> +       /* If the debug UART is being used, it is already set up by SPL */
> +       .globl board_debug_uart_init

This function looks useless, is it a must?

> +board_debug_uart_init:
> +       ret
> --

Regards,
Bin


More information about the U-Boot mailing list