1
2
3
4
5
6
7
8
9
10
11
12#include <asm/processor.h>
13#include <asm/page.h>
14#include <asm/cputable.h>
15#include <asm/ppc_asm.h>
16#include <asm/asm-offsets.h>
17#include <asm/cache.h>
18
19_GLOBAL(__cpu_preinit_ppc970)
20
21 mfmsr r0
22 rldicl. r0,r0,4,63
23 beqlr
24
25
26
27
28
29 li r0,0
30 mfspr r3,SPRN_HID4
31 rldimi r3,r0,40,23
32 rldimi r3,r0,2,61
33 sync
34 mtspr SPRN_HID4,r3
35 isync
36 sync
37 mfspr r3,SPRN_HID5
38 rldimi r3,r0,6,56
39 sync
40 mtspr SPRN_HID5,r3
41 isync
42 sync
43
44
45 mfspr r0,SPRN_HID1
46 li r3,0x1200
47 sldi r3,r3,44
48 or r0,r0,r3
49 mtspr SPRN_HID1,r0
50 mtspr SPRN_HID1,r0
51 isync
52
53
54 li r0,0
55 sync
56 mtspr SPRN_HIOR,0
57 isync
58 blr
59
60
61#define CS_HID0 0
62#define CS_HID1 8
63#define CS_HID4 16
64#define CS_HID5 24
65#define CS_SIZE 32
66
67 .data
68 .balign L1_CACHE_BYTES,0
69cpu_state_storage:
70 .space CS_SIZE
71 .balign L1_CACHE_BYTES,0
72 .text
73
74
75_GLOBAL(__setup_cpu_ppc970)
76
77 mfmsr r0
78 rldicl. r0,r0,4,63
79 beq no_hv_mode
80
81 mfspr r0,SPRN_HID0
82 li r11,5
83 rldimi r0,r11,52,8
84 li r11,0
85 rldimi r0,r11,32,31
86 b load_hids
87
88
89_GLOBAL(__setup_cpu_ppc970MP)
90
91 mfmsr r0
92 rldicl. r0,r0,4,63
93 beq no_hv_mode
94
95 mfspr r0,SPRN_HID0
96 li r11,0x15
97 rldimi r0,r11,52,6
98 li r11,0
99 rldimi r0,r11,32,31
100
101load_hids:
102 mtspr SPRN_HID0,r0
103 mfspr r0,SPRN_HID0
104 mfspr r0,SPRN_HID0
105 mfspr r0,SPRN_HID0
106 mfspr r0,SPRN_HID0
107 mfspr r0,SPRN_HID0
108 mfspr r0,SPRN_HID0
109 sync
110 isync
111
112
113 mfspr r0,SPRN_HID4
114 clrldi r0,r0,1
115 ori r0,r0,HID4_LPES1
116 sync
117 mtspr SPRN_HID4,r0
118 isync
119
120
121 LOAD_REG_ADDR(r5,cpu_state_storage)
122
123
124 mfspr r3,SPRN_HID0
125 std r3,CS_HID0(r5)
126 mfspr r3,SPRN_HID1
127 std r3,CS_HID1(r5)
128 mfspr r4,SPRN_HID4
129 std r4,CS_HID4(r5)
130 mfspr r3,SPRN_HID5
131 std r3,CS_HID5(r5)
132
133
134 andi. r4,r4,HID4_LPES1
135 bnelr
136
137no_hv_mode:
138
139 ld r5,CPU_SPEC_FEATURES(r4)
140 LOAD_REG_IMMEDIATE(r6,CPU_FTR_HVMODE)
141 andc r5,r5,r6
142 std r5,CPU_SPEC_FEATURES(r4)
143 blr
144
145
146
147
148
149_GLOBAL(__restore_cpu_ppc970)
150
151 mfmsr r0
152 rldicl. r0,r0,4,63
153 beqlr
154
155 LOAD_REG_ADDR(r5,cpu_state_storage)
156
157 li r0,0
158 mfspr r3,SPRN_HID4
159 rldimi r3,r0,40,23
160 sync
161 mtspr SPRN_HID4,r3
162 isync
163 sync
164
165
166 li r0,0
167 sync
168 mtspr SPRN_HIOR,0
169 isync
170
171
172 ld r3,CS_HID0(r5)
173 sync
174 isync
175 mtspr SPRN_HID0,r3
176 mfspr r3,SPRN_HID0
177 mfspr r3,SPRN_HID0
178 mfspr r3,SPRN_HID0
179 mfspr r3,SPRN_HID0
180 mfspr r3,SPRN_HID0
181 mfspr r3,SPRN_HID0
182 sync
183 isync
184
185
186 ld r3,CS_HID1(r5)
187 sync
188 isync
189 mtspr SPRN_HID1,r3
190 mtspr SPRN_HID1,r3
191 sync
192 isync
193
194
195 ld r3,CS_HID4(r5)
196 sync
197 isync
198 mtspr SPRN_HID4,r3
199 sync
200 isync
201
202
203 ld r3,CS_HID5(r5)
204 sync
205 isync
206 mtspr SPRN_HID5,r3
207 sync
208 isync
209 blr
210
211