mirror of
				https://source.denx.de/u-boot/u-boot.git
				synced 2025-11-03 18:01:41 +01:00 
			
		
		
		
	This function has grown into something of a monster. Some boards are setting up a console and DRAM here in SPL. This requires global_data which should be set up in one place (crt0.S). There is no need for SPL to use s_init() for anything since board_init_f() is called immediately afterwards. Signed-off-by: Simon Glass <sjg@chromium.org>
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
/*
 | 
						|
 * A lowlevel_init function that sets up the stack to call a C function to
 | 
						|
 * perform further init.
 | 
						|
 *
 | 
						|
 * (C) Copyright 2010
 | 
						|
 * Texas Instruments, <www.ti.com>
 | 
						|
 *
 | 
						|
 * Author :
 | 
						|
 *	Aneesh V	<aneesh@ti.com>
 | 
						|
 *
 | 
						|
 * 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.
 | 
						|
	 */
 | 
						|
	ldr	sp, =CONFIG_SYS_INIT_SP_ADDR
 | 
						|
	bic	sp, sp, #7 /* 8-byte alignment for ABI compliance */
 | 
						|
#ifdef CONFIG_DM
 | 
						|
	mov	r9, #0
 | 
						|
#else
 | 
						|
	/*
 | 
						|
	 * Set up global data for boards that still need it. This will be
 | 
						|
	 * removed soon.
 | 
						|
	 */
 | 
						|
#ifdef CONFIG_SPL_BUILD
 | 
						|
	ldr	r9, =gdata
 | 
						|
#else
 | 
						|
	sub	sp, sp, #GD_SIZE
 | 
						|
	bic	sp, sp, #7
 | 
						|
	mov	r9, sp
 | 
						|
#endif
 | 
						|
#endif
 | 
						|
	/*
 | 
						|
	 * Save the old lr(passed in ip) and the current lr to stack
 | 
						|
	 */
 | 
						|
	push	{ip, lr}
 | 
						|
 | 
						|
	/*
 | 
						|
	 * 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
 | 
						|
	pop	{ip, pc}
 | 
						|
ENDPROC(lowlevel_init)
 |