source: umon/ports/csb740/ram_reset.S @ 273af8f

Last change on this file since 273af8f was b987a75, checked in by Jarielle Catbagan <jcatbagan93@…>, on 06/19/15 at 21:32:43

Removed execution mode file attribute from all ASCII text files

  • Property mode set to 100644
File size: 6.0 KB
Line 
1    .file "ram_reset.s"
2
3/*
4 * General notice:
5 * This code is part of a boot-monitor package developed as a generic base
6 * platform for embedded system designs.  As such, it is likely to be
7 * distributed to various projects beyond the control of the original
8 * author.  Please notify the author of any enhancements made or bugs found
9 * so that all may benefit from the changes.  In addition, notification back
10 * to the author will allow the new user to pick up changes that may have
11 * been made by other users after this version of the code was distributed.
12 *
13 * Author:  Ed Sutter
14 * email:   esutter@lucent.com
15 * phone:   908-582-2351
16 *
17 *
18 * Modified for the CSB740 - OMAP3530 Single Board
19 *
20 * ram_reset.s:
21  */
22
23#include "warmstart.h"
24#include "omap3530.h"
25#include "config.h"
26
27    /*
28     * Have a separate stack for each processor mode.
29     */
30
31    /* define sizes for each mode's stack */
32    .equ FiqStackSz, 4096
33    .equ IrqStackSz, 4096
34    .equ AbtStackSz, 4096
35    .equ UndStackSz, 4096
36    .equ SysStackSz, 4096
37
38    /* declare the stacks */
39    .extern MonStack
40    .global FiqStack
41    .global IrqStack
42    .global AbtStack
43    .global UndStack
44    .global SysStack       
45   
46    /* allocate the stacks */
47    .comm   FiqStack, FiqStackSz    /* for the FIQ mode */
48    .comm   IrqStack, IrqStackSz    /* for the IRQ mode */
49    .comm   AbtStack, AbtStackSz    /* for the Abort mode */
50    .comm   UndStack, UndStackSz    /* for the Undef mode */
51    .comm   SysStack, SysStackSz    /* for the System mode */
52    /* User mode has the same stack as system mode. */
53
54/*********************************************************************/
55   
56    .extern start
57
58    .global reset
59    .global coldstart
60    .global lukewarmstart
61    .global warmstart
62    .global ipaddr
63    .global etheraddr
64    .global moncomptr
65
66    .text
67       
68    /*
69     * Exception table at address 0
70     */
71reset: 
72    b coldstart
73    b undefined_instruction
74    b software_interrupt
75    b abort_prefetch
76    b abort_data
77    b not_assigned
78    b interrupt_request
79    b fast_interrupt_request
80
81#include "etheraddr.S"
82#include "moncomptr.S"
83
84/*********************************************************************/
85
86    /*
87     * At the end of the reset sequence, MMU, Icache, Dcache,
88     * and write buffer are all disabled.
89     * Also IRQs and FIQs are disabled in the processor's CPSR
90     * The operating mode is SVC (supervisory mode), and the
91     * PC is vectored at 0x00000000. A branch in 0x00000000
92     * brings us directly here.
93         *
94         */
95
96coldstart:
97//      ldr r0, =0x2001                                 /* allow access to all coprocessors */
98//      mcr     p15,0,r0,c15,c1,0
99//      nop
100//      nop
101//      nop
102
103//      ldr     r0, =0x00000078
104//      mcr     p15,0,r0,c1,c0,0                /* Disable MMU, caches, write buffer */
105//      nop
106//      nop
107//      nop
108
109//      ldr     r0, =0x00000000
110//      mcr     p15,0,r0,c8,c7,0                /* flush TLB's */
111//      mcr     p15,0,r0,c7,c7,0                /* flush Caches */
112//      mcr             p15,0,r0,c7,c10,4               /* Flush Write Buffer */
113//      nop
114//      nop
115//      nop
116
117//      mvn    r0, #0                   /* grant manager access to all domains */
118//      mcr    p15,0,r0,c3,c0,0 
119
120/********************************************************************/
121
122midstart:
123    ldr r0, =INITIALIZE
124   
125    /* fall-through to 'lukewarmstart' */
126
127/********************************************************************/
128   
129lukewarmstart: 
130    /* Save the argument to r11 */
131    mov r11, r0
132
133    /*
134     * *** DO NOT TOUCH R11 ***
135     */
136
137    /*
138     * Set-up the stack-pointers for all operating modes
139     */
140
141    /* FIQ mode */
142    mrs r0, cpsr                /* move CPSR to r0 */
143    bic r0, r0, #0x1f           /* clear all mode bits */
144    orr r0, r0, #0x11           /* set FIQ mode bits */
145    msr CPSR_c, r0              /* move back to CPSR */
146    ldr sp, =(FiqStack + FiqStackSz - 4)    /* initialize the stack ptr */
147    /* IRQ mode */
148    mrs r0, cpsr                /* move CPSR to r0 */
149    bic r0, r0, #0x1f           /* clear all mode bits */
150    orr r0, r0, #0x12           /* set IRQ mode bits */
151    msr CPSR_c, r0              /* move back to CPSR */
152    ldr sp, =(IrqStack + IrqStackSz - 4)    /* initialize the stack ptr */
153    /* Abort mode */
154    mrs r0, cpsr                /* move CPSR to r0 */
155    bic r0, r0, #0x1f           /* clear all mode bits */
156    orr r0, r0, #0x17           /* set Abort mode bits */
157    msr CPSR_c, r0              /* move back to CPSR */
158    ldr sp, =(AbtStack + AbtStackSz - 4)    /* initialize the stack ptr */
159    /* Undef mode */
160    mrs r0, cpsr                /* move CPSR to r0 */
161    bic r0, r0, #0x1f           /* clear all mode bits */
162    orr r0, r0, #0x1b           /* set Undef mode bits */
163    msr CPSR_c, r0              /* move back to CPSR */
164    ldr sp, =(UndStack + UndStackSz - 4)    /* initialize the stack ptr */
165    /* System mode */
166    mrs r0, cpsr                /* move CPSR to r0 */
167    bic r0, r0, #0x1f           /* clear all mode bits */
168    orr r0, r0, #0x1f           /* set System mode bits */
169    msr CPSR_c, r0              /* move back to CPSR */
170    ldr sp, =(SysStack + SysStackSz - 4)    /* initialize the stack ptr */
171    /* 'warmstart' will take us back to SVC mode
172       stack for SVC mode will also be setup in warmstart */
173
174    mov r0, r11     /* get argument back from r11 */
175
176    b   warmstart
177
178   
179/********************************************************************/
180
181warmstart:
182    /* Save the argument to r11 */
183    mov r11, r0
184
185    /*
186     * *** DO NOT TOUCH R11 ***
187     */
188
189
190    /* Change (back) to SVC mode */
191    mrs r0, cpsr                /* move CPSR to r0 */
192    bic r0, r0, #0x1f           /* clear all mode bits */
193    orr r0, r0, #0x13           /* set System mode bits */
194    msr CPSR_c, r0              /* move back to CPSR */
195    /* Reset the stack pointer for the SVC mode (our current mode) */
196    ldr sp, =(MonStack + MONSTACKSIZE - 4)
197
198    /*
199     * Restore argument which was saved to r11 and jump to
200     * the C function start().
201     */
202   
203    mov r0, r11
204jump_to_c:
205    bl start
206
207    /* the C code should never return */
208    b reset
209
210.align 4
211
Note: See TracBrowser for help on using the repository browser.