Changeset 7de58239 in rtems
- Timestamp:
- 02/01/02 16:45:18 (22 years ago)
- Branches:
- 4.10, 4.11, 4.8, 4.9, 5, master
- Children:
- 8e3caa5
- Parents:
- 2835b3a5
- Location:
- c/src/lib/libbsp/mips/genmongoosev
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/lib/libbsp/mips/genmongoosev/ChangeLog
r2835b3a5 r7de58239 1 2001-02-01 Greg Menke <gregory.menke@gsfc.nasa.gov> 2 3 * Update of BSP to address problems restarting, provide more 4 information during boot, and better handle ROM vs RAM images. 5 * README, include/bsp.h, start/regs.S, start/start.S, 6 startup/bspstart.c, startup/linkcmds, timer/timer.c: Updated 7 1 8 2002-02-07 Ralf Corsepius <corsepiu@faw.uni-ulm.de> 2 9 -
c/src/lib/libbsp/mips/genmongoosev/README
r2835b3a5 r7de58239 39 39 =========== 40 40 41 At startup, PMON looks for a <space> to be pressed. If it is pressed, 42 then a PMON prompt is displayed. Otherwise, PMON automatically jumps 43 to the code at 0xBFC4_0000. This code may be a boot manager or 44 simply a collection of noop's that fall into the code at 45 0xBFC5_0000. If the code at 0xBFC4_0000 is a boot manager, then it 46 can determine which program image to load. This layout allows for the 47 possible compression of program images. Given that there is much 48 more RAM than EEPROM, compression could be desirable for certain 49 applications. 41 On the breadboard, a locally hacked PMON waits for a space to be pressed 42 while the board is reset/powered up. If found, the PMON console is 43 entered, else PMON jumps to the EEPROM address above, presuming a user 44 program is located there. 45 46 The default output of an RTEMS link is an image linked to run from 47 80020000, but has had its LMA shifted up to BFC40000. It is suitable 48 for copying to S3 records or can be burned to ROMs in whatever manner 49 the user desires. 50 51 Operation 52 ========= 53 54 A small relocator is supplied in the bsp startup code which copies the 55 image down to RAM for execution before doing any other initialization. 56 This locator code is location independent, and will do nothing if the 57 image is already located at its run location. The LMA and VMA are both 58 controlled via the bsp's link script. The above behavior is produced by 59 using the default script. If this is not desirable, something like the 60 following may be added to the user's RTEMS link statement to override 61 the default linkcmds with a user-supplied version; 62 63 -qnolinkcmds -Wl,-T -Wl,mips-rtems-linkcmds-eprom 64 65 this causes the file ./mips-rtems-linkcmds-eprom to override the default 66 linkcmds. 67 68 Before relocating the RTEMS image, the bsp startup routine attempts to 69 configure the processor into a rational state. During this process, 70 status characters are emitted at 19200N81 baud on UART port 0. 71 50 72 51 73 Questions 52 74 ========= 53 75 54 + XXX 55 76 Why can I send characters slowly to a Mongoose V, but get framing errors 77 when sending them fast? 78 79 - The MongooseV chip seems to <require> that all incoming data have 2 80 stop bits. When typing on a serial terminal, this is not an issue 81 because the idle state of an RS232 line looks just like a stop bit- 82 but when streaming in data, such pacing is required. The manual does 83 not indicate anything along these lines, instead, we suspect a 84 somewhat faulty UART design. 85 86 56 87 Status 57 88 ====== 58 89 59 + untested60 61 + no mkeeprom script62 63 + start code must copy from EEPROM to RAM and then run.64 65 + XXX -
c/src/lib/libbsp/mips/genmongoosev/include/bsp.h
r2835b3a5 r7de58239 130 130 void bsp_cleanup( void ); 131 131 132 rtems_isr_entry set_vector( 133 rtems_isr_entry, rtems_vector_number, int ); 134 132 rtems_isr_entry set_vector( rtems_isr_entry, rtems_vector_number, int ); 133 135 134 #ifdef __cplusplus 136 135 } … … 138 137 139 138 #endif 139 140 140 /* end of include file */ -
c/src/lib/libbsp/mips/genmongoosev/start/regs.S
r2835b3a5 r7de58239 17 17 18 18 /* Standard MIPS register names: */ 19 #define zero 20 #define z0 21 #define v0 22 #define v1 23 #define a0 24 #define a1 25 #define a2 26 #define a3 27 #define t0 28 #define t1 29 #define t2 30 #define t3 31 #define t4 32 #define t5 33 #define t6 34 #define t7 35 #define s0 36 #define s1 37 #define s2 38 #define s3 39 #define s4 40 #define s5 41 #define s6 42 #define s7 43 #define t8 44 #define t9 45 #define k0 $26/* kernel private register 0 */46 #define k1 $27/* kernel private register 1 */47 #define gp $28/* global data pointer */48 #define sp $29/* stack-pointer */49 #define fp $30/* frame-pointer */50 #define ra $31/* return address */51 #define pc $pc/* pc, used on mips16 */19 #define zero $0 20 #define z0 $0 21 #define v0 $2 22 #define v1 $3 23 #define a0 $4 24 #define a1 $5 25 #define a2 $6 26 #define a3 $7 27 #define t0 $8 28 #define t1 $9 29 #define t2 $10 30 #define t3 $11 31 #define t4 $12 32 #define t5 $13 33 #define t6 $14 34 #define t7 $15 35 #define s0 $16 36 #define s1 $17 37 #define s2 $18 38 #define s3 $19 39 #define s4 $20 40 #define s5 $21 41 #define s6 $22 42 #define s7 $23 43 #define t8 $24 44 #define t9 $25 45 #define k0 $26 /* kernel private register 0 */ 46 #define k1 $27 /* kernel private register 1 */ 47 #define gp $28 /* global data pointer */ 48 #define sp $29 /* stack-pointer */ 49 #define fp $30 /* frame-pointer */ 50 #define ra $31 /* return address */ 51 #define pc $pc /* pc, used on mips16 */ 52 52 53 #define fp0 54 #define fp1 53 #define fp0 $f0 54 #define fp1 $f1 55 55 56 #define WATCHDOG 56 #define WATCHDOG 0xBE000000 57 57 58 58 /* Useful memory constants: */ 59 #define K0BASE 59 #define K0BASE 0x80000000 60 60 #ifndef __mips64 61 #define K1BASE0xA000000061 #define K1BASE 0xA0000000 62 62 #else 63 #define K1BASE 63 #define K1BASE 0xFFFFFFFFA0000000LL 64 64 #endif 65 65 66 66 #define PHYS_TO_K1(a) ((unsigned)(a) | K1BASE) 67 67 68 /* Standard Co-Processor 0 register numbers: 69 #define C0_COUNT $9 /* Count Register */ 70 #define C0_SR $12 /* Status Register */ 71 #define C0_CAUSE $13 /* last exception description */ 72 #define C0_EPC $14 /* Exception error address */ 73 #define C0_CONFIG $16 /* CPU configuration */ 68 /* Standard Co-Processor 0 register numbers: */ 69 #define C0_DCIC $7 /* debug & cache invalidate control */ 70 #define C0_COUNT $9 /* Count Register */ 71 #define C0_SR $12 /* Status Register */ 72 #define C0_CAUSE $13 /* last exception description */ 73 #define C0_EPC $14 /* Exception error address */ 74 #define C0_CONFIG $16 /* CPU configuration */ 74 75 75 76 /* Standard Status Register bitmasks: */ 76 #define SR_CU1 0x20000000 /* Mark CP1 as usable */ 77 #define SR_FR 0x04000000 /* Enable MIPS III FP registers */ 78 #define SR_BEV 0x00400000 /* Controls location of exception vectors */ 79 #define SR_PE 0x00100000 /* Mark soft reset (clear parity error) */ 77 #define SR_CU0 0x10000000 78 #define SR_CU1 0x20000000 /* Mark CP1 as usable */ 79 #define SR_FR 0x04000000 /* Enable MIPS III FP registers */ 80 #define SR_BEV 0x00400000 /* Controls location of exception vectors */ 81 #define SR_PE 0x00100000 /* Mark soft reset (clear parity error) */ 80 82 81 #define SR_KX 0x00000080 /* Kernel extended addressing enabled */ 82 #define SR_SX 0x00000040 /* Supervisor extended addressing enabled */ 83 #define SR_UX 0x00000020 /* User extended addressing enabled */ 83 /* defined differently for Mongoose5- we don't use these anymore */ 84 //#define SR_KX 0x00000080 /* Kernel extended addressing enabled */ 85 //#define SR_SX 0x00000040 /* Supervisor extended addressing enabled */ 86 //#define SR_UX 0x00000020 /* User extended addressing enabled */ 87 88 /* R3000 */ 89 #define SR_ISC 0x00010000 /* Isolate data cache */ 84 90 85 91 /* Standard (R4000) cache operations. Taken from "MIPS R4000 86 92 Microprocessor User's Manual" 2nd edition: */ 87 93 88 #define CACHE_I (0)/* primary instruction */89 #define CACHE_D (1)/* primary data */90 #define CACHE_SI (2)/* secondary instruction */91 #define CACHE_SD (3)/* secondary data (or combined instruction/data) */94 #define CACHE_I (0) /* primary instruction */ 95 #define CACHE_D (1) /* primary data */ 96 #define CACHE_SI (2) /* secondary instruction */ 97 #define CACHE_SD (3) /* secondary data (or combined instruction/data) */ 92 98 93 #define INDEX_INVALIDATE (0)/* also encodes WRITEBACK if CACHE_D or CACHE_SD */94 #define INDEX_LOAD_TAG 95 #define INDEX_STORE_TAG 96 #define CREATE_DIRTY_EXCLUSIVE (3)/* CACHE_D and CACHE_SD only */97 #define HIT_INVALIDATE 98 #define CACHE_FILL (5)/* CACHE_I only */99 #define HIT_WRITEBACK_INVALIDATE (5)/* CACHE_D and CACHE_SD only */100 #define HIT_WRITEBACK (6)/* CACHE_I, CACHE_D and CACHE_SD only */101 #define HIT_SET_VIRTUAL (7)/* CACHE_SI and CACHE_SD only */99 #define INDEX_INVALIDATE (0) /* also encodes WRITEBACK if CACHE_D or CACHE_SD */ 100 #define INDEX_LOAD_TAG (1) 101 #define INDEX_STORE_TAG (2) 102 #define CREATE_DIRTY_EXCLUSIVE (3) /* CACHE_D and CACHE_SD only */ 103 #define HIT_INVALIDATE (4) 104 #define CACHE_FILL (5) /* CACHE_I only */ 105 #define HIT_WRITEBACK_INVALIDATE (5) /* CACHE_D and CACHE_SD only */ 106 #define HIT_WRITEBACK (6) /* CACHE_I, CACHE_D and CACHE_SD only */ 107 #define HIT_SET_VIRTUAL (7) /* CACHE_SI and CACHE_SD only */ 102 108 103 #define BUILD_CACHE_OP(o,c) 109 #define BUILD_CACHE_OP(o,c) (((o) << 2) | (c)) 104 110 105 111 /* Individual cache operations: */ 106 #define INDEX_INVALIDATE_I 107 #define INDEX_WRITEBACK_INVALIDATE_D 112 #define INDEX_INVALIDATE_I BUILD_CACHE_OP(INDEX_INVALIDATE,CACHE_I) 113 #define INDEX_WRITEBACK_INVALIDATE_D BUILD_CACHE_OP(INDEX_INVALIDATE,CACHE_D) 108 114 #define INDEX_INVALIDATE_SI BUILD_CACHE_OP(INDEX_INVALIDATE,CACHE_SI) 109 #define INDEX_WRITEBACK_INVALIDATE_SD 115 #define INDEX_WRITEBACK_INVALIDATE_SD BUILD_CACHE_OP(INDEX_INVALIDATE,CACHE_SD) 110 116 111 #define INDEX_LOAD_TAG_I 117 #define INDEX_LOAD_TAG_I BUILD_CACHE_OP(INDEX_LOAD_TAG,CACHE_I) 112 118 #define INDEX_LOAD_TAG_D BUILD_CACHE_OP(INDEX_LOAD_TAG,CACHE_D) 113 119 #define INDEX_LOAD_TAG_SI BUILD_CACHE_OP(INDEX_LOAD_TAG,CACHE_SI) 114 120 #define INDEX_LOAD_TAG_SD BUILD_CACHE_OP(INDEX_LOAD_TAG,CACHE_SD) 115 121 116 #define INDEX_STORE_TAG_I 122 #define INDEX_STORE_TAG_I BUILD_CACHE_OP(INDEX_STORE_TAG,CACHE_I) 117 123 #define INDEX_STORE_TAG_D BUILD_CACHE_OP(INDEX_STORE_TAG,CACHE_D) 118 124 #define INDEX_STORE_TAG_SI BUILD_CACHE_OP(INDEX_STORE_TAG,CACHE_SI) … … 135 141 #define HIT_WRITEBACK_SD BUILD_CACHE_OP(HIT_WRITEBACK,CACHE_SD) 136 142 137 #define HIT_SET_VIRTUAL_SI 143 #define HIT_SET_VIRTUAL_SI BUILD_CACHE_OP(HIT_SET_VIRTUAL,CACHE_SI) 138 144 #define HIT_SET_VIRTUAL_SD BUILD_CACHE_OP(HIT_SET_VIRTUAL,CACHE_SD) 139 145 -
c/src/lib/libbsp/mips/genmongoosev/start/start.S
r2835b3a5 r7de58239 1 1 /* 2 * start.S -- startup file for JMR3904 BSP based upon crt0.S from 3 * newlib-1.8.2/libgloss/mips and adapted for RTEMS. 4 * 5 * crt0.S -- startup file for MIPS. 6 * 7 * Copyright (c) 1995, 1996, 1997 Cygnus Support 8 * 9 * The authors hereby grant permission to use, copy, modify, distribute, 10 * and license this software and its documentation for any purpose, provided 11 * that existing copyright notices are retained in all copies and that this 12 * notice is included verbatim in any distributions. No written agreement, 13 * license, or royalty fee is required for any of the authorized uses. 14 * Modifications to this software may be copyrighted by their authors 15 * and need not follow the licensing terms described here, provided that 16 * the new terms are clearly indicated on the first page of each file where 17 * they apply. 18 */ 19 20 21 22 #define PMON_UTIL_ROUTINES 0xbfc00200 23 #define UTIL_WARMSTART_VECTOR 21*4 24 #define UTIL_CPUINIT_VECTOR 22*4 25 #define UTIL_CONFIGUART_VECTOR 23*4 26 #define UTIL_PUTCHROM_VECTOR 24*4 27 28 2 ** start.S -- startup file for Mongoose V BSP based upon crt0.S from 3 ** newlib-1.8.2/libgloss/mips and adapted for RTEMS. 4 ** 5 ** crt0.S -- startup file for MIPS. 6 ** 7 ** Copyright (c) 1995, 1996, 1997 Cygnus Support 8 ** 9 ** The authors hereby grant permission to use, copy, modify, distribute, 10 ** and license this software and its documentation for any purpose, provided 11 ** that existing copyright notices are retained in all copies and that this 12 ** notice is included verbatim in any distributions. No written agreement, 13 ** license, or royalty fee is required for any of the authorized uses. 14 ** Modifications to this software may be copyrighted by their authors 15 ** and need not follow the licensing terms described here, provided that 16 ** the new terms are clearly indicated on the first page of each file where 17 ** they apply. 18 ** 19 ** 20 ** Modification History: 21 ** 01/XX/01 Joel Sherrill, OAR Corp, 22 ** Modified for Mongoose V BSP for NASA/GSFC Code 582. 23 ** 24 ** 06/XX/01 Greg Menke, Raytheon, Code 582 25 ** Debug modifications. Removed R4000 dependencies. 26 ** Added HACKED_PMON defines to facilitate startup. 27 ** Added DEFAULT_EXIT_RETURN_TO_MONITOR option. 28 ** 29 ** 11/14/01 A.Ferrer, NASA/GSFC, Code 582 30 ** Cleanup for ST5 mission. 31 ** 32 ** 11/27/01 A.Ferrer, NASA/GSFC, Code 582 33 ** Added cache flush routines. 34 */ 35 36 #define LANGUAGE_ASSEMBLY 37 38 29 39 #include <asm.h> 30 40 #include "regs.S" 31 41 #include "mg5.h" 42 43 44 32 45 #ifdef __mips16 33 /* This file contains 32 bit assembly code. */34 46 /* This file contains 32 bit assembly code. */ 47 .set nomips16 35 48 #endif 36 49 37 /* This is for referencing addresses that are not in the .sdata or 38 .sbss section under embedded-pic, or before we've set up gp. */ 39 #ifdef __mips_embedded_pic 40 # ifdef __mips64 41 # define LA(t,x) la t,x-PICBASE ; daddu t,s0,t 42 # else 43 # define LA(t,x) la t,x-PICBASE ; addu t,s0,t 44 # endif 45 #else /* __mips_embedded_pic */ 46 # define LA(t,x) la t,x 47 #endif /* __mips_embedded_pic */ 48 49 50 /* defined by linkcmds, pointing to the start of the relocation target 51 memory, referenced in this way so we can avoid defining it 52 multiply */ 53 54 55 56 .text 57 .align 2 58 59 /* Without the following nop, GDB thinks _start is a data variable. 60 * This is probably a bug in GDB in handling a symbol that is at the 61 * start of the .text section. 62 */ 63 nop 64 65 .globl _start 66 .ent _start 50 51 #ifdef HACKED_PMON 52 #define PMON_UTIL_ROUTINES 0xbfc00200 53 #define UTIL_WARMSTART_VECTOR 21*4 54 #define UTIL_CPUINIT_VECTOR 22*4 55 #define UTIL_CONFIGUART_VECTOR 23*4 56 #define UTIL_PUTCHROM_VECTOR 24*4 57 #endif 58 59 60 /* 61 ** defined by linkcmds, pointing to the start of the relocation target 62 ** memory, referenced in this way so we can avoid defining it 63 ** multiply 64 */ 65 .bss 66 .word 0 67 .text 68 .align 2 69 70 71 /********************************************************************** 72 ** 73 ** Function: _start 74 */ 75 76 /* Without the following nop, GDB thinks _start is a data variable. 77 ** This is probably a bug in GDB in handling a symbol that is at the 78 ** start of the .text section. 79 */ 80 nop 81 .globl _start 82 .ent _start 83 84 .globl putch_rom 67 85 _start: 68 .set noreorder 69 # Get the address of start into $5 in a position independent fashion. 70 # This lets us know whether we have been relocated or not. 71 72 $LF1 = . + 8 73 bal $LF1 74 nop 75 86 .set noreorder 87 move k1,ra /* save ra so we can optionally return to caller */ 88 $LF1 = . + 8 89 90 /* 91 ** Get the address of start into $5 in a position independent fashion. 92 ** This lets us know whether we have been relocated or not. 93 */ 94 95 bal $LF1 96 nop 76 97 _branch: 77 move a1, ra /* save return address from the jump above */ 78 79 /* call down into PMON's CpuInit, so we avoid having to 80 duplicate all that code plus remember to update both copies 81 when something changes... Note, a1 must be preserved by 82 CpuInit */ 83 84 li t7,PMON_UTIL_ROUTINES /* get base address of pmon's vector table */ 85 lw t0,UTIL_CPUINIT_VECTOR(t7) 86 nop 87 jal t0 /* init cpu */ 88 nop 89 90 lw t0,UTIL_CONFIGUART_VECTOR(t7) 91 nop 92 jal t0 /* reconfigure UART for console output */ 93 nop 94 95 lw t0,UTIL_PUTCHROM_VECTOR(t7) 96 li a0,'b' /* show we booted */ 97 jal t0 98 99 100 101 /* 102 get the address of the _branch label above as it would appear in 103 the relocated code 104 */ 105 la a2, _branch /* relocation destination */ 106 107 beq a1, a2, _start_in_ram /* skip relocating if we're already there */ 108 nop 109 110 /* relocate the code from EEPROM to RAM */ 111 112 lw t0,UTIL_PUTCHROM_VECTOR(t7) 113 li a0,'r' /* show we're starting relocation */ 114 jal t0 115 116 la a3, _edata 98 move a1, ra /* save return address from the jump above */ 99 100 /* ensure we're sane before doing anything */ 101 102 li t0, SR_CU0|SR_PE 103 mtc0 t0, C0_SR 104 nop 105 li t0, 0 106 mtc0 t0, C0_DCIC 107 nop 108 mtc0 t0, C0_CAUSE 109 nop 110 111 112 /* 113 ** Call cpuinit. Masking used to call EEPROM address of _cpuinit. Label is RAM label. 114 */ 115 move t2,a1 116 and t2,0xffff0000 117 la t0,_cpuinit 118 and t0,0x0000ffff 119 or t0,t2 120 jal t0 121 nop 122 123 /* 124 ** Configure UART 125 */ 126 move t2,a1 127 and t2,0xffff0000 128 la t0,config_uart 129 and t0,0x0000ffff 130 or t0,t2 131 jal t0 132 nop 133 134 /* 135 ** Call IcacheFlush. Masking used to call EEPROM address of IcacheFlush. Label is RAM label. 136 */ 137 move t2,a1 138 and t2,0xffff0000 139 la t0,IcacheFlush 140 and t0,0x0000ffff 141 or t0,t2 142 jal t0 143 nop 144 145 146 /* 147 ** Print 'I'. Show that we flushed I cache. 148 */ 149 move t2,a1 150 and t2,0xffff0000 151 li a0,'I' 152 la t0,putch_rom 153 and t0,0x0000ffff 154 or t0,t2 155 jal t0 156 nop 157 158 159 /* 160 ** Call DcacheFlush. Masking used to call EEPROM address of DcacheFlush. Label is RAM label. 161 */ 162 move t2,a1 163 and t2,0xffff0000 164 la t0,DcacheFlush 165 and t0,0x0000ffff 166 or t0,t2 167 jal t0 168 nop 169 170 171 /* 172 ** Print 'D'. Show that we flushed D cache. 173 */ 174 move t2,a1 175 and t2,0xffff0000 176 li a0,'D' 177 la t0,putch_rom 178 and t0,0x0000ffff 179 or t0,t2 180 jal t0 181 nop 182 183 184 /* 185 ** Print ' RTEMS b'. Show that we are booting. 186 */ 187 move t2,a1 188 and t2,0xffff0000 189 li a0,' ' 190 la t0,putch_rom 191 and t0,0x0000ffff 192 or t0,t2 193 jal t0 194 nop 195 196 move t2,a1 197 and t2,0xffff0000 198 li a0,'R' 199 la t0,putch_rom 200 and t0,0x0000ffff 201 or t0,t2 202 jal t0 203 nop 204 205 move t2,a1 206 and t2,0xffff0000 207 li a0,'T' 208 la t0,putch_rom 209 and t0,0x0000ffff 210 or t0,t2 211 jal t0 212 nop 213 214 move t2,a1 215 and t2,0xffff0000 216 li a0,'E' 217 la t0,putch_rom 218 and t0,0x0000ffff 219 or t0,t2 220 jal t0 221 nop 222 223 move t2,a1 224 and t2,0xffff0000 225 li a0,'M' 226 la t0,putch_rom 227 and t0,0x0000ffff 228 or t0,t2 229 jal t0 230 nop 231 232 move t2,a1 233 and t2,0xffff0000 234 li a0,'S' 235 la t0,putch_rom 236 and t0,0x0000ffff 237 or t0,t2 238 jal t0 239 nop 240 241 move t2,a1 242 and t2,0xffff0000 243 li a0,' ' 244 la t0,putch_rom 245 and t0,0x0000ffff 246 or t0,t2 247 jal t0 248 nop 249 250 move t2,a1 251 and t2,0xffff0000 252 li a0,'b' 253 la t0,putch_rom 254 and t0,0x0000ffff 255 or t0,t2 256 jal t0 257 nop 258 259 260 /* 261 ** get the address of the _branch label above as it would appear in 262 ** the relocated code 263 */ 264 265 la a2, _branch /* relocation destination */ 266 beq a1, a2, _start_in_ram /* skip relocating if we're already there */ 267 nop 268 269 /* relocate the code from EEPROM to RAM */ 270 271 /* 272 ** Print 'r' 273 */ 274 move t2,a1 275 and t2,0xffff0000 276 li a0,'r' 277 la t0,putch_rom 278 and t0,0x0000ffff 279 or t0,t2 280 jal t0 281 nop 282 283 la a3, _edata 117 284 relocate: 118 lw t0, (a1) /* load from EEPROM */ 119 addu a1, 4 120 sw t0, (a2) /* store to RAM */ 121 addu a2, 4 122 bne a2, a3, relocate /* copied all the way to edata? */ 123 nop 124 125 lw t0,UTIL_PUTCHROM_VECTOR(t7) 126 li a0,'R' /* show we relocated */ 127 jal t0 128 nop 129 130 la a2, _start_in_ram 131 jr a2 132 nop 133 .end _start 134 135 136 137 138 139 140 .globl _start_in_ram 141 .ent _start_in_ram 285 lw t0, (a1) /* load from EEPROM */ 286 addu a1, 4 287 sw t0, (a2) /* store to RAM */ 288 addu a2, 4 289 bne a2, a3, relocate /* copied all the way to edata? */ 290 nop 291 292 /* 293 ** Print 'R' 294 */ 295 li a0,'R' 296 la t0,putch_rom 297 and t0,0x0000ffff 298 or t0,t2 299 jal t0 300 nop 301 302 la a2, _start_in_ram 303 jr a2 304 nop 305 .end _start 306 307 308 /********************************************************************** 309 ** 310 ** Function: _start_in_ram 311 */ 312 313 .globl _start_in_ram 314 .ent _start_in_ram 142 315 _start_in_ram: 143 lw t0,UTIL_PUTCHROM_VECTOR(t7) 144 li a0,'S' /* show we're starting in the target address range */ 145 jal t0 146 nop 147 148 #ifdef __mips_embedded_pic 149 PICBASE = .+8 150 bal PICBASE 151 nop 152 move s0,$31 153 #endif 154 155 li v0, SR_CU1|SR_PE|SR_FR|SR_KX|SR_SX|SR_UX 156 mtc0 v0, C0_SR 157 mtc0 zero, C0_CAUSE 158 159 /* Check for FPU presence */ 160 #ifndef __mips_soft_float 161 /* This doesn't work if there is no FPU. We get illegal instruction 162 exceptions. */ 163 li t2,0xAAAA5555 164 mtc1 t2,fp0 /* write to FPR 0 */ 165 mtc1 zero,fp1 /* write to FPR 1 */ 166 mfc1 t0,fp0 167 mfc1 t1,fp1 168 nop 169 bne t0,t2,1f /* check for match */ 170 nop 171 bne t1,zero,1f /* double check */ 172 nop 173 #ifndef __mips64 /* Clear the FR bit */ 174 li v0, SR_CU1|SR_PE|SR_KX|SR_SX|SR_UX 175 mtc0 v0, C0_SR 176 #endif 177 j 2f 178 nop 179 #endif 316 317 /* 318 ** Print 'S'. Already in RAM no need to reference EEPROM address. 319 */ 320 li a0,'S' 321 jal putch_rom 322 nop 323 324 la gp, _gp /* set the global data pointer */ 325 .end _start_in_ram 326 327 328 /********************************************************************** 329 ** 330 ** Function: zerobss 331 */ 332 .globl __memsize 333 .globl zerobss 334 .ent zerobss 335 zerobss: 336 337 /* 338 ** Print 'z'. Starting to zero out bss. 339 */ 340 li a0,'z' 341 jal putch_rom 342 nop 343 344 la v0, _fbss 345 la v1, _end 346 3: 347 sw zero,0(v0) 348 bltu v0,v1,3b 349 addiu v0,v0,4 /* executed in delay slot */ 350 351 la t0, _stack_init /* initialize stack so we */ 352 353 /* 354 ** We must subtract 24 bytes for the 3 8 byte arguments to main, in 355 ** case main wants to write them back to the stack. The caller is 356 ** supposed to allocate stack space for parameters in registers in 357 ** the old MIPS ABIs. We must do this even though we aren't passing 358 ** arguments, because main might be declared to have them. 359 ** 360 ** Some ports need a larger alignment for the stack, so we subtract 361 ** 32, which satisifes the stack for the arguments and keeps the 362 ** stack pointer better aligned. 363 */ 364 subu t0,t0,32 365 move sp,t0 /* set stack pointer */ 366 nop 367 368 /* 369 ** Print 'Z'. Finished zeroing bss. 370 */ 371 li a0,'Z' 372 jal putch_rom 373 nop 374 375 .end zerobss 376 377 378 /********************************************************************** 379 ** 380 ** Function: _init 381 */ 382 .globl exit .text 383 .globl _init 384 .ent _init 385 _init: 386 387 /* 388 ** Print 'i'. Starting to initialize RTEMS. 389 */ 390 li a0, 'i' 391 jal putch_rom 392 nop 393 394 move a0,zero /* set argc to 0 */ 395 jal boot_card /* call the program start function */ 396 nop 397 398 /* 399 ** fall through to the "exit" routine 400 */ 401 jal _sys_exit 402 nop 403 .end _init 404 405 406 /********************************************************************** 407 ** 408 ** Function: _sys_exit 409 ** 410 ** Exit from the application by jumping to PMON address in EEPROM. 411 */ 412 .globl _sys_exit 413 .ent _sys_exit 414 _sys_exit: 415 la t0, PMON_ADDRESS 416 jal t0 417 .end _sys_exit 418 419 420 421 /********************************************************************** 422 ** 423 ** function: putch 424 ** input : ASCII character in A0 425 ** registers used: ra, a0, t0, t1 426 ** 427 */ 428 .globl putch_rom 429 .ent putch_rom 430 putch_rom: 431 432 /* 433 ** Delay for UART 434 */ 435 li t0, 1000 436 move t1, zero 437 2: 438 beq t0, t1, 3f 439 addu t1, 1 440 b 2b 441 nop 442 443 3: 444 /* 445 ** Print a character out from a0 446 */ 447 448 li t0, MG5_INT_STATUS_REG /* load uart register base address */ 449 lw t1, 0(t0) /* Read status */ 450 nop 451 and t1, t1, UART_0_TX_READY_BIT /* see if the transmitter is ready */ 452 beq t1 , zero , 1f /* skip uart output if not ready */ 453 nop 454 la t0, MG5_UART_0_TX_REG 455 sw a0, 0(t0) 456 nop 457 458 1: /* 459 ** if jumped to here, UART was not ready...forget it 460 */ 461 j ra 462 .end putch_rom 463 464 465 /********************************************************************** 466 ** 467 ** function: config_uart 468 ** registers used: ra, t0, t1 469 ** 470 */ 471 472 .globl config_uart 473 .ent config_uart 474 config_uart: 475 476 /* 477 ** Configure UART 0 478 */ 479 480 /* First, reset the uart */ 481 la t0, MG5_COMMAND_REG 482 li t1, UART_RESET_BIT 483 sw t1, 0(t0) 484 485 /* Next, set the baud rate register for 19200 with a clock speed of 12 Mhz*/ 486 la t0, MG5_UART_0_BAUD_REG 487 li t1, 0x02700270 488 sw t1, 0(t0) 489 490 /* Now, clear the reset bit & set the tx enable bit */ 491 la t0, MG5_COMMAND_REG 492 li t1, UART_0_TX_ENABLE_BIT 493 sw t1, 0(t0) 494 495 /* 496 ** return 497 */ 498 j ra 499 .end config_uart 500 501 502 /************************************************************* 503 * CpuInit: 504 * Perform CPU-specific initialization 505 * This routine is only callable from assembly because it 506 * clobbers s7. It should be called from your ROM-based startup 507 * code. It returns: 508 * s0 = address of cache flush routine 509 */ 510 511 .globl _cpuinit 512 .ent _cpuinit 513 _cpuinit: 514 515 # 516 # BIU/Cache config register setup 517 # 518 # RES = 0: 31 -> 18 : Reserved 519 # RES = 1: 17 : Reserved must be set to 1 (Synova Manual) 520 # RES = 0: 16 : Reserved must be set to 0 (Synova Manual) 521 # BGNT = 0: 15 : Disable Bus Grant (set to 0) 522 # NOPAD = 1: 14 : No padding of waitstates between transactions 523 # RDPRI = 1: 13 : Loads have priority over stores 524 # INTP = 1: 12 : Interrupts are active high 525 # IS1 = 1: 11 : Enable I-Cache 526 # IS0 = 0: 10 : Hardwired to zero 527 # IBLKSZ =10: 9 -> 8 : I-Cache refill size = 8 words 528 # DS = 1: 7 : Enable D-Cache 529 # RES = 0: 6 : Hardwared to zero 530 # DBLKSZ =10: 5 -> 4 : D-Cache refill block size 8 words 531 # RAM = 0: 3 : No Scratchpad RAM 532 # TAG = 0: 2 : Disable tag test 533 # INV = 0: 1 : Disable invalidate mode 534 # LOCK = 0: 0 : Disable cache lock 535 # 536 li t0,0x00027AA0 537 sw t0,M_BIU 538 539 # 540 # Refresh register setup 541 # 542 # set 94 clock cycles at 12Mhz 543 # 544 li t1,M_RTIC 545 li t0,0x5E 546 sw t0,(t1) 547 548 # 549 # DRAM register setup 550 # 551 # 552 # RESERVED=0: 31 -> 29 : Reserved 553 # SYNC = 0 : 27 : No Syncronous DRAM 554 # SCFG = 0 : 26 : No Syncronous DRAM 555 # DMARDY =1 : 25 : Internal DRDY for DMA 556 # DMABLK =0 : 24 -> 22 : 2 word blk size for DMA transfers 557 # DPTH = 0 : 21 -> 20 : No interleaved or syncronous memory 558 # RDYW = 0 : 19 : No interleaved or syncronous memory 559 # PGSZ = 110: 18 -> 16 : Page size = 1K 560 # PGMW = 0 : 15 : Disable page mode write 561 # RFWE = 0 : 14 -> 13 : Allow BIU to do non-DRAM work during refresh 562 # RFEN = 1 : 12 : Enable Refresh generator 563 # RDYEN = 1 : 11 : Internal DRDY 564 # BFD = 1 : 10 : Block fetch disable 565 # PE = 0 : 9 : No parity checking 566 # RPC = 0 : 8 -> 7 : RAS Precharge = 2 SYSCLK cycles 567 # RCD = 1 : 6 -> 5 : RAS-to-CAS delay = 3 cycles 568 # CS = 0 : 4 : CAS shortened by 1/2 cycle 569 # CL = 1 : 3 -> 1 : 2.5 cycle CAS pulse width 570 # DCE = 1 : 0 : Enable DRAM controller 571 li s0,0x02061C23 572 sw s0,M_DRAM 573 574 # 575 # SRAM setup 576 # Dont Care about this, we are not using SRAM 577 # Power on default of 0x0 is ok 578 # 579 li t0,0 580 sw t0,M_SRAM 581 582 # 583 # SPEC0 setup 584 # 585 # SPEC0 contains the BCRT registers, BCRT Shared RAM and EEPROM 586 # This area is configured to use an external waitstate generator 587 # and Data Ready signal. 588 # Also, I see no need to cache this data. It could confuse the 589 # BCRT. 590 # 591 # - 9/29/99 - APC - set NOSNOOP to 1 and EXTGNT to 1 592 # Bit 23 = 1 : EXTGNT External data ready = 1 593 # Bit 19 = 1 : NOSNOOP No Snoop = 1 594 li t0,0x00880000 # use external waitstates 595 sw t0,M_SPEC0 596 597 # 598 # SPEC1 setup 599 # 600 # This is where most of the SDB I/O is. 601 # 602 # Important fields: 603 # 604 # Bit 19 =1 : NOSNOOP = 1 605 # Bit 6 = 1 : Enable DAWG 606 # Bit 5 -> 0 = 1 : 1 Wait state 607 # 608 li t0,0x00880000 /* Bit23 EXTGNT set to 1, Bit19 NOSNOOP set to 1 */ 609 sw t0,M_SPEC1 610 611 # 612 # SPEC2 setup 613 # 614 # SPEC2 is not currently used on the SDB. 615 # Bit 19 = 1 : NOSNOOP = 1 616 # 617 #li t0, 0x00080000 618 #sw t0,M_SPEC2 619 # 620 li t0, 0x0 621 sw t0,M_SPEC2 622 623 624 # 625 # SPEC3 Setup 626 # SPEC3 will be used for the SONIC ethernet controller. 627 # Use the same # of waitstates that the turborocket board uses. 628 # Bit 19 = 1 : NOSNOOP = 1 629 # 630 #li t0, (SPC_CACHED | SPC_WAITENA | (16<<SPC_WAITSHFT)) 631 #sw t0,M_SPEC3 632 # 633 li t0, 0x0 634 sw t0,M_SPEC3 635 636 # 637 # Finally, delay to allow RAM to stabilize 638 # 639 li t0,2000 640 1: subu t0,1 641 bne t0,zero,1b 642 nop 643 644 # 645 # Init Mongoose V registers. 646 # 647 648 /* 649 ** Mongoose V Control Register Setup 650 ** For now just setup UART defaults, turn edac off. 651 ** May not even need to put anything in here... 652 */ 653 li t0,0 654 sw t0,MG5_COMMAND_REG 655 656 /* 657 ** Setup Mongoose V extended interrupt mask 658 */ 659 li t0,0 660 sw t0,MG5_INT_MASK_REG 661 662 /* 663 ** Clear Mongoose V extended interrupts 664 ** Clear all of the pulse interrupts that may be pending. 665 */ 666 li t0,( EDAC_SERR_BIT | EDAC_MERR_BIT | UART_0_RX_OVERRUN_BIT | UART_0_FRAME_ERR_BIT | UART_1_RX_OVERRUN_BIT | UART_1_FRAME_ERR_BIT | MAVN_WRITE_ACC_BIT | MAVN_READ_ACC_BIT ) 667 sw t0,MG5_INT_STATUS_REG 668 669 /* 670 ** Setup MAVN Access Priv Register 671 */ 672 li t0,0x7FFFFFFF /* Default reset value */ 673 sw t0,MG5_MAVN_PRIVLEGE_REG 674 675 /* 676 ** Mavn Range Register 0 -- 0 and 1 cover EEPROM 677 ** 0xbfc00000 -> 0xbfe00000 678 */ 679 li t0,( 0xBFC00000 | 0x15 ) 680 sw t0,MG5_MAVN_RANGE_0_REG 681 682 /* 683 ** Mavn Range Register 1 684 ** 0xbfe00000 -> 0xc0000000 685 */ 686 li t0,( 0xBFE00000 | 0x15 ) 687 sw t0,MG5_MAVN_RANGE_1_REG 688 689 /* 690 ** Mavn Range Register 2 -- 2 and 3 cover the first RAM 691 ** 0x80000000 -> 0x80200000 692 */ 693 li t0,( 0x80000000 | 0x15 ) 694 sw t0,MG5_MAVN_RANGE_2_REG 695 696 /* 697 ** Mavn Range Register 3 698 ** 0x80200000 -> 0x80400000 699 */ 700 li t0, ( 0x80200000 | 0x15 ) 701 sw t0, MG5_MAVN_RANGE_3_REG 702 703 /* 704 ** Mavn Range Register 4 -- IO Space 1 705 ** 0xBE00000 -> 0xBe0000200 706 */ 707 li t0, ( 0xBe000000 | 0x09 ) 708 sw t0, MG5_MAVN_RANGE_4_REG 709 710 /* 711 ** Mavn Range Register 5 -- IO Space 2 712 ** 0xBe200000 -> 0xbe400000 713 */ 714 li t0, ( 0xBE200000 | 0x15 ) 715 sw t0, MG5_MAVN_RANGE_5_REG 716 717 /* 718 ** MAVN Error Address Register ( Unstick ) 719 */ 720 la t0, MG5_MAVN_VIOLATION_REG 721 lw t1, 0(t0) 722 723 /* 724 ** Read EDAC Error Register to unstick it 725 */ 726 la t0, MG5_EDAC_ADDR_REG 727 lw t1, 0(t0) 728 729 /* 730 ** Enable Mongoose V EDAC 731 */ 732 la t0, MG5_COMMAND_REG 733 li t1, EDAC_ENABLE_BIT 734 sw t1, 0(t0) 735 nop 736 737 /* 738 ** Program Watchdog to 10 seconds - If PMON will 739 ** run, it will be set to MAX later. 740 */ 741 la t0, 0xBE000000 742 li t1, 0xA0 743 sw t1, 0(t0) 744 745 3: nop 746 747 j ra 748 .end _cpuinit 749 750 751 /******************************************************************************* 752 ** Function Name: IcacheFlush 753 ** Description: This functions flushes the on chip icache. 754 */ 755 756 .globl IcacheFlush 757 .ent IcacheFlush 758 IcacheFlush: 759 180 760 1: 181 li v0, SR_PE|SR_FR|SR_KX|SR_SX|SR_UX 182 mtc0 v0, C0_SR 183 2: 184 /* Fix high bits, if any, of the PC so that exception handling 185 doesn't get confused. */ 186 LA (v0, 3f) 187 jr v0 188 nop 189 3: 190 LA (gp, _gp) # set the global data pointer 191 .end _start 192 193 /* 194 * zero out the bss section. 195 */ 196 .globl __memsize 197 .globl zerobss 198 .ent zerobss 199 zerobss: 200 LA (v0, _fbss) 201 LA (v1, _end) 202 3: 203 sw zero,0(v0) 204 bltu v0,v1,3b 205 addiu v0,v0,4 # executed in delay slot 206 207 la t0, _stack_init # initialize stack so we 208 /* We must subtract 24 bytes for the 3 8 byte arguments to main, in 209 case main wants to write them back to the stack. The caller is 210 supposed to allocate stack space for parameters in registers in 211 the old MIPS ABIs. We must do this even though we aren't passing 212 arguments, because main might be declared to have them. 213 214 Some ports need a larger alignment for the stack, so we subtract 215 32, which satisifes the stack for the arguments and keeps the 216 stack pointer better aligned. */ 217 subu t0,t0,32 218 move sp,t0 # set stack pointer 219 .end zerobss 220 221 .globl exit .text 222 .globl init 223 .ent init 224 init: 225 226 move a0,zero # set argc to 0 227 jal boot_card # call the program start function 228 nop 229 230 # fall through to the "exit" routine 231 jal _sys_exit # call libc exit to run the G++ 232 # destructors 233 move a0,v0 # pass through the exit code 234 .end init 235 236 /* 237 * _sys_exit -- Exit from the application. Normally we cause a user trap 238 * to return to the ROM monitor for another run. NOTE: This is 239 * the only other routine we provide in the crt0.o object, since 240 * it may be tied to the "_start" routine. It also allows 241 * executables that contain a complete world to be linked with 242 * just the crt0.o object. 243 */ 244 .globl _sys_exit 245 .ent _sys_exit 246 _sys_exit: 247 #ifdef GCRT0 248 jal _mcleanup 249 nop 250 #endif 251 252 /* return non-zero if we want default behavior, else return to pmon */ 253 bne a0,zero,7f 254 nop 255 256 li t0,PMON_UTIL_ROUTINES /* base address of PMON's util_routines table */ 257 lw t0,UTIL_WARMSTART_VECTOR(t0) /* retrieve _warmstart vector at offset 21*4 */ 258 nop 259 j t0 /* and jump */ 260 nop 261 262 # break instruction can cope with 0xfffff, but GAS limits the range: 263 7: break 1023 264 nop 265 b 7b # but loop back just in-case 266 nop 267 .end _sys_exit 268 269 /* EOF crt0.S */ 761 # Assume I cache is already enabled in BIU/Cache setup 762 # Get contents of M_BIU register and save in t1 763 li t0, M_BIU 764 lw t1, 0(t0) 765 766 .set noreorder 767 768 # Isolate I cache 769 mfc0 t3, C0_SR /* Read Status Register */ 770 nop 771 or t0, t3, SR_ISC /* Isolate Cache so we don't propagate operations */ 772 mtc0 t0, C0_SR /* Write it back to Status Register */ 773 nop 774 775 # Setup for cache flush 776 li t8, 0 /* Store zero */ 777 li t9, LR33300_IC_SIZE 778 779 icache_write: 780 sw zero, 0(t8) /* Store zero to memory addres in t8 */ 781 addu t8, 4 /* Increment t8 addres by 4 */ 782 bltu t8, t9, icache_write /* check to see if we are done */ 783 nop 784 785 786 # De-isolate I cache 787 mtc0 t3, C0_SR /* Load unchanged t3 to Status Register */ 788 nop 789 790 jal ra 791 nop 792 .set reorder 793 .end IcacheFlush 794 795 796 /******************************************************** 797 ** Function Name: DcacheFlush 798 ** Description: This functions flushes the on chip dcache. 799 */ 800 801 .globl DcacheFlush 802 .ent DcacheFlush 803 DcacheFlush: 804 805 # isolate icache 806 .set noreorder 807 mfc0 t3,C0_SR 808 nop 809 or t0, t3, SR_ISC 810 mtc0 t0, C0_SR 811 nop 812 813 # Setup up for cache flush 814 li t8, 0 815 li t9, LR33300_DC_SIZE 816 817 dcache_write: 818 sw zero, 0(t8) 819 addu t8, 4 820 bltu t8, t9, dcache_write /* check to see if we are done */ 821 nop 822 823 # De-isolate cache 824 mtc0 t3, C0_SR 825 nop 826 827 jal ra 828 nop 829 .set reorder 830 .end DcacheFlush 831 832 833 /* EOF start.S */ -
c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c
r2835b3a5 r7de58239 1 1 /* 2 * This routine starts the application. It includes application, 3 * board, and monitor specific initialization and configuration. 4 * The generic CPU dependent initialization has been performed 5 * before this routine is invoked. 6 * 7 * COPYRIGHT (c) 1989-2001. 8 * On-Line Applications Research Corporation (OAR). 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.OARcorp.com/rtems/license.html. 13 * 14 * $Id$ 15 */ 2 ** This routine starts the application. It includes application, 3 ** board, and monitor specific initialization and configuration. 4 ** The generic CPU dependent initialization has been performed 5 ** before this routine is invoked. 6 ** 7 ** COPYRIGHT (c) 1989-2001. 8 ** On-Line Applications Research Corporation (OAR). 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.OARcorp.com/rtems/license.html. 13 ** 14 ** $Id$ 15 ** 16 ** Modification History: 17 ** 12/10/01 A.Ferrer, NASA/GSFC, Code 582 18 ** Set interrupt mask to 0xAF00 (Line 139). 19 */ 16 20 17 21 #include <string.h> … … 40 44 * Use the shared implementations of the following routines 41 45 */ 42 46 43 47 void bsp_postdriver_hook(void); 44 48 void bsp_libc_init( void *, unsigned32, int ); … … 57 61 * 58 62 */ 59 63 60 64 void bsp_pretasking_hook(void) 61 65 { … … 84 88 void bsp_start( void ) 85 89 { 86 extern int _end;87 90 extern int WorkspaceBase; 91 extern void mips_install_isr_entries(); 88 92 89 93 /* Configure Number of Register Caches */ … … 94 98 95 99 /* HACK -- tied to value linkcmds */ 96 if ( BSP_Configuration.work_space_size > (4096*1024) )97 _sys_exit( 1 );100 if ( BSP_Configuration.work_space_size > (4096*1024) ) 101 _sys_exit( 1 ); 98 102 99 103 BSP_Configuration.work_space_start = (void *) &WorkspaceBase; 104 105 /* mask off any interrupts */ 106 MONGOOSEV_WRITE( MONGOOSEV_PERIPHERAL_FUNCTION_INTERRUPT_MASK_REGISTER, 0 ); 100 107 101 108 MONGOOSEV_WRITE( MONGOOSEV_WATCHDOG, 0xA0 ); … … 113 120 MONGOOSEV_WRITE_REGISTER( MONGOOSEV_TIMER2_BASE, MONGOOSEV_TIMER_CONTROL_REGISTER, 0); 114 121 115 MONGOOSEV_WRITE( MONGOOSEV_PERIPHERAL_FUNCTION_INTERRUPT_MASK_REGISTER, 0 );122 /* clear any pending interrupts */ 116 123 MONGOOSEV_WRITE( MONGOOSEV_PERIPHERAL_STATUS_REGISTER, 0xffffffff ); 117 124 … … 119 126 mips_set_cause( 0 ); 120 127 121 /*all interrupts unmasked but globally off. depend on the IRC to take care of things */ 122 mips_set_sr( (SR_CU0 | SR_CU1 | 0xff00) ); 128 /* set interrupt mask, but globally off. */ 129 130 /* 131 ** Bit 15 | Bit 14 | Bit 13 | Bit 12 | Bit 11 | Bit 10 | Bit 9 | Bit 8 | 132 ** periph | unused | FPU | unused | timer2 | timer1 | swint1 | swint2 | 133 ** extern | | | | | | | | 134 ** 135 ** 1 0 1 0 0 1 0 0 136 ** 137 ** 0x8C00 Enable only internal Mongoose V timers. 138 ** 0xA400 Enable Peripherial ints, FPU and timer1 139 */ 140 141 mips_set_sr( (SR_CU0 | SR_CU1 | 0xA400) ); 123 142 124 143 mips_install_isr_entries(); … … 141 160 142 161 143 void 144 get_mem_info (mem) 145 struct s_mem *mem; 162 163 extern unsigned32 _RamSize; 164 165 void get_mem_info ( struct s_mem *mem ) 146 166 { 147 mem->size = 0x1000000; /* XXX figure out something here */167 mem->size = (unsigned32)&_RamSize; 148 168 } 149 169 -
c/src/lib/libbsp/mips/genmongoosev/startup/linkcmds
r2835b3a5 r7de58239 6 6 */ 7 7 8 /* . = 0x80020000; */ 9 8 10 /* 9 11 * Declare some sizes. 10 12 */ 13 11 14 _RamBase = DEFINED(_RamBase) ? _RamBase : 0x80000000; 12 15 _RamSize = DEFINED(_RamSize) ? _RamSize : 32M; 13 HeapSize = DEFINED(HeapSize) ? HeapSize : 0x 10000;16 HeapSize = DEFINED(HeapSize) ? HeapSize : 0x40000; 14 17 _StackSize = DEFINED(_StackSize) ? _StackSize : 0x1000; 15 18 ClockRate = DEFINED(ClockRate) ? ClockRate : 12000000; 16 19 20 21 22 MEMORY 23 { 24 romstore : ORIGIN = 0xbfc40000, LENGTH = 4M 25 ram : ORIGIN = 0x80020000, LENGTH = 4M 26 } 27 17 28 SECTIONS 18 29 { 19 /*20 Ken's response is correct. Locate it at 0x80020000 or higher. The PMON21 data segment after the exception vectors and below 0x80020000,22 23 . = 0x80020000;24 */25 . = 0x80020000;26 30 .text : 27 31 { … … 36 40 PROVIDE (__runtime_reloc_start = .); 37 41 *(.rel.sdata) 42 *(.rel.dyn) 38 43 PROVIDE (__runtime_reloc_stop = .); 39 44 *(.fini) 40 etext = .; 41 _etext = .; 42 } 43 .ctors : 45 } >ram AT>romstore 46 47 .ctors : 44 48 { 45 49 /* gcc uses crtbegin.o to find the start of … … 63 67 KEEP (*(SORT(.ctors.*))) 64 68 KEEP (*(.ctors)) 65 } 69 } >ram AT>romstore 66 70 67 .dtors : 71 .dtors : 68 72 { 69 73 KEEP (*crtbegin.o(.dtors)) … … 71 75 KEEP (*(SORT(.dtors.*))) 72 76 KEEP (*(.dtors)) 73 }74 77 75 . = .; 76 .rdata : { 78 etext = .; 79 _etext = .; 80 } >ram AT>romstore 81 82 /* . = .; */ 83 84 .rdata : 85 { 77 86 *(.rdata) 78 87 *(.rodata) 79 88 *(.rodata.*) 80 89 *(.gnu.linkonce.r*) 81 } 82 _fdata = ALIGN(16); 83 .data : { 90 } >ram AT>romstore 91 92 .data : 93 { 94 _fdata = ALIGN(16); 95 84 96 *(.data) 85 97 *(.data.*) 86 98 *(.gnu.linkonce.d*) 87 } 88 . = ALIGN(8); 89 _gp = . + 0x8000; 90 __global = _gp; 91 .lit8 : { 99 } >ram AT>romstore 100 101 102 .lit8 : 103 { 104 . = ALIGN(8); 105 106 _gp = . + 0x8000; 107 __global = _gp; 92 108 *(.lit8) 93 } 94 .lit4 : { 109 } >ram AT>romstore 110 111 .lit4 : 112 { 95 113 *(.lit4) 96 } 97 .sdata : { 114 } >ram AT>romstore 115 116 .sdata : 117 { 98 118 *(.sdata) 99 119 *(.sdata.*) 100 120 *(.gnu.linkonce.s*) 101 } 121 } >ram AT>romstore 122 123 .sbss : 124 { 102 125 . = ALIGN(4); 103 126 edata = .; 104 127 _edata = .; 105 128 _fbss = .; 106 .sbss : {107 129 *(.sbss) 108 130 *(.scommon) 109 } 110 .bss : { 131 } >ram AT>romstore 132 133 134 .bss : 135 { 111 136 _bss_start = . ; 112 137 *(.bss) 138 *(.reginfo) 113 139 *(COMMON) 114 140 . = ALIGN (64); … … 121 147 . += HeapSize; /* reserve some memory for heap */ 122 148 WorkspaceBase = .; 123 }124 end = .;125 _end = .;149 end = .; 150 _end = .; 151 } >ram AT>romstore 126 152 127 153 128 /* Put starting stack in SRAM (8 Kb); this size is the same as the stack from 129 the original script (when everything was in SRAM). */ 130 /* __stack = 0x8000A000; */ 131 /* DWARF debug sections. 132 Symbols in the DWARF debugging sections are relative to 133 the beginning of the section so we begin them at 0. */ 154 /* 155 ** DWARF debug sections. 156 ** Symbols in the DWARF debugging sections are relative to 157 ** the beginning of the section so we begin them at 0. 158 */ 134 159 135 160 /* DWARF 1 */ 136 .debug 0 : { *(.debug) } 137 .line 0 : { *(.line) } 161 .debug 0 : { *(.debug) } AT>romstore 162 .line 0 : { *(.line) } AT>romstore 138 163 139 164 /* GNU DWARF 1 extensions */ 140 .debug_srcinfo 0 : { *(.debug_srcinfo) } 141 .debug_sfnames 0 : { *(.debug_sfnames) } 165 .debug_srcinfo 0 : { *(.debug_srcinfo) } AT>romstore 166 .debug_sfnames 0 : { *(.debug_sfnames) } AT>romstore 142 167 143 168 /* DWARF 1.1 and DWARF 2 */ 144 .debug_aranges 0 : { *(.debug_aranges) } 145 .debug_pubnames 0 : { *(.debug_pubnames) } 169 .debug_aranges 0 : { *(.debug_aranges) } AT>romstore 170 .debug_pubnames 0 : { *(.debug_pubnames) } AT>romstore 146 171 147 172 /* DWARF 2 */ 148 .debug_info 0 : { *(.debug_info) } 149 .debug_abbrev 0 : { *(.debug_abbrev) } 150 .debug_line 0 : { *(.debug_line) } 151 .debug_frame 0 : { *(.debug_frame) }152 .debug_str 0 : { *(.debug_str) } 153 .debug_loc 0 : { *(.debug_loc) } 154 .debug_macinfo 0 : { *(.debug_macinfo) } 173 .debug_info 0 : { *(.debug_info) } AT>romstore 174 .debug_abbrev 0 : { *(.debug_abbrev) } AT>romstore 175 .debug_line 0 : { *(.debug_line) } AT>romstore 176 .debug_frame 0 : { *(.debug_frame)} AT>romstore 177 .debug_str 0 : { *(.debug_str) } AT>romstore 178 .debug_loc 0 : { *(.debug_loc) } AT>romstore 179 .debug_macinfo 0 : { *(.debug_macinfo) } AT>romstore 155 180 156 181 /* SGI/MIPS DWARF 2 extensions */ 157 .debug_weaknames 0 : { *(.debug_weaknames) } 158 .debug_funcnames 0 : { *(.debug_funcnames) } 159 .debug_typenames 0 : { *(.debug_typenames) } 160 .debug_varnames 0 : { *(.debug_varnames) } 182 .debug_weaknames 0 : { *(.debug_weaknames) } AT>romstore 183 .debug_funcnames 0 : { *(.debug_funcnames) } AT>romstore 184 .debug_typenames 0 : { *(.debug_typenames) } AT>romstore 185 .debug_varnames 0 : { *(.debug_varnames) } AT>romstore 161 186 } -
c/src/lib/libbsp/mips/genmongoosev/timer/timer.c
r2835b3a5 r7de58239 55 55 #define LEAST_VALID 1 /* Don't trust a value lower than this */ 56 56 /* mongoose-v can count cycles. :) */ 57 #include < rtems/bspIo.h>57 #include <bspIo.h> 58 58 59 59 int Read_timer()
Note: See TracChangeset
for help on using the changeset viewer.