summaryrefslogtreecommitdiffstats
path: root/bsps/powerpc/qemuppc/start/start.S
diff options
context:
space:
mode:
Diffstat (limited to 'bsps/powerpc/qemuppc/start/start.S')
-rw-r--r--bsps/powerpc/qemuppc/start/start.S52
1 files changed, 52 insertions, 0 deletions
diff --git a/bsps/powerpc/qemuppc/start/start.S b/bsps/powerpc/qemuppc/start/start.S
new file mode 100644
index 0000000000..1ef7a3a02a
--- /dev/null
+++ b/bsps/powerpc/qemuppc/start/start.S
@@ -0,0 +1,52 @@
+#include <rtems/score/cpu.h>
+#include <rtems/powerpc/powerpc.h>
+
+#include <bspopts.h>
+
+ .global bsp_interrupt_stack_start
+ .global bsp_interrupt_stack_end
+ .global _start
+
+ .section .bsp_start_text,"awx",@progbits
+
+_start:
+ lis %r1,bsp_interrupt_stack_start@h
+ ori %r1,%r1,bsp_interrupt_stack_start@l
+ /* Make sure stack is properly aligned */
+ li %r3, CPU_STACK_ALIGNMENT - 1
+ andc %r1, %r1, %r3
+ /* NULL ptr to back chain */
+ li %r3, 0
+ stw %r3, 0(%r1)
+
+ li %r3,8192
+ mtmsr %r3
+
+ /* Read-only small data */
+ lis %r2, _SDA2_BASE_@h
+ ori %r2, %r2,_SDA2_BASE_@l
+
+ /* Read-write small data */
+ lis %r13, _SDA_BASE_@h
+ ori %r13, %r13,_SDA_BASE_@l
+
+ bl cmain
+ .size _start, . - _start
+
+ .global __eabi
+__eabi:
+ blr
+ .size __eabi, . - __eabi
+
+ .section ".reset","ax"
+_reset:
+ b _start
+ .size _reset, . - _reset
+
+ /* Start stack area */
+ .section ".bsp_rwextra", "aw", @nobits
+ .align 4
+ .space 4096
+bsp_interrupt_stack_start:
+ .space 32768
+bsp_interrupt_stack_end: