mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-31 12:08:19 +00:00 
			
		
		
		
	For boards that call s_init() when the SPL runs, we are expected to setup an early stack before calling this C function. Implement the proper AArch64 version of this based on the ARMv7 code. This allows sunxi boards to setup the basic peripherals even with a 64-bit SPL. Signed-off-by: Andre Przywara <andre.przywara@arm.com> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Jagan Teki <jagan@openedev.com>
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /*
 | |
|  * A lowlevel_init function that sets up the stack to call a C function to
 | |
|  * perform further init.
 | |
|  *
 | |
|  * SPDX-License-Identifier:	GPL-2.0+
 | |
|  */
 | |
| 
 | |
| #include <asm-offsets.h>
 | |
| #include <config.h>
 | |
| #include <linux/linkage.h>
 | |
| 
 | |
| ENTRY(lowlevel_init)
 | |
| 	/*
 | |
| 	 * Setup a temporary stack. Global data is not available yet.
 | |
| 	 */
 | |
| #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_STACK)
 | |
| 	ldr	w0, =CONFIG_SPL_STACK
 | |
| #else
 | |
| 	ldr	w0, =CONFIG_SYS_INIT_SP_ADDR
 | |
| #endif
 | |
| 	bic	sp, x0, #0xf	/* 16-byte alignment for ABI compliance */
 | |
| 
 | |
| 	/*
 | |
| 	 * Save the old LR(passed in x29) and the current LR to stack
 | |
| 	 */
 | |
| 	stp	x29, x30, [sp, #-16]!
 | |
| 
 | |
| 	/*
 | |
| 	 * Call the very early init function. This should do only the
 | |
| 	 * absolute bare minimum to get started. It should not:
 | |
| 	 *
 | |
| 	 * - set up DRAM
 | |
| 	 * - use global_data
 | |
| 	 * - clear BSS
 | |
| 	 * - try to start a console
 | |
| 	 *
 | |
| 	 * For boards with SPL this should be empty since SPL can do all of
 | |
| 	 * this init in the SPL board_init_f() function which is called
 | |
| 	 * immediately after this.
 | |
| 	 */
 | |
| 	bl	s_init
 | |
| 	ldp	x29, x30, [sp]
 | |
| 	ret
 | |
| ENDPROC(lowlevel_init)
 |