2 * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
4 * SPDX-License-Identifier: GPL-2.0+
7 #include <asm-offsets.h>
9 #include <linux/linkage.h>
10 #include <asm/arcregs.h>
13 ; Non-masters will be halted immediately, they might be kicked later
14 ; by platform code right before passing control to the Linux kernel
15 ; in bootm.c:boot_jump_linux().
29 /* Setup interrupt vector base that matches "__text_start" */
30 sr __ivt_start, [ARC_AUX_INTR_VEC_BASE]
32 ; Disable/enable I-cache according to configuration
33 lr r5, [ARC_BCR_IC_BUILD]
34 breq r5, 0, 1f ; I$ doesn't exist
35 lr r5, [ARC_AUX_IC_CTRL]
36 #ifndef CONFIG_SYS_ICACHE_OFF
37 bclr r5, r5, 0 ; 0 - Enable, 1 is Disable
39 bset r5, r5, 0 ; I$ exists, but is not used
41 sr r5, [ARC_AUX_IC_CTRL]
44 ; Disable/enable D-cache according to configuration
45 lr r5, [ARC_BCR_DC_BUILD]
46 breq r5, 0, 1f ; D$ doesn't exist
47 lr r5, [ARC_AUX_DC_CTRL]
48 bclr r5, r5, 6 ; Invalidate (discard w/o wback)
49 #ifndef CONFIG_SYS_DCACHE_OFF
50 bclr r5, r5, 0 ; Enable (+Inv)
52 bset r5, r5, 0 ; Disable (+Inv)
54 sr r5, [ARC_AUX_DC_CTRL]
57 #ifdef CONFIG_ISA_ARCV2
58 ; Disable System-Level Cache (SLC)
60 breq r5, 0, 1f ; SLC doesn't exist
61 lr r5, [ARC_AUX_SLC_CTRL]
62 bclr r5, r5, 6 ; Invalidate (discard w/o wback)
63 bclr r5, r5, 0 ; Enable (+Inv)
64 sr r5, [ARC_AUX_SLC_CTRL]
69 /* Establish C runtime stack and frame */
70 mov %sp, CONFIG_SYS_INIT_SP_ADDR
73 /* Allocate reserved area from current top of stack */
75 bl board_init_f_alloc_reserve
76 /* Set stack below reserved area, adjust frame pointer accordingly */
80 /* Initialize reserved area - note: r0 already contains address */
81 bl board_init_f_init_reserve
83 /* Zero the one and only argument of "board_init_f" */
89 * void board_init_f_r_trampoline(stack-pointer address)
91 * This "function" does not return, instead it continues in RAM
92 * after relocating the monitor code.
94 * r0 = new stack-pointer
96 ENTRY(board_init_f_r_trampoline)
97 /* Set up the stack- and frame-pointers */
101 /* Update position of intterupt vector table */
102 lr %r0, [ARC_AUX_INTR_VEC_BASE]
103 ld %r1, [%r25, GD_RELOC_OFF]
105 sr %r0, [ARC_AUX_INTR_VEC_BASE]
107 /* Re-enter U-Boot by calling board_init_f_r */
109 ENDPROC(board_init_f_r_trampoline)