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 * See file CREDITS for list of people who contributed to this 12 * project. 13 * 14 * This program is free software; you can redistribute it and/or 15 * modify it under the terms of the GNU General Public License as 16 * published by the Free Software Foundation; either version 2 of 17 * the License, or (at your option) any later version. 18 * 19 * This program is distributed in the hope that it will be useful, 20 * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 * GNU General Public License for more details. 23 * 24 * You should have received a copy of the GNU General Public License 25 * along with this program; if not, write to the Free Software 26 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 27 * MA 02111-1307 USA 28 */ 29 30#include <asm-offsets.h> 31#include <config.h> 32#include <linux/linkage.h> 33 34ENTRY(lowlevel_init) 35 /* 36 * Setup a temporary stack 37 */ 38 ldr sp, =CONFIG_SYS_INIT_SP_ADDR 39 bic sp, sp, #7 /* 8-byte alignment for ABI compliance */ 40#ifdef CONFIG_SPL_BUILD 41 ldr r8, =gdata 42#else 43 sub sp, #GD_SIZE 44 bic sp, sp, #7 45 mov r8, sp 46#endif 47 /* 48 * Save the old lr(passed in ip) and the current lr to stack 49 */ 50 push {ip, lr} 51 52 /* 53 * go setup pll, mux, memory 54 */ 55 bl s_init 56 pop {ip, pc} 57ENDPROC(lowlevel_init) 58