]>
Commit | Line | Data |
---|---|---|
5da627a4 WD |
1 | /* Memory sub-system initialization code */ |
2 | ||
3 | #include <config.h> | |
5da627a4 WD |
4 | #include <asm/regdef.h> |
5 | #include <asm/au1x00.h> | |
63f34912 WD |
6 | #include <asm/mipsregs.h> |
7 | ||
8 | #define AU1500_SYS_ADDR 0xB1900000 | |
9 | #define sys_endian 0x0038 | |
10 | #define CP0_Config0 $16 | |
6d0f6bcf JCPV |
11 | #define CPU_SCALE ((CONFIG_SYS_MHZ) / 12) /* CPU clock is a multiple of 12 MHz */ |
12 | #define MEM_1MS ((CONFIG_SYS_MHZ) * 1000) | |
63f34912 WD |
13 | |
14 | .text | |
15 | .set noreorder | |
16 | .set mips32 | |
5da627a4 | 17 | |
400558b5 WD |
18 | .globl lowlevel_init |
19 | lowlevel_init: | |
63f34912 WD |
20 | /* |
21 | * Step 1) Establish CPU endian mode. | |
22 | * Db1500-specific: | |
23 | * Switch S1.1 Off(bit7 reads 1) is Little Endian | |
24 | * Switch S1.1 On (bit7 reads 0) is Big Endian | |
25 | */ | |
ff36fd85 WD |
26 | #ifdef CONFIG_DBAU1550 |
27 | li t0, MEM_STCFG2 | |
28 | li t1, 0x00000040 | |
29 | sw t1, 0(t0) | |
30 | ||
31 | li t0, MEM_STTIME2 | |
32 | li t1, 0x22080a20 | |
33 | sw t1, 0(t0) | |
34 | ||
35 | li t0, MEM_STADDR2 | |
36 | li t1, 0x10c03f00 | |
37 | sw t1, 0(t0) | |
38 | #else | |
63f34912 WD |
39 | li t0, MEM_STCFG1 |
40 | li t1, 0x00000080 | |
41 | sw t1, 0(t0) | |
42 | ||
43 | li t0, MEM_STTIME1 | |
44 | li t1, 0x22080a20 | |
45 | sw t1, 0(t0) | |
46 | ||
47 | li t0, MEM_STADDR1 | |
48 | li t1, 0x10c03f00 | |
49 | sw t1, 0(t0) | |
ff36fd85 | 50 | #endif |
63f34912 | 51 | |
ff36fd85 WD |
52 | li t0, DB1XX0_BCSR_ADDR |
53 | lw t1,8(t0) | |
63f34912 WD |
54 | andi t1,t1,0x80 |
55 | beq zero,t1,big_endian | |
56 | nop | |
57 | little_endian: | |
58 | ||
59 | /* Change Au1 core to little endian */ | |
60 | li t0, AU1500_SYS_ADDR | |
61 | li t1, 1 | |
62 | sw t1, sys_endian(t0) | |
63 | mfc0 t2, CP0_CONFIG | |
64 | mtc0 t2, CP0_CONFIG | |
65 | nop | |
66 | nop | |
67 | ||
68 | /* Big Endian is default so nothing to do but fall through */ | |
69 | ||
70 | big_endian: | |
71 | ||
72 | /* | |
73 | * Step 2) Establish Status Register | |
74 | * (set BEV, clear ERL, clear EXL, clear IE) | |
75 | */ | |
76 | li t1, 0x00400000 | |
77 | mtc0 t1, CP0_STATUS | |
78 | ||
79 | /* | |
80 | * Step 3) Establish CP0 Config0 | |
81 | * (set OD, set K0=3) | |
82 | */ | |
83 | li t1, 0x00080003 | |
84 | mtc0 t1, CP0_CONFIG | |
85 | ||
86 | /* | |
87 | * Step 4) Disable Watchpoint facilities | |
88 | */ | |
89 | li t1, 0x00000000 | |
90 | mtc0 t1, CP0_WATCHLO | |
91 | mtc0 t1, CP0_IWATCHLO | |
92 | /* | |
93 | * Step 5) Disable the performance counters | |
94 | */ | |
95 | mtc0 zero, CP0_PERFORMANCE | |
96 | nop | |
97 | ||
98 | /* | |
99 | * Step 6) Establish EJTAG Debug register | |
100 | */ | |
101 | mtc0 zero, CP0_DEBUG | |
102 | nop | |
103 | ||
104 | /* | |
105 | * Step 7) Establish Cause | |
106 | * (set IV bit) | |
107 | */ | |
108 | li t1, 0x00800000 | |
109 | mtc0 t1, CP0_CAUSE | |
110 | ||
111 | /* Establish Wired (and Random) */ | |
112 | mtc0 zero, CP0_WIRED | |
113 | nop | |
114 | ||
ff36fd85 WD |
115 | #ifdef CONFIG_DBAU1550 |
116 | /* No workaround if running from ram */ | |
117 | lui t0, 0xffc0 | |
118 | lui t3, 0xbfc0 | |
119 | and t1, ra, t0 | |
120 | bne t1, t3, noCacheJump | |
121 | nop | |
122 | ||
123 | /*** From AMD YAMON ***/ | |
124 | /* | |
125 | * Step 8) Initialize the caches | |
126 | */ | |
127 | li t0, (16*1024) | |
128 | li t1, 32 | |
129 | li t2, 0x80000000 | |
130 | addu t3, t0, t2 | |
131 | cacheloop: | |
132 | cache 0, 0(t2) | |
133 | cache 1, 0(t2) | |
134 | addu t2, t1 | |
135 | bne t2, t3, cacheloop | |
136 | nop | |
137 | ||
138 | /* Save return address */ | |
139 | move t3, ra | |
140 | ||
141 | /* Run from cacheable space now */ | |
142 | bal cachehere | |
143 | nop | |
144 | cachehere: | |
145 | li t1, ~0x20000000 /* convert to KSEG0 */ | |
146 | and t0, ra, t1 | |
147 | addi t0, 5*4 /* 5 insns beyond cachehere */ | |
148 | jr t0 | |
149 | nop | |
150 | ||
151 | /* Restore return address */ | |
152 | move ra, t3 | |
153 | ||
154 | /* | |
155 | * Step 9) Initialize the TLB | |
156 | */ | |
157 | li t0, 0 # index value | |
158 | li t1, 0x00000000 # entryhi value | |
159 | li t2, 32 # 32 entries | |
160 | ||
161 | tlbloop: | |
162 | /* Probe TLB for matching EntryHi */ | |
163 | mtc0 t1, CP0_ENTRYHI | |
164 | tlbp | |
165 | nop | |
166 | ||
167 | /* Examine Index[P], 1=no matching entry */ | |
168 | mfc0 t3, CP0_INDEX | |
169 | li t4, 0x80000000 | |
170 | and t3, t4, t3 | |
171 | addiu t1, t1, 1 # increment t1 (asid) | |
172 | beq zero, t3, tlbloop | |
173 | nop | |
174 | ||
175 | /* Initialize the TLB entry */ | |
176 | mtc0 t0, CP0_INDEX | |
177 | mtc0 zero, CP0_ENTRYLO0 | |
178 | mtc0 zero, CP0_ENTRYLO1 | |
179 | mtc0 zero, CP0_PAGEMASK | |
180 | tlbwi | |
181 | ||
182 | /* Do it again */ | |
183 | addiu t0, t0, 1 | |
184 | bne t0, t2, tlbloop | |
185 | nop | |
186 | ||
ad88297e HS |
187 | #endif /* CONFIG_DBAU1550 */ |
188 | ||
5da627a4 WD |
189 | /* First setup pll:s to make serial work ok */ |
190 | /* We have a 12 MHz crystal */ | |
63f34912 | 191 | li t0, SYS_CPUPLL |
ff36fd85 | 192 | li t1, CPU_SCALE /* CPU clock */ |
63f34912 | 193 | sw t1, 0(t0) |
42d1f039 WD |
194 | sync |
195 | nop | |
63f34912 | 196 | nop |
5da627a4 | 197 | |
63f34912 WD |
198 | /* wait 1mS for clocks to settle */ |
199 | li t1, MEM_1MS | |
200 | 1: add t1, -1 | |
201 | bne t1, zero, 1b | |
202 | nop | |
42d1f039 | 203 | /* Setup AUX PLL */ |
63f34912 WD |
204 | li t0, SYS_AUXPLL |
205 | li t1, 0x20 /* 96 MHz */ | |
206 | sw t1, 0(t0) /* aux pll */ | |
42d1f039 | 207 | sync |
5da627a4 | 208 | |
ad88297e | 209 | #ifdef CONFIG_DBAU1550 |
63f34912 | 210 | /* Static memory controller */ |
ff36fd85 WD |
211 | /* RCE0 - can not change while fetching, do so from icache */ |
212 | move t2, ra /* Store return address */ | |
213 | bal getAddr | |
214 | nop | |
5da627a4 | 215 | |
ff36fd85 WD |
216 | getAddr: |
217 | move t1, ra | |
218 | move ra, t2 /* Move return addess back */ | |
219 | ||
220 | cache 0x14,0(t1) | |
221 | cache 0x14,32(t1) | |
222 | /*** /From YAMON ***/ | |
223 | ||
224 | noCacheJump: | |
225 | #endif /* CONFIG_DBAU1550 */ | |
226 | ||
227 | #ifdef CONFIG_DBAU1550 | |
228 | li t0, MEM_STTIME0 | |
229 | li t1, 0x040181D7 | |
230 | sw t1, 0(t0) | |
231 | ||
232 | /* RCE0 AMD MirrorBit Flash (?) */ | |
63f34912 | 233 | li t0, MEM_STCFG0 |
ff36fd85 | 234 | li t1, 0x00000003 |
63f34912 | 235 | sw t1, 0(t0) |
5da627a4 | 236 | |
ff36fd85 WD |
237 | li t0, MEM_STADDR0 |
238 | li t1, 0x11803E00 | |
239 | sw t1, 0(t0) | |
240 | #else /* CONFIG_DBAU1550 */ | |
63f34912 | 241 | li t0, MEM_STTIME0 |
ad88297e | 242 | li t1, 0x040181D7 |
ff36fd85 WD |
243 | sw t1, 0(t0) |
244 | ||
245 | /* RCE0 AMD 29LV640M MirrorBit Flash */ | |
246 | li t0, MEM_STCFG0 | |
247 | li t1, 0x00000013 | |
63f34912 | 248 | sw t1, 0(t0) |
5da627a4 | 249 | |
63f34912 WD |
250 | li t0, MEM_STADDR0 |
251 | li t1, 0x11E03F80 | |
252 | sw t1, 0(t0) | |
ff36fd85 | 253 | #endif /* CONFIG_DBAU1550 */ |
5da627a4 | 254 | |
63f34912 WD |
255 | /* RCE1 CPLD Board Logic */ |
256 | li t0, MEM_STCFG1 | |
257 | li t1, 0x00000080 | |
258 | sw t1, 0(t0) | |
5da627a4 | 259 | |
63f34912 WD |
260 | li t0, MEM_STTIME1 |
261 | li t1, 0x22080a20 | |
262 | sw t1, 0(t0) | |
5da627a4 | 263 | |
63f34912 WD |
264 | li t0, MEM_STADDR1 |
265 | li t1, 0x10c03f00 | |
266 | sw t1, 0(t0) | |
267 | ||
ff36fd85 | 268 | #ifdef CONFIG_DBAU1550 |
63f34912 | 269 | /* RCE2 CPLD Board Logic */ |
ff36fd85 WD |
270 | li t0, MEM_STCFG2 |
271 | li t1, 0x00000040 | |
272 | sw t1, 0(t0) | |
273 | ||
274 | li t0, MEM_STTIME2 | |
275 | li t1, 0x22080a20 | |
276 | sw t1, 0(t0) | |
277 | ||
278 | li t0, MEM_STADDR2 | |
279 | li t1, 0x10c03f00 | |
280 | sw t1, 0(t0) | |
281 | #else | |
63f34912 WD |
282 | li t0, MEM_STCFG2 |
283 | li t1, 0x00000000 | |
284 | sw t1, 0(t0) | |
285 | ||
286 | li t0, MEM_STTIME2 | |
287 | li t1, 0x00000000 | |
288 | sw t1, 0(t0) | |
289 | ||
290 | li t0, MEM_STADDR2 | |
291 | li t1, 0x00000000 | |
292 | sw t1, 0(t0) | |
ff36fd85 | 293 | #endif |
63f34912 WD |
294 | |
295 | /* RCE3 PCMCIA 250ns */ | |
296 | li t0, MEM_STCFG3 | |
297 | li t1, 0x00000002 | |
298 | sw t1, 0(t0) | |
299 | ||
300 | li t0, MEM_STTIME3 | |
301 | li t1, 0x280E3E07 | |
302 | sw t1, 0(t0) | |
303 | ||
304 | li t0, MEM_STADDR3 | |
305 | li t1, 0x10000000 | |
306 | sw t1, 0(t0) | |
5da627a4 | 307 | |
5da627a4 WD |
308 | sync |
309 | ||
63f34912 WD |
310 | /* Set peripherals to a known state */ |
311 | li t0, IC0_CFG0CLR | |
312 | li t1, 0xFFFFFFFF | |
313 | sw t1, 0(t0) | |
314 | ||
315 | li t0, IC0_CFG0CLR | |
316 | sw t1, 0(t0) | |
317 | ||
318 | li t0, IC0_CFG1CLR | |
319 | sw t1, 0(t0) | |
320 | ||
321 | li t0, IC0_CFG2CLR | |
322 | sw t1, 0(t0) | |
323 | ||
324 | li t0, IC0_SRCSET | |
325 | sw t1, 0(t0) | |
326 | ||
327 | li t0, IC0_ASSIGNSET | |
328 | sw t1, 0(t0) | |
329 | ||
330 | li t0, IC0_WAKECLR | |
331 | sw t1, 0(t0) | |
332 | ||
333 | li t0, IC0_RISINGCLR | |
334 | sw t1, 0(t0) | |
335 | ||
336 | li t0, IC0_FALLINGCLR | |
337 | sw t1, 0(t0) | |
338 | ||
339 | li t0, IC0_TESTBIT | |
340 | li t1, 0x00000000 | |
341 | sw t1, 0(t0) | |
5da627a4 WD |
342 | sync |
343 | ||
63f34912 WD |
344 | li t0, IC1_CFG0CLR |
345 | li t1, 0xFFFFFFFF | |
346 | sw t1, 0(t0) | |
347 | ||
348 | li t0, IC1_CFG0CLR | |
349 | sw t1, 0(t0) | |
350 | ||
351 | li t0, IC1_CFG1CLR | |
352 | sw t1, 0(t0) | |
353 | ||
354 | li t0, IC1_CFG2CLR | |
355 | sw t1, 0(t0) | |
356 | ||
357 | li t0, IC1_SRCSET | |
358 | sw t1, 0(t0) | |
359 | ||
360 | li t0, IC1_ASSIGNSET | |
361 | sw t1, 0(t0) | |
362 | ||
363 | li t0, IC1_WAKECLR | |
364 | sw t1, 0(t0) | |
365 | ||
366 | li t0, IC1_RISINGCLR | |
367 | sw t1, 0(t0) | |
368 | ||
369 | li t0, IC1_FALLINGCLR | |
370 | sw t1, 0(t0) | |
371 | ||
372 | li t0, IC1_TESTBIT | |
373 | li t1, 0x00000000 | |
374 | sw t1, 0(t0) | |
5da627a4 WD |
375 | sync |
376 | ||
63f34912 WD |
377 | li t0, SYS_FREQCTRL0 |
378 | li t1, 0x00000000 | |
379 | sw t1, 0(t0) | |
380 | ||
381 | li t0, SYS_FREQCTRL1 | |
382 | li t1, 0x00000000 | |
383 | sw t1, 0(t0) | |
384 | ||
385 | li t0, SYS_CLKSRC | |
386 | li t1, 0x00000000 | |
387 | sw t1, 0(t0) | |
388 | ||
389 | li t0, SYS_PININPUTEN | |
390 | li t1, 0x00000000 | |
391 | sw t1, 0(t0) | |
5da627a4 WD |
392 | sync |
393 | ||
63f34912 WD |
394 | li t0, 0xB1100100 |
395 | li t1, 0x00000000 | |
396 | sw t1, 0(t0) | |
5da627a4 | 397 | |
63f34912 WD |
398 | li t0, 0xB1400100 |
399 | li t1, 0x00000000 | |
400 | sw t1, 0(t0) | |
5da627a4 | 401 | |
5da627a4 | 402 | |
63f34912 WD |
403 | li t0, SYS_WAKEMSK |
404 | li t1, 0x00000000 | |
405 | sw t1, 0(t0) | |
5da627a4 | 406 | |
63f34912 WD |
407 | li t0, SYS_WAKESRC |
408 | li t1, 0x00000000 | |
409 | sw t1, 0(t0) | |
5da627a4 | 410 | |
63f34912 WD |
411 | /* wait 1mS before setup */ |
412 | li t1, MEM_1MS | |
413 | 1: add t1, -1 | |
414 | bne t1, zero, 1b | |
415 | nop | |
5da627a4 | 416 | |
ff36fd85 WD |
417 | #ifdef CONFIG_DBAU1550 |
418 | /* SDCS 0,1,2 DDR SDRAM */ | |
419 | li t0, MEM_SDMODE0 | |
420 | li t1, 0x04276221 | |
421 | sw t1, 0(t0) | |
422 | ||
423 | li t0, MEM_SDMODE1 | |
424 | li t1, 0x04276221 | |
425 | sw t1, 0(t0) | |
426 | ||
427 | li t0, MEM_SDMODE2 | |
428 | li t1, 0x04276221 | |
429 | sw t1, 0(t0) | |
430 | ||
431 | li t0, MEM_SDADDR0 | |
432 | li t1, 0xe21003f0 | |
433 | sw t1, 0(t0) | |
434 | ||
435 | li t0, MEM_SDADDR1 | |
436 | li t1, 0xe21043f0 | |
437 | sw t1, 0(t0) | |
438 | ||
439 | li t0, MEM_SDADDR2 | |
440 | li t1, 0xe21083f0 | |
441 | sw t1, 0(t0) | |
442 | ||
443 | sync | |
444 | ||
445 | li t0, MEM_SDCONFIGA | |
446 | li t1, 0x9030060a /* Program refresh - disabled */ | |
447 | sw t1, 0(t0) | |
448 | sync | |
449 | ||
450 | li t0, MEM_SDCONFIGB | |
451 | li t1, 0x00028000 | |
452 | sw t1, 0(t0) | |
453 | sync | |
454 | ||
455 | li t0, MEM_SDPRECMD /* Precharge all */ | |
456 | li t1, 0 | |
457 | sw t1, 0(t0) | |
458 | sync | |
459 | ||
460 | li t0, MEM_SDWRMD0 | |
461 | li t1, 0x40000000 | |
462 | sw t1, 0(t0) | |
463 | sync | |
464 | ||
465 | li t0, MEM_SDWRMD1 | |
466 | li t1, 0x40000000 | |
467 | sw t1, 0(t0) | |
468 | sync | |
469 | ||
470 | li t0, MEM_SDWRMD2 | |
471 | li t1, 0x40000000 | |
472 | sw t1, 0(t0) | |
473 | sync | |
474 | ||
475 | li t0, MEM_SDWRMD0 | |
476 | li t1, 0x00000063 | |
477 | sw t1, 0(t0) | |
478 | sync | |
479 | ||
480 | li t0, MEM_SDWRMD1 | |
481 | li t1, 0x00000063 | |
482 | sw t1, 0(t0) | |
483 | sync | |
484 | ||
485 | li t0, MEM_SDWRMD2 | |
486 | li t1, 0x00000063 | |
487 | sw t1, 0(t0) | |
488 | sync | |
489 | ||
490 | li t0, MEM_SDPRECMD /* Precharge all */ | |
491 | sw zero, 0(t0) | |
492 | sync | |
493 | ||
494 | /* Issue 2 autoref */ | |
495 | li t0, MEM_SDAUTOREF | |
496 | sw zero, 0(t0) | |
497 | sync | |
498 | ||
499 | li t0, MEM_SDAUTOREF | |
500 | sw zero, 0(t0) | |
501 | sync | |
502 | ||
503 | /* Enable refresh */ | |
504 | li t0, MEM_SDCONFIGA | |
505 | li t1, 0x9830060a /* Program refresh - enabled */ | |
506 | sw t1, 0(t0) | |
507 | sync | |
508 | ||
509 | #else /* CONFIG_DBAU1550 */ | |
63f34912 WD |
510 | /* SDCS 0,1 SDRAM */ |
511 | li t0, MEM_SDMODE0 | |
512 | li t1, 0x005522AA | |
513 | sw t1, 0(t0) | |
5da627a4 | 514 | |
63f34912 WD |
515 | li t0, MEM_SDMODE1 |
516 | li t1, 0x005522AA | |
517 | sw t1, 0(t0) | |
5da627a4 | 518 | |
63f34912 WD |
519 | li t0, MEM_SDMODE2 |
520 | li t1, 0x00000000 | |
521 | sw t1, 0(t0) | |
522 | ||
523 | li t0, MEM_SDADDR0 | |
524 | li t1, 0x001003F8 | |
525 | sw t1, 0(t0) | |
526 | ||
527 | ||
528 | li t0, MEM_SDADDR1 | |
529 | li t1, 0x001023F8 | |
530 | sw t1, 0(t0) | |
531 | ||
532 | li t0, MEM_SDADDR2 | |
533 | li t1, 0x00000000 | |
534 | sw t1, 0(t0) | |
535 | ||
536 | sync | |
537 | ||
538 | li t0, MEM_SDREFCFG | |
539 | li t1, 0x64000C24 /* Disable */ | |
540 | sw t1, 0(t0) | |
541 | sync | |
542 | ||
543 | li t0, MEM_SDPRECMD | |
544 | sw zero, 0(t0) | |
545 | sync | |
546 | ||
547 | li t0, MEM_SDAUTOREF | |
548 | sw zero, 0(t0) | |
549 | sync | |
550 | sw zero, 0(t0) | |
551 | sync | |
552 | ||
553 | li t0, MEM_SDREFCFG | |
554 | li t1, 0x66000C24 /* Enable */ | |
555 | sw t1, 0(t0) | |
556 | sync | |
557 | ||
558 | li t0, MEM_SDWRMD0 | |
559 | li t1, 0x00000033 | |
560 | sw t1, 0(t0) | |
561 | sync | |
562 | ||
563 | li t0, MEM_SDWRMD1 | |
564 | li t1, 0x00000033 | |
565 | sw t1, 0(t0) | |
566 | sync | |
567 | ||
ff36fd85 | 568 | #endif /* CONFIG_DBAU1550 */ |
63f34912 WD |
569 | /* wait 1mS after setup */ |
570 | li t1, MEM_1MS | |
571 | 1: add t1, -1 | |
572 | bne t1, zero, 1b | |
573 | nop | |
5da627a4 | 574 | |
63f34912 WD |
575 | li t0, SYS_PINFUNC |
576 | li t1, 0x00008080 | |
577 | sw t1, 0(t0) | |
5da627a4 | 578 | |
63f34912 WD |
579 | li t0, SYS_TRIOUTCLR |
580 | li t1, 0x00001FFF | |
581 | sw t1, 0(t0) | |
5da627a4 | 582 | |
63f34912 WD |
583 | li t0, SYS_OUTPUTCLR |
584 | li t1, 0x00008000 | |
585 | sw t1, 0(t0) | |
5da627a4 WD |
586 | sync |
587 | ||
43c50925 | 588 | jr ra |
5da627a4 | 589 | nop |