1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * Copyright (C) 2016 Vladimir Zapolskiy <vz@mleia.com> 4 * Copyright (C) 2007, 2010 Nobuhiro Iwamatsu <iwamatsu@nigauri.org> 5 */ 6 7#include <asm-offsets.h> 8#include <config.h> 9 10 .text 11 .align 2 12 13 .global _start 14_start: 15 mov.l ._lowlevel_init, r0 16100: bsrf r0 17 nop 18 19 bsr 1f 20 nop 211: sts pr, r5 22 mov.l ._reloc_dst, r4 23 add #(_start-1b), r5 24 mov.l ._reloc_dst_end, r6 25#ifdef CONFIG_OF_SEPARATE 26 mov.l ._reloc_size, r0 27 add r5, r0 28 add #4, r0 29 mov.l @r0, r0 30 swap.b r0, r0 31 swap.w r0, r0 32 swap.b r0, r0 33 add #4, r0 34 add r0, r6 35#endif 36 372: mov.l @r5+, r1 38 mov.l r1, @r4 39 add #4, r4 40 cmp/hs r6, r4 41 bf 2b 42 43#ifndef CONFIG_OF_SEPARATE 44 mov.l ._bss_start, r4 45 mov.l ._bss_end, r5 46 mov #0, r1 47 483: mov.l r1, @r4 /* bss clear */ 49 add #4, r4 50 cmp/hs r5, r4 51 bf 3b 52#endif 53 54 mov.l ._gd_init, r13 /* global data */ 55 mov.l ._stack_init, r15 /* stack */ 56#if CONFIG_VAL(SYS_MALLOC_F_LEN) 57 mov.l ._gd_malloc_base, r14 58 mov.l r15, @r14 59#endif 60 mov.l ._sh_generic_init, r0 61 jsr @r0 62 mov #0, r4 63 64loop: 65 bra loop 66 67 .align 2 68 69._lowlevel_init: .long (lowlevel_init - (100b + 4)) 70._reloc_dst: .long _start 71._reloc_dst_end: .long reloc_dst_end 72._reloc_size: .long (_end - _start) 73._bss_start: .long bss_start 74._bss_end: .long bss_end 75._gd_init: .long (_start - GENERATED_GBL_DATA_SIZE) 76#if CONFIG_VAL(SYS_MALLOC_F_LEN) 77._gd_malloc_base: .long (_start - GENERATED_GBL_DATA_SIZE + GD_MALLOC_BASE) 78#endif 79._stack_init: .long (_start - GENERATED_GBL_DATA_SIZE - CONFIG_SYS_MALLOC_LEN - 16) 80._sh_generic_init: .long board_init_f 81