source: rtems/c/src/lib/libbsp/powerpc/shared/start/start.S @ 7d5077c

4.104.114.84.95
Last change on this file since 7d5077c was 7d5077c, checked in by Joel Sherrill <joel.sherrill@…>, on 07/24/00 at 19:18:42

Patch from Eric Valette <valette@…> with debugging
by Till Straumann <strauman@…>. With this
patch, the motorola_shared BSP should also support the MVME2303.

  • Property mode set to 100644
File size: 3.9 KB
Line 
1/*
2 *  start.S :     RTEMS entry point
3 *
4 *  Copyright (C) 1999 Eric Valette. valette@crf.canon.fr
5 *
6 *  The license and distribution terms for this file may be
7 *  found in found in the file LICENSE in this distribution or at
8 *  http://www.OARcorp.com/rtems/license.html.
9 *
10 *  $Id$
11 *
12 */
13
14#include <libcpu/cpu.h>
15#include <libcpu/io.h>
16#include <rtems/score/cpuopts.h>  /* for PPC_HAS_FPU */
17#include <rtems/score/cpu.h>
18#include "asm.h"
19
20#define SYNC \
21        sync; \
22        isync
23
24#define KERNELBASE      0x0
25
26#define MONITOR_ENTER                   \
27        mfmsr   r10             ;       \
28        ori     r10,r10,MSR_IP  ;       \
29        mtmsr   r10             ;       \
30        li      r10,0x63        ;       \
31        sc
32                       
33        .text
34        .globl  __rtems_entry_point
35        .type   __rtems_entry_point,@function
36__rtems_entry_point:
37#ifdef DEBUG_EARLY_START
38        MONITOR_ENTER
39#endif 
40               
41/*
42 * PREP
43 * This is jumped to on prep systems right after the kernel is relocated
44 * to its proper place in memory by the boot loader.  The expected layout
45 * of the regs is:     
46 *   r3: ptr to residual data
47 *   r4: initrd_start or if no initrd then 0
48 *   r5: initrd_end - unused if r4 is 0
49 *   r6: Start of command line string
50 *   r7: End of command line string
51 *
52 *   The Prep boot loader insure that the MMU is currently off...
53 *
54 */
55       
56        mr      r31,r3                  /* save parameters */
57        mr      r30,r4
58        mr      r29,r5
59        mr      r28,r6
60        mr      r27,r7
61        /*
62         * Make sure we have nothing in BATS and TLB
63         */
64        bl      clear_bats
65        bl      flush_tlbs
66/*
67 * Use the first pair of BAT registers to map the 1st 64MB
68 * of RAM to KERNELBASE.
69 */
70        lis     r11,KERNELBASE@h
71        ori     r11,r11,0x7fe           /* set up BAT registers for 604 */
72        li      r8,2                    /* R/W access */
73        isync
74        mtspr   DBAT0L,r8               /* N.B. 6xx (not 601) have valid */
75        mtspr   DBAT0U,r11              /* bit in upper BAT register */
76        mtspr   IBAT0L,r8
77        mtspr   IBAT0U,r11
78        isync
79
80/*
81 * we now have the 1st 64M of ram mapped with the bats. We are still
82 * running on the bootloader stack and cannot switch to an RTEMS allocated
83 * init stack before copying the residual data that may have been set just after
84 * rtems_end address. This bug has been experienced on MVME2304. Thank to
85 * Till Straumann <strauman@SLAC.Stanford.EDU> for hunting it and suggesting
86 * the appropriate code.
87 */
88       
89enter_C_code:
90        bl      MMUon
91        bl      zero_bss
92        /*
93         * restore prep boot params
94         */
95        mr      r3,r31
96        mr      r4,r30
97        mr      r5,r29
98        mr      r6,r28
99        mr      r7,r27
100        bl      save_boot_params
101        /*
102         * stack = &__rtems_end + 4096
103         */
104        addis   r9,r0, __rtems_end+(4096-CPU_MINIMUM_STACK_FRAME_SIZE)@ha
105        addi    r9,r9, __rtems_end+(4096-CPU_MINIMUM_STACK_FRAME_SIZE)@l
106        mr      r1, r9
107        /*
108         * We are know in a environment that is totally independent from bootloader setup.
109         */
110        bl      boot_card
111        bl      _return_to_ppcbug
112       
113        .globl  MMUon
114        .type   MMUon,@function
115MMUon: 
116        mfmsr   r0
117#if (PPC_HAS_FPU == 0)
118        ori     r0,r0, MSR_IP | MSR_RI | MSR_IR | MSR_DR | MSR_EE | MSR_FE0 | MSR_FE1 | MSR_FP
119        xori    r0, r0, MSR_EE | MSR_IP | MSR_FP
120#else
121        ori     r0,r0, MSR_IP | MSR_RI | MSR_IR | MSR_DR | MSR_EE | MSR_FE0 | MSR_FE1 | MSR_FP
122        xori    r0, r0, MSR_EE | MSR_IP | MSR_FE0 | MSR_FE1
123#endif
124        mflr    r11
125        mtsrr0  r11
126        mtsrr1  r0
127        SYNC
128        rfi
129       
130        .globl  MMUoff
131        .type   MMUoff,@function
132MMUoff:
133        mfmsr   r0
134        ori     r0,r0,MSR_IR| MSR_DR | MSR_IP
135        mflr    r11
136        xori    r0,r0,MSR_IR|MSR_DR
137        mtsrr0  r11
138        mtsrr1  r0
139        SYNC
140        rfi
141
142        .globl  _return_to_ppcbug
143        .type   _return_to_ppcbug,@function
144
145       
146_return_to_ppcbug:
147        mflr    r30
148        bl      MMUoff
149        MONITOR_ENTER
150        bl      MMUon
151        mtctr   r30
152        bctr   
153
154/*
155 * An undocumented "feature" of 604e requires that the v bit
156 * be cleared before changing BAT values.
157 *
158 * Also, newer IBM firmware does not clear bat3 and 4 so
159 * this makes sure it's done.
160 *  -- Cort
161 */
162clear_bats:
163        li      r20,0
164        mfspr   r9,PVR
165        rlwinm  r9,r9,16,16,31          /* r9 = 1 for 601, 4 for 604 */
166        cmpwi   r9, 1
167        SYNC
168        beq     1f
169        mtspr   DBAT0U,r20
170        mtspr   DBAT0L,r20     
171        mtspr   DBAT1U,r20
172        mtspr   DBAT1L,r20
173        mtspr   DBAT2U,r20
174        mtspr   DBAT2L,r20     
175        mtspr   DBAT3U,r20
176        mtspr   DBAT3L,r20
1771:     
178        mtspr   IBAT0U,r20
179        mtspr   IBAT0L,r20
180        mtspr   IBAT1U,r20
181        mtspr   IBAT1L,r20
182        mtspr   IBAT2U,r20
183        mtspr   IBAT2L,r20
184        mtspr   IBAT3U,r20
185        mtspr   IBAT3L,r20
186        SYNC   
187        blr
188
189flush_tlbs:
190        lis     r20, 0x1000
1911:      addic.  r20, r20, -0x1000
192        tlbie   r20
193        blt     1b
194        sync
195        blr
196       
Note: See TracBrowser for help on using the repository browser.