c3bb58c55b6b9c09705fb6d78a497a42fa9e15d4
[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  * The BootROM already initialized its own stack in the [0-0xb00] reserved
25  * range of the SRAM. The SPL (in _main) will update the stack pointer to
26  * its own SRAM area (right before the gd section).
27  *
28  *************************************************************************
29  */
30
31         .globl  reset
32
33 reset:
34 /*
35  * SPL has to return back to BootROM in a few cases.
36  * eg. Ethernet boot, UART boot, USB boot
37  * Saving registers for returning back
38  */
39         stmdb   sp!, {r0-r12,r14}
40         bl      cpu_init_crit
41         ldmia   sp!, {r0-r12,pc}
42
43 /*
44  *************************************************************************
45  *
46  * CPU_init_critical registers
47  *
48  * setup important registers
49  * setup memory timing
50  *
51  *************************************************************************
52  */
53 cpu_init_crit:
54         /*
55          * flush v4 I/D caches
56          */
57         mov     r0, #0
58         mcr     p15, 0, r0, c7, c7, 0   /* flush v3/v4 cache */
59         mcr     p15, 0, r0, c8, c7, 0   /* flush v4 TLB */
60
61         /*
62          * enable instruction cache
63          */
64         mrc     p15, 0, r0, c1, c0, 0
65         orr     r0, r0, #0x00001000     /* set bit 12 (I) I-Cache */
66         mcr     p15, 0, r0, c1, c0, 0
67
68         /*
69          * Go setup Memory and board specific bits prior to relocation.
70          */
71         stmdb   sp!, {lr}
72         bl      _main   /* _main will call board_init_f */
73         ldmia   sp!, {pc}