source: rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start.S @ 08013e8

4.104.115
Last change on this file since 08013e8 was 08013e8, checked in by Thomas Doerfler <Thomas.Doerfler@…>, on 04/07/10 at 06:44:41

fixed to support GW_LCFM

  • Property mode set to 100644
File size: 4.1 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup mpc55xx_asm
5 *
6 * @brief Boot and system start code.
7 */
8
9/*
10 * Copyright (c) 2008
11 * Embedded Brains GmbH
12 * Obere Lagerstr. 30
13 * D-82178 Puchheim
14 * Germany
15 * rtems@embedded-brains.de
16 *
17 * The license and distribution terms for this file may be found in the file
18 * LICENSE in this distribution or at http://www.rtems.com/license/LICENSE.
19 */
20
21/**
22 * @defgroup mpc55xx_asm Assembler files
23 *
24 * @ingroup mpc55xx
25 */
26
27#include <libcpu/powerpc-utility.h>
28#include <mpc55xx/reg-defs.h>
29#include <bspopts.h>
30       
31.section ".entry", "ax"
32PUBLIC_VAR (start)
33.globl  fmpll_syncr_vals
34bam_rchw:
35/*
36 * BAM
37 */
38
39        /* BAM: RCHW */
40        .int 0x005a0000
41
42        /* BAM: Address of start instruction */
43        .int 0x8
44
45/*
46 * Enable time base
47 */
48start: 
49        li r0, 0
50        mtspr TBWU, r0
51        mtspr TBWL, r0
52        mfspr r2, HID0
53        ori r2, r2, 0x4000
54        mtspr HID0, r2
55
56/*
57 * System clock
58 */
59
60        LWI r3,fmpll_syncr_vals
61        bl SYM (mpc55xx_fmpll_reset_config)
62
63/*
64 * Enable branch prediction
65 */
66
67        LWI r2, BUCSR_BBFI | BUCSR_BPEN
68        mtspr BUCSR, r2
69
70/*
71 * Basics
72 */
73
74        /* Set stack start to end of ram */
75        LA r1, bsp_ram_end
76        addi r1, r1, -8
77
78        /* Enable SPE */
79        mfmsr r2
80        oris r2, r2, 0x200
81        mtmsr r2
82
83        /* Config internal flash */
84        bl SYM (mpc55xx_flash_config)
85
86#if DATA_CACHE_ENABLE || INSTRUCTION_CACHE_ENABLE
87        /* FIXME: Config cache */
88        bl config_cache
89#endif /* DATA_CACHE_ENABLE || INSTRUCTION_CACHE_ENABLE */
90
91/*
92 * TODO, FIXME: Enable cache in the MMU for the SRAM
93 */
94
95.equ MAS0, 624
96.equ MAS1, 625
97.equ MAS2, 626
98.equ MAS3, 627
99
100        LWI r3, 0x10030000
101        mtspr MAS0, r3
102        tlbre
103        LWI r4, ~0x00000008
104        mfspr r3, MAS2
105        and r3, r3, r4
106        mtspr MAS2, r3
107        tlbwe
108
109/*
110 * TODO, FIXME: Set MMU for the external SRAM
111 */
112
113        LWI r3, 0x10020000
114        mtspr MAS0, r3
115        tlbre
116        LWI r4, 0xfff
117        mfspr r3, MAS3
118        and r3, r3, r4
119        LWI r4, 0x20000000
120        or r3, r3, r4
121        mtspr MAS3, r3
122        tlbwe
123
124/*
125 * Zero RAM (needed to get proper ECC)
126 */
127
128        /* Addresses */
129        LA r3, bsp_ram_start
130        LA r4, bsp_ram_end
131
132        /* Assert: Proper alignment of destination start */
133        andi. r6, r3, 0x3f
134        bne twiddle
135
136        /* Assert: Proper alignment of destination end */
137        andi. r6, r4, 0x3f
138        bne twiddle
139
140        /* Data size = destination end - destination start */
141        subf r4, r3, r4
142
143        /* Save time */
144        mftb r24
145
146        /* Zero */
147        bl SYM (mpc55xx_zero_32)
148
149        /* Save time and get time delta */
150        mftb r25
151        subf r24, r24, r25
152
153/*
154 * Copy data
155 */
156
157        /* Addresses */
158        LA r3, bsp_section_text_end
159        LA r4, bsp_section_data_start
160        LA r5, bsp_section_data_end
161
162        /* Assert: Proper alignment of source start */
163        andi. r6, r3, 0x7
164        bne twiddle
165
166        /* Assert: Proper alignment of destination start */
167        andi. r6, r4, 0x7
168        bne twiddle
169
170        /* Assert: Proper alignment of destination end */
171        andi. r6, r5, 0x7
172        bne twiddle
173
174        /* Data size = destination end - destination start */
175        subf r5, r4, r5
176
177        /* Copy */
178        bl SYM (mpc55xx_copy_8)
179
180        /* Save time and get time delta */
181        mftb r26
182        subf r25, r25, r26
183
184/*
185 * Prepare high level initialization
186 */
187
188        /* Create NULL */
189        li r0, 0
190
191        /* Return address */
192        stw r0, 4(r1)
193
194        /* Back chain */
195        stw r0, 0(r1)
196
197        /* Read-only small data */
198        LA r2, _SDA2_BASE_
199
200        /* Read-write small data */
201        LA r13, _SDA_BASE_
202
203/*
204 * Start RTEMS
205 */
206
207        /* Clear command line */
208        xor r3, r3, r3
209
210        /* Start RTEMS */
211        bl SYM (boot_card)
212
213        /* Spin around */
214        b twiddle
215
216.equ L1CSR0, 1010
217.equ L1CSR0_CINV, 0x2
218.equ L1CSR0_CABT, 0x4
219/* FIXME: CORG??? .equ L1CSR0_SETTINGS, 0x00180011 */
220.equ L1CSR0_SETTINGS, 0x00100001
221
222/*
223 * Configure cache
224 */
225config_cache:
226        /* Start cache invalidation */
227        LWI r5, L1CSR0_CINV
228        mtspr L1CSR0, r5
229
230        /* Bit masks to test and clear invalidation abortion (CABT) */
231        LWI r6, L1CSR0_CABT
232        not r7, r6
233
234        /* Wait for cache invalidation to complete */
235check_cache_invalidation:
236        mfspr r9, L1CSR0
237
238        /* Check if the invalidate was aborted */
239        and. r10, r9, r6
240        beq no_chache_invalidation_abort
241
242        /* Clear CABT bit */
243        and r10, r9, r7
244        mtspr L1CSR0, r10
245
246        /* Retry invalidation */
247        b config_cache
248
249no_chache_invalidation_abort:
250        /* Check CINV bit */
251        and. r10, r5, r9
252
253        /* Wait? */
254        bne check_cache_invalidation
255
256        /* Enable cache */
257        LWI r6, L1CSR0_SETTINGS
258        mfspr r5, L1CSR0
259        or r5, r5, r6
260        msync
261        isync
262        mtspr L1CSR0, r5
263
264        /* Return */
265        blr
266
267twiddle:
268        b       twiddle
Note: See TracBrowser for help on using the repository browser.