source: rtems/bsps/powerpc/t32mppc/start/start.S @ e560ee85

Last change on this file since e560ee85 was e560ee85, checked in by Joel Sherrill <joel@…>, on 03/01/22 at 21:38:55

bsps/powerpc/: Scripted embedded brains header file clean up

Updates #4625.

  • Property mode set to 100644
File size: 4.6 KB
Line 
1/*
2 * Copyright (c) 2012, 2017 embedded brains GmbH.  All rights reserved.
3 *
4 * The license and distribution terms for this file may be
5 * found in the file LICENSE in this distribution or at
6 * http://www.rtems.org/license/LICENSE.
7 */
8
9#include <bspopts.h>
10
11#include <rtems/score/percpu.h>
12#include <libcpu/powerpc-utility.h>
13#include <bsp/vectors.h>
14
15        .globl _start
16        .globl bsp_exc_vector_base
17
18        .section ".bsp_start_text", "ax"
19
20        /* Primitive NULL pointer protection */
21.rept 1024
22        sc
23.endr
24
25_start:
26        /* Enable time base */
27        li      r0, 0x4000
28        mtspr   HID0, r0
29
30        /* Initialize start stack */
31        LA      r1, _ISR_Stack_area_end
32        subi    r1, r1, 16
33        li      r0, 0
34        stw     r0, 0(r1)
35
36        SET_SELF_CPU_CONTROL    r3, r4
37
38        /* Copy fast text */
39        LWI     r3, bsp_section_fast_text_begin
40        LWI     r4, bsp_section_fast_text_load_begin
41        LWI     r5, bsp_section_fast_text_size
42        bl      copy
43
44        /* Copy read-only data */
45        LWI     r3, bsp_section_rodata_begin
46        LWI     r4, bsp_section_rodata_load_begin
47        LWI     r5, bsp_section_rodata_size
48        bl      copy
49
50        /* Copy fast data */
51        LWI     r3, bsp_section_fast_data_begin
52        LWI     r4, bsp_section_fast_data_load_begin
53        LWI     r5, bsp_section_fast_data_size
54        bl      copy
55
56        /* Copy data */
57        LWI     r3, bsp_section_data_begin
58        LWI     r4, bsp_section_data_load_begin
59        LWI     r5, bsp_section_data_size
60        bl      copy
61
62        /* Clear SBSS */
63        LWI     r3, bsp_section_sbss_begin
64        LWI     r4, bsp_section_sbss_size
65        bl      bsp_start_zero
66
67        /* Clear BSS */
68        LWI     r3, bsp_section_bss_begin
69        LWI     r4, bsp_section_bss_size
70        bl      bsp_start_zero
71
72        /* Set up EABI and SYSV environment */
73        bl      __eabi
74
75        /* Clear command line */
76        li      r3, 0
77
78        bl      boot_card
79
80twiddle:
81        b       twiddle
82
83copy:
84        cmpw    r3, r4
85        beqlr
86        b       memcpy
87
88        /* Exception vector prologues area */
89        .section ".bsp_start_text", "ax"
90        .align 4
91bsp_exc_vector_base:
92        /* Critical input */
93        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
94        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
95        li      r3, 0
96        b       ppc_exc_fatal_critical
97        /* Machine check */
98        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
99        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
100        li      r3, 1
101        b       ppc_exc_fatal_machine_check
102        /* Data storage */
103        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
104        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
105        li      r3, 2
106        b       ppc_exc_fatal_normal
107        /* Instruction storage */
108        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
109        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
110        li      r3, 3
111        b       ppc_exc_fatal_normal
112        /* External input */
113        PPC_REG_STORE_UPDATE    r1, -PPC_EXC_INTERRUPT_FRAME_SIZE(r1)
114        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
115        li      r3, 4
116        b       ppc_exc_interrupt
117        /* Alignment */
118        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
119        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
120        li      r3, 5
121        b       ppc_exc_fatal_normal
122        /* Program */
123        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
124        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
125        li      r3, 6
126        b       ppc_exc_fatal_normal
127        /* Floating-point unavailable */
128        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
129        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
130        li      r3, 7
131        b       ppc_exc_fatal_normal
132        /* System call */
133        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
134        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
135        li      r3, 8
136        b       ppc_exc_fatal_normal
137        /* APU unavailable */
138        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
139        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
140        li      r3, 9
141        b       ppc_exc_fatal_normal
142        /* Decrementer */
143        PPC_REG_STORE_UPDATE    r1, -PPC_EXC_INTERRUPT_FRAME_SIZE(r1)
144        PPC_REG_STORE   r3, PPC_EXC_GPR3_PROLOGUE_OFFSET(r1)
145        li      r3, 10
146        b       ppc_exc_interrupt
147        /* Fixed-interval timer interrupt */
148        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
149        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
150        li      r3, 11
151        b       ppc_exc_fatal_normal
152        /* Watchdog timer interrupt */
153        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
154        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
155        li      r3, 12
156        b       ppc_exc_fatal_critical
157        /* Data TLB error */
158        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
159        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
160        li      r3, 13
161        b       ppc_exc_fatal_normal
162        /* Instruction TLB error */
163        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
164        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
165        li      r3, 14
166        b       ppc_exc_fatal_normal
167        /* Debug */
168        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
169        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
170        li      r3, 15
171        b       ppc_exc_fatal_debug
172        /* SPE APU unavailable or AltiVec unavailable */
173        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
174        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
175        li      r3, 32
176        b       ppc_exc_fatal_normal
177        /* SPE floating-point data exception or AltiVec assist */
178        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
179        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
180        li      r3, 33
181        b       ppc_exc_fatal_normal
182        /* SPE floating-point round exception */
183        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
184        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
185        li      r3, 34
186        b       ppc_exc_fatal_normal
187        /* Performance monitor */
188        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
189        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
190        li      r3, 35
191        b       ppc_exc_fatal_normal
Note: See TracBrowser for help on using the repository browser.