]>
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 | ||
ef639e6f AB |
16 | ; Disable/enable I-cache according to configuration |
17 | lr r5, [ARC_BCR_IC_BUILD] | |
18 | breq r5, 0, 1f ; I$ doesn't exist | |
19 | lr r5, [ARC_AUX_IC_CTRL] | |
20 | #ifndef CONFIG_SYS_ICACHE_OFF | |
21 | bclr r5, r5, 0 ; 0 - Enable, 1 is Disable | |
22 | #else | |
23 | bset r5, r5, 0 ; I$ exists, but is not used | |
24 | #endif | |
25 | sr r5, [ARC_AUX_IC_CTRL] | |
26 | ||
27 | 1: | |
28 | ; Disable/enable D-cache according to configuration | |
29 | lr r5, [ARC_BCR_DC_BUILD] | |
30 | breq r5, 0, 1f ; D$ doesn't exist | |
31 | lr r5, [ARC_AUX_DC_CTRL] | |
32 | bclr r5, r5, 6 ; Invalidate (discard w/o wback) | |
33 | #ifndef CONFIG_SYS_DCACHE_OFF | |
34 | bclr r5, r5, 0 ; Enable (+Inv) | |
35 | #else | |
36 | bset r5, r5, 0 ; Disable (+Inv) | |
37 | #endif | |
38 | sr r5, [ARC_AUX_DC_CTRL] | |
20a58ac0 | 39 | |
ef639e6f | 40 | 1: |
6eb15e50 | 41 | #ifdef CONFIG_ISA_ARCV2 |
ef639e6f AB |
42 | ; Disable System-Level Cache (SLC) |
43 | lr r5, [ARC_BCR_SLC] | |
44 | breq r5, 0, 1f ; SLC doesn't exist | |
45 | lr r5, [ARC_AUX_SLC_CTRL] | |
46 | bclr r5, r5, 6 ; Invalidate (discard w/o wback) | |
47 | bclr r5, r5, 0 ; Enable (+Inv) | |
48 | sr r5, [ARC_AUX_SLC_CTRL] | |
49 | ||
50 | 1: | |
6eb15e50 | 51 | #endif |
ef639e6f AB |
52 | |
53 | /* Setup stack- and frame-pointers */ | |
54 | mov %sp, CONFIG_SYS_INIT_SP_ADDR | |
55 | mov %fp, %sp | |
20a58ac0 | 56 | |
f56d625e AB |
57 | /* Allocate and zero GD, update SP */ |
58 | mov %r0, %sp | |
59 | bl board_init_f_mem | |
60 | ||
61 | /* Update stack- and frame-pointers */ | |
62 | mov %sp, %r0 | |
63 | mov %fp, %sp | |
64 | ||
20a58ac0 IG |
65 | /* Zero the one and only argument of "board_init_f" */ |
66 | mov_s %r0, 0 | |
67 | j board_init_f | |
4d93617d | 68 | ENDPROC(_start) |
20a58ac0 | 69 | |
2f16ac9d | 70 | /* |
3fb80163 | 71 | * void board_init_f_r_trampoline(stack-pointer address) |
2f16ac9d AB |
72 | * |
73 | * This "function" does not return, instead it continues in RAM | |
74 | * after relocating the monitor code. | |
75 | * | |
3fb80163 | 76 | * r0 = new stack-pointer |
2f16ac9d | 77 | */ |
3fb80163 AB |
78 | ENTRY(board_init_f_r_trampoline) |
79 | /* Set up the stack- and frame-pointers */ | |
80 | mov %sp, %r0 | |
2f16ac9d AB |
81 | mov %fp, %sp |
82 | ||
3fb80163 AB |
83 | /* Update position of intterupt vector table */ |
84 | lr %r0, [ARC_AUX_INTR_VEC_BASE] | |
85 | ld %r1, [%r25, GD_RELOC_OFF] | |
86 | add %r0, %r0, %r1 | |
87 | sr %r0, [ARC_AUX_INTR_VEC_BASE] | |
2f16ac9d | 88 | |
3fb80163 AB |
89 | /* Re-enter U-Boot by calling board_init_f_r */ |
90 | j board_init_f_r | |
91 | ENDPROC(board_init_f_r_trampoline) |