14d93617dSAlexey Brodkin/* 24d93617dSAlexey Brodkin * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved. 34d93617dSAlexey Brodkin * 44d93617dSAlexey Brodkin * SPDX-License-Identifier: GPL-2.0+ 54d93617dSAlexey Brodkin */ 64d93617dSAlexey Brodkin 74d93617dSAlexey Brodkin#include <asm-offsets.h> 84d93617dSAlexey Brodkin#include <config.h> 94d93617dSAlexey Brodkin#include <linux/linkage.h> 104d93617dSAlexey Brodkin#include <asm/arcregs.h> 114d93617dSAlexey Brodkin 124d93617dSAlexey BrodkinENTRY(_start) 134d93617dSAlexey Brodkin /* Setup interrupt vector base that matches "__text_start" */ 144d93617dSAlexey Brodkin sr __ivt_start, [ARC_AUX_INTR_VEC_BASE] 154d93617dSAlexey Brodkin 163fb80163SAlexey Brodkin /* Setup stack- and frame-pointers */ 174d93617dSAlexey Brodkin mov %sp, CONFIG_SYS_INIT_SP_ADDR 184d93617dSAlexey Brodkin mov %fp, %sp 194d93617dSAlexey Brodkin 203fb80163SAlexey Brodkin /* Unconditionally disable caches */ 213fb80163SAlexey Brodkin bl flush_dcache_all 223fb80163SAlexey Brodkin bl dcache_disable 233fb80163SAlexey Brodkin bl icache_disable 244d93617dSAlexey Brodkin 25*f56d625eSAlexey Brodkin /* Allocate and zero GD, update SP */ 26*f56d625eSAlexey Brodkin mov %r0, %sp 27*f56d625eSAlexey Brodkin bl board_init_f_mem 28*f56d625eSAlexey Brodkin 29*f56d625eSAlexey Brodkin /* Update stack- and frame-pointers */ 30*f56d625eSAlexey Brodkin mov %sp, %r0 31*f56d625eSAlexey Brodkin mov %fp, %sp 32*f56d625eSAlexey Brodkin 334d93617dSAlexey Brodkin /* Zero the one and only argument of "board_init_f" */ 344d93617dSAlexey Brodkin mov_s %r0, 0 354d93617dSAlexey Brodkin j board_init_f 364d93617dSAlexey BrodkinENDPROC(_start) 374d93617dSAlexey Brodkin 384d93617dSAlexey Brodkin/* 393fb80163SAlexey Brodkin * void board_init_f_r_trampoline(stack-pointer address) 404d93617dSAlexey Brodkin * 414d93617dSAlexey Brodkin * This "function" does not return, instead it continues in RAM 424d93617dSAlexey Brodkin * after relocating the monitor code. 434d93617dSAlexey Brodkin * 443fb80163SAlexey Brodkin * r0 = new stack-pointer 454d93617dSAlexey Brodkin */ 463fb80163SAlexey BrodkinENTRY(board_init_f_r_trampoline) 473fb80163SAlexey Brodkin /* Set up the stack- and frame-pointers */ 483fb80163SAlexey Brodkin mov %sp, %r0 494d93617dSAlexey Brodkin mov %fp, %sp 504d93617dSAlexey Brodkin 514d93617dSAlexey Brodkin /* Update position of intterupt vector table */ 523fb80163SAlexey Brodkin lr %r0, [ARC_AUX_INTR_VEC_BASE] 533fb80163SAlexey Brodkin ld %r1, [%r25, GD_RELOC_OFF] 543fb80163SAlexey Brodkin add %r0, %r0, %r1 553fb80163SAlexey Brodkin sr %r0, [ARC_AUX_INTR_VEC_BASE] 564d93617dSAlexey Brodkin 573fb80163SAlexey Brodkin /* Re-enter U-Boot by calling board_init_f_r */ 583fb80163SAlexey Brodkin j board_init_f_r 593fb80163SAlexey BrodkinENDPROC(board_init_f_r_trampoline) 60