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#include <asm/hardware.h> 13 14/* 15 ************************************************************************* 16 * 17 * Startup Code (reset vector) 18 * 19 * do important init only if we don't start from RAM! 20 * relocate armboot to ram 21 * setup stack 22 * jump to second stage 23 * 24 ************************************************************************* 25 */ 26 27 .globl reset 28 29reset: 30 /* 31 * set the cpu to SVC32 mode 32 */ 33 mrs r0,cpsr 34 bic r0,r0,#0x1f 35 orr r0,r0,#0xd3 36 msr cpsr,r0 37 38 /* 39 * we do sys-critical inits only at reboot, 40 * not when booting from ram! 41 */ 42#ifndef CONFIG_SKIP_LOWLEVEL_INIT 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#ifndef CONFIG_SKIP_LOWLEVEL_INIT 67cpu_init_crit: 68 69 mov ip, lr 70 /* 71 * before relocating, we have to setup RAM timing 72 * because memory timing is board-dependent, you will 73 * find a lowlevel_init.S in your board directory. 74 */ 75 bl lowlevel_init 76 mov lr, ip 77 78 mov pc, lr 79#endif /* CONFIG_SKIP_LOWLEVEL_INIT */ 80