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
22 .text
23
24 .globl _zimage_start
25 _zimage_start:
26
27
28 mfmsr 9
29 rlwinm 9, 9, 0, ~((1<<4)|(1<<5))
30 bcl 20, 31, 1f
31 1:
32 mflr 8
33 clrlwi 8, 8, 3
34 addi 8, 8, _mmu_off - 1b
35 mtsrr0 8
36 mtsrr1 9
37 rfi
38 _mmu_off:
39
40
41
42 isync
43 li 8, 0
44 mtspr 0x210, 8
45 mtspr 0x212, 8
46 mtspr 0x214, 8
47 mtspr 0x216, 8
48 mtspr 0x218, 8
49 mtspr 0x21a, 8
50 mtspr 0x21c, 8
51 mtspr 0x21e, 8
52
53 mtspr 0x230, 8
54 mtspr 0x232, 8
55 mtspr 0x234, 8
56 mtspr 0x236, 8
57 mtspr 0x238, 8
58 mtspr 0x23a, 8
59 mtspr 0x23c, 8
60 mtspr 0x23e, 8
61
62 li 8, 0x01ff
63 li 9, 0x0002
64 mtspr 0x211, 9
65 mtspr 0x210, 8
66 mtspr 0x219, 9
67 mtspr 0x218, 8
68
69 lis 8, 0x0c00
70 ori 8, 8, 0x3ff
71 lis 9, 0x0c00
72 ori 9, 9, 0x002a
73 mtspr 0x21b, 9
74 mtspr 0x21a, 8
75
76 lis 8, 0x0100
77 ori 8, 8, 0x00ff
78 lis 9, 0x0100
79 ori 9, 9, 0x0002
80 mtspr 0x215, 9
81 mtspr 0x214, 8
82 mtspr 0x21d, 9
83 mtspr 0x21c, 8
84
85 lis 8, 0x1000
86 ori 8, 8, 0x07ff
87 lis 9, 0x1000
88 ori 9, 9, 0x0002
89 mtspr 0x216, 8
90 mtspr 0x217, 9
91 mtspr 0x21e, 8
92 mtspr 0x21f, 9
93
94
95 mfspr 8, 0x3f3
96 oris 8, 8, 0x0200
97 mtspr 0x3f3, 8
98
99
100 mfspr 8, 0x3f0
101 andi. 0, 8, (1<<15)
102 bne 1f
103 ori 8, 8, (1<<15)|(1<<11)
104 1:
105 andi. 0, 8, (1<<14)
106 bne 1f
107 ori 8, 8, (1<<14)|(1<<10)
108 1:
109 mtspr 0x3f0, 8
110 isync
111
112
113 li 3, 0
114 li 4, 0
115 li 5, 0
116
117
118 bcl 20, 31, 1f
119 1:
120 mflr 8
121 addi 8, 8, _mmu_on - 1b
122 mfmsr 9
123 ori 9, 9, (1<<4)|(1<<5)
124 mtsrr0 8
125 mtsrr1 9
126 sync
127 rfi
128 _mmu_on:
129
130 lis 8, 0x0d00
131 ori 8, 8, 0x00c0
132 lwz 9, 0(8)
133 ori 9, 9, 0x20
134 stw 9, 0(8)
135
136 b _zimage_start_lib
137