blob: 69e3053a4262e7894c165b417c79aeb4e665845d [file] [log] [blame]
Tom Riniee5bce42012-08-08 17:03:10 -07001/*
2 * A lowlevel_init function that sets up the stack to call a C function to
3 * perform further init.
4 *
5 * (C) Copyright 2010
6 * Texas Instruments, <www.ti.com>
7 *
8 * Author :
9 * Aneesh V <aneesh@ti.com>
10 *
Wolfgang Denkd79de1d2013-07-08 09:37:19 +020011 * SPDX-License-Identifier: GPL-2.0+
Tom Riniee5bce42012-08-08 17:03:10 -070012 */
13
14#include <asm-offsets.h>
15#include <config.h>
16#include <linux/linkage.h>
17
18ENTRY(lowlevel_init)
19 /*
20 * Setup a temporary stack
21 */
22 ldr sp, =CONFIG_SYS_INIT_SP_ADDR
Tom Rini7b643a42012-08-09 08:22:06 -070023 bic sp, sp, #7 /* 8-byte alignment for ABI compliance */
SRICHARAN R3f30b0a2013-04-24 00:41:24 +000024#ifdef CONFIG_SPL_BUILD
Jeroen Hofsteef2d60762013-09-21 14:04:41 +020025 ldr r9, =gdata
SRICHARAN R3f30b0a2013-04-24 00:41:24 +000026#else
27 sub sp, #GD_SIZE
28 bic sp, sp, #7
Jeroen Hofsteef2d60762013-09-21 14:04:41 +020029 mov r9, sp
SRICHARAN R3f30b0a2013-04-24 00:41:24 +000030#endif
Tom Riniee5bce42012-08-08 17:03:10 -070031 /*
32 * Save the old lr(passed in ip) and the current lr to stack
33 */
34 push {ip, lr}
35
36 /*
37 * go setup pll, mux, memory
38 */
39 bl s_init
40 pop {ip, pc}
41ENDPROC(lowlevel_init)