1
2
3
4
5
6
7
8
9
10
11
12
13
14#include <asm-offsets.h>
15#include <config.h>
16#include <mpc85xx.h>
17#include <system-constants.h>
18
19#include <ppc_asm.tmpl>
20#include <ppc_defs.h>
21
22#include <asm/cache.h>
23#include <asm/mmu.h>
24
25#undef MSR_KERNEL
26#define MSR_KERNEL ( MSR_ME )
27
28#define LAW_EN 0x80000000
29
30
31 (defined(CONFIG_SPL_BUILD) && CONFIG_IS_ENABLED(INIT_MINIMAL))
32#define MINIMAL_SPL
33#endif
34
35
36 !defined(CONFIG_NXP_ESBC) && !defined(CONFIG_SRIO_PCIE_BOOT_SLAVE)
37#define NOR_BOOT
38#endif
39
40
41
42
43
44
45 START_GOT
46 GOT_ENTRY(_GOT2_TABLE_)
47 GOT_ENTRY(_FIXUP_TABLE_)
48
49#ifndef MINIMAL_SPL
50 GOT_ENTRY(_start_of_vectors)
51 GOT_ENTRY(_end_of_vectors)
52 GOT_ENTRY(transfer_to_handler)
53#endif
54
55 GOT_ENTRY(__init_end)
56 GOT_ENTRY(__bss_end)
57 GOT_ENTRY(__bss_start)
58 END_GOT
59
60#ifdef CONFIG_FSL_PREPBL_ESDHC_BOOT_SECTOR
61
62
63
64#ifdef CONFIG_SPL_BUILD
65#define MAX_IMAGE_SIZE (CONFIG_SPL_MAX_SIZE - (CONFIG_FSL_PREPBL_ESDHC_BOOT_SECTOR_DATA * 512))
66#else
67#define MAX_IMAGE_SIZE CONFIG_SYS_L2_SIZE
68#endif
69
70
71
72#endif
73
74
75
76#endif
77
78#define DIV_ROUND_UP(a, b) (((a) + (b) - 1) / (b))
79#define ALIGN(x, a) (DIV_ROUND_UP(x, a) * (a))
80
81
82
83#define CFG_SYS_MPC85xx_L2_OFFSET 0x20000
84
85#define MPC85xx_L2CTL 0x000
86#define MPC85xx_L2CTL_L2E 0x80000000
87#define MPC85xx_L2CTL_L2SRAM_ENTIRE 0x00010000
88
89#define MPC85xx_L2SRBAR0 0x100
90
91#define MPC85xx_L2ERRDIS 0xe44
92#define MPC85xx_L2ERRDIS_MBECC 0x00000008
93#define MPC85xx_L2ERRDIS_SBECC 0x00000004
94
95
96
97#define ESDHCCTL 0x0002e40c
98#define ESDHCCTL_SNOOP 0x00000040
99
100
101
102
103
104
105 .section .bootsect, "a"
106 .globl bootsect
107
108bootsect:
109 .org 0x40
110 .ascii "BOOT"
111
112 .org 0x48
113 .long ALIGN(MAX_IMAGE_SIZE, 512)
114
115 .org 0x50
116 .long (CONFIG_FSL_PREPBL_ESDHC_BOOT_SECTOR_START + CONFIG_FSL_PREPBL_ESDHC_BOOT_SECTOR_DATA) * 512
117
118 .org 0x58
119 .long CONFIG_SYS_MONITOR_BASE
120
121 .org 0x60
122 .long _start
123
124 .org 0x68
125 .long DIV_ROUND_UP(.Lconf_pair_end - .Lconf_pair_start, 8)
126
127 .org 0x80
128 .Lconf_pair_start:
129
130 .long CONFIG_SYS_CCSRBAR_DEFAULT + CFG_SYS_MPC85xx_L2_OFFSET + MPC85xx_L2SRBAR0
131 .long CONFIG_SYS_INIT_L2_ADDR
132
133 .long CONFIG_SYS_CCSRBAR_DEFAULT + CFG_SYS_MPC85xx_L2_OFFSET + MPC85xx_L2ERRDIS
134 .long MPC85xx_L2ERRDIS_MBECC | MPC85xx_L2ERRDIS_SBECC
135
136 .long CONFIG_SYS_CCSRBAR_DEFAULT + CFG_SYS_MPC85xx_L2_OFFSET + MPC85xx_L2CTL
137 .long MPC85xx_L2CTL_L2E | MPC85xx_L2CTL_L2SRAM_ENTIRE
138
139 .long CONFIG_SYS_CCSRBAR_DEFAULT + ESDHCCTL
140 .long ESDHCCTL_SNOOP
141
142 .long 0x40000001
143 .long 256
144
145 .long 0x80000001
146 .Lconf_pair_end:
147
148 .org 0x1b8
149 .org 0x200
150
151#endif
152#endif
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167 .section .bootpg,"ax"
168 .globl _start
169
170_start:
171
172 li r1,MSR_DE
173 mtmsr r1
174
175
176
177
178
179
180 mr r24, r3
181
182#ifdef CONFIG_SYS_FSL_ERRATUM_A004510
183 mfspr r3,SPRN_SVR
184 rlwinm r3,r3,0,0xff
185 li r4,CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV
186 cmpw r3,r4
187 beq 1f
188
189#ifdef CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV2
190 li r4,CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV2
191 cmpw r3,r4
192 beq 1f
193#endif
194
195
196 li r27,0
197 b 2f
198
1991: li r27,1
200
201 msync
202 isync
203 mfspr r3,SPRN_HDBCR0
204 li r4,0x48
205 rlwimi r3,r4,0,0x1f8
206 mtspr SPRN_HDBCR0,r3
207 isync
2082:
209#endif
210#ifdef CONFIG_SYS_FSL_ERRATUM_A005125
211 msync
212 isync
213 mfspr r3, SPRN_HDBCR0
214 oris r3, r3, 0x0080
215 mtspr SPRN_HDBCR0, r3
216#endif
217
218
219
220 !defined(CONFIG_E6500)
221
222
223
224
225
226
227 mfspr r3, SPRN_L2CSR0
228 lis r2, L2CSR0_L2E@h
229 ori r2, r2, L2CSR0_L2E@l
230 and. r4, r3, r2
231 beq l2_disabled
232
233 mfspr r3, SPRN_L2CSR0
234
235 lis r2,(L2CSR0_L2FL)@h
236 ori r2, r2, (L2CSR0_L2FL)@l
237 or r3, r2, r3
238 sync
239 isync
240 mtspr SPRN_L2CSR0,r3
241 isync
2421:
243 mfspr r3, SPRN_L2CSR0
244 and. r1, r3, r2
245 bne 1b
246
247 mfspr r3, SPRN_L2CSR0
248 lis r2, L2CSR0_L2E@h
249 ori r2, r2, L2CSR0_L2E@l
250 andc r4, r3, r2
251 sync
252 isync
253 mtspr SPRN_L2CSR0,r4
254 isync
255
256l2_disabled:
257#endif
258
259
260
261
262 li r0,2
263 mtspr L1CSR0,r0
264 mtspr L1CSR1,r0
265
266 mfspr r1,DBSR
267 mtspr DBSR,r1
268
269
270 .macro create_tlb1_entry esel ts tsize epn wimg rpn perm phy_high scratch
271 lis \scratch, FSL_BOOKE_MAS0(1, \esel, 0)@h
272 ori \scratch, \scratch, FSL_BOOKE_MAS0(1, \esel, 0)@l
273 mtspr MAS0, \scratch
274 lis \scratch, FSL_BOOKE_MAS1(1, 1, 0, \ts, \tsize)@h
275 ori \scratch, \scratch, FSL_BOOKE_MAS1(1, 1, 0, \ts, \tsize)@l
276 mtspr MAS1, \scratch
277 lis \scratch, FSL_BOOKE_MAS2(\epn, \wimg)@h
278 ori \scratch, \scratch, FSL_BOOKE_MAS2(\epn, \wimg)@l
279 mtspr MAS2, \scratch
280 lis \scratch, FSL_BOOKE_MAS3(\rpn, 0, \perm)@h
281 ori \scratch, \scratch, FSL_BOOKE_MAS3(\rpn, 0, \perm)@l
282 mtspr MAS3, \scratch
283 lis \scratch, \phy_high@h
284 ori \scratch, \scratch, \phy_high@l
285 mtspr MAS7, \scratch
286 isync
287 msync
288 tlbwe
289 isync
290 .endm
291
292 .macro create_tlb0_entry esel ts tsize epn wimg rpn perm phy_high scratch
293 lis \scratch, FSL_BOOKE_MAS0(0, \esel, 0)@h
294 ori \scratch, \scratch, FSL_BOOKE_MAS0(0, \esel, 0)@l
295 mtspr MAS0, \scratch
296 lis \scratch, FSL_BOOKE_MAS1(1, 0, 0, \ts, \tsize)@h
297 ori \scratch, \scratch, FSL_BOOKE_MAS1(1, 0, 0, \ts, \tsize)@l
298 mtspr MAS1, \scratch
299 lis \scratch, FSL_BOOKE_MAS2(\epn, \wimg)@h
300 ori \scratch, \scratch, FSL_BOOKE_MAS2(\epn, \wimg)@l
301 mtspr MAS2, \scratch
302 lis \scratch, FSL_BOOKE_MAS3(\rpn, 0, \perm)@h
303 ori \scratch, \scratch, FSL_BOOKE_MAS3(\rpn, 0, \perm)@l
304 mtspr MAS3, \scratch
305 lis \scratch, \phy_high@h
306 ori \scratch, \scratch, \phy_high@l
307 mtspr MAS7, \scratch
308 isync
309 msync
310 tlbwe
311 isync
312 .endm
313
314 .macro delete_tlb1_entry esel scratch
315 lis \scratch, FSL_BOOKE_MAS0(1, \esel, 0)@h
316 ori \scratch, \scratch, FSL_BOOKE_MAS0(1, \esel, 0)@l
317 mtspr MAS0, \scratch
318 li \scratch, 0
319 mtspr MAS1, \scratch
320 isync
321 msync
322 tlbwe
323 isync
324 .endm
325
326 .macro delete_tlb0_entry esel epn wimg scratch
327 lis \scratch, FSL_BOOKE_MAS0(0, \esel, 0)@h
328 ori \scratch, \scratch, FSL_BOOKE_MAS0(0, \esel, 0)@l
329 mtspr MAS0, \scratch
330 li \scratch, 0
331 mtspr MAS1, \scratch
332 lis \scratch, FSL_BOOKE_MAS2(\epn, \wimg)@h
333 ori \scratch, \scratch, FSL_BOOKE_MAS2(\epn, \wimg)@l
334 mtspr MAS2, \scratch
335 isync
336 msync
337 tlbwe
338 isync
339 .endm
340
341
342
343
344 lis r1,CONFIG_VAL(SYS_MONITOR_BASE)@h
345 mtspr IVPR,r1
346
347 li r4,CriticalInput@l
348 mtspr IVOR0,r4
349 li r4,MachineCheck@l
350 mtspr IVOR1,r4
351 li r4,DataStorage@l
352 mtspr IVOR2,r4
353 li r4,InstStorage@l
354 mtspr IVOR3,r4
355 li r4,ExtInterrupt@l
356 mtspr IVOR4,r4
357 li r4,Alignment@l
358 mtspr IVOR5,r4
359 li r4,ProgramCheck@l
360 mtspr IVOR6,r4
361 li r4,FPUnavailable@l
362 mtspr IVOR7,r4
363 li r4,SystemCall@l
364 mtspr IVOR8,r4
365
366 li r4,Decrementer@l
367 mtspr IVOR10,r4
368 li r4,IntervalTimer@l
369 mtspr IVOR11,r4
370 li r4,WatchdogTimer@l
371 mtspr IVOR12,r4
372 li r4,DataTLBError@l
373 mtspr IVOR13,r4
374 li r4,InstructionTLBError@l
375 mtspr IVOR14,r4
376 li r4,DebugBreakpoint@l
377 mtspr IVOR15,r4
378#endif
379
380
381 li r0,0x0000
382 lis r1,0xffff
383 mtspr DEC,r0
384 mttbl r0
385 mttbu r0
386 mtspr TSR,r1
387 mtspr TCR,r0
388 mtspr ESR,r0
389 mtspr MCSR,r0
390 mtxer r0
391
392#ifdef CONFIG_SYS_BOOK3E_HV
393 mtspr MAS8,r0
394#endif
395
396
397 lis r0,HID0_EMCP@h
398
399 ori r0,r0,HID0_ENMAS7@l
400#endif
401#ifndef CONFIG_E500MC
402 ori r0,r0,HID0_TBEN@l
403#endif
404 mtspr HID0,r0
405
406
407 li r0,(HID1_ASTME|HID1_ABE)@l
408 mfspr r3,PVR
409 andi. r3,r3, 0xff
410 cmpwi r3,0x50@l
411 blt 1f
412
413 ori r0, r0, HID1_MBDD@l
4141:
415 mtspr HID1,r0
416#endif
417
418#ifdef CONFIG_SYS_FSL_ERRATUM_CPU_A003999
419 mfspr r3,SPRN_HDBCR1
420 oris r3,r3,0x0100
421 mtspr SPRN_HDBCR1,r3
422#endif
423
424
425
426 lis r0,BUCSR_ENABLE@h
427 ori r0,r0,BUCSR_ENABLE@l
428 mtspr SPRN_BUCSR,r0
429#endif
430
431
432 lis r1,0xffff
433 ori r1,r1,0xffff
434 mtspr DBSR,r1
435 lis r0,CONFIG_SYS_INIT_DBCR@h
436 ori r0,r0,CONFIG_SYS_INIT_DBCR@l
437 mtspr DBCR0,r0
438#endif
439
440
441
442
443
444
445
446
447
448
449
450 bl nexti
451nexti: mflr r1
452 li r2, 0
453 mtspr MAS6, r2
454 isync
455 msync
456 tlbsx 0, r1
457
458 mfspr r14, MAS0
459 rlwinm r14, r14, 16, 0xfff
460
461
462 mfspr r3, MAS1
463 li r2, 0xF80
464 andc r3, r3, r2
465 ori r3, r3, MAS1_TSIZE(BOOKE_PAGESZ_4K)@l
466 oris r3, r3, MAS1_IPROT@h
467 mtspr MAS1, r3
468
469
470
471
472
473 lis r3, MAS2_EPN@h
474 ori r3, r3, MAS2_EPN@l
475
476 and r1, r1, r3
477
478 mfspr r2, MAS2
479 andc r2, r2, r3
480 or r2, r2, r1
481#ifdef CONFIG_SYS_FSL_ERRATUM_A004510
482 cmpwi r27,0
483 beq 1f
484 andi. r15, r2, MAS2_I|MAS2_G
485 rlwinm r2, r2, 0, ~MAS2_I
486 ori r2, r2, MAS2_G
4871:
488#endif
489 mtspr MAS2, r2
490
491 mfspr r2, MAS3
492 andc r2, r2, r3
493 or r2, r2, r1
494 mtspr MAS3, r2
495
496 isync
497 msync
498 tlbwe
499
500
501
502
503
504 li r0, TLBIVAX_ALL | TLBIVAX_TLB0
505 tlbivax 0, r0
506 tlbsync
507
508 mfspr r4, SPRN_TLB1CFG
509 rlwinm r4, r4, 0, TLBnCFG_NENTRY_MASK
510
511 li r3, 0
512 mtspr MAS1, r3
5131: cmpw r3, r14
514 rlwinm r5, r3, 16, MAS0_ESEL_MSK
515 addi r3, r3, 1
516 beq 2f
517
518 oris r5, r5, MAS0_TLBSEL(1)@h
519 mtspr MAS0, r5
520
521 isync
522 tlbwe
523 isync
524 msync
525
5262: cmpw r3, r4
527 blt 1b
528
529
530 !defined(CONFIG_NXP_ESBC)
531
532
533
534
535
536
537
538
539#ifdef NOR_BOOT
540
541
542
543
544
545 create_tlb1_entry CONFIG_SYS_PPC_E500_DEBUG_TLB, \
546 0, BOOKE_PAGESZ_4M, \
547 CONFIG_VAL(SYS_MONITOR_BASE) & 0xffc00000, MAS2_I|MAS2_G, \
548 0xffc00000, MAS3_SX|MAS3_SW|MAS3_SR, \
549 0, r6
550
551#else
552
553
554
555
556 create_tlb1_entry CONFIG_SYS_PPC_E500_DEBUG_TLB, \
557 0, BOOKE_PAGESZ_256K, \
558 CONFIG_VAL(SYS_MONITOR_BASE) & 0xfffc0000, MAS2_I, \
559 CONFIG_VAL(SYS_MONITOR_BASE) & 0xfffc0000, MAS3_SX|MAS3_SW|MAS3_SR, \
560 0, r6
561#endif
562#endif
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580#endif
581
582create_ccsr_new_tlb:
583
584
585
586
587 lis r8, CONFIG_SYS_CCSRBAR@h
588 ori r8, r8, CONFIG_SYS_CCSRBAR@l
589 lis r9, (CONFIG_SYS_CCSRBAR + 0x1000)@h
590 ori r9, r9, (CONFIG_SYS_CCSRBAR + 0x1000)@l
591 create_tlb0_entry 0, \
592 0, BOOKE_PAGESZ_4K, \
593 CONFIG_SYS_CCSRBAR, MAS2_I|MAS2_G, \
594 CONFIG_SYS_CCSRBAR_PHYS_LOW, MAS3_SW|MAS3_SR, \
595 CONFIG_SYS_CCSRBAR_PHYS_HIGH, r3
596
597
598
599
600create_ccsr_old_tlb:
601 create_tlb0_entry 1, \
602 0, BOOKE_PAGESZ_4K, \
603 CONFIG_SYS_CCSRBAR + 0x1000, MAS2_I|MAS2_G, \
604 CONFIG_SYS_CCSRBAR_DEFAULT, MAS3_SW|MAS3_SR, \
605 0, r3
606
607
608
609
610
611
612
613
614verify_old_ccsr:
615 lis r0, CONFIG_SYS_CCSRBAR_DEFAULT@h
616 ori r0, r0, CONFIG_SYS_CCSRBAR_DEFAULT@l
617#ifdef CONFIG_FSL_CORENET
618 lwz r1, 4(r9)
619#else
620 lwz r1, 0(r9)
621 slwi r1, r1, 12
622#endif
623
624 cmpl 0, r0, r1
625
626
627
628
629
630
631
632infinite_debug_loop:
633 bne infinite_debug_loop
634
635#ifdef CONFIG_FSL_CORENET
636
637#define CCSR_LAWBARH0 (CONFIG_SYS_CCSRBAR + 0x1000)
638#define LAW_SIZE_4K 0xb
639#define CCSRBAR_LAWAR (LAW_EN | (0x1e << 20) | LAW_SIZE_4K)
640#define CCSRAR_C 0x80000000
641
642create_temp_law:
643
644
645
646
647 lis r0, CONFIG_SYS_CCSRBAR_PHYS_HIGH@h
648 ori r0, r0, CONFIG_SYS_CCSRBAR_PHYS_HIGH@l
649 lis r1, CONFIG_SYS_CCSRBAR_PHYS_LOW@h
650 ori r1, r1, CONFIG_SYS_CCSRBAR_PHYS_LOW@l
651 lis r2, CCSRBAR_LAWAR@h
652 ori r2, r2, CCSRBAR_LAWAR@l
653
654 stw r0, 0xc00(r9)
655 stw r1, 0xc04(r9)
656 sync
657 stw r2, 0xc08(r9)
658
659
660
661
662
663 lwz r0, 0xc08(r9)
664 isync
665
666
667
668
669
670
671read_old_ccsrbar:
672 lwz r0, 0(r9)
673 lwz r0, 4(r9)
674 isync
675
676
677
678
679
680
681
682
683
684
685write_new_ccsrbar:
686 lis r0, CONFIG_SYS_CCSRBAR_PHYS_HIGH@h
687 ori r0, r0, CONFIG_SYS_CCSRBAR_PHYS_HIGH@l
688 lis r1, CONFIG_SYS_CCSRBAR_PHYS_LOW@h
689 ori r1, r1, CONFIG_SYS_CCSRBAR_PHYS_LOW@l
690 lis r2, CCSRAR_C@h
691 ori r2, r2, CCSRAR_C@l
692
693 stw r0, 0(r9)
694 sync
695 stw r1, 4(r9)
696 sync
697
698
699
700
701
702 stw r2, 8(r9)
703 sync
704
705
706delete_temp_law:
707 li r1, 0
708 stw r1, 0xc08(r8)
709 sync
710 stw r1, 0xc00(r8)
711 stw r1, 0xc04(r8)
712 sync
713
714#else
715
716write_new_ccsrbar:
717
718
719
720
721
722 sync
723 lwz r0, 0(r9)
724 isync
725
726
727#define CCSRBAR_PHYS_RS12 ((CONFIG_SYS_CCSRBAR_PHYS_HIGH << 20) | \
728 (CONFIG_SYS_CCSRBAR_PHYS_LOW >> 12))
729
730
731 lis r0, CCSRBAR_PHYS_RS12@h
732 ori r0, r0, CCSRBAR_PHYS_RS12@l
733 stw r0, 0(r9)
734 sync
735
736
737
738
739
740
741
742 isync
743
744
745
746
747
748 lwz r0, 0(r8)
749 isync
750
751#endif
752
753
754delete_temp_tlbs:
755 delete_tlb0_entry 0, CONFIG_SYS_CCSRBAR, MAS2_I|MAS2_G, r3
756 delete_tlb0_entry 1, CONFIG_SYS_CCSRBAR + 0x1000, MAS2_I|MAS2_G, r3
757
758#endif
759
760
761create_ccsr_l2_tlb:
762
763
764
765
766 create_tlb0_entry 0, \
767 0, BOOKE_PAGESZ_4K, \
768 CONFIG_SYS_CCSRBAR + 0xC20000, MAS2_I|MAS2_G, \
769 CONFIG_SYS_CCSRBAR_PHYS_LOW + 0xC20000, MAS3_SW|MAS3_SR, \
770 CONFIG_SYS_CCSRBAR_PHYS_HIGH, r3
771
772enable_l2_cluster_l2:
773
774 lis r3, (CONFIG_SYS_CCSRBAR + 0xC20000)@h
775 ori r3, r3, (CONFIG_SYS_CCSRBAR + 0xC20000)@l
776 li r4, 33
777 stw r4, 4(r3)
778 lis r4, (L2CSR0_L2FI|L2CSR0_L2LFC)@h
779 ori r4, r4, (L2CSR0_L2FI|L2CSR0_L2LFC)@l
780 sync
781 stw r4, 0(r3)
782
7831: sync
784 lwz r0, 0(r3)
785 twi 0, r0, 0
786 isync
787 and. r1, r0, r4
788 bne 1b
789
790
791 lis r4, (L2CSR0_L2PE)@h
792 ori r4, r4, (L2CSR0_L2PE)@l
793 sync
794 stw r4, 0(r3)
795
7961: sync
797 lwz r0, 0(r3)
798 twi 0, r0, 0
799 isync
800 and. r1, r0, r4
801 beq 1b
802
803 lis r4, (L2CSR0_L2E|L2CSR0_L2PE)@h
804 ori r4, r4, (L2CSR0_L2REP_MODE)@l
805 sync
806 stw r4, 0(r3)
807
8081: sync
809 lwz r0, 0(r3)
810 twi 0, r0, 0
811 isync
812 and. r1, r0, r4
813 beq 1b
814
815delete_ccsr_l2_tlb:
816 delete_tlb0_entry 0, CONFIG_SYS_CCSRBAR + 0xC20000, MAS2_I|MAS2_G, r3
817#endif
818
819
820
821
822
823
824#ifdef CONFIG_SYS_CACHE_STASHING
825
826 li r2,(32 + 0)
827 mtspr L1CSR2,r2
828#endif
829
830
831 lis r2,(L1CSR1_ICFI|L1CSR1_ICLFR)@h
832 ori r2,r2,(L1CSR1_ICFI|L1CSR1_ICLFR)@l
833 mtspr SPRN_L1CSR1,r2
8341:
835 mfspr r3,SPRN_L1CSR1
836 and. r1,r3,r2
837 bne 1b
838
839 lis r3,(L1CSR1_CPE|L1CSR1_ICE)@h
840 ori r3,r3,(L1CSR1_CPE|L1CSR1_ICE)@l
841 mtspr SPRN_L1CSR1,r3
842 isync
8432:
844 mfspr r3,SPRN_L1CSR1
845 andi. r1,r3,L1CSR1_ICE@l
846 beq 2b
847
848
849 lis r2,(L1CSR0_DCFI|L1CSR0_DCLFR)@h
850 ori r2,r2,(L1CSR0_DCFI|L1CSR0_DCLFR)@l
851 mtspr SPRN_L1CSR0,r2
8521:
853 mfspr r3,SPRN_L1CSR0
854 and. r1,r3,r2
855 bne 1b
856
857 lis r3,(L1CSR0_CPE|L1CSR0_DCE)@h
858 ori r3,r3,(L1CSR0_CPE|L1CSR0_DCE)@l
859 mtspr SPRN_L1CSR0,r3
860 isync
8612:
862 mfspr r3,SPRN_L1CSR0
863 andi. r1,r3,L1CSR0_DCE@l
864 beq 2b
865#ifdef CONFIG_SYS_FSL_ERRATUM_A004510
866#define DCSR_LAWBARH0 (CONFIG_SYS_CCSRBAR + 0x1000)
867#define LAW_SIZE_1M 0x13
868#define DCSRBAR_LAWAR (LAW_EN | (0x1d << 20) | LAW_SIZE_1M)
869
870 cmpwi r27,0
871 beq 9f
872
873
874
875
876
877
878
879
880
881
882 xori r8, r14, 32
883 lis r0, MAS0_TLBSEL(1)@h
884 rlwimi r0, r8, 16, MAS0_ESEL_MSK
885 lis r1, FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)@h
886 ori r1, r1, FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)@l
887 lis r7, CONFIG_SYS_CCSRBAR@h
888 ori r7, r7, CONFIG_SYS_CCSRBAR@l
889 ori r2, r7, MAS2_I|MAS2_G
890 lis r3, FSL_BOOKE_MAS3(CONFIG_SYS_CCSRBAR_PHYS_LOW, 0, (MAS3_SW|MAS3_SR))@h
891 ori r3, r3, FSL_BOOKE_MAS3(CONFIG_SYS_CCSRBAR_PHYS_LOW, 0, (MAS3_SW|MAS3_SR))@l
892 lis r4, CONFIG_SYS_CCSRBAR_PHYS_HIGH@h
893 ori r4, r4, CONFIG_SYS_CCSRBAR_PHYS_HIGH@l
894 mtspr MAS0, r0
895 mtspr MAS1, r1
896 mtspr MAS2, r2
897 mtspr MAS3, r3
898 mtspr MAS7, r4
899 isync
900 tlbwe
901 isync
902 msync
903
904
905 li r0, 0
906 lis r3, DCSRBAR_LAWAR@h
907 ori r3, r3, DCSRBAR_LAWAR@l
908
909 stw r0, 0xc00(r7)
910 stw r0, 0xc04(r7)
911 sync
912 stw r3, 0xc08(r7)
913
914
915 lwz r3, 0xc08(r7)
916 isync
917
918
919
920 addi r9, r8, 1
921 lis r0, MAS0_TLBSEL(1)@h
922 rlwimi r0, r9, 16, MAS0_ESEL_MSK
923 lis r1, FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1M)@h
924 ori r1, r1, FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1M)@l
925 li r6, 0
926 ori r2, r6, MAS2_I|MAS2_G
927 li r3, MAS3_SW|MAS3_SR
928 li r4, 0
929 mtspr MAS0, r0
930 mtspr MAS1, r1
931 mtspr MAS2, r2
932 mtspr MAS3, r3
933 mtspr MAS7, r4
934 isync
935 tlbwe
936 isync
937 msync
938
939
940#define CTBENR 0xe2084
941 li r3, 1
942 addis r4, r7, CTBENR@ha
943 stw r3, CTBENR@l(r4)
944 lwz r3, CTBENR@l(r4)
945 twi 0,r3,0
946 isync
947
948 .macro erratum_set_ccsr offset value
949 addis r3, r7, \offset@ha
950 lis r4, \value@h
951 addi r3, r3, \offset@l
952 ori r4, r4, \value@l
953 bl erratum_set_value
954 .endm
955
956 .macro erratum_set_dcsr offset value
957 addis r3, r6, \offset@ha
958 lis r4, \value@h
959 addi r3, r3, \offset@l
960 ori r4, r4, \value@l
961 bl erratum_set_value
962 .endm
963
964 erratum_set_dcsr 0xb0e08 0xe0201800
965 erratum_set_dcsr 0xb0e18 0xe0201800
966 erratum_set_dcsr 0xb0e38 0xe0400000
967 erratum_set_dcsr 0xb0008 0x00900000
968 erratum_set_dcsr 0xb0e40 0xe00a0000
969 erratum_set_ccsr 0x18600 CFG_SYS_FSL_CORENET_SNOOPVEC_COREONLY
970#ifdef CONFIG_RAMBOOT_PBL
971 erratum_set_ccsr 0x10f00 0x495e5000
972#else
973 erratum_set_ccsr 0x10f00 0x415e5000
974#endif
975 erratum_set_ccsr 0x11f00 0x415e5000
976
977
978 bl 2f
9792: mflr r3
980 tlbsx 0, r3
981 mfspr r4, MAS2
982 rlwimi r4, r15, 0, MAS2_I
983 rlwimi r4, r15, 0, MAS2_G
984 mtspr MAS2, r4
985 isync
986 tlbwe
987 isync
988 msync
989
990
991 lis r3,(L1CSR1_ICFI|L1CSR1_ICLFR)@h
992 ori r3,r3,(L1CSR1_ICFI|L1CSR1_ICLFR)@l
993 sync
994 isync
995 mtspr SPRN_L1CSR1,r3
996 isync
9972: sync
998 mfspr r4,SPRN_L1CSR1
999 and. r4,r4,r3
1000 bne 2b
1001
1002 lis r3,(L1CSR1_CPE|L1CSR1_ICE)@h
1003 ori r3,r3,(L1CSR1_CPE|L1CSR1_ICE)@l
1004 sync
1005 isync
1006 mtspr SPRN_L1CSR1,r3
1007 isync
10082: sync
1009 mfspr r4,SPRN_L1CSR1
1010 and. r4,r4,r3
1011 beq 2b
1012
1013
1014 lis r0, MAS0_TLBSEL(1)@h
1015 rlwimi r0, r9, 16, MAS0_ESEL_MSK
1016 li r3, 0
1017 mtspr MAS0, r0
1018 mtspr MAS1, r3
1019 isync
1020 tlbwe
1021 isync
1022 msync
1023
1024 li r3, 0
1025 stw r3, 0xc08(r7)
1026 lwz r3, 0xc08(r7)
1027 isync
1028
1029 lis r0, MAS0_TLBSEL(1)@h
1030 rlwimi r0, r8, 16, MAS0_ESEL_MSK
1031 li r3, 0
1032 mtspr MAS0, r0
1033 mtspr MAS1, r3
1034 isync
1035 tlbwe
1036 isync
1037 msync
1038
1039 b 9f
1040
1041
1042erratum_set_value:
1043
1044 sync
1045 mfspr r11, SPRN_L1CSR1
1046 rlwinm r11, r11, 0, ~L1CSR1_ICUL
1047 sync
1048 isync
1049 mtspr SPRN_L1CSR1, r11
1050 isync
1051
1052 mflr r12
1053 bl 5f
10545: mflr r5
1055 addi r5, r5, 2f - 5b
1056 icbtls 0, 0, r5
1057 addi r5, r5, 64
1058
1059 sync
1060 mfspr r11, SPRN_L1CSR1
10613: andi. r11, r11, L1CSR1_ICUL
1062 bne 3b
1063
1064 icbtls 0, 0, r5
1065 addi r5, r5, 64
1066
1067 sync
1068 mfspr r11, SPRN_L1CSR1
10693: andi. r11, r11, L1CSR1_ICUL
1070 bne 3b
1071
1072 b 2f
1073 .align 6
1074
10752: sync
1076
1077 mfspr r5, SPRN_TBRL
1078 addis r11, r5, 0x10000@h
10794: mfspr r5, SPRN_TBRL
1080 subf. r5, r5, r11
1081 bgt 4b
1082
1083 stw r4, 0(r3)
1084
1085 mfspr r5, SPRN_TBRL
1086 addis r11, r5, 0x10000@h
10874: mfspr r5, SPRN_TBRL
1088 subf. r5, r5, r11
1089 bgt 4b
1090
1091 sync
1092
1093
1094
1095
1096
1097
1098 .rept 19
1099 nop
1100 .endr
1101
1102 sync
1103 mfspr r11, SPRN_L1CSR1
1104 rlwinm r11, r11, 0, ~L1CSR1_ICUL
1105 sync
1106 isync
1107 mtspr SPRN_L1CSR1, r11
1108 isync
1109
1110 mtlr r12
1111 blr
1112
11139:
1114#endif
1115
1116create_init_ram_area:
1117 lis r6,FSL_BOOKE_MAS0(1, 15, 0)@h
1118 ori r6,r6,FSL_BOOKE_MAS0(1, 15, 0)@l
1119
1120#ifdef NOR_BOOT
1121
1122 create_tlb1_entry 15, \
1123 1, BOOKE_PAGESZ_4M, \
1124 CONFIG_VAL(SYS_MONITOR_BASE) & 0xffc00000, MAS2_I|MAS2_G, \
1125 0xffc00000, MAS3_SX|MAS3_SW|MAS3_SR, \
1126 0, r6
1127
1128
1129
1130
1131
1132 create_tlb1_entry 15, \
1133 1, BOOKE_PAGESZ_1M, \
1134 CONFIG_VAL(SYS_MONITOR_BASE) & 0xfff00000, MAS2_I|MAS2_G, \
1135 CONFIG_SYS_PBI_FLASH_WINDOW & 0xfff00000, MAS3_SX|MAS3_SW|MAS3_SR, \
1136 0, r6
1137
1138
1139
1140
1141
1142
1143
1144 (!defined(CONFIG_SPL) || defined(CONFIG_SPL_BUILD))
1145
1146
1147
1148 create_tlb1_entry 15, \
1149 1, BOOKE_PAGESZ_1M, \
1150 CONFIG_VAL(SYS_MONITOR_BASE) & 0xfff00000, MAS2_I|MAS2_G, \
1151 CONFIG_SYS_INIT_L3_ADDR & 0xfff00000, MAS3_SX|MAS3_SW|MAS3_SR, \
1152 0, r6
1153
1154#else
1155
1156
1157
1158
1159 create_tlb1_entry 15, \
1160 1, BOOKE_PAGESZ_1M, \
1161 CONFIG_VAL(SYS_MONITOR_BASE) & 0xfff00000, MAS2_I|MAS2_G, \
1162 CONFIG_VAL(SYS_MONITOR_BASE) & 0xfff00000, MAS3_SX|MAS3_SW|MAS3_SR, \
1163 0, r6
1164#endif
1165
1166
1167
1168 defined(CONFIG_SYS_INIT_RAM_ADDR_PHYS_HIGH)
1169 create_tlb1_entry 14, \
1170 1, BOOKE_PAGESZ_16K, \
1171 CONFIG_SYS_INIT_RAM_ADDR, 0, \
1172 CONFIG_SYS_INIT_RAM_ADDR_PHYS_LOW, MAS3_SX|MAS3_SW|MAS3_SR, \
1173 CONFIG_SYS_INIT_RAM_ADDR_PHYS_HIGH, r6
1174
1175#else
1176 create_tlb1_entry 14, \
1177 1, BOOKE_PAGESZ_16K, \
1178 CONFIG_SYS_INIT_RAM_ADDR, 0, \
1179 CONFIG_SYS_INIT_RAM_ADDR, MAS3_SX|MAS3_SW|MAS3_SR, \
1180 0, r6
1181#endif
1182
1183 lis r6,MSR_IS|MSR_DS|MSR_DE@h
1184 ori r6,r6,MSR_IS|MSR_DS|MSR_DE@l
1185 lis r7,switch_as@h
1186 ori r7,r7,switch_as@l
1187
1188 mtspr SPRN_SRR0,r7
1189 mtspr SPRN_SRR1,r6
1190 rfi
1191
1192switch_as:
1193
1194
1195
1196
1197 lis r3,CONFIG_SYS_INIT_RAM_ADDR@h
1198 ori r3,r3,CONFIG_SYS_INIT_RAM_ADDR@l
1199 mfspr r2, L1CFG0
1200 andi. r2, r2, 0x1ff
1201
1202 slwi r2, r2, (10 - 1 - L1_CACHE_SHIFT)
1203 mtctr r2
1204 li r0,0
12051:
1206 dcbz r0,r3
1207#ifdef CONFIG_E6500
1208 dcbtls 2, r0, r3
1209 dcbtls 0, r0, r3
1210#else
1211 dcbtls 0, r0, r3
1212#endif
1213 addi r3,r3,CONFIG_SYS_CACHELINE_SIZE
1214 bdnz 1b
1215
1216
1217
1218
1219 b _start_cont
1220#else
1221
1222
1223 lis r3,_start_cont@h
1224 ori r3,r3,_start_cont@l
1225 mtlr r3
1226 blr
1227#endif
1228
1229 .text
1230 .globl _start_cont
1231_start_cont:
1232
1233 lis r3,(CONFIG_SYS_INIT_RAM_ADDR)@h
1234 ori r3,r3,((CONFIG_SYS_INIT_SP_OFFSET-16)&~0xf)@l
1235
1236
1237
1238
1239#endif
1240
1241
1242 subi r3,r3,((CONFIG_VAL(SYS_MALLOC_F_LEN)+16+15)&~0xf)
1243#endif
1244
1245
1246 lis r4,(CONFIG_SYS_INIT_RAM_ADDR)@h
1247 ori r4,r4,(CONFIG_SYS_INIT_RAM_SIZE)@l
1248
1249 li r0,0
1250
12511: subi r4,r4,4
1252 stw r0,0(r4)
1253 cmplw r4,r3
1254 bne 1b
1255
1256
1257 lis r4,SYS_INIT_SP_ADDR@h
1258 ori r4,r4,SYS_INIT_SP_ADDR@l
1259
1260 addi r3,r3,16
1261 stw r3,GD_MALLOC_BASE(r4)
1262 subi r3,r3,16
1263#endif
1264 li r0,0
1265 stw r0,0(r3)
1266 stw r0,+4(r3)
1267 mr r1,r3
1268
1269 GET_GOT
1270
1271 bl _GLOBAL_OFFSET_TABLE_@local-4
1272 mflr r30
1273
1274
1275 mr r3, r24
1276
1277 bl cpu_init_early_f
1278
1279
1280 lis r3,(MSR_CE|MSR_ME|MSR_DE)@h
1281 ori r3,r3,(MSR_CE|MSR_ME|MSR_DE)@l
1282 mtmsr r3
1283 isync
1284
1285 bl cpu_init_f
1286 bl board_init_f
1287 isync
1288
1289
1290
1291#ifndef MINIMAL_SPL
1292 .globl _start_of_vectors
1293_start_of_vectors:
1294
1295
1296 CRIT_EXCEPTION(0x0100, CriticalInput, CritcalInputException)
1297
1298
1299 MCK_EXCEPTION(0x200, MachineCheck, MachineCheckException)
1300
1301
1302 STD_EXCEPTION(0x0300, DataStorage, UnknownException)
1303
1304
1305 STD_EXCEPTION(0x0400, InstStorage, UnknownException)
1306
1307
1308 STD_EXCEPTION(0x0500, ExtInterrupt, ExtIntException)
1309
1310
1311Alignment:
1312 EXCEPTION_PROLOG(SRR0, SRR1)
1313 mfspr r4,DAR
1314 stw r4,_DAR(r21)
1315 mfspr r5,DSISR
1316 stw r5,_DSISR(r21)
1317 addi r3,r1,STACK_FRAME_OVERHEAD
1318 EXC_XFER_TEMPLATE(0x600, Alignment, AlignmentException,
1319 MSR_KERNEL, COPY_EE)
1320
1321
1322ProgramCheck:
1323 EXCEPTION_PROLOG(SRR0, SRR1)
1324 addi r3,r1,STACK_FRAME_OVERHEAD
1325 EXC_XFER_TEMPLATE(0x700, ProgramCheck, ProgramCheckException,
1326 MSR_KERNEL, COPY_EE)
1327
1328
1329
1330 STD_EXCEPTION(0x0800, FPUnavailable, UnknownException)
1331 STD_EXCEPTION(0x0900, SystemCall, UnknownException)
1332 STD_EXCEPTION(0x0a00, Decrementer, timer_interrupt)
1333 STD_EXCEPTION(0x0b00, IntervalTimer, UnknownException)
1334 STD_EXCEPTION(0x0c00, WatchdogTimer, UnknownException)
1335
1336 STD_EXCEPTION(0x0d00, DataTLBError, UnknownException)
1337 STD_EXCEPTION(0x0e00, InstructionTLBError, UnknownException)
1338
1339 CRIT_EXCEPTION(0x0f00, DebugBreakpoint, DebugException )
1340
1341 .globl _end_of_vectors
1342_end_of_vectors:
1343
1344
1345 . = . + (0x100 - ( . & 0xff ))
1346
1347
1348
1349
1350
1351
1352
1353 .globl transfer_to_handler
1354transfer_to_handler:
1355 SAVE_GPR(7, r21)
1356 SAVE_4GPRS(8, r21)
1357 SAVE_8GPRS(12, r21)
1358 SAVE_8GPRS(24, r21)
1359
1360 li r22,0
1361 stw r22,RESULT(r21)
1362 mtspr SPRG2,r22
1363
1364 mtctr r23
1365 mtmsr r20
1366 bctrl
1367
1368int_return:
1369 mfmsr r28
1370 li r4,0
1371 ori r4,r4,MSR_EE
1372 andc r28,r28,r4
1373 SYNC
1374 mtmsr r28
1375 SYNC
1376 lwz r2,_CTR(r1)
1377 lwz r0,_LINK(r1)
1378 mtctr r2
1379 mtlr r0
1380 lwz r2,_XER(r1)
1381 lwz r0,_CCR(r1)
1382 mtspr XER,r2
1383 mtcrf 0xFF,r0
1384 REST_10GPRS(3, r1)
1385 REST_10GPRS(13, r1)
1386 REST_8GPRS(23, r1)
1387 REST_GPR(31, r1)
1388 lwz r2,_NIP(r1)
1389 lwz r0,_MSR(r1)
1390 mtspr SRR0,r2
1391 mtspr SRR1,r0
1392 lwz r0,GPR0(r1)
1393 lwz r2,GPR2(r1)
1394 lwz r1,GPR1(r1)
1395 SYNC
1396 rfi
1397
1398
1399
1400.globl flush_icache
1401flush_icache:
1402.globl invalidate_icache
1403invalidate_icache:
1404 mfspr r0,L1CSR1
1405 ori r0,r0,L1CSR1_ICFI
1406 msync
1407 isync
1408 mtspr L1CSR1,r0
1409 isync
1410 blr
1411
1412.globl invalidate_dcache
1413invalidate_dcache:
1414 mfspr r0,L1CSR0
1415 ori r0,r0,L1CSR0_DCFI
1416 msync
1417 isync
1418 mtspr L1CSR0,r0
1419 isync
1420 blr
1421
1422 .globl icache_enable
1423icache_enable:
1424 mflr r8
1425 bl invalidate_icache
1426 mtlr r8
1427 isync
1428 mfspr r4,L1CSR1
1429 ori r4,r4,(L1CSR1_CPE | L1CSR1_ICE)@l
1430 oris r4,r4,(L1CSR1_CPE | L1CSR1_ICE)@h
1431 mtspr L1CSR1,r4
1432 isync
1433 blr
1434
1435 .globl icache_disable
1436icache_disable:
1437 mfspr r0,L1CSR1
1438 lis r3,0
1439 ori r3,r3,L1CSR1_ICE
1440 andc r0,r0,r3
1441 mtspr L1CSR1,r0
1442 isync
1443 blr
1444
1445 .globl icache_status
1446icache_status:
1447 mfspr r3,L1CSR1
1448 andi. r3,r3,L1CSR1_ICE
1449 blr
1450
1451 .globl dcache_enable
1452dcache_enable:
1453 mflr r8
1454 bl invalidate_dcache
1455 mtlr r8
1456 isync
1457 mfspr r0,L1CSR0
1458 ori r0,r0,(L1CSR0_CPE | L1CSR0_DCE)@l
1459 oris r0,r0,(L1CSR0_CPE | L1CSR0_DCE)@h
1460 msync
1461 isync
1462 mtspr L1CSR0,r0
1463 isync
1464 blr
1465
1466 .globl dcache_disable
1467dcache_disable:
1468 mfspr r3,L1CSR0
1469 lis r4,0
1470 ori r4,r4,L1CSR0_DCE
1471 andc r3,r3,r4
1472 mtspr L1CSR0,r3
1473 isync
1474 blr
1475
1476 .globl dcache_status
1477dcache_status:
1478 mfspr r3,L1CSR0
1479 andi. r3,r3,L1CSR0_DCE
1480 blr
1481
1482
1483
1484
1485
1486 .globl in8
1487in8:
1488 lbz r3,0x0000(r3)
1489 blr
1490
1491
1492
1493
1494
1495 .globl out8
1496out8:
1497 stb r4,0x0000(r3)
1498 sync
1499 blr
1500
1501
1502
1503
1504
1505 .globl out16
1506out16:
1507 sth r4,0x0000(r3)
1508 sync
1509 blr
1510
1511
1512
1513
1514
1515 .globl out16r
1516out16r:
1517 sthbrx r4,r0,r3
1518 sync
1519 blr
1520
1521
1522
1523
1524
1525 .globl out32
1526out32:
1527 stw r4,0x0000(r3)
1528 sync
1529 blr
1530
1531
1532
1533
1534
1535 .globl out32r
1536out32r:
1537 stwbrx r4,r0,r3
1538 sync
1539 blr
1540
1541
1542
1543
1544
1545 .globl in16
1546in16:
1547 lhz r3,0x0000(r3)
1548 blr
1549
1550
1551
1552
1553
1554 .globl in16r
1555in16r:
1556 lhbrx r3,r0,r3
1557 blr
1558
1559
1560
1561
1562
1563 .globl in32
1564in32:
1565 lwz 3,0x0000(3)
1566 blr
1567
1568
1569
1570
1571
1572 .globl in32r
1573in32r:
1574 lwbrx r3,r0,r3
1575 blr
1576#endif
1577
1578
1579
1580
1581
1582
1583 .globl write_tlb
1584write_tlb:
1585 mtspr MAS0,r3
1586 mtspr MAS1,r4
1587 mtspr MAS2,r5
1588 mtspr MAS3,r6
1589#ifdef CONFIG_ENABLE_36BIT_PHYS
1590 mtspr MAS7,r7
1591#endif
1592 li r3,0
1593#ifdef CONFIG_SYS_BOOK3E_HV
1594 mtspr MAS8,r3
1595#endif
1596 isync
1597 tlbwe
1598 msync
1599 isync
1600 blr
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613 .globl relocate_code
1614relocate_code:
1615 mr r1,r3
1616 mr r9,r4
1617 mr r10,r5
1618
1619 GET_GOT
1620#ifndef CONFIG_SPL_SKIP_RELOCATE
1621 mr r3,r5
1622 lis r4,CONFIG_VAL(SYS_MONITOR_BASE)@h
1623 ori r4,r4,CONFIG_VAL(SYS_MONITOR_BASE)@l
1624 lwz r5,GOT(__init_end)
1625 sub r5,r5,r4
1626 li r6,CONFIG_SYS_CACHELINE_SIZE
1627
1628
1629
1630
1631
1632
1633
1634
1635 sub r15,r10,r4
1636
1637
1638 add r12,r12,r15
1639
1640 add r30,r30,r15
1641
1642
1643
1644
1645
1646 cmplw cr1,r3,r4
1647 addi r0,r5,3
1648 srwi. r0,r0,2
1649 beq cr1,4f
1650 beq 7f
1651 mtctr r0
1652 bge cr1,2f
1653
1654 la r8,-4(r4)
1655 la r7,-4(r3)
16561: lwzu r0,4(r8)
1657 stwu r0,4(r7)
1658 bdnz 1b
1659 b 4f
1660
16612: slwi r0,r0,2
1662 add r8,r4,r0
1663 add r7,r3,r0
16643: lwzu r0,-4(r8)
1665 stwu r0,-4(r7)
1666 bdnz 3b
1667
1668
1669
1670
1671
16724: cmpwi r6,0
1673 add r5,r3,r5
1674 beq 7f
1675 subi r0,r6,1
1676 andc r3,r3,r0
1677 mr r4,r3
16785: dcbst 0,r4
1679 add r4,r4,r6
1680 cmplw r4,r5
1681 blt 5b
1682 sync
1683 mr r4,r3
16846: icbi 0,r4
1685 add r4,r4,r6
1686 cmplw r4,r5
1687 blt 6b
16887: sync
1689 isync
1690
1691
1692
1693
1694
1695
1696 addi r0,r10,in_ram - CONFIG_VAL(SYS_MONITOR_BASE)
1697
1698
1699
1700
1701
1702 mtspr IVOR15,r0
1703
1704
1705
1706
1707 mtspr IVPR,r10
1708
1709 mtlr r0
1710 blr
1711#endif
1712 .globl in_ram
1713in_ram:
1714
1715
1716
1717
1718
1719
1720
1721 li r0,__got2_entries@sectoff@l
1722 la r3,GOT(_GOT2_TABLE_)
1723 lwz r11,GOT(_GOT2_TABLE_)
1724 mtctr r0
1725 sub r11,r3,r11
1726 addi r3,r3,-4
17271: lwzu r0,4(r3)
1728 cmpwi r0,0
1729 beq- 2f
1730 add r0,r0,r11
1731 stw r0,0(r3)
17322: bdnz 1b
1733
1734
1735
1736
1737
1738 li r0,__fixup_entries@sectoff@l
1739 lwz r3,GOT(_FIXUP_TABLE_)
1740 cmpwi r0,0
1741 mtctr r0
1742 addi r3,r3,-4
1743 beq 4f
17443: lwzu r4,4(r3)
1745 lwzux r0,r4,r11
1746 cmpwi r0,0
1747 add r0,r0,r11
1748 stw r4,0(r3)
1749 beq- 5f
1750 stw r0,0(r4)
17515: bdnz 3b
17524:
1753clear_bss:
1754
1755
1756
1757 lwz r3,GOT(__bss_start)
1758 lwz r4,GOT(__bss_end)
1759
1760 cmplw 0,r3,r4
1761 beq 6f
1762
1763 li r0,0
17645:
1765 stw r0,0(r3)
1766 addi r3,r3,4
1767 cmplw 0,r3,r4
1768 blt 5b
17696:
1770
1771 mr r3,r9
1772 mr r4,r10
1773 bl board_init_r
1774
1775#ifndef MINIMAL_SPL
1776
1777
1778
1779
1780
1781
1782 .globl trap_init
1783trap_init:
1784 mflr r11
1785 bl _GLOBAL_OFFSET_TABLE_-4
1786 mflr r12
1787
1788
1789 mtspr IVPR,r3
1790
1791 lwz r4,CriticalInput@got(r12)
1792 mtspr IVOR0,r4
1793 lwz r4,MachineCheck@got(r12)
1794 mtspr IVOR1,r4
1795 lwz r4,DataStorage@got(r12)
1796 mtspr IVOR2,r4
1797 lwz r4,InstStorage@got(r12)
1798 mtspr IVOR3,r4
1799 lwz r4,ExtInterrupt@got(r12)
1800 mtspr IVOR4,r4
1801 lwz r4,Alignment@got(r12)
1802 mtspr IVOR5,r4
1803 lwz r4,ProgramCheck@got(r12)
1804 mtspr IVOR6,r4
1805 lwz r4,FPUnavailable@got(r12)
1806 mtspr IVOR7,r4
1807 lwz r4,SystemCall@got(r12)
1808 mtspr IVOR8,r4
1809
1810 lwz r4,Decrementer@got(r12)
1811 mtspr IVOR10,r4
1812 lwz r4,IntervalTimer@got(r12)
1813 mtspr IVOR11,r4
1814 lwz r4,WatchdogTimer@got(r12)
1815 mtspr IVOR12,r4
1816 lwz r4,DataTLBError@got(r12)
1817 mtspr IVOR13,r4
1818 lwz r4,InstructionTLBError@got(r12)
1819 mtspr IVOR14,r4
1820 lwz r4,DebugBreakpoint@got(r12)
1821 mtspr IVOR15,r4
1822
1823 mtlr r11
1824 blr
1825
1826.globl unlock_ram_in_cache
1827unlock_ram_in_cache:
1828
1829 lis r3,(CONFIG_SYS_INIT_RAM_ADDR & ~(CONFIG_SYS_CACHELINE_SIZE-1))@h
1830 ori r3,r3,(CONFIG_SYS_INIT_RAM_ADDR & ~(CONFIG_SYS_CACHELINE_SIZE-1))@l
1831 mfspr r4,L1CFG0
1832 andi. r4,r4,0x1ff
1833 slwi r4,r4,(10 - 1 - L1_CACHE_SHIFT)
1834 mtctr r4
18351: dcbi r0,r3
1836#ifdef CONFIG_E6500
1837 dcblc 2, r0, r3
1838 dcblc 0, r0, r3
1839#else
1840 dcblc r0,r3
1841#endif
1842 addi r3,r3,CONFIG_SYS_CACHELINE_SIZE
1843 bdnz 1b
1844 sync
1845
1846
1847 lis r3,CONFIG_SYS_INIT_RAM_ADDR@h
1848 ori r3,r3,CONFIG_SYS_INIT_RAM_ADDR@l
1849 tlbivax 0,r3
1850 addi r3,r3,0x1000
1851 tlbivax 0,r3
1852 addi r3,r3,0x1000
1853 tlbivax 0,r3
1854 addi r3,r3,0x1000
1855 tlbivax 0,r3
1856 isync
1857 blr
1858
1859.globl flush_dcache
1860flush_dcache:
1861 mfspr r3,SPRN_L1CFG0
1862
1863 rlwinm r5,r3,9,3
1864 twlgti r5,1
1865
1866
1867 li r4,32
1868 subfic r6,r5,2
1869
1870
1871 slw r5,r4,r5
1872
1873 rlwinm r7,r3,0,0xff
1874 mulli r7,r7,13
1875
1876
1877 slw r7,r7,r6
1878
1879
1880 mfspr r8,SPRN_HID0
1881 ori r9,r8,HID0_DCFA@l
1882 mtspr SPRN_HID0,r9
1883 isync
1884
1885 lis r4,0
1886 mtctr r7
1887
18881: lwz r3,0(r4)
1889 add r4,r4,r5
1890 bdnz 1b
1891
1892 msync
1893 lis r4,0
1894 mtctr r7
1895
18961: dcbf 0,r4
1897 add r4,r4,r5
1898 bdnz 1b
1899
1900
1901 mtspr SPRN_HID0,r8
1902 isync
1903
1904 blr
1905#endif
1906