Message ID | 20170116140427.29283-24-sjg@chromium.org |
---|---|
State | Accepted |
Commit | dca9220c355612beeb5b78ff1c4be54d626fbb5b |
Delegated to: | Bin Meng |
Headers | show |
On Mon, Jan 16, 2017 at 10:03 PM, Simon Glass <sjg@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@chromium.org> > --- > > Changes in v3: > - Drop unused headers > - Drop unused board_debug_uart_init function > - Use call instead of callq > > Changes in v2: None > > 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 > Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
On Tue, Jan 17, 2017 at 10:25 AM, Bin Meng <bmeng.cn@gmail.com> wrote: > On Mon, Jan 16, 2017 at 10:03 PM, Simon Glass <sjg@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@chromium.org> >> --- >> >> Changes in v3: >> - Drop unused headers >> - Drop unused board_debug_uart_init function >> - Use call instead of callq >> >> Changes in v2: None >> >> 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 >> > > Reviewed-by: Bin Meng <bmeng.cn@gmail.com> applied to u-boot-x86, thanks!
diff --git a/arch/x86/Makefile b/arch/x86/Makefile index dd0e22f970d..4be1c353cc9 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 fd81310df69..97b26b0fe76 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 00000000000..651f16ac89c --- /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 <sjg@chromium.org> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <config.h> + +.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 .
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@chromium.org> --- Changes in v3: - Drop unused headers - Drop unused board_debug_uart_init function - Use call instead of callq Changes in v2: None 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