/* | |
* 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) |