summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/score603e/start
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1999-02-19 00:22:33 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1999-02-19 00:22:33 +0000
commit9c448e1db38c6dd64c885ddfb3fe28de33cd037b (patch)
tree9d5eb1ec6170db686a021c387c1dce8ab7ad0804 /c/src/lib/libbsp/powerpc/score603e/start
parentUpdated to reflect addition of new BSPs. (diff)
downloadrtems-9c448e1db38c6dd64c885ddfb3fe28de33cd037b.tar.bz2
BSP for Vista Score603e added.
Diffstat (limited to 'c/src/lib/libbsp/powerpc/score603e/start')
-rw-r--r--c/src/lib/libbsp/powerpc/score603e/start/Makefile.in56
-rw-r--r--c/src/lib/libbsp/powerpc/score603e/start/start.S155
2 files changed, 211 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/powerpc/score603e/start/Makefile.in b/c/src/lib/libbsp/powerpc/score603e/start/Makefile.in
new file mode 100644
index 0000000000..972a64f5de
--- /dev/null
+++ b/c/src/lib/libbsp/powerpc/score603e/start/Makefile.in
@@ -0,0 +1,56 @@
+#
+# $Id$
+#
+
+@SET_MAKE@
+srcdir = @srcdir@
+VPATH = @srcdir@
+RTEMS_ROOT = @top_srcdir@
+PROJECT_ROOT = @PROJECT_ROOT@
+
+INSTALL = @INSTALL@
+
+PGMS=${ARCH}/start.o
+
+# C source names, if any, go here -- minus the .c
+C_PIECES=
+C_FILES=$(C_PIECES:%=%.c)
+C_O_FILES=$(C_PIECES:%=${ARCH}/%.o)
+
+H_FILES=
+
+# Assembly source names, if any, go here -- minus the .S
+S_PIECES=start
+S_FILES=$(S_PIECES:%=%.S)
+S_O_FILES=$(S_FILES:%.S=${ARCH}/%.o)
+
+SRCS=$(C_FILES) $(CC_FILES) $(H_FILES) $(S_FILES)
+OBJS=$(C_O_FILES) $(CC_O_FILES) $(S_O_FILES)
+
+include $(RTEMS_ROOT)/make/custom/$(RTEMS_BSP).cfg
+include $(RTEMS_ROOT)/make/leaf.cfg
+
+#
+# (OPTIONAL) Add local stuff here using +=
+#
+
+DEFINES +=
+CPPFLAGS +=
+CFLAGS +=
+
+LD_PATHS +=
+LD_LIBS +=
+LDFLAGS +=
+
+#
+# Add your list of files to delete here. The config files
+# already know how to delete some stuff, so you may want
+# to just run 'make clean' first to see what gets missed.
+# 'make clobber' already includes 'make clean'
+#
+
+CLEAN_ADDITIONS +=
+CLOBBER_ADDITIONS +=
+
+all: ${ARCH} $(SRCS) $(OBJS) $(PGM)
+ $(INSTALL_VARIANT) -m 555 ${PGMS} ${PROJECT_RELEASE}/lib
diff --git a/c/src/lib/libbsp/powerpc/score603e/start/start.S b/c/src/lib/libbsp/powerpc/score603e/start/start.S
new file mode 100644
index 0000000000..9f4befee7d
--- /dev/null
+++ b/c/src/lib/libbsp/powerpc/score603e/start/start.S
@@ -0,0 +1,155 @@
+/*
+ * This is based on the mvme-crt0.S file from libgloss/rs6000.
+ * crt0.S -- startup file for PowerPC systems.
+ *
+ * Copyright (c) 1995 Cygnus Support
+ *
+ * The authors hereby grant permission to use, copy, modify, distribute,
+ * and license this software and its documentation for any purpose, provided
+ * that existing copyright notices are retained in all copies and that this
+ * notice is included verbatim in any distributions. No written agreement,
+ * license, or royalty fee is required for any of the authorized uses.
+ * Modifications to this software may be copyrighted by their authors
+ * and need not follow the licensing terms described here, provided that
+ * the new terms are clearly indicated on the first page of each file where
+ * they apply.
+ *
+ * $Id$
+ */
+#include <rtems/score/targopts.h>
+#include "ppc-asm.h"
+
+ .file "start.s"
+ .section ".got2","aw"
+ .align 2
+
+.LCTOC1 = .+32768
+
+ .extern FUNC_NAME(atexit)
+ .globl FUNC_NAME(__atexit)
+ .section ".sdata","aw"
+ .align 2
+FUNC_NAME(__atexit): /* tell C's eabi-ctor's we have an atexit function */
+ .long FUNC_NAME(atexit)@fixup /* and that it is to register __do_global_dtors */
+
+ .section ".fixup","aw"
+ .align 2
+ .long FUNC_NAME(__atexit)
+
+ .section ".got2","aw"
+.Ltable = .-.LCTOC1
+ .long .LCTOC1 /* address we think .LCTOC1 is loaded at */
+
+.Lbss_start = .-.LCTOC1
+ .long _edata /* includes sbss and bss */
+
+.Lend = .-.LCTOC1
+ .long _end
+
+.Lstack = .-.LCTOC1 /* stack address if set by user */
+ .long __stack
+
+ .text
+.Lptr:
+ .long .LCTOC1-.Laddr
+
+ .globl _start
+ .type _start,@function
+_start:
+ b past_constants
+ /* Set MSR */
+ .long _etext /* end of code space */
+ .long _edata /* end of code and data space */
+
+past_constants:
+ lis r5,0
+ mr r4,r5
+ ori r4,r4,0x0000 /* 0x2030 */
+ mtmsr r4
+
+#if (SCORE603E_GENERATION == 1)
+ lis r4,0
+ mtspr 530,r4 /* Set IBAT1U */
+ mtspr 531,r4 /* Set IBAT1L */
+ mtspr 534,r4 /* Set IBAT3U */
+ mtspr 535,r4 /* Set IBAT3L */
+ mtspr 538,r4 /* Set DBAT1U */
+ mtspr 539,r4 /* Set DBAT1L */
+ lis r4,0
+ ori r4,r4,0x1fff
+ mtspr 528,r4 /* Set IBAT0U */
+ mtspr 536,r4 /* Set DBAT0U */
+ lis r4,0
+ ori r4,r4,0x0002
+ mtspr 529,r4 /* Set IBAT0L */
+ mtspr 537,r4 /* Set DBAT0L */
+ lis r4,-4096 /* 0xf000 */
+ ori r4,r4,8191 /* 0x1fff */
+ mtspr 532,r4 /* Set IBAT2U */
+ mtspr 540,r4 /* Set DBAT2U */
+ lis r4,-4096 /* 0xf000 */
+ ori r4,r4,1
+ mtspr 533,r4 /* Set IBAT2L */
+ mtspr 541,r4 /* Set DBAT2L */
+ lis r4,-32768 /* 0x8000 */
+ ori r4,r4,8191 /* 0x1fff */
+ mtspr 542,r4 /* Set DBAT3U */
+ lis r4,-32768 /* 0x8000 */
+ ori r4,r4,0x003a
+ mtspr 543,r4 /* Set DBAT3L */
+
+#elif (SCORE603E_GENERATION == 2)
+/* XXX FILL THIS IN WHEN I GET HELLO TO COME UP. */
+
+#else
+#error "Unknown Generation of Score603e"
+#endif
+
+ bl .Laddr /* get current address */
+.Laddr:
+ mflr r4 /* real address of .Laddr */
+ lwz r5,(.Lptr-.Laddr)(r4) /* linker generated address of .LCTOC1 */
+ add r5,r5,r4 /* correct to real pointer */
+ lwz r4,.Ltable(r5) /* get linker's idea of where .Laddr is */
+ subf r4,r4,r5 /* calculate difference between where linked and current */
+
+ /* clear bss */
+ lwz r6,.Lbss_start(r5) /* calculate beginning of the BSS */
+ lwz r7,.Lend(r5) /* calculate end of the BSS */
+ add r6,r6,r4 /* adjust pointers */
+ add r7,r7,r4
+
+ cmplw 1,r6,r7
+ bc 4,4,.Ldone
+
+ subf r8,r6,r7 /* number of bytes to zero */
+ srwi r9,r8,2 /* number of words to zero */
+ mtctr r9
+ li r0,0 /* zero to clear memory */
+ addi r6,r6,-4 /* adjust so we can use stwu */
+.Lloop:
+ stwu r0,4(r6) /* zero bss */
+ bdnz .Lloop
+
+.Ldone:
+
+ lwz r0,.Lstack(r5) /* stack address or 0 */
+ cmplwi 1,r0,0 /* equal to 0? */
+ bc 12,6,.Lnostack /* use default stack if == 0 */
+ mr sp,r0 /* use user defined stack */
+
+.Lnostack:
+ /* set up initial stack frame */
+ addi sp,sp,-4 /* make sure we don't overwrite debug mem */
+ lis r0,0
+ stw r0,0(sp) /* clear back chain */
+ stwu sp,-56(sp) /* push another stack frame */
+
+ /* Let her rip */
+ bl FUNC_NAME(boot_card)
+
+ /* return value from boot_card is argument to exit */
+ bl FUNC_NAME(exit)
+ trap
+.Lstart:
+ .size _start,.Lstart-_start