]> git.sur5r.net Git - u-boot/blob - arch/arm/cpu/arm720t/start.S
365d8f08cb093075d7a68583ed50d37fc5c5f292
[u-boot] / arch / arm / cpu / arm720t / start.S
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
28 reset:
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
51 c_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)
68 cpu_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 */