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 bl flush_dcache_all 22 bl dcache_disable 23 bl icache_disable 24 25 /* Zero the one and only argument of "board_init_f" */ 26 mov_s %r0, 0 27 j board_init_f 28ENDPROC(_start) 29 30/* 31 * void board_init_f_r_trampoline(stack-pointer address) 32 * 33 * This "function" does not return, instead it continues in RAM 34 * after relocating the monitor code. 35 * 36 * r0 = new stack-pointer 37 */ 38ENTRY(board_init_f_r_trampoline) 39 /* Set up the stack- and frame-pointers */ 40 mov %sp, %r0 41 mov %fp, %sp 42 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] 48 49 /* Re-enter U-Boot by calling board_init_f_r */ 50 j board_init_f_r 51ENDPROC(board_init_f_r_trampoline) 52