summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/sparc64/shared/start/start.S
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/sparc64/shared/start/start.S')
-rw-r--r--c/src/lib/libbsp/sparc64/shared/start/start.S176
1 files changed, 176 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/sparc64/shared/start/start.S b/c/src/lib/libbsp/sparc64/shared/start/start.S
new file mode 100644
index 0000000000..0d660bae0d
--- /dev/null
+++ b/c/src/lib/libbsp/sparc64/shared/start/start.S
@@ -0,0 +1,176 @@
+#
+# Copyright (c) 2006 Martin Decky
+# Copyright (c) 2006 Jakub Jermar
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# - 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.
+# - The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# 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.
+#
+
+/*
+ * start.S
+ *
+ * Start code for Sparc64 RTEMS
+ *
+ * This is based on the boot.S file of the HelenOS sparc64 architecture.
+ * http://www.helenos.org/
+ * ${helenos}/boot/arch/sparc64/loader/boot.S
+ *
+ * Modifications for the RTEMS executive are
+ * COPYRIGHT (c) 2010 Gedare Bloom.
+ * COPYRIGHT (c) 2010 Eugen Leontie.
+ *
+ * $Id$
+ */
+
+#include <rtems/asm.h>
+#include <rtems/score/cpu.h>
+
+#define PSTATE_PRIV_BIT 4
+
+.register %g2, #scratch
+.register %g3, #scratch
+.register %g6, #scratch
+.register %g7, #scratch
+
+#if 0
+#define _BSP_DEBUG
+#endif
+
+#if _BSP_DEBUG
+/*
+ * This is for debug and script support to identify RTEMS app termination
+ */
+.section .data
+ .align 8
+_end_token_string:
+ .asciz "END_TOKEN\n"
+#endif
+
+.section BOOTSTRAP, "ax"
+
+PUBLIC(_start)
+ .global _start
+ SYM(_start):
+ start:
+ b 1f
+ nop
+
+ /*
+ * This header forces SILO to load the image at 0x4000.
+ * More precisely, SILO will think this is an old version of Linux.
+ */
+ .ascii "HdrS"
+ .word 0
+ .half 0
+ .half 0
+ .half 0
+ .half 0
+ .global silo_ramdisk_image
+ silo_ramdisk_image:
+ .word 0
+ .global silo_ramdisk_size
+ silo_ramdisk_size:
+ .word 0
+
+ .align 8
+ 1:
+ /*
+ * Disable interrupts and disable address masking.
+ */
+ wrpr %g0, PSTATE_PRIV_BIT, %pstate
+
+ wrpr %g0, SPARC_NUMBER_OF_REGISTER_WINDOWS - 2, %cansave ! set maximum saveable windows
+ wrpr %g0, 0, %canrestore ! get rid of windows we will never need again
+ wrpr %g0, 0, %otherwin ! make sure the window state is consistent
+ wrpr %g0, SPARC_NUMBER_OF_REGISTER_WINDOWS - 1, %cleanwin ! prevent needless clean_window traps for kernel
+
+ /* g4 needs to be cleared for gcc */
+ mov %g0, %g4
+
+ /* Clear the bss */
+ setx SYM(bss_start), %l0, %g2 ! g2 = start of bss
+ setx SYM(_end), %l0, %g3 ! g3 = end of bss
+zerobss:
+ stx %g0, [%g2]
+ add %g2, 8, %g2
+ cmp %g2, %g3
+ bleu,a zerobss
+ nop
+
+ /* Install stack */
+setstack:
+ set SYM(StackStart), %sp
+ add %sp, -STACK_BIAS, %sp
+
+ setx ofw_cif, %l0, %l1
+
+ call ofw_init ! initialize OpenFirmware
+ stx %o4, [%l1]
+
+ call bootstrap
+ nop
+
+ /* BSP-specific pre-bootcard initializations */
+ call SYM(_BSP_init)
+ nop
+
+ /* Set up ISR handler for interrupt enable/disable */
+ setx SYM(syscall), %l0, %o1
+ setx param_space, %l0, %o2
+ call SYM(_CPU_ISR_install_raw_handler)
+ mov 0x100, %o0
+
+ /* Don't need to copy initialized data to RAM--link puts all in RAM already */
+
+ mov %g0, %o0 ! clear command line passed to main
+ call SYM(boot_card)
+ sub %sp, 0x60, %sp ! make room on stack (necessary?)
+
+#if _BSP_DEBUG
+ /* execution returns here when RTEMS terminates */
+ sethi %hi(_end_token_string), %g1
+ add %g1, %lo(_end_token_string), %o0
+ call SYM(printk)
+ nop
+#endif
+
+ call SYM(halt)
+ nop
+
+halted: nop
+ b SYM(halted)
+
+ .align CPU_ALIGNMENT
+ param_space:
+ .space 8
+
+ .global _fini
+ _fini:
+ nop
+ nop
+
+ .global _init
+ _init:
+ nop
+ nop