Merge branch 'master' of git://www.denx.de/git/u-boot-imx
[platform/kernel/u-boot.git] / arch / sh / cpu / sh4 / start.S
1 /*
2  * (C) Copyright 2007, 2010
3  * Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
4  *
5  * SPDX-License-Identifier:     GPL-2.0+
6  */
7
8 #include <asm-offsets.h>
9 #include <config.h>
10
11         .text
12         .align  2
13
14         .global _start
15 _sh_start:
16         mov.l   ._lowlevel_init, r0
17 100:    bsrf    r0
18         nop
19
20         bsr     1f
21         nop
22 1:      sts     pr, r5
23         mov.l   ._reloc_dst, r4
24         add     #(_sh_start-1b), r5
25         mov.l   ._reloc_dst_end, r6
26
27 2:      mov.l   @r5+, r1
28         mov.l   r1, @r4
29         add     #4, r4
30         cmp/hs  r6, r4
31         bf      2b
32
33         mov.l   ._bss_start, r4
34         mov.l   ._bss_end, r5
35         mov     #0, r1
36
37 3:      mov.l   r1, @r4                 /* bss clear */
38         add     #4, r4
39         cmp/hs  r5, r4
40         bf      3b
41
42         mov.l   ._gd_init, r13          /* global data */
43         mov.l   ._stack_init, r15       /* stack */
44
45         mov.l   ._sh_generic_init, r0
46         jsr     @r0
47         nop
48
49 loop:
50         bra     loop
51
52         .align  2
53
54 ._lowlevel_init:        .long   (lowlevel_init - (100b + 4))
55 ._reloc_dst:            .long   reloc_dst
56 ._reloc_dst_end:        .long   reloc_dst_end
57 ._bss_start:            .long   bss_start
58 ._bss_end:              .long   bss_end
59 ._gd_init:              .long   (_sh_start - GENERATED_GBL_DATA_SIZE)
60 ._stack_init:           .long   (_sh_start - GENERATED_GBL_DATA_SIZE - CONFIG_SYS_MALLOC_LEN - 16)
61 ._sh_generic_init:      .long   sh_generic_init