diff mbox

[U-Boot,v3,23/62] x86: Add 64-bit start-up code

Message ID 20170116140427.29283-24-sjg@chromium.org
State Accepted
Commit dca9220c355612beeb5b78ff1c4be54d626fbb5b
Delegated to: Bin Meng
Headers show

Commit Message

Simon Glass Jan. 16, 2017, 2:03 p.m. UTC
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

Comments

Bin Meng Jan. 17, 2017, 2:25 a.m. UTC | #1
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>
Bin Meng Jan. 17, 2017, 2:58 a.m. UTC | #2
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 mbox

Patch

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	.