1/* 2 * armboot - Startup Code for ARM720 CPU-core 3 * 4 * Copyright (c) 2001 Marius Gröger <mag@sysgo.de> 5 * Copyright (c) 2002 Alex Züpke <azu@sysgo.de> 6 * 7 * SPDX-License-Identifier: GPL-2.0+ 8 */ 9 10#include <asm-offsets.h> 11#include <config.h> 12 13/* 14 ************************************************************************* 15 * 16 * Startup Code (reset vector) 17 * 18 * do important init only if we don't start from RAM! 19 * relocate armboot to ram 20 * setup stack 21 * jump to second stage 22 * 23 ************************************************************************* 24 */ 25 26 .globl reset 27 28reset: 29 /* 30 * set the cpu to SVC32 mode 31 */ 32 mrs r0,cpsr 33 bic r0,r0,#0x1f 34 orr r0,r0,#0xd3 35 msr cpsr,r0 36 37 /* 38 * we do sys-critical inits only at reboot, 39 * not when booting from ram! 40 */ 41#if !defined(CONFIG_SKIP_LOWLEVEL_INIT) && \ 42 !defined(CONFIG_SKIP_LOWLEVEL_INIT_ONLY) 43 bl cpu_init_crit 44#endif 45 46 bl _main 47 48/*------------------------------------------------------------------------------*/ 49 50 .globl c_runtime_cpu_setup 51c_runtime_cpu_setup: 52 53 mov pc, lr 54 55/* 56 ************************************************************************* 57 * 58 * CPU_init_critical registers 59 * 60 * setup important registers 61 * setup memory timing 62 * 63 ************************************************************************* 64 */ 65 66#if !defined(CONFIG_SKIP_LOWLEVEL_INIT) && \ 67 !defined(CONFIG_SKIP_LOWLEVEL_INIT_ONLY) 68cpu_init_crit: 69 70 mov ip, lr 71 /* 72 * before relocating, we have to setup RAM timing 73 * because memory timing is board-dependent, you will 74 * find a lowlevel_init.S in your board directory. 75 */ 76 bl lowlevel_init 77 mov lr, ip 78 79 mov pc, lr 80#endif /* CONFIG_SKIP_LOWLEVEL_INIT */ 81