42 lines
		
	
	
		
			751 B
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			751 B
		
	
	
	
		
			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
 | 
						|
	 */
 | 
						|
	ldr	sp, =CONFIG_SYS_INIT_SP_ADDR
 | 
						|
	bic	sp, sp, #7 /* 8-byte alignment for ABI compliance */
 | 
						|
#ifdef CONFIG_SPL_BUILD
 | 
						|
	ldr	r9, =gdata
 | 
						|
#else
 | 
						|
	sub	sp, sp, #GD_SIZE
 | 
						|
	bic	sp, sp, #7
 | 
						|
	mov	r9, sp
 | 
						|
#endif
 | 
						|
	/*
 | 
						|
	 * Save the old lr(passed in ip) and the current lr to stack
 | 
						|
	 */
 | 
						|
	push	{ip, lr}
 | 
						|
 | 
						|
	/*
 | 
						|
	 * go setup pll, mux, memory
 | 
						|
	 */
 | 
						|
	bl	s_init
 | 
						|
	pop	{ip, pc}
 | 
						|
ENDPROC(lowlevel_init)
 |