summaryrefslogtreecommitdiffstats
path: root/bsps/sparc64/shared/start/start.S
diff options
context:
space:
mode:
Diffstat (limited to 'bsps/sparc64/shared/start/start.S')
-rw-r--r--bsps/sparc64/shared/start/start.S151
1 files changed, 151 insertions, 0 deletions
diff --git a/bsps/sparc64/shared/start/start.S b/bsps/sparc64/shared/start/start.S
new file mode 100644
index 0000000000..92c2177c1e
--- /dev/null
+++ b/bsps/sparc64/shared/start/start.S
@@ -0,0 +1,151 @@
+#
+# 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.
+ */
+
+#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
+
+.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
+
+ /* BSP-specific pre-bootcard initializations */
+ call SYM(_BSP_init)
+ nop
+
+ setx ofw_cif, %l0, %l1
+
+ call ofw_init ! initialize OpenFirmware
+ stx %o4, [%l1]
+
+ call bootstrap
+ 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?)
+
+ call SYM(halt)
+ nop
+
+halted: nop
+ b SYM(halted)
+
+.section BOOTSTRAP
+ .align CPU_ALIGNMENT
+ .space 32768 - SPARC64_MINIMUM_STACK_FRAME_SIZE ! 32K boot stack grows down
+ .global StackStart
+ StackStart:
+ .space SPARC64_MINIMUM_STACK_FRAME_SIZE ! initial stack frame
+
+.section BOOTSTRAP
+ .align CPU_ALIGNMENT
+ param_space:
+ .space 8