mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 10:26:10 +01:00 
			
		
		
		
	At present this leaves the stack at the pre-relocation value. This is not ideal since we want to have U-Boot running entirely from the top of memory. In addition, the new global_data pointer is not actually used, since the global_data pointer itself is relocated, then the pre-relocation value is changed, so the effective value (after relocation) does not update. Adjust the implementation to follow the 32-bit code more closely, with a trampoline function which is passed the new stack and global_data pointer. This ensures that the correct values come through even when relocating. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
		
			
				
	
	
		
			48 lines
		
	
	
		
			1004 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1004 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0+ */
 | |
| /*
 | |
|  * 64-bit x86 Startup Code
 | |
|  *
 | |
|  * Copyright 2019 Google, Inc
 | |
|  * Written by Simon Glass <sjg@chromium.org>
 | |
|  */
 | |
| 
 | |
| #include <config.h>
 | |
| 
 | |
| .section .text.start
 | |
| .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
 | |
| 
 | |
| 	xor	%rdi, %rdi
 | |
| 	call	board_init_f
 | |
| 	call	board_init_f_r
 | |
| 
 | |
| 	/* Should not return here */
 | |
| 	jmp	.
 | |
| 
 | |
| .globl board_init_f_r_trampoline64
 | |
| .type board_init_f_r_trampoline64, @function
 | |
| board_init_f_r_trampoline64:
 | |
| 	/*
 | |
| 	 * SDRAM has been initialised, U-Boot code has been copied into
 | |
| 	 * RAM, BSS has been cleared and relocation adjustments have been
 | |
| 	 * made. It is now time to jump into the in-RAM copy of U-Boot
 | |
| 	 *
 | |
| 	 * %eax = Address of top of new stack
 | |
| 	 */
 | |
| 
 | |
| 	/* Stack grows down from top of SDRAM */
 | |
| 	movq	%rsi, %rsp
 | |
| 
 | |
| 	/* New gd is in rdi */
 | |
| 
 | |
| 	/* Re-enter U-Boot by calling board_init_f_r() */
 | |
| 	call	board_init_f_r
 |