1/*
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 *
11 * SPDX-License-Identifier:	GPL-2.0+
12 */
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
23	bic	sp, sp, #7 /* 8-byte alignment for ABI compliance */
24#ifdef CONFIG_SPL_BUILD
25	ldr	r9, =gdata
26#else
27	sub	sp, #GD_SIZE
28	bic	sp, sp, #7
29	mov	r9, sp
30#endif
31	/*
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)
42