blob: 0bb3441fb8f9196c2eb192570b42c80f4e2934c3 [file] [log] [blame]
wdenkfe8c2802002-11-03 00:38:21 +00001/*
2 * armboot - Startup Code for ARM720 CPU-core
3 *
Albert ARIBAUDfa82f872011-08-04 18:45:45 +02004 * Copyright (c) 2001 Marius Gröger <mag@sysgo.de>
5 * Copyright (c) 2002 Alex Züpke <azu@sysgo.de>
wdenkfe8c2802002-11-03 00:38:21 +00006 *
Wolfgang Denk3765b3e2013-10-07 13:07:26 +02007 * SPDX-License-Identifier: GPL-2.0+
wdenkfe8c2802002-11-03 00:38:21 +00008 */
9
Wolfgang Denk25ddd1f2010-10-26 14:34:52 +020010#include <asm-offsets.h>
wdenkfe8c2802002-11-03 00:38:21 +000011#include <config.h>
wdenkfe8c2802002-11-03 00:38:21 +000012
13/*
14 *************************************************************************
15 *
wdenkfe8c2802002-11-03 00:38:21 +000016 * Startup Code (reset vector)
17 *
wdenkf6e20fc2004-02-08 19:38:38 +000018 * do important init only if we don't start from RAM!
wdenkfe8c2802002-11-03 00:38:21 +000019 * relocate armboot to ram
20 * setup stack
21 * jump to second stage
22 *
23 *************************************************************************
24 */
25
Albert ARIBAUD41623c92014-04-15 16:13:51 +020026 .globl reset
Heiko Schocherabef7b82010-09-17 13:10:52 +020027
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#ifndef CONFIG_SKIP_LOWLEVEL_INIT
42 bl cpu_init_crit
43#endif
44
Albert ARIBAUDe05e5de2013-01-08 10:18:02 +000045 bl _main
Heiko Schocherabef7b82010-09-17 13:10:52 +020046
47/*------------------------------------------------------------------------------*/
48
Albert ARIBAUDe05e5de2013-01-08 10:18:02 +000049 .globl c_runtime_cpu_setup
50c_runtime_cpu_setup:
51
52 mov pc, lr
53
wdenkfe8c2802002-11-03 00:38:21 +000054/*
55 *************************************************************************
56 *
57 * CPU_init_critical registers
58 *
59 * setup important registers
60 * setup memory timing
61 *
62 *************************************************************************
63 */
64
Axel Lin578e6372013-05-21 13:44:10 +000065#ifndef CONFIG_SKIP_LOWLEVEL_INIT
wdenkfe8c2802002-11-03 00:38:21 +000066cpu_init_crit:
wdenkfe8c2802002-11-03 00:38:21 +000067
Wolfgang Denk87cb6862005-10-06 17:08:18 +020068 mov ip, lr
wdenkfe8c2802002-11-03 00:38:21 +000069 /*
70 * before relocating, we have to setup RAM timing
wdenkf6e20fc2004-02-08 19:38:38 +000071 * because memory timing is board-dependent, you will
wdenk400558b2005-04-02 23:52:25 +000072 * find a lowlevel_init.S in your board directory.
wdenkfe8c2802002-11-03 00:38:21 +000073 */
wdenk400558b2005-04-02 23:52:25 +000074 bl lowlevel_init
wdenkfe8c2802002-11-03 00:38:21 +000075 mov lr, ip
76
77 mov pc, lr
Axel Lin578e6372013-05-21 13:44:10 +000078#endif /* CONFIG_SKIP_LOWLEVEL_INIT */