1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#include <linux/init.h>
18#include <linux/magic.h>
19#include <linux/pgtable.h>
20#include <linux/sizes.h>
21#include <asm/processor.h>
22#include <asm/page.h>
23#include <asm/mmu.h>
24#include <asm/cache.h>
25#include <asm/cputable.h>
26#include <asm/thread_info.h>
27#include <asm/ppc_asm.h>
28#include <asm/asm-offsets.h>
29#include <asm/ptrace.h>
30#include <asm/export.h>
31#include <asm/code-patching-asm.h>
32
33#include "head_32.h"
34
35.macro compare_to_kernel_boundary scratch, addr
36
37
38 not. \scratch, \addr
39#else
40 rlwinm \scratch, \addr, 16, 0xfff8
41 cmpli cr0, \scratch, PAGE_OFFSET@h
42#endif
43.endm
44
45
46
47
48
49
50
51 defined(CONFIG_DEBUG_PAGEALLOC)
52#define ITLB_MISS_KERNEL 1
53#endif
54
55
56
57
58
59#define RPN_PATTERN 0x00f0
60
61#define PAGE_SHIFT_512K 19
62#define PAGE_SHIFT_8M 23
63
64 __HEAD
65_ENTRY(_stext);
66_ENTRY(_start);
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 .globl __start
92__start:
93 mr r31,r3
94
95
96
97
98 bl initial_mmu
99
100
101
102
103
104turn_on_mmu:
105 mfmsr r0
106 ori r0,r0,MSR_DR|MSR_IR
107 mtspr SPRN_SRR1,r0
108 lis r0,start_here@h
109 ori r0,r0,start_here@l
110 mtspr SPRN_SRR0,r0
111 rfi
112
113
114#ifdef CONFIG_PERF_EVENTS
115 .align 4
116
117 .globl itlb_miss_counter
118itlb_miss_counter:
119 .space 4
120
121 .globl dtlb_miss_counter
122dtlb_miss_counter:
123 .space 4
124
125 .globl instruction_counter
126instruction_counter:
127 .space 4
128#endif
129
130
131 EXCEPTION(0x100, Reset, system_reset_exception, EXC_XFER_STD)
132
133
134 . = 0x200
135MachineCheck:
136 EXCEPTION_PROLOG handle_dar_dsisr=1
137 save_dar_dsisr_on_stack r4, r5, r11
138 li r6, RPN_PATTERN
139 mtspr SPRN_DAR, r6
140 addi r3,r1,STACK_FRAME_OVERHEAD
141 EXC_XFER_STD(0x200, machine_check_exception)
142
143
144 EXCEPTION(0x500, HardwareInterrupt, do_IRQ, EXC_XFER_LITE)
145
146
147 . = 0x600
148Alignment:
149 EXCEPTION_PROLOG handle_dar_dsisr=1
150 save_dar_dsisr_on_stack r4, r5, r11
151 li r6, RPN_PATTERN
152 mtspr SPRN_DAR, r6
153 addi r3,r1,STACK_FRAME_OVERHEAD
154 b .Lalignment_exception_ool
155
156
157 EXCEPTION(0x700, ProgramCheck, program_check_exception, EXC_XFER_STD)
158
159
160 EXCEPTION(0x900, Decrementer, timer_interrupt, EXC_XFER_LITE)
161
162
163 . = 0xa00
164.Lalignment_exception_ool:
165 EXC_XFER_STD(0x600, alignment_exception)
166
167
168 . = 0xc00
169SystemCall:
170 SYSCALL_ENTRY 0xc00
171
172
173 EXCEPTION(0xd00, SingleStep, single_step_exception, EXC_XFER_STD)
174
175
176
177
178 EXCEPTION(0x1000, SoftEmu, program_check_exception, EXC_XFER_STD)
179
180 . = 0x1100
181
182
183
184
185
186
187
188
189
190
191
192#ifdef CONFIG_8xx_CPU15
193#define INVALIDATE_ADJACENT_PAGES_CPU15(addr) \
194 addi addr, addr, PAGE_SIZE; \
195 tlbie addr; \
196 addi addr, addr, -(PAGE_SIZE << 1); \
197 tlbie addr; \
198 addi addr, addr, PAGE_SIZE
199#else
200#define INVALIDATE_ADJACENT_PAGES_CPU15(addr)
201#endif
202
203InstructionTLBMiss:
204 mtspr SPRN_SPRG_SCRATCH0, r10
205 mtspr SPRN_SPRG_SCRATCH1, r11
206
207
208
209
210 mfspr r10, SPRN_SRR0
211 INVALIDATE_ADJACENT_PAGES_CPU15(r10)
212 mtspr SPRN_MD_EPN, r10
213#ifdef ITLB_MISS_KERNEL
214 mfcr r11
215 compare_to_kernel_boundary r10, r10
216#endif
217 mfspr r10, SPRN_M_TWB
218#ifdef ITLB_MISS_KERNEL
219 blt+ 3f
220 rlwinm r10, r10, 0, 20, 31
221 oris r10, r10, (swapper_pg_dir - PAGE_OFFSET)@ha
2223:
223 mtcr r11
224#endif
225 lwz r11, (swapper_pg_dir-PAGE_OFFSET)@l(r10)
226 mtspr SPRN_MD_TWC, r11
227 mfspr r10, SPRN_MD_TWC
228 lwz r10, 0(r10)
229 rlwimi r11, r10, 0, _PAGE_GUARDED | _PAGE_ACCESSED
230 rlwimi r11, r10, 32 - 9, _PMD_PAGE_512K
231 mtspr SPRN_MI_TWC, r11
232
233
234
235
236
237
238 rlwinm r10, r10, 0, ~0x0f00
239 rlwimi r10, r10, 4, 0x0400
240 ori r10, r10, RPN_PATTERN | 0x200
241 mtspr SPRN_MI_RPN, r10
242
243
2440: mfspr r10, SPRN_SPRG_SCRATCH0
245 mfspr r11, SPRN_SPRG_SCRATCH1
246 rfi
247 patch_site 0b, patch__itlbmiss_exit_1
248
249#ifdef CONFIG_PERF_EVENTS
250 patch_site 0f, patch__itlbmiss_perf
2510: lwz r10, (itlb_miss_counter - PAGE_OFFSET)@l(0)
252 addi r10, r10, 1
253 stw r10, (itlb_miss_counter - PAGE_OFFSET)@l(0)
254 mfspr r10, SPRN_SPRG_SCRATCH0
255 mfspr r11, SPRN_SPRG_SCRATCH1
256 rfi
257#endif
258
259 . = 0x1200
260DataStoreTLBMiss:
261 mtspr SPRN_DAR, r10
262 mtspr SPRN_M_TW, r11
263 mfcr r11
264
265
266
267
268 mfspr r10, SPRN_MD_EPN
269 compare_to_kernel_boundary r10, r10
270 mfspr r10, SPRN_M_TWB
271 blt+ 3f
272 rlwinm r10, r10, 0, 20, 31
273 oris r10, r10, (swapper_pg_dir - PAGE_OFFSET)@ha
2743:
275 mtcr r11
276 lwz r11, (swapper_pg_dir-PAGE_OFFSET)@l(r10)
277
278 mtspr SPRN_MD_TWC, r11
279 mfspr r10, SPRN_MD_TWC
280 lwz r10, 0(r10)
281
282
283
284
285
286
287
288 rlwimi r11, r10, 0, _PAGE_GUARDED | _PAGE_ACCESSED
289 rlwimi r11, r10, 32 - 9, _PMD_PAGE_512K
290 mtspr SPRN_MD_TWC, r11
291
292
293
294
295
296
297 li r11, RPN_PATTERN
298 rlwimi r10, r11, 0, 24, 27
299 mtspr SPRN_MD_RPN, r10
300
301
302
3030: mfspr r10, SPRN_DAR
304 mtspr SPRN_DAR, r11
305 mfspr r11, SPRN_M_TW
306 rfi
307 patch_site 0b, patch__dtlbmiss_exit_1
308
309#ifdef CONFIG_PERF_EVENTS
310 patch_site 0f, patch__dtlbmiss_perf
3110: lwz r10, (dtlb_miss_counter - PAGE_OFFSET)@l(0)
312 addi r10, r10, 1
313 stw r10, (dtlb_miss_counter - PAGE_OFFSET)@l(0)
314 mfspr r10, SPRN_DAR
315 mtspr SPRN_DAR, r11
316 mfspr r11, SPRN_M_TW
317 rfi
318#endif
319
320
321
322
323
324 . = 0x1300
325InstructionTLBError:
326 EXCEPTION_PROLOG
327 mr r4,r12
328 andis. r5,r9,DSISR_SRR1_MATCH_32S@h
329 andis. r10,r9,SRR1_ISI_NOPT@h
330 beq+ .Litlbie
331 tlbie r4
332
333.Litlbie:
334 stw r4, _DAR(r11)
335 EXC_XFER_LITE(0x400, handle_page_fault)
336
337
338
339
340
341 . = 0x1400
342DataTLBError:
343 EXCEPTION_PROLOG_0 handle_dar_dsisr=1
344 mfspr r11, SPRN_DAR
345 cmpwi cr1, r11, RPN_PATTERN
346 beq- cr1, FixupDAR
347DARFixed:
348#ifdef CONFIG_VMAP_STACK
349 li r11, RPN_PATTERN
350 mtspr SPRN_DAR, r11
351#endif
352 EXCEPTION_PROLOG_1
353 EXCEPTION_PROLOG_2 handle_dar_dsisr=1
354 get_and_save_dar_dsisr_on_stack r4, r5, r11
355 andis. r10,r5,DSISR_NOHPTE@h
356 beq+ .Ldtlbie
357 tlbie r4
358.Ldtlbie:
359#ifndef CONFIG_VMAP_STACK
360 li r10,RPN_PATTERN
361 mtspr SPRN_DAR,r10
362#endif
363
364 EXC_XFER_LITE(0x300, handle_page_fault)
365
366stack_overflow:
367 vmap_stack_overflow_exception
368
369
370
371
372
373do_databreakpoint:
374 EXCEPTION_PROLOG_1
375 EXCEPTION_PROLOG_2 handle_dar_dsisr=1
376 addi r3,r1,STACK_FRAME_OVERHEAD
377 mfspr r4,SPRN_BAR
378 stw r4,_DAR(r11)
379#ifdef CONFIG_VMAP_STACK
380 lwz r5,_DSISR(r11)
381#else
382 mfspr r5,SPRN_DSISR
383#endif
384 EXC_XFER_STD(0x1c00, do_break)
385
386 . = 0x1c00
387DataBreakpoint:
388 EXCEPTION_PROLOG_0 handle_dar_dsisr=1
389 mfspr r11, SPRN_SRR0
390 cmplwi cr1, r11, (.Ldtlbie - PAGE_OFFSET)@l
391 cmplwi cr7, r11, (.Litlbie - PAGE_OFFSET)@l
392 cror 4*cr1+eq, 4*cr1+eq, 4*cr7+eq
393 bne cr1, do_databreakpoint
394 mtcr r10
395 mfspr r10, SPRN_SPRG_SCRATCH0
396 mfspr r11, SPRN_SPRG_SCRATCH1
397 rfi
398
399#ifdef CONFIG_PERF_EVENTS
400 . = 0x1d00
401InstructionBreakpoint:
402 mtspr SPRN_SPRG_SCRATCH0, r10
403 lwz r10, (instruction_counter - PAGE_OFFSET)@l(0)
404 addi r10, r10, -1
405 stw r10, (instruction_counter - PAGE_OFFSET)@l(0)
406 lis r10, 0xffff
407 ori r10, r10, 0x01
408 mtspr SPRN_COUNTA, r10
409 mfspr r10, SPRN_SPRG_SCRATCH0
410 rfi
411#else
412 EXCEPTION(0x1d00, Trap_1d, unknown_exception, EXC_XFER_STD)
413#endif
414 EXCEPTION(0x1e00, Trap_1e, unknown_exception, EXC_XFER_STD)
415 EXCEPTION(0x1f00, Trap_1f, unknown_exception, EXC_XFER_STD)
416
417 . = 0x2000
418
419
420
421
422
423FixupDAR:
424 mtspr SPRN_M_TW, r10
425
426 mfspr r10, SPRN_SRR0
427 mtspr SPRN_MD_EPN, r10
428 rlwinm r11, r10, 16, 0xfff8
429 cmpli cr1, r11, PAGE_OFFSET@h
430 mfspr r11, SPRN_M_TWB
431 blt+ cr1, 3f
432
433
434 tophys(r11, r10)
435 mfspr r11, SPRN_M_TWB
436 rlwinm r11, r11, 0, 20, 31
437 oris r11, r11, (swapper_pg_dir - PAGE_OFFSET)@ha
4383:
439 lwz r11, (swapper_pg_dir-PAGE_OFFSET)@l(r11)
440 mtspr SPRN_MD_TWC, r11
441 mtcrf 0x01, r11
442 mfspr r11, SPRN_MD_TWC
443 lwz r11, 0(r11)
444 bt 28,200f
445
446 rlwimi r11, r10, 0, 32 - PAGE_SHIFT, 31
447201: lwz r11,0(r11)
448
449
450
451 xoris r10, r11, 0x7c00
452 rlwinm r10, r10, 0, 21, 5
453 cmpwi cr1, r10, 2028
454 beq+ cr1, 142f
455 cmpwi cr1, r10, 940
456 beq+ cr1, 142f
457 cmpwi cr1, r10, 108
458 beq+ cr1, 144f
459 cmpwi cr1, r10, 172
460 beq+ cr1, 142f
461 cmpwi cr1, r10, 1964
462 beq+ cr1, 142f
463141: mfspr r10,SPRN_M_TW
464 b DARFixed
465
466200:
467
468 rlwimi r11, r10, 0, 32 - PAGE_SHIFT_8M, 31
469 b 201b
470
471144: mfspr r10, SPRN_DSISR
472 rlwinm r10, r10,0,7,5
473 mtspr SPRN_DSISR, r10
474142:
475 mfctr r10
476 mtdar r10
477 rlwinm r10, r11, 24, 24, 28
478 addi r10, r10, 150f@l
479 mtctr r10
480 xor r10, r10, r10
481 bctr
482150:
483 add r10, r10, r0 ;b 151f
484 add r10, r10, r1 ;b 151f
485 add r10, r10, r2 ;b 151f
486 add r10, r10, r3 ;b 151f
487 add r10, r10, r4 ;b 151f
488 add r10, r10, r5 ;b 151f
489 add r10, r10, r6 ;b 151f
490 add r10, r10, r7 ;b 151f
491 add r10, r10, r8 ;b 151f
492 add r10, r10, r9 ;b 151f
493 mtctr r11 ;b 154f
494 mtctr r11 ;b 153f
495 add r10, r10, r12 ;b 151f
496 add r10, r10, r13 ;b 151f
497 add r10, r10, r14 ;b 151f
498 add r10, r10, r15 ;b 151f
499 add r10, r10, r16 ;b 151f
500 add r10, r10, r17 ;b 151f
501 add r10, r10, r18 ;b 151f
502 add r10, r10, r19 ;b 151f
503 add r10, r10, r20 ;b 151f
504 add r10, r10, r21 ;b 151f
505 add r10, r10, r22 ;b 151f
506 add r10, r10, r23 ;b 151f
507 add r10, r10, r24 ;b 151f
508 add r10, r10, r25 ;b 151f
509 add r10, r10, r26 ;b 151f
510 add r10, r10, r27 ;b 151f
511 add r10, r10, r28 ;b 151f
512 add r10, r10, r29 ;b 151f
513 add r10, r10, r30 ;b 151f
514 add r10, r10, r31
515151:
516 rlwinm r11,r11,19,24,28
517 cmpwi cr1, r11, 0
518 beq cr1, 152f
519 addi r11, r11, 150b@l
520 mtctr r11
521 rlwinm r11,r11,0,16,10
522 bctr
523152:
524 mfdar r11
525 mtctr r11
526#ifdef CONFIG_VMAP_STACK
527 mfspr r11, SPRN_SPRG_THREAD
528 stw r10, DAR(r11)
529 mfspr r10, SPRN_DSISR
530 stw r10, DSISR(r11)
531#else
532 mtdar r10
533#endif
534 mfspr r10,SPRN_M_TW
535 b DARFixed
536
537
538153: mfspr r11, SPRN_SPRG_SCRATCH1
539 add r10, r10, r11
540 mfctr r11
541 b 151b
542154: mfspr r11, SPRN_SPRG_SCRATCH0
543 add r10, r10, r11
544 mfctr r11
545 b 151b
546
547
548
549
550start_here:
551
552 lis r2,init_task@h
553 ori r2,r2,init_task@l
554
555
556 tophys(r4,r2)
557 addi r4,r4,THREAD
558 mtspr SPRN_SPRG_THREAD,r4
559
560
561 lis r1,init_thread_union@ha
562 addi r1,r1,init_thread_union@l
563 lis r0, STACK_END_MAGIC@h
564 ori r0, r0, STACK_END_MAGIC@l
565 stw r0, 0(r1)
566 li r0,0
567 stwu r0,THREAD_SIZE-STACK_FRAME_OVERHEAD(r1)
568
569 lis r6, swapper_pg_dir@ha
570 tophys(r6,r6)
571 mtspr SPRN_M_TWB, r6
572
573 bl early_init
574
575
576
577
578#ifdef CONFIG_KASAN
579 bl kasan_early_init
580#endif
581 li r3,0
582 mr r4,r31
583 bl machine_init
584 bl MMU_init
585
586
587
588
589
590
591
592
593
594
595
596 lis r4,2f@h
597 ori r4,r4,2f@l
598 tophys(r4,r4)
599 li r3,MSR_KERNEL & ~(MSR_IR|MSR_DR)
600 mtspr SPRN_SRR0,r4
601 mtspr SPRN_SRR1,r3
602 rfi
603
6042:
605#ifdef CONFIG_PIN_TLB_IMMR
606 lis r0, MD_TWAM@h
607 oris r0, r0, 0x1f00
608 mtspr SPRN_MD_CTR, r0
609 LOAD_REG_IMMEDIATE(r0, VIRT_IMMR_BASE | MD_EVALID)
610 tlbie r0
611 mtspr SPRN_MD_EPN, r0
612 LOAD_REG_IMMEDIATE(r0, MD_SVALID | MD_PS512K | MD_GUARDED)
613 mtspr SPRN_MD_TWC, r0
614 mfspr r0, SPRN_IMMR
615 rlwinm r0, r0, 0, 0xfff80000
616 ori r0, r0, 0xf0 | _PAGE_DIRTY | _PAGE_SPS | _PAGE_SH | \
617 _PAGE_NO_CACHE | _PAGE_PRESENT
618 mtspr SPRN_MD_RPN, r0
619 lis r0, (MD_TWAM | MD_RSV4I)@h
620 mtspr SPRN_MD_CTR, r0
621#endif
622#ifndef CONFIG_PIN_TLB_TEXT
623 li r0, 0
624 mtspr SPRN_MI_CTR, r0
625#endif
626
627 lis r0, MD_TWAM@h
628 mtspr SPRN_MD_CTR, r0
629#endif
630 tlbia
631 sync
632
633
634
635 lis r5, abatron_pteptrs@h
636 ori r5, r5, abatron_pteptrs@l
637 stw r5, 0xf0(0)
638 tophys(r5,r5)
639 lis r6, swapper_pg_dir@h
640 ori r6, r6, swapper_pg_dir@l
641 stw r6, 0(r5)
642
643
644 li r4,MSR_KERNEL
645 lis r3,start_kernel@h
646 ori r3,r3,start_kernel@l
647 mtspr SPRN_SRR0,r3
648 mtspr SPRN_SRR1,r4
649 rfi
650
651
652
653
654
655
656
657
658
659initial_mmu:
660 li r8, 0
661 mtspr SPRN_MI_CTR, r8
662 lis r10, MD_TWAM@h
663 mtspr SPRN_MD_CTR, r10
664
665 tlbia
666
667 lis r8, MI_APG_INIT@h
668 ori r8, r8, MI_APG_INIT@l
669 mtspr SPRN_MI_AP, r8
670 lis r8, MD_APG_INIT@h
671 ori r8, r8, MD_APG_INIT@l
672 mtspr SPRN_MD_AP, r8
673
674
675 lis r8, MI_RSV4I@h
676 ori r8, r8, 0x1c00
677 oris r12, r10, MD_RSV4I@h
678 ori r12, r12, 0x1c00
679 li r9, 4
680 mtctr r9
681 lis r9, KERNELBASE@h
682 li r10, MI_PS8MEG | _PMD_ACCESSED | MI_SVALID
683 li r11, MI_BOOTINIT
6841:
685 mtspr SPRN_MI_CTR, r8
686 addi r8, r8, 0x100
687 ori r0, r9, MI_EVALID
688 mtspr SPRN_MI_EPN, r0
689 mtspr SPRN_MI_TWC, r10
690 mtspr SPRN_MI_RPN, r11
691 mtspr SPRN_MD_CTR, r12
692 addi r12, r12, 0x100
693 mtspr SPRN_MD_EPN, r0
694 mtspr SPRN_MD_TWC, r10
695 mtspr SPRN_MD_RPN, r11
696 addis r9, r9, 0x80
697 addis r11, r11, 0x80
698
699 bdnz 1b
700
701
702
703
704
705 lis r8, IDC_INVALL@h
706 mtspr SPRN_IC_CST, r8
707 mtspr SPRN_DC_CST, r8
708 lis r8, IDC_ENABLE@h
709 mtspr SPRN_IC_CST, r8
710 mtspr SPRN_DC_CST, r8
711
712 mfspr r8, SPRN_DER
713#ifdef CONFIG_PERF_EVENTS
714 rlwinm r8, r8, 0, ~0xc
715#else
716 rlwinm r8, r8, 0, ~0x8
717#endif
718 mtspr SPRN_DER, r8
719 blr
720
721#ifdef CONFIG_PIN_TLB
722_GLOBAL(mmu_pin_tlb)
723 lis r9, (1f - PAGE_OFFSET)@h
724 ori r9, r9, (1f - PAGE_OFFSET)@l
725 mfmsr r10
726 mflr r11
727 li r12, MSR_KERNEL & ~(MSR_IR | MSR_DR | MSR_RI)
728 rlwinm r0, r10, 0, ~MSR_RI
729 rlwinm r0, r0, 0, ~MSR_EE
730 mtmsr r0
731 isync
732 .align 4
733 mtspr SPRN_SRR0, r9
734 mtspr SPRN_SRR1, r12
735 rfi
7361:
737 li r5, 0
738 lis r6, MD_TWAM@h
739 mtspr SPRN_MI_CTR, r5
740 mtspr SPRN_MD_CTR, r6
741 tlbia
742
743#ifdef CONFIG_PIN_TLB_TEXT
744 LOAD_REG_IMMEDIATE(r5, 28 << 8)
745 LOAD_REG_IMMEDIATE(r6, PAGE_OFFSET)
746 LOAD_REG_IMMEDIATE(r7, MI_SVALID | MI_PS8MEG | _PMD_ACCESSED)
747 LOAD_REG_IMMEDIATE(r8, 0xf0 | _PAGE_RO | _PAGE_SPS | _PAGE_SH | _PAGE_PRESENT)
748 LOAD_REG_ADDR(r9, _sinittext)
749 li r0, 4
750 mtctr r0
751
7522: ori r0, r6, MI_EVALID
753 mtspr SPRN_MI_CTR, r5
754 mtspr SPRN_MI_EPN, r0
755 mtspr SPRN_MI_TWC, r7
756 mtspr SPRN_MI_RPN, r8
757 addi r5, r5, 0x100
758 addis r6, r6, SZ_8M@h
759 addis r8, r8, SZ_8M@h
760 cmplw r6, r9
761 bdnzt lt, 2b
762 lis r0, MI_RSV4I@h
763 mtspr SPRN_MI_CTR, r0
764#endif
765 LOAD_REG_IMMEDIATE(r5, 28 << 8 | MD_TWAM)
766#ifdef CONFIG_PIN_TLB_DATA
767 LOAD_REG_IMMEDIATE(r6, PAGE_OFFSET)
768 LOAD_REG_IMMEDIATE(r7, MI_SVALID | MI_PS8MEG | _PMD_ACCESSED)
769#ifdef CONFIG_PIN_TLB_IMMR
770 li r0, 3
771#else
772 li r0, 4
773#endif
774 mtctr r0
775 cmpwi r4, 0
776 beq 4f
777 LOAD_REG_IMMEDIATE(r8, 0xf0 | _PAGE_RO | _PAGE_SPS | _PAGE_SH | _PAGE_PRESENT)
778 LOAD_REG_ADDR(r9, _sinittext)
779
7802: ori r0, r6, MD_EVALID
781 mtspr SPRN_MD_CTR, r5
782 mtspr SPRN_MD_EPN, r0
783 mtspr SPRN_MD_TWC, r7
784 mtspr SPRN_MD_RPN, r8
785 addi r5, r5, 0x100
786 addis r6, r6, SZ_8M@h
787 addis r8, r8, SZ_8M@h
788 cmplw r6, r9
789 bdnzt lt, 2b
790
7914: LOAD_REG_IMMEDIATE(r8, 0xf0 | _PAGE_SPS | _PAGE_SH | _PAGE_PRESENT)
7922: ori r0, r6, MD_EVALID
793 mtspr SPRN_MD_CTR, r5
794 mtspr SPRN_MD_EPN, r0
795 mtspr SPRN_MD_TWC, r7
796 mtspr SPRN_MD_RPN, r8
797 addi r5, r5, 0x100
798 addis r6, r6, SZ_8M@h
799 addis r8, r8, SZ_8M@h
800 cmplw r6, r3
801 bdnzt lt, 2b
802#endif
803#ifdef CONFIG_PIN_TLB_IMMR
804 LOAD_REG_IMMEDIATE(r0, VIRT_IMMR_BASE | MD_EVALID)
805 LOAD_REG_IMMEDIATE(r7, MD_SVALID | MD_PS512K | MD_GUARDED | _PMD_ACCESSED)
806 mfspr r8, SPRN_IMMR
807 rlwinm r8, r8, 0, 0xfff80000
808 ori r8, r8, 0xf0 | _PAGE_DIRTY | _PAGE_SPS | _PAGE_SH | \
809 _PAGE_NO_CACHE | _PAGE_PRESENT
810 mtspr SPRN_MD_CTR, r5
811 mtspr SPRN_MD_EPN, r0
812 mtspr SPRN_MD_TWC, r7
813 mtspr SPRN_MD_RPN, r8
814#endif
815
816 lis r0, (MD_RSV4I | MD_TWAM)@h
817 mtspr SPRN_MI_CTR, r0
818#endif
819 mtspr SPRN_SRR1, r10
820 mtspr SPRN_SRR0, r11
821 rfi
822#endif
823
824
825
826
827
828
829 .data
830 .globl sdata
831sdata:
832 .globl empty_zero_page
833 .align PAGE_SHIFT
834empty_zero_page:
835 .space PAGE_SIZE
836EXPORT_SYMBOL(empty_zero_page)
837
838 .globl swapper_pg_dir
839swapper_pg_dir:
840 .space PGD_TABLE_SIZE
841
842
843
844
845 .globl abatron_pteptrs
846abatron_pteptrs:
847 .space 8
848