source: rtems/c/src/lib/libbsp/powerpc/t32mppc/start/start.S @ 7078a00b

5
Last change on this file since 7078a00b was 7078a00b, checked in by Sebastian Huber <sebastian.huber@…>, on 11/08/17 at 12:13:32

bsp/t32mppc: Use fixed exception handlers

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