4395985549dc80bc988f45c507051f75ceb429fa
[oweals/u-boot.git] / arch / arm / cpu / arm926ejs / spear / start.S
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  *  armboot - Startup Code for ARM926EJS CPU-core
4  *
5  *  Copyright (c) 2003  Texas Instruments
6  *
7  *  ----- Adapted for OMAP1610 OMAP730 from ARM925t code ------
8  *
9  *  Copyright (c) 2001  Marius Gröger <mag@sysgo.de>
10  *  Copyright (c) 2002  Alex Züpke <azu@sysgo.de>
11  *  Copyright (c) 2002  Gary Jennejohn <garyj@denx.de>
12  *  Copyright (c) 2003  Richard Woodruff <r-woodruff2@ti.com>
13  *  Copyright (c) 2003  Kshitij <kshitij@ti.com>
14  */
15
16
17 #include <config.h>
18
19 /*
20  *************************************************************************
21  *
22  * Startup Code (reset vector)
23  *
24  * Below are the critical initializations already taken place in BootROM.
25  * So, these are not taken care in Xloader
26  * 1. Relocation to RAM
27  * 2. Initializing stacks
28  *
29  *************************************************************************
30  */
31
32         .globl  reset
33
34 reset:
35 /*
36  * SPL has to return back to BootROM in a few cases.
37  * eg. Ethernet boot, UART boot, USB boot
38  * Saving registers for returning back
39  */
40         stmdb   sp!, {r0-r12,r14}
41         bl      cpu_init_crit
42         ldmia   sp!, {r0-r12,pc}
43
44 /*
45  *************************************************************************
46  *
47  * CPU_init_critical registers
48  *
49  * setup important registers
50  * setup memory timing
51  *
52  *************************************************************************
53  */
54 cpu_init_crit:
55         /*
56          * flush v4 I/D caches
57          */
58         mov     r0, #0
59         mcr     p15, 0, r0, c7, c7, 0   /* flush v3/v4 cache */
60         mcr     p15, 0, r0, c8, c7, 0   /* flush v4 TLB */
61
62         /*
63          * enable instruction cache
64          */
65         mrc     p15, 0, r0, c1, c0, 0
66         orr     r0, r0, #0x00001000     /* set bit 12 (I) I-Cache */
67         mcr     p15, 0, r0, c1, c0, 0
68
69         /*
70          * Go setup Memory and board specific bits prior to relocation.
71          */
72         stmdb   sp!, {lr}
73         bl      _main   /* _main will call board_init_f */
74         ldmia   sp!, {pc}