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