xref: /openbmc/u-boot/arch/arm/cpu/arm720t/start.S (revision cd1cc31f)
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