]>
Commit | Line | Data |
---|---|---|
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 | bl flush_dcache_all | |
22 | bl dcache_disable | |
23 | bl icache_disable | |
24 | ||
25 | /* Allocate and zero GD, update SP */ | |
26 | mov %r0, %sp | |
27 | bl board_init_f_mem | |
28 | ||
29 | /* Update stack- and frame-pointers */ | |
30 | mov %sp, %r0 | |
31 | mov %fp, %sp | |
32 | ||
33 | /* Zero the one and only argument of "board_init_f" */ | |
34 | mov_s %r0, 0 | |
35 | j board_init_f | |
36 | ENDPROC(_start) | |
37 | ||
38 | /* | |
39 | * void board_init_f_r_trampoline(stack-pointer address) | |
40 | * | |
41 | * This "function" does not return, instead it continues in RAM | |
42 | * after relocating the monitor code. | |
43 | * | |
44 | * r0 = new stack-pointer | |
45 | */ | |
46 | ENTRY(board_init_f_r_trampoline) | |
47 | /* Set up the stack- and frame-pointers */ | |
48 | mov %sp, %r0 | |
49 | mov %fp, %sp | |
50 | ||
51 | /* Update position of intterupt vector table */ | |
52 | lr %r0, [ARC_AUX_INTR_VEC_BASE] | |
53 | ld %r1, [%r25, GD_RELOC_OFF] | |
54 | add %r0, %r0, %r1 | |
55 | sr %r0, [ARC_AUX_INTR_VEC_BASE] | |
56 | ||
57 | /* Re-enter U-Boot by calling board_init_f_r */ | |
58 | j board_init_f_r | |
59 | ENDPROC(board_init_f_r_trampoline) |