1*3500581eSVladimir Zapolskiy/* 2*3500581eSVladimir Zapolskiy * Copyright (C) 2016 Vladimir Zapolskiy <vz@mleia.com> 3*3500581eSVladimir Zapolskiy * Copyright (C) 2007, 2010 Nobuhiro Iwamatsu <iwamatsu@nigauri.org> 4*3500581eSVladimir Zapolskiy * 5*3500581eSVladimir Zapolskiy * SPDX-License-Identifier: GPL-2.0+ 6*3500581eSVladimir Zapolskiy */ 7*3500581eSVladimir Zapolskiy 8*3500581eSVladimir Zapolskiy#include <asm-offsets.h> 9*3500581eSVladimir Zapolskiy#include <config.h> 10*3500581eSVladimir Zapolskiy 11*3500581eSVladimir Zapolskiy .text 12*3500581eSVladimir Zapolskiy .align 2 13*3500581eSVladimir Zapolskiy 14*3500581eSVladimir Zapolskiy .global _start 15*3500581eSVladimir Zapolskiy_start: 16*3500581eSVladimir Zapolskiy#ifdef CONFIG_CPU_SH2 17*3500581eSVladimir Zapolskiy .long 0x00000010 /* Ppower ON reset PC*/ 18*3500581eSVladimir Zapolskiy .long 0x00000000 19*3500581eSVladimir Zapolskiy .long 0x00000010 /* Manual reset PC */ 20*3500581eSVladimir Zapolskiy .long 0x00000000 21*3500581eSVladimir Zapolskiy#endif 22*3500581eSVladimir Zapolskiy mov.l ._lowlevel_init, r0 23*3500581eSVladimir Zapolskiy100: bsrf r0 24*3500581eSVladimir Zapolskiy nop 25*3500581eSVladimir Zapolskiy 26*3500581eSVladimir Zapolskiy bsr 1f 27*3500581eSVladimir Zapolskiy nop 28*3500581eSVladimir Zapolskiy1: sts pr, r5 29*3500581eSVladimir Zapolskiy mov.l ._reloc_dst, r4 30*3500581eSVladimir Zapolskiy add #(_start-1b), r5 31*3500581eSVladimir Zapolskiy mov.l ._reloc_dst_end, r6 32*3500581eSVladimir Zapolskiy 33*3500581eSVladimir Zapolskiy2: mov.l @r5+, r1 34*3500581eSVladimir Zapolskiy mov.l r1, @r4 35*3500581eSVladimir Zapolskiy add #4, r4 36*3500581eSVladimir Zapolskiy cmp/hs r6, r4 37*3500581eSVladimir Zapolskiy bf 2b 38*3500581eSVladimir Zapolskiy 39*3500581eSVladimir Zapolskiy mov.l ._bss_start, r4 40*3500581eSVladimir Zapolskiy mov.l ._bss_end, r5 41*3500581eSVladimir Zapolskiy mov #0, r1 42*3500581eSVladimir Zapolskiy 43*3500581eSVladimir Zapolskiy3: mov.l r1, @r4 /* bss clear */ 44*3500581eSVladimir Zapolskiy add #4, r4 45*3500581eSVladimir Zapolskiy cmp/hs r5, r4 46*3500581eSVladimir Zapolskiy bf 3b 47*3500581eSVladimir Zapolskiy 48*3500581eSVladimir Zapolskiy mov.l ._gd_init, r13 /* global data */ 49*3500581eSVladimir Zapolskiy mov.l ._stack_init, r15 /* stack */ 50*3500581eSVladimir Zapolskiy 51*3500581eSVladimir Zapolskiy mov.l ._sh_generic_init, r0 52*3500581eSVladimir Zapolskiy jsr @r0 53*3500581eSVladimir Zapolskiy mov #0, r4 54*3500581eSVladimir Zapolskiy 55*3500581eSVladimir Zapolskiyloop: 56*3500581eSVladimir Zapolskiy bra loop 57*3500581eSVladimir Zapolskiy 58*3500581eSVladimir Zapolskiy .align 2 59*3500581eSVladimir Zapolskiy 60*3500581eSVladimir Zapolskiy._lowlevel_init: .long (lowlevel_init - (100b + 4)) 61*3500581eSVladimir Zapolskiy._reloc_dst: .long _start 62*3500581eSVladimir Zapolskiy._reloc_dst_end: .long reloc_dst_end 63*3500581eSVladimir Zapolskiy._bss_start: .long bss_start 64*3500581eSVladimir Zapolskiy._bss_end: .long bss_end 65*3500581eSVladimir Zapolskiy._gd_init: .long (_start - GENERATED_GBL_DATA_SIZE) 66*3500581eSVladimir Zapolskiy._stack_init: .long (_start - GENERATED_GBL_DATA_SIZE - CONFIG_SYS_MALLOC_LEN - 16) 67*3500581eSVladimir Zapolskiy._sh_generic_init: .long board_init_f 68