diff options
Diffstat (limited to 'usr/src/boot/sys/boot/arm/ixp425/boot2/arm_init.S')
-rw-r--r-- | usr/src/boot/sys/boot/arm/ixp425/boot2/arm_init.S | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/usr/src/boot/sys/boot/arm/ixp425/boot2/arm_init.S b/usr/src/boot/sys/boot/arm/ixp425/boot2/arm_init.S new file mode 100644 index 0000000000..15e1e6c87e --- /dev/null +++ b/usr/src/boot/sys/boot/arm/ixp425/boot2/arm_init.S @@ -0,0 +1,58 @@ +/*- + * Copyright (c) 2008 John Hay. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include <machine/asm.h> + +ASENTRY_NP(start) +/* Initialise bss and sp */ + nop + adr r1, .Lstart + ldmia r1, {r1, r2, sp} /* Set initial stack and */ + sub r2, r2, r1 /* get zero init data */ + mov r3, #0 +.L1: + str r3, [r1], #0x0004 /* get zero init data */ + subs r2, r2, #4 + bgt .L1 + + .extern main + bl main +/* main should not return. If it does, spin forever */ +infiniteLoop: + b infiniteLoop +END(start) + +.Lstart: + .word _edata + .word _end + .word BOOT_STACK + +ENTRY(cpu_id) + mrc p15, 0, r0, c0, c0, 0 + RET +END(cpu_id) + +/* End */ |