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 12ENTRY(_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 40ENDPROC(_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 */ 50ENTRY(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 63ENDPROC(board_init_f_r_trampoline) 64