]>
Commit | Line | Data |
---|---|---|
2f16ac9d AB |
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> | |
4d93617d | 9 | #include <linux/linkage.h> |
2f16ac9d AB |
10 | #include <asm/arcregs.h> |
11 | ||
4d93617d | 12 | ENTRY(_start) |
20a58ac0 IG |
13 | /* Setup interrupt vector base that matches "__text_start" */ |
14 | sr __ivt_start, [ARC_AUX_INTR_VEC_BASE] | |
15 | ||
3fb80163 | 16 | /* Setup stack- and frame-pointers */ |
20a58ac0 IG |
17 | mov %sp, CONFIG_SYS_INIT_SP_ADDR |
18 | mov %fp, %sp | |
19 | ||
3fb80163 AB |
20 | /* Unconditionally disable caches */ |
21 | bl flush_dcache_all | |
22 | bl dcache_disable | |
23 | bl icache_disable | |
20a58ac0 IG |
24 | |
25 | /* Zero the one and only argument of "board_init_f" */ | |
26 | mov_s %r0, 0 | |
27 | j board_init_f | |
4d93617d | 28 | ENDPROC(_start) |
20a58ac0 | 29 | |
2f16ac9d | 30 | /* |
3fb80163 | 31 | * void board_init_f_r_trampoline(stack-pointer address) |
2f16ac9d AB |
32 | * |
33 | * This "function" does not return, instead it continues in RAM | |
34 | * after relocating the monitor code. | |
35 | * | |
3fb80163 | 36 | * r0 = new stack-pointer |
2f16ac9d | 37 | */ |
3fb80163 AB |
38 | ENTRY(board_init_f_r_trampoline) |
39 | /* Set up the stack- and frame-pointers */ | |
40 | mov %sp, %r0 | |
2f16ac9d AB |
41 | mov %fp, %sp |
42 | ||
3fb80163 AB |
43 | /* Update position of intterupt vector table */ |
44 | lr %r0, [ARC_AUX_INTR_VEC_BASE] | |
45 | ld %r1, [%r25, GD_RELOC_OFF] | |
46 | add %r0, %r0, %r1 | |
47 | sr %r0, [ARC_AUX_INTR_VEC_BASE] | |
2f16ac9d | 48 | |
3fb80163 AB |
49 | /* Re-enter U-Boot by calling board_init_f_r */ |
50 | j board_init_f_r | |
51 | ENDPROC(board_init_f_r_trampoline) |