source: rtems/c/src/lib/libbsp/powerpc/t32mppc/start/start.S @ 5d0fa047

5
Last change on this file since 5d0fa047 was 5d0fa047, checked in by Sebastian Huber <sebastian.huber@…>, on 07/28/17 at 13:03:47

bsp/t32mppc: Set PPC_PER_CPU_CONTROL_REGISTER

  • Property mode set to 100644
File size: 3.9 KB
Line 
1/*
2 * Copyright (c) 2012, 2017 embedded brains GmbH.  All rights reserved.
3 *
4 *  embedded brains GmbH
5 *  Dornierstr. 4
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
12 * http://www.rtems.org/license/LICENSE.
13 */
14
15#include <bspopts.h>
16
17#include <rtems/score/percpu.h>
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
26        /* Primitive NULL pointer protection */
27.rept 1024
28        sc
29.endr
30
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
42#ifdef RTEMS_SMP
43        SET_SELF_CPU_CONTROL    r3
44#endif
45
46        /* Copy fast text */
47        LWI     r3, bsp_section_fast_text_begin
48        LWI     r4, bsp_section_fast_text_load_begin
49        LWI     r5, bsp_section_fast_text_size
50        bl      copy
51
52        /* Copy read-only data */
53        LWI     r3, bsp_section_rodata_begin
54        LWI     r4, bsp_section_rodata_load_begin
55        LWI     r5, bsp_section_rodata_size
56        bl      copy
57
58        /* Copy fast data */
59        LWI     r3, bsp_section_fast_data_begin
60        LWI     r4, bsp_section_fast_data_load_begin
61        LWI     r5, bsp_section_fast_data_size
62        bl      copy
63
64        /* Copy data */
65        LWI     r3, bsp_section_data_begin
66        LWI     r4, bsp_section_data_load_begin
67        LWI     r5, bsp_section_data_size
68        bl      copy
69
70        /* Clear SBSS */
71        LWI     r3, bsp_section_sbss_begin
72        LWI     r4, bsp_section_sbss_size
73        bl      bsp_start_zero
74
75        /* Clear BSS */
76        LWI     r3, bsp_section_bss_begin
77        LWI     r4, bsp_section_bss_size
78        bl      bsp_start_zero
79
80        /* Set up EABI and SYSV environment */
81        bl      __eabi
82
83        /* Clear command line */
84        li      r3, 0
85
86        bl      boot_card
87
88twiddle:
89        b       twiddle
90
91copy:
92        cmpw    r3, r4
93        beqlr
94        b       memcpy
95
96        /* Exception vector prologues area */
97        .section ".bsp_start_text", "ax"
98        .align 4
99bsp_exc_vector_base:
100        stw     r1, ppc_exc_lock_crit@sdarel(r13)
101        stw     r4, ppc_exc_vector_register_crit@sdarel(r13)
102        li      r4, -32767
103        b       ppc_exc_wrap_bookE_crit
104        stwu    r1, -EXC_GENERIC_SIZE(r1)
105        stw     r4, GPR4_OFFSET(r1)
106        li      r4, 2
107        b       ppc_exc_wrap_nopush_e500_mchk
108        stwu    r1, -EXC_GENERIC_SIZE(r1)
109        stw     r4, GPR4_OFFSET(r1)
110        li      r4, 3
111        b       ppc_exc_wrap_nopush_std
112        stwu    r1, -EXC_GENERIC_SIZE(r1)
113        stw     r4, GPR4_OFFSET(r1)
114        li      r4, 4
115        b       ppc_exc_wrap_nopush_std
116        stwu    r1, -CPU_INTERRUPT_FRAME_SIZE(r1)
117        stw     r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1)
118        li      r4, -32763
119        b       ppc_exc_wrap_async_normal
120        stwu    r1, -EXC_GENERIC_SIZE(r1)
121        stw     r4, GPR4_OFFSET(r1)
122        li      r4, 6
123        b       ppc_exc_wrap_nopush_std
124        stwu    r1, -EXC_GENERIC_SIZE(r1)
125        stw     r4, GPR4_OFFSET(r1)
126        li      r4, 7
127        b       ppc_exc_wrap_nopush_std
128        stwu    r1, -EXC_GENERIC_SIZE(r1)
129        stw     r4, GPR4_OFFSET(r1)
130        li      r4, 8
131        b       ppc_exc_wrap_nopush_std
132        stwu    r1, -EXC_GENERIC_SIZE(r1)
133        stw     r4, GPR4_OFFSET(r1)
134        li      r4, 12
135        b       ppc_exc_wrap_nopush_std
136        stwu    r1, -EXC_GENERIC_SIZE(r1)
137        stw     r4, GPR4_OFFSET(r1)
138        li      r4, 24
139        b       ppc_exc_wrap_nopush_std
140        stwu    r1, -CPU_INTERRUPT_FRAME_SIZE(r1)
141        stw     r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1)
142        li      r4, -32752
143        b       ppc_exc_wrap_async_normal
144        stwu    r1, -CPU_INTERRUPT_FRAME_SIZE(r1)
145        stw     r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1)
146        li      r4, -32749
147        b       ppc_exc_wrap_async_normal
148        stw     r1, ppc_exc_lock_crit@sdarel(r13)
149        stw     r4, ppc_exc_vector_register_crit@sdarel(r13)
150        li      r4, -32748
151        b       ppc_exc_wrap_bookE_crit
152        stwu    r1, -EXC_GENERIC_SIZE(r1)
153        stw     r4, GPR4_OFFSET(r1)
154        li      r4, 18
155        b       ppc_exc_wrap_nopush_std
156        stwu    r1, -EXC_GENERIC_SIZE(r1)
157        stw     r4, GPR4_OFFSET(r1)
158        li      r4, 17
159        b       ppc_exc_wrap_nopush_std
160        stwu    r1, -EXC_GENERIC_SIZE(r1)
161        stw     r4, GPR4_OFFSET(r1)
162        li      r4, 13
163        b       ppc_exc_wrap_nopush_bookE_crit
164        stwu    r1, -EXC_GENERIC_SIZE(r1)
165        stw     r4, GPR4_OFFSET(r1)
166        li      r4, 10
167        b       ppc_exc_wrap_nopush_std
168        stwu    r1, -EXC_GENERIC_SIZE(r1)
169        stw     r4, GPR4_OFFSET(r1)
170        li      r4, 25
171        b       ppc_exc_wrap_nopush_std
172        stwu    r1, -EXC_GENERIC_SIZE(r1)
173        stw     r4, GPR4_OFFSET(r1)
174        li      r4, 26
175        b       ppc_exc_wrap_nopush_std
176        stwu    r1, -EXC_GENERIC_SIZE(r1)
177        stw     r4, GPR4_OFFSET(r1)
178        li      r4, 15
179        b       ppc_exc_wrap_nopush_std
180
181        /* Start stack area */
182        .section ".bsp_rwextra", "aw", @nobits
183        .align 4
184        .space 4096
185start_stack_end:
Note: See TracBrowser for help on using the repository browser.