]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/boot/arm/ixp425/boot2/arm_init.S
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / boot / arm / ixp425 / boot2 / arm_init.S
1 /*-
2  * Copyright (c) 2008 John Hay.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  *
24  * $FreeBSD$
25  */
26
27 #include <machine/asm.h>
28
29 ASENTRY_NP(start)
30 /* Initialise bss and sp */
31         nop
32         adr     r1, .Lstart
33         ldmia   r1, {r1, r2, sp}        /* Set initial stack and */
34         sub     r2, r2, r1              /* get zero init data */
35         mov     r3, #0
36 .L1:
37         str     r3, [r1], #0x0004       /* get zero init data */
38         subs    r2, r2, #4
39         bgt     .L1
40
41         .extern main
42         bl      main
43 /* main should not return.  If it does, spin forever            */
44 infiniteLoop:
45         b       infiniteLoop
46
47 .Lstart:
48         .word   _edata
49         .word   _end
50         .word   BOOT_STACK
51
52 ENTRY(cpu_id)
53         mrc     p15, 0, r0, c0, c0, 0
54         RET
55
56 /* End */