ecb4e44fd8d4df2b3ecdfcd8727f7e854332fd2d
[platform/kernel/u-boot.git] / arch / arm / cpu / arm720t / start.S
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
27 reset:
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
50 c_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)
67 cpu_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 */