]> git.ipfire.org Git - people/ms/u-boot.git/blob - arch/arc/lib/start.S
e1ef19cb88997d8a998c463a6997d3733499895d
[people/ms/u-boot.git] / arch / arc / lib / start.S
1 /*
2 * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
3 *
4 * SPDX-License-Identifier: GPL-2.0+
5 */
6
7 #include <asm-offsets.h>
8 #include <config.h>
9 #include <linux/linkage.h>
10 #include <asm/arcregs.h>
11
12 ENTRY(_start)
13 /* Setup interrupt vector base that matches "__text_start" */
14 sr __ivt_start, [ARC_AUX_INTR_VEC_BASE]
15
16 /* Setup stack- and frame-pointers */
17 mov %sp, CONFIG_SYS_INIT_SP_ADDR
18 mov %fp, %sp
19
20 /* Unconditionally disable caches */
21 #ifdef CONFIG_ISA_ARCV2
22 bl slc_flush
23 bl slc_disable
24 #endif
25 bl flush_dcache_all
26 bl dcache_disable
27 bl icache_disable
28
29 /* Allocate and zero GD, update SP */
30 mov %r0, %sp
31 bl board_init_f_mem
32
33 /* Update stack- and frame-pointers */
34 mov %sp, %r0
35 mov %fp, %sp
36
37 /* Zero the one and only argument of "board_init_f" */
38 mov_s %r0, 0
39 j board_init_f
40 ENDPROC(_start)
41
42 /*
43 * void board_init_f_r_trampoline(stack-pointer address)
44 *
45 * This "function" does not return, instead it continues in RAM
46 * after relocating the monitor code.
47 *
48 * r0 = new stack-pointer
49 */
50 ENTRY(board_init_f_r_trampoline)
51 /* Set up the stack- and frame-pointers */
52 mov %sp, %r0
53 mov %fp, %sp
54
55 /* Update position of intterupt vector table */
56 lr %r0, [ARC_AUX_INTR_VEC_BASE]
57 ld %r1, [%r25, GD_RELOC_OFF]
58 add %r0, %r0, %r1
59 sr %r0, [ARC_AUX_INTR_VEC_BASE]
60
61 /* Re-enter U-Boot by calling board_init_f_r */
62 j board_init_f_r
63 ENDPROC(board_init_f_r_trampoline)