summaryrefslogtreecommitdiffstats
path: root/bsps/lm32
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-04-20 10:19:28 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-04-20 13:08:36 +0200
commitfbcd7c8fa65eb695e96a62ea1c1ac7a024fa9dfc (patch)
treea17e285cf22cd49cd42e8b3ad562febc3987d566 /bsps/lm32
parentbsps: Move console drivers to bsps (diff)
downloadrtems-fbcd7c8fa65eb695e96a62ea1c1ac7a024fa9dfc.tar.bz2
bsps: Move start files to bsps
This patch is a part of the BSP source reorganization. Update #3285.
Diffstat (limited to 'bsps/lm32')
-rw-r--r--bsps/lm32/shared/start/start.S160
1 files changed, 160 insertions, 0 deletions
diff --git a/bsps/lm32/shared/start/start.S b/bsps/lm32/shared/start/start.S
new file mode 100644
index 0000000000..71cbb54119
--- /dev/null
+++ b/bsps/lm32/shared/start/start.S
@@ -0,0 +1,160 @@
+/* LM32 startup code
+ *
+ * This is the entry point on reset and when loading the
+ * executive from a bootloader.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ *
+ * Jukka Pietarinen <jukka.pietarinen@mrf.fi>, 2008,
+ * Micro-Research Finland Oy
+ */
+
+#include "bspopts.h"
+
+ .section .boot,"a",@progbits
+ .align 4
+
+ .globl start
+ .type start,@function
+ .globl _start
+ .type _start,@function
+ .globl __start
+ .type __start,@function
+ .globl LatticeDDInit
+ .type LatticeDDInit,@function
+ .globl crt0
+ .type crt0,@function
+
+LatticeDDInit:
+__start:
+_start:
+start:
+ /* Clear r0 */
+ xor r0,r0,r0
+ /* Disable interrupts */
+ wcsr IE, r0
+ /* Mask all interrupts */
+ wcsr IM,r0
+ /* Set exception base address */
+ mvhi r1, hi(start)
+ ori r1, r1, lo(start)
+ wcsr EBA, r1
+ bi crt0
+ nop
+/*
+ * Unused handlers call debug handlers
+ */
+breakpoint_handler:
+ rcsr r7, DEBA
+ addi r7, r7, 32
+ b r7
+ nop
+ nop
+ nop
+ nop
+ nop
+instruction_bus_error_handler:
+ rcsr r7, DEBA
+ addi r7, r7, 64
+ b r7
+ nop
+ nop
+ nop
+ nop
+ nop
+watchpoint_handler:
+ rcsr r7, DEBA
+ addi r7, r7, 96
+ b r7
+ nop
+ nop
+ nop
+ nop
+ nop
+data_bus_error_handler:
+ rcsr r7, DEBA
+ addi r7, r7, 128
+ b r7
+ nop
+ nop
+ nop
+ nop
+ nop
+divide_by_zero_handler:
+ rcsr r7, DEBA
+ addi r7, r7, 160
+ b r7
+ nop
+ nop
+ nop
+ nop
+ nop
+interrupt_handler:
+ .extern _ISR_Handler
+ mvhi r0, hi(_ISR_Handler)
+ ori r0, r0, lo(_ISR_Handler)
+ b r0
+ nop
+ nop
+ nop
+ nop
+ nop
+system_call_handler:
+ rcsr r7, DEBA
+ addi r7, r7, 224
+ b r7
+ nop
+ nop
+ nop
+ nop
+ nop
+
+crt0:
+ /* Flush data cache */
+ addi r1, r0, 1
+ wcsr DCC, r1
+ nop
+ nop
+ nop
+ nop
+ /* Flush Instruction Cache */
+ wcsr ICC, r1
+ nop
+ nop
+ nop
+ nop
+ /* Initialize stack pointer */
+ mvhi sp, hi(_fstack-4)
+ ori sp, sp, lo(_fstack-4)
+ /* Initialize global pointer */
+ mvhi gp, hi(_edata)
+ ori gp, gp, lo(_edata)
+ /* Clear bss */
+ mvhi r1, hi(_clear_start)
+ ori r1, r1, lo(_clear_start)
+ mvhi r3, hi(_clear_end)
+ ori r3, r3, lo(_clear_end)
+.clear_bss:
+ be r1, r3, .end_clear_bss
+ sw (r1+0), r0
+ addi r1, r1, 4
+ bi .clear_bss
+.end_clear_bss:
+ mvi r1, 0
+ be r4, r0, .no_rescue
+ mvhi r1, hi(.rescue_str)
+ ori r1, r1, lo(.rescue_str)
+.no_rescue:
+ mvhi r7, hi(boot_card)
+ ori r7, r7, lo(boot_card)
+ call r7
+ # boot_card returns when RTEMS is shutdown
+.dead_end:
+ bi .dead_end
+
+.section .rodata
+.rescue_str:
+ .ascii "rescue"
+