Prepare v2024.10
[platform/kernel/u-boot.git] / arch / x86 / cpu / start64.S
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * 64-bit x86 Startup Code
4  *
5  * Copyright 2019 Google, Inc
6  * Written by Simon Glass <sjg@chromium.org>
7  */
8
9 #include <config.h>
10
11 .section .text.start
12 .code64
13 .globl _start
14 .type _start, @function
15 _start:
16         /* Set up memory using the existing stack */
17         mov     %rsp, %rdi
18         call    board_init_f_alloc_reserve
19         mov     %rax, %rsp
20
21         call    board_init_f_init_reserve
22
23         xor     %rdi, %rdi
24         call    board_init_f
25         call    board_init_f_r
26
27         /* Should not return here */
28         jmp     .
29
30 .globl board_init_f_r_trampoline64
31 .type board_init_f_r_trampoline64, @function
32 board_init_f_r_trampoline64:
33         /*
34          * SDRAM has been initialised, U-Boot code has been copied into
35          * RAM, BSS has been cleared and relocation adjustments have been
36          * made. It is now time to jump into the in-RAM copy of U-Boot
37          *
38          * %eax = Address of top of new stack
39          */
40
41         /* Stack grows down from top of SDRAM */
42         movq    %rsi, %rsp
43
44         /* New gd is in rdi */
45
46         /* Re-enter U-Boot by calling board_init_f_r() */
47         call    board_init_f_r