1
2
3
4
5
6
7
8
9
10 #include "ppc_asm.h"
11
12
13
14
15
16
17
18
19
20
21 .text
22
23 .globl _zimage_start
24 _zimage_start:
25
26
27 mfmsr 9
28 rlwinm 9, 9, 0, ~((1<<4)|(1<<5))
29 bcl 20, 31, 1f
30 1:
31 mflr 8
32 clrlwi 8, 8, 3
33 addi 8, 8, _mmu_off - 1b
34 mtsrr0 8
35 mtsrr1 9
36 rfi
37 _mmu_off:
38
39
40
41 isync
42 li 8, 0
43 mtspr 0x210, 8
44 mtspr 0x212, 8
45 mtspr 0x214, 8
46 mtspr 0x216, 8
47 mtspr 0x218, 8
48 mtspr 0x21a, 8
49 mtspr 0x21c, 8
50 mtspr 0x21e, 8
51
52 li 8, 0x01ff
53 li 9, 0x0002
54 mtspr 0x211, 9
55 mtspr 0x210, 8
56 mtspr 0x219, 9
57 mtspr 0x218, 8
58
59 lis 8, 0x0c00
60 ori 8, 8, 0x3ff
61 lis 9, 0x0c00
62 ori 9, 9, 0x002a
63 mtspr 0x21b, 9
64 mtspr 0x21a, 8
65
66 lis 8, 0x0100
67 ori 8, 8, 0x00ff
68 lis 9, 0x0100
69 ori 9, 9, 0x0002
70 mtspr 0x215, 9
71 mtspr 0x214, 8
72 mtspr 0x21d, 9
73 mtspr 0x21c, 8
74
75
76 mfspr 8, 0x3f0
77 andi. 0, 8, (1<<15)
78 bne 1f
79 ori 8, 8, (1<<15)|(1<<11)
80 1:
81 andi. 0, 8, (1<<14)
82 bne 1f
83 ori 8, 8, (1<<14)|(1<<10)
84 1:
85 mtspr 0x3f0, 8
86 isync
87
88
89 li 3, 0
90 li 4, 0
91 li 5, 0
92
93
94 bcl 20, 31, 1f
95 1:
96 mflr 8
97 addi 8, 8, _mmu_on - 1b
98 mfmsr 9
99 ori 9, 9, (1<<4)|(1<<5)
100 mtsrr0 8
101 mtsrr1 9
102 sync
103 rfi
104 _mmu_on:
105 b _zimage_start_lib
106