diff options
Diffstat (limited to 'arch/powerpc/kernel')
-rw-r--r-- | arch/powerpc/kernel/asm-offsets.c | 2 | ||||
-rw-r--r-- | arch/powerpc/kernel/cpu_setup_power4.S | 4 | ||||
-rw-r--r-- | arch/powerpc/kernel/cputable.c | 224 | ||||
-rw-r--r-- | arch/powerpc/kernel/entry_32.S | 2 | ||||
-rw-r--r-- | arch/powerpc/kernel/entry_64.S | 15 | ||||
-rw-r--r-- | arch/powerpc/kernel/fpu.S | 10 | ||||
-rw-r--r-- | arch/powerpc/kernel/head_64.S | 112 | ||||
-rw-r--r-- | arch/powerpc/kernel/idle_power4.S | 8 | ||||
-rw-r--r-- | arch/powerpc/kernel/irq.c | 12 | ||||
-rw-r--r-- | arch/powerpc/kernel/lparcfg.c | 13 | ||||
-rw-r--r-- | arch/powerpc/kernel/misc_32.S | 4 | ||||
-rw-r--r-- | arch/powerpc/kernel/misc_64.S | 10 | ||||
-rw-r--r-- | arch/powerpc/kernel/of_device.c | 4 | ||||
-rw-r--r-- | arch/powerpc/kernel/paca.c | 36 | ||||
-rw-r--r-- | arch/powerpc/kernel/ppc_ksyms.c | 3 | ||||
-rw-r--r-- | arch/powerpc/kernel/prom.c | 109 | ||||
-rw-r--r-- | arch/powerpc/kernel/prom_parse.c | 3 | ||||
-rw-r--r-- | arch/powerpc/kernel/rtas.c | 96 | ||||
-rw-r--r-- | arch/powerpc/kernel/setup-common.c | 9 | ||||
-rw-r--r-- | arch/powerpc/kernel/time.c | 2 | ||||
-rw-r--r-- | arch/powerpc/kernel/vio.c | 8 |
21 files changed, 486 insertions, 200 deletions
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c index 56399c5c931a..840aad43a98b 100644 --- a/arch/powerpc/kernel/asm-offsets.c +++ b/arch/powerpc/kernel/asm-offsets.c | |||
@@ -135,7 +135,7 @@ int main(void) | |||
135 | DEFINE(PACA_EXMC, offsetof(struct paca_struct, exmc)); | 135 | DEFINE(PACA_EXMC, offsetof(struct paca_struct, exmc)); |
136 | DEFINE(PACA_EXSLB, offsetof(struct paca_struct, exslb)); | 136 | DEFINE(PACA_EXSLB, offsetof(struct paca_struct, exslb)); |
137 | DEFINE(PACAEMERGSP, offsetof(struct paca_struct, emergency_sp)); | 137 | DEFINE(PACAEMERGSP, offsetof(struct paca_struct, emergency_sp)); |
138 | DEFINE(PACALPPACA, offsetof(struct paca_struct, lppaca)); | 138 | DEFINE(PACALPPACAPTR, offsetof(struct paca_struct, lppaca_ptr)); |
139 | DEFINE(PACAHWCPUID, offsetof(struct paca_struct, hw_cpu_id)); | 139 | DEFINE(PACAHWCPUID, offsetof(struct paca_struct, hw_cpu_id)); |
140 | 140 | ||
141 | DEFINE(LPPACASRR0, offsetof(struct lppaca, saved_srr0)); | 141 | DEFINE(LPPACASRR0, offsetof(struct lppaca, saved_srr0)); |
diff --git a/arch/powerpc/kernel/cpu_setup_power4.S b/arch/powerpc/kernel/cpu_setup_power4.S index cca942fe6115..b61d86e7ceb6 100644 --- a/arch/powerpc/kernel/cpu_setup_power4.S +++ b/arch/powerpc/kernel/cpu_setup_power4.S | |||
@@ -130,7 +130,7 @@ _GLOBAL(__save_cpu_setup) | |||
130 | mfcr r7 | 130 | mfcr r7 |
131 | 131 | ||
132 | /* Get storage ptr */ | 132 | /* Get storage ptr */ |
133 | LOADADDR(r5,cpu_state_storage) | 133 | LOAD_REG_IMMEDIATE(r5,cpu_state_storage) |
134 | 134 | ||
135 | /* We only deal with 970 for now */ | 135 | /* We only deal with 970 for now */ |
136 | mfspr r0,SPRN_PVR | 136 | mfspr r0,SPRN_PVR |
@@ -164,7 +164,7 @@ _GLOBAL(__restore_cpu_setup) | |||
164 | /* Get storage ptr (FIXME when using anton reloc as we | 164 | /* Get storage ptr (FIXME when using anton reloc as we |
165 | * are running with translation disabled here | 165 | * are running with translation disabled here |
166 | */ | 166 | */ |
167 | LOADADDR(r5,cpu_state_storage) | 167 | LOAD_REG_IMMEDIATE(r5,cpu_state_storage) |
168 | 168 | ||
169 | /* We only deal with 970 for now */ | 169 | /* We only deal with 970 for now */ |
170 | mfspr r0,SPRN_PVR | 170 | mfspr r0,SPRN_PVR |
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index 43c74a6b07b1..10696456a4c6 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
@@ -55,7 +55,8 @@ extern void __setup_cpu_ppc970(unsigned long offset, struct cpu_spec* spec); | |||
55 | #define COMMON_USER_POWER4 (COMMON_USER_PPC64 | PPC_FEATURE_POWER4) | 55 | #define COMMON_USER_POWER4 (COMMON_USER_PPC64 | PPC_FEATURE_POWER4) |
56 | #define COMMON_USER_POWER5 (COMMON_USER_PPC64 | PPC_FEATURE_POWER5) | 56 | #define COMMON_USER_POWER5 (COMMON_USER_PPC64 | PPC_FEATURE_POWER5) |
57 | #define COMMON_USER_POWER5_PLUS (COMMON_USER_PPC64 | PPC_FEATURE_POWER5_PLUS) | 57 | #define COMMON_USER_POWER5_PLUS (COMMON_USER_PPC64 | PPC_FEATURE_POWER5_PLUS) |
58 | 58 | #define COMMON_USER_BOOKE (PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU | \ | |
59 | PPC_FEATURE_BOOKE) | ||
59 | 60 | ||
60 | /* We only set the spe features if the kernel was compiled with | 61 | /* We only set the spe features if the kernel was compiled with |
61 | * spe support | 62 | * spe support |
@@ -79,7 +80,8 @@ struct cpu_spec cpu_specs[] = { | |||
79 | .num_pmcs = 8, | 80 | .num_pmcs = 8, |
80 | .cpu_setup = __setup_cpu_power3, | 81 | .cpu_setup = __setup_cpu_power3, |
81 | .oprofile_cpu_type = "ppc64/power3", | 82 | .oprofile_cpu_type = "ppc64/power3", |
82 | .oprofile_type = RS64, | 83 | .oprofile_type = PPC_OPROFILE_RS64, |
84 | .platform = "power3", | ||
83 | }, | 85 | }, |
84 | { /* Power3+ */ | 86 | { /* Power3+ */ |
85 | .pvr_mask = 0xffff0000, | 87 | .pvr_mask = 0xffff0000, |
@@ -92,7 +94,8 @@ struct cpu_spec cpu_specs[] = { | |||
92 | .num_pmcs = 8, | 94 | .num_pmcs = 8, |
93 | .cpu_setup = __setup_cpu_power3, | 95 | .cpu_setup = __setup_cpu_power3, |
94 | .oprofile_cpu_type = "ppc64/power3", | 96 | .oprofile_cpu_type = "ppc64/power3", |
95 | .oprofile_type = RS64, | 97 | .oprofile_type = PPC_OPROFILE_RS64, |
98 | .platform = "power3", | ||
96 | }, | 99 | }, |
97 | { /* Northstar */ | 100 | { /* Northstar */ |
98 | .pvr_mask = 0xffff0000, | 101 | .pvr_mask = 0xffff0000, |
@@ -105,7 +108,8 @@ struct cpu_spec cpu_specs[] = { | |||
105 | .num_pmcs = 8, | 108 | .num_pmcs = 8, |
106 | .cpu_setup = __setup_cpu_power3, | 109 | .cpu_setup = __setup_cpu_power3, |
107 | .oprofile_cpu_type = "ppc64/rs64", | 110 | .oprofile_cpu_type = "ppc64/rs64", |
108 | .oprofile_type = RS64, | 111 | .oprofile_type = PPC_OPROFILE_RS64, |
112 | .platform = "rs64", | ||
109 | }, | 113 | }, |
110 | { /* Pulsar */ | 114 | { /* Pulsar */ |
111 | .pvr_mask = 0xffff0000, | 115 | .pvr_mask = 0xffff0000, |
@@ -118,7 +122,8 @@ struct cpu_spec cpu_specs[] = { | |||
118 | .num_pmcs = 8, | 122 | .num_pmcs = 8, |
119 | .cpu_setup = __setup_cpu_power3, | 123 | .cpu_setup = __setup_cpu_power3, |
120 | .oprofile_cpu_type = "ppc64/rs64", | 124 | .oprofile_cpu_type = "ppc64/rs64", |
121 | .oprofile_type = RS64, | 125 | .oprofile_type = PPC_OPROFILE_RS64, |
126 | .platform = "rs64", | ||
122 | }, | 127 | }, |
123 | { /* I-star */ | 128 | { /* I-star */ |
124 | .pvr_mask = 0xffff0000, | 129 | .pvr_mask = 0xffff0000, |
@@ -131,7 +136,8 @@ struct cpu_spec cpu_specs[] = { | |||
131 | .num_pmcs = 8, | 136 | .num_pmcs = 8, |
132 | .cpu_setup = __setup_cpu_power3, | 137 | .cpu_setup = __setup_cpu_power3, |
133 | .oprofile_cpu_type = "ppc64/rs64", | 138 | .oprofile_cpu_type = "ppc64/rs64", |
134 | .oprofile_type = RS64, | 139 | .oprofile_type = PPC_OPROFILE_RS64, |
140 | .platform = "rs64", | ||
135 | }, | 141 | }, |
136 | { /* S-star */ | 142 | { /* S-star */ |
137 | .pvr_mask = 0xffff0000, | 143 | .pvr_mask = 0xffff0000, |
@@ -144,7 +150,8 @@ struct cpu_spec cpu_specs[] = { | |||
144 | .num_pmcs = 8, | 150 | .num_pmcs = 8, |
145 | .cpu_setup = __setup_cpu_power3, | 151 | .cpu_setup = __setup_cpu_power3, |
146 | .oprofile_cpu_type = "ppc64/rs64", | 152 | .oprofile_cpu_type = "ppc64/rs64", |
147 | .oprofile_type = RS64, | 153 | .oprofile_type = PPC_OPROFILE_RS64, |
154 | .platform = "rs64", | ||
148 | }, | 155 | }, |
149 | { /* Power4 */ | 156 | { /* Power4 */ |
150 | .pvr_mask = 0xffff0000, | 157 | .pvr_mask = 0xffff0000, |
@@ -157,7 +164,8 @@ struct cpu_spec cpu_specs[] = { | |||
157 | .num_pmcs = 8, | 164 | .num_pmcs = 8, |
158 | .cpu_setup = __setup_cpu_power4, | 165 | .cpu_setup = __setup_cpu_power4, |
159 | .oprofile_cpu_type = "ppc64/power4", | 166 | .oprofile_cpu_type = "ppc64/power4", |
160 | .oprofile_type = POWER4, | 167 | .oprofile_type = PPC_OPROFILE_POWER4, |
168 | .platform = "power4", | ||
161 | }, | 169 | }, |
162 | { /* Power4+ */ | 170 | { /* Power4+ */ |
163 | .pvr_mask = 0xffff0000, | 171 | .pvr_mask = 0xffff0000, |
@@ -170,7 +178,8 @@ struct cpu_spec cpu_specs[] = { | |||
170 | .num_pmcs = 8, | 178 | .num_pmcs = 8, |
171 | .cpu_setup = __setup_cpu_power4, | 179 | .cpu_setup = __setup_cpu_power4, |
172 | .oprofile_cpu_type = "ppc64/power4", | 180 | .oprofile_cpu_type = "ppc64/power4", |
173 | .oprofile_type = POWER4, | 181 | .oprofile_type = PPC_OPROFILE_POWER4, |
182 | .platform = "power4", | ||
174 | }, | 183 | }, |
175 | { /* PPC970 */ | 184 | { /* PPC970 */ |
176 | .pvr_mask = 0xffff0000, | 185 | .pvr_mask = 0xffff0000, |
@@ -184,7 +193,8 @@ struct cpu_spec cpu_specs[] = { | |||
184 | .num_pmcs = 8, | 193 | .num_pmcs = 8, |
185 | .cpu_setup = __setup_cpu_ppc970, | 194 | .cpu_setup = __setup_cpu_ppc970, |
186 | .oprofile_cpu_type = "ppc64/970", | 195 | .oprofile_cpu_type = "ppc64/970", |
187 | .oprofile_type = POWER4, | 196 | .oprofile_type = PPC_OPROFILE_POWER4, |
197 | .platform = "ppc970", | ||
188 | }, | 198 | }, |
189 | #endif /* CONFIG_PPC64 */ | 199 | #endif /* CONFIG_PPC64 */ |
190 | #if defined(CONFIG_PPC64) || defined(CONFIG_POWER4) | 200 | #if defined(CONFIG_PPC64) || defined(CONFIG_POWER4) |
@@ -204,7 +214,8 @@ struct cpu_spec cpu_specs[] = { | |||
204 | .num_pmcs = 8, | 214 | .num_pmcs = 8, |
205 | .cpu_setup = __setup_cpu_ppc970, | 215 | .cpu_setup = __setup_cpu_ppc970, |
206 | .oprofile_cpu_type = "ppc64/970", | 216 | .oprofile_cpu_type = "ppc64/970", |
207 | .oprofile_type = POWER4, | 217 | .oprofile_type = PPC_OPROFILE_POWER4, |
218 | .platform = "ppc970", | ||
208 | }, | 219 | }, |
209 | #endif /* defined(CONFIG_PPC64) || defined(CONFIG_POWER4) */ | 220 | #endif /* defined(CONFIG_PPC64) || defined(CONFIG_POWER4) */ |
210 | #ifdef CONFIG_PPC64 | 221 | #ifdef CONFIG_PPC64 |
@@ -219,7 +230,8 @@ struct cpu_spec cpu_specs[] = { | |||
219 | .dcache_bsize = 128, | 230 | .dcache_bsize = 128, |
220 | .cpu_setup = __setup_cpu_ppc970, | 231 | .cpu_setup = __setup_cpu_ppc970, |
221 | .oprofile_cpu_type = "ppc64/970", | 232 | .oprofile_cpu_type = "ppc64/970", |
222 | .oprofile_type = POWER4, | 233 | .oprofile_type = PPC_OPROFILE_POWER4, |
234 | .platform = "ppc970", | ||
223 | }, | 235 | }, |
224 | { /* Power5 GR */ | 236 | { /* Power5 GR */ |
225 | .pvr_mask = 0xffff0000, | 237 | .pvr_mask = 0xffff0000, |
@@ -232,7 +244,8 @@ struct cpu_spec cpu_specs[] = { | |||
232 | .num_pmcs = 6, | 244 | .num_pmcs = 6, |
233 | .cpu_setup = __setup_cpu_power4, | 245 | .cpu_setup = __setup_cpu_power4, |
234 | .oprofile_cpu_type = "ppc64/power5", | 246 | .oprofile_cpu_type = "ppc64/power5", |
235 | .oprofile_type = POWER4, | 247 | .oprofile_type = PPC_OPROFILE_POWER4, |
248 | .platform = "power5", | ||
236 | }, | 249 | }, |
237 | { /* Power5 GS */ | 250 | { /* Power5 GS */ |
238 | .pvr_mask = 0xffff0000, | 251 | .pvr_mask = 0xffff0000, |
@@ -245,7 +258,8 @@ struct cpu_spec cpu_specs[] = { | |||
245 | .num_pmcs = 6, | 258 | .num_pmcs = 6, |
246 | .cpu_setup = __setup_cpu_power4, | 259 | .cpu_setup = __setup_cpu_power4, |
247 | .oprofile_cpu_type = "ppc64/power5+", | 260 | .oprofile_cpu_type = "ppc64/power5+", |
248 | .oprofile_type = POWER4, | 261 | .oprofile_type = PPC_OPROFILE_POWER4, |
262 | .platform = "power5+", | ||
249 | }, | 263 | }, |
250 | { /* Cell Broadband Engine */ | 264 | { /* Cell Broadband Engine */ |
251 | .pvr_mask = 0xffff0000, | 265 | .pvr_mask = 0xffff0000, |
@@ -257,6 +271,7 @@ struct cpu_spec cpu_specs[] = { | |||
257 | .icache_bsize = 128, | 271 | .icache_bsize = 128, |
258 | .dcache_bsize = 128, | 272 | .dcache_bsize = 128, |
259 | .cpu_setup = __setup_cpu_be, | 273 | .cpu_setup = __setup_cpu_be, |
274 | .platform = "ppc-cell-be", | ||
260 | }, | 275 | }, |
261 | { /* default match */ | 276 | { /* default match */ |
262 | .pvr_mask = 0x00000000, | 277 | .pvr_mask = 0x00000000, |
@@ -268,6 +283,7 @@ struct cpu_spec cpu_specs[] = { | |||
268 | .dcache_bsize = 128, | 283 | .dcache_bsize = 128, |
269 | .num_pmcs = 6, | 284 | .num_pmcs = 6, |
270 | .cpu_setup = __setup_cpu_power4, | 285 | .cpu_setup = __setup_cpu_power4, |
286 | .platform = "power4", | ||
271 | } | 287 | } |
272 | #endif /* CONFIG_PPC64 */ | 288 | #endif /* CONFIG_PPC64 */ |
273 | #ifdef CONFIG_PPC32 | 289 | #ifdef CONFIG_PPC32 |
@@ -281,6 +297,7 @@ struct cpu_spec cpu_specs[] = { | |||
281 | PPC_FEATURE_UNIFIED_CACHE | PPC_FEATURE_NO_TB, | 297 | PPC_FEATURE_UNIFIED_CACHE | PPC_FEATURE_NO_TB, |
282 | .icache_bsize = 32, | 298 | .icache_bsize = 32, |
283 | .dcache_bsize = 32, | 299 | .dcache_bsize = 32, |
300 | .platform = "ppc601", | ||
284 | }, | 301 | }, |
285 | { /* 603 */ | 302 | { /* 603 */ |
286 | .pvr_mask = 0xffff0000, | 303 | .pvr_mask = 0xffff0000, |
@@ -290,7 +307,8 @@ struct cpu_spec cpu_specs[] = { | |||
290 | .cpu_user_features = COMMON_USER, | 307 | .cpu_user_features = COMMON_USER, |
291 | .icache_bsize = 32, | 308 | .icache_bsize = 32, |
292 | .dcache_bsize = 32, | 309 | .dcache_bsize = 32, |
293 | .cpu_setup = __setup_cpu_603 | 310 | .cpu_setup = __setup_cpu_603, |
311 | .platform = "ppc603", | ||
294 | }, | 312 | }, |
295 | { /* 603e */ | 313 | { /* 603e */ |
296 | .pvr_mask = 0xffff0000, | 314 | .pvr_mask = 0xffff0000, |
@@ -300,7 +318,8 @@ struct cpu_spec cpu_specs[] = { | |||
300 | .cpu_user_features = COMMON_USER, | 318 | .cpu_user_features = COMMON_USER, |
301 | .icache_bsize = 32, | 319 | .icache_bsize = 32, |
302 | .dcache_bsize = 32, | 320 | .dcache_bsize = 32, |
303 | .cpu_setup = __setup_cpu_603 | 321 | .cpu_setup = __setup_cpu_603, |
322 | .platform = "ppc603", | ||
304 | }, | 323 | }, |
305 | { /* 603ev */ | 324 | { /* 603ev */ |
306 | .pvr_mask = 0xffff0000, | 325 | .pvr_mask = 0xffff0000, |
@@ -310,7 +329,8 @@ struct cpu_spec cpu_specs[] = { | |||
310 | .cpu_user_features = COMMON_USER, | 329 | .cpu_user_features = COMMON_USER, |
311 | .icache_bsize = 32, | 330 | .icache_bsize = 32, |
312 | .dcache_bsize = 32, | 331 | .dcache_bsize = 32, |
313 | .cpu_setup = __setup_cpu_603 | 332 | .cpu_setup = __setup_cpu_603, |
333 | .platform = "ppc603", | ||
314 | }, | 334 | }, |
315 | { /* 604 */ | 335 | { /* 604 */ |
316 | .pvr_mask = 0xffff0000, | 336 | .pvr_mask = 0xffff0000, |
@@ -321,7 +341,8 @@ struct cpu_spec cpu_specs[] = { | |||
321 | .icache_bsize = 32, | 341 | .icache_bsize = 32, |
322 | .dcache_bsize = 32, | 342 | .dcache_bsize = 32, |
323 | .num_pmcs = 2, | 343 | .num_pmcs = 2, |
324 | .cpu_setup = __setup_cpu_604 | 344 | .cpu_setup = __setup_cpu_604, |
345 | .platform = "ppc604", | ||
325 | }, | 346 | }, |
326 | { /* 604e */ | 347 | { /* 604e */ |
327 | .pvr_mask = 0xfffff000, | 348 | .pvr_mask = 0xfffff000, |
@@ -332,7 +353,8 @@ struct cpu_spec cpu_specs[] = { | |||
332 | .icache_bsize = 32, | 353 | .icache_bsize = 32, |
333 | .dcache_bsize = 32, | 354 | .dcache_bsize = 32, |
334 | .num_pmcs = 4, | 355 | .num_pmcs = 4, |
335 | .cpu_setup = __setup_cpu_604 | 356 | .cpu_setup = __setup_cpu_604, |
357 | .platform = "ppc604", | ||
336 | }, | 358 | }, |
337 | { /* 604r */ | 359 | { /* 604r */ |
338 | .pvr_mask = 0xffff0000, | 360 | .pvr_mask = 0xffff0000, |
@@ -343,7 +365,8 @@ struct cpu_spec cpu_specs[] = { | |||
343 | .icache_bsize = 32, | 365 | .icache_bsize = 32, |
344 | .dcache_bsize = 32, | 366 | .dcache_bsize = 32, |
345 | .num_pmcs = 4, | 367 | .num_pmcs = 4, |
346 | .cpu_setup = __setup_cpu_604 | 368 | .cpu_setup = __setup_cpu_604, |
369 | .platform = "ppc604", | ||
347 | }, | 370 | }, |
348 | { /* 604ev */ | 371 | { /* 604ev */ |
349 | .pvr_mask = 0xffff0000, | 372 | .pvr_mask = 0xffff0000, |
@@ -354,7 +377,8 @@ struct cpu_spec cpu_specs[] = { | |||
354 | .icache_bsize = 32, | 377 | .icache_bsize = 32, |
355 | .dcache_bsize = 32, | 378 | .dcache_bsize = 32, |
356 | .num_pmcs = 4, | 379 | .num_pmcs = 4, |
357 | .cpu_setup = __setup_cpu_604 | 380 | .cpu_setup = __setup_cpu_604, |
381 | .platform = "ppc604", | ||
358 | }, | 382 | }, |
359 | { /* 740/750 (0x4202, don't support TAU ?) */ | 383 | { /* 740/750 (0x4202, don't support TAU ?) */ |
360 | .pvr_mask = 0xffffffff, | 384 | .pvr_mask = 0xffffffff, |
@@ -365,7 +389,8 @@ struct cpu_spec cpu_specs[] = { | |||
365 | .icache_bsize = 32, | 389 | .icache_bsize = 32, |
366 | .dcache_bsize = 32, | 390 | .dcache_bsize = 32, |
367 | .num_pmcs = 4, | 391 | .num_pmcs = 4, |
368 | .cpu_setup = __setup_cpu_750 | 392 | .cpu_setup = __setup_cpu_750, |
393 | .platform = "ppc750", | ||
369 | }, | 394 | }, |
370 | { /* 750CX (80100 and 8010x?) */ | 395 | { /* 750CX (80100 and 8010x?) */ |
371 | .pvr_mask = 0xfffffff0, | 396 | .pvr_mask = 0xfffffff0, |
@@ -376,7 +401,8 @@ struct cpu_spec cpu_specs[] = { | |||
376 | .icache_bsize = 32, | 401 | .icache_bsize = 32, |
377 | .dcache_bsize = 32, | 402 | .dcache_bsize = 32, |
378 | .num_pmcs = 4, | 403 | .num_pmcs = 4, |
379 | .cpu_setup = __setup_cpu_750cx | 404 | .cpu_setup = __setup_cpu_750cx, |
405 | .platform = "ppc750", | ||
380 | }, | 406 | }, |
381 | { /* 750CX (82201 and 82202) */ | 407 | { /* 750CX (82201 and 82202) */ |
382 | .pvr_mask = 0xfffffff0, | 408 | .pvr_mask = 0xfffffff0, |
@@ -387,7 +413,8 @@ struct cpu_spec cpu_specs[] = { | |||
387 | .icache_bsize = 32, | 413 | .icache_bsize = 32, |
388 | .dcache_bsize = 32, | 414 | .dcache_bsize = 32, |
389 | .num_pmcs = 4, | 415 | .num_pmcs = 4, |
390 | .cpu_setup = __setup_cpu_750cx | 416 | .cpu_setup = __setup_cpu_750cx, |
417 | .platform = "ppc750", | ||
391 | }, | 418 | }, |
392 | { /* 750CXe (82214) */ | 419 | { /* 750CXe (82214) */ |
393 | .pvr_mask = 0xfffffff0, | 420 | .pvr_mask = 0xfffffff0, |
@@ -398,7 +425,8 @@ struct cpu_spec cpu_specs[] = { | |||
398 | .icache_bsize = 32, | 425 | .icache_bsize = 32, |
399 | .dcache_bsize = 32, | 426 | .dcache_bsize = 32, |
400 | .num_pmcs = 4, | 427 | .num_pmcs = 4, |
401 | .cpu_setup = __setup_cpu_750cx | 428 | .cpu_setup = __setup_cpu_750cx, |
429 | .platform = "ppc750", | ||
402 | }, | 430 | }, |
403 | { /* 750CXe "Gekko" (83214) */ | 431 | { /* 750CXe "Gekko" (83214) */ |
404 | .pvr_mask = 0xffffffff, | 432 | .pvr_mask = 0xffffffff, |
@@ -409,7 +437,8 @@ struct cpu_spec cpu_specs[] = { | |||
409 | .icache_bsize = 32, | 437 | .icache_bsize = 32, |
410 | .dcache_bsize = 32, | 438 | .dcache_bsize = 32, |
411 | .num_pmcs = 4, | 439 | .num_pmcs = 4, |
412 | .cpu_setup = __setup_cpu_750cx | 440 | .cpu_setup = __setup_cpu_750cx, |
441 | .platform = "ppc750", | ||
413 | }, | 442 | }, |
414 | { /* 745/755 */ | 443 | { /* 745/755 */ |
415 | .pvr_mask = 0xfffff000, | 444 | .pvr_mask = 0xfffff000, |
@@ -420,7 +449,8 @@ struct cpu_spec cpu_specs[] = { | |||
420 | .icache_bsize = 32, | 449 | .icache_bsize = 32, |
421 | .dcache_bsize = 32, | 450 | .dcache_bsize = 32, |
422 | .num_pmcs = 4, | 451 | .num_pmcs = 4, |
423 | .cpu_setup = __setup_cpu_750 | 452 | .cpu_setup = __setup_cpu_750, |
453 | .platform = "ppc750", | ||
424 | }, | 454 | }, |
425 | { /* 750FX rev 1.x */ | 455 | { /* 750FX rev 1.x */ |
426 | .pvr_mask = 0xffffff00, | 456 | .pvr_mask = 0xffffff00, |
@@ -431,7 +461,8 @@ struct cpu_spec cpu_specs[] = { | |||
431 | .icache_bsize = 32, | 461 | .icache_bsize = 32, |
432 | .dcache_bsize = 32, | 462 | .dcache_bsize = 32, |
433 | .num_pmcs = 4, | 463 | .num_pmcs = 4, |
434 | .cpu_setup = __setup_cpu_750 | 464 | .cpu_setup = __setup_cpu_750, |
465 | .platform = "ppc750", | ||
435 | }, | 466 | }, |
436 | { /* 750FX rev 2.0 must disable HID0[DPM] */ | 467 | { /* 750FX rev 2.0 must disable HID0[DPM] */ |
437 | .pvr_mask = 0xffffffff, | 468 | .pvr_mask = 0xffffffff, |
@@ -442,7 +473,8 @@ struct cpu_spec cpu_specs[] = { | |||
442 | .icache_bsize = 32, | 473 | .icache_bsize = 32, |
443 | .dcache_bsize = 32, | 474 | .dcache_bsize = 32, |
444 | .num_pmcs = 4, | 475 | .num_pmcs = 4, |
445 | .cpu_setup = __setup_cpu_750 | 476 | .cpu_setup = __setup_cpu_750, |
477 | .platform = "ppc750", | ||
446 | }, | 478 | }, |
447 | { /* 750FX (All revs except 2.0) */ | 479 | { /* 750FX (All revs except 2.0) */ |
448 | .pvr_mask = 0xffff0000, | 480 | .pvr_mask = 0xffff0000, |
@@ -453,7 +485,8 @@ struct cpu_spec cpu_specs[] = { | |||
453 | .icache_bsize = 32, | 485 | .icache_bsize = 32, |
454 | .dcache_bsize = 32, | 486 | .dcache_bsize = 32, |
455 | .num_pmcs = 4, | 487 | .num_pmcs = 4, |
456 | .cpu_setup = __setup_cpu_750fx | 488 | .cpu_setup = __setup_cpu_750fx, |
489 | .platform = "ppc750", | ||
457 | }, | 490 | }, |
458 | { /* 750GX */ | 491 | { /* 750GX */ |
459 | .pvr_mask = 0xffff0000, | 492 | .pvr_mask = 0xffff0000, |
@@ -464,7 +497,8 @@ struct cpu_spec cpu_specs[] = { | |||
464 | .icache_bsize = 32, | 497 | .icache_bsize = 32, |
465 | .dcache_bsize = 32, | 498 | .dcache_bsize = 32, |
466 | .num_pmcs = 4, | 499 | .num_pmcs = 4, |
467 | .cpu_setup = __setup_cpu_750fx | 500 | .cpu_setup = __setup_cpu_750fx, |
501 | .platform = "ppc750", | ||
468 | }, | 502 | }, |
469 | { /* 740/750 (L2CR bit need fixup for 740) */ | 503 | { /* 740/750 (L2CR bit need fixup for 740) */ |
470 | .pvr_mask = 0xffff0000, | 504 | .pvr_mask = 0xffff0000, |
@@ -475,7 +509,8 @@ struct cpu_spec cpu_specs[] = { | |||
475 | .icache_bsize = 32, | 509 | .icache_bsize = 32, |
476 | .dcache_bsize = 32, | 510 | .dcache_bsize = 32, |
477 | .num_pmcs = 4, | 511 | .num_pmcs = 4, |
478 | .cpu_setup = __setup_cpu_750 | 512 | .cpu_setup = __setup_cpu_750, |
513 | .platform = "ppc750", | ||
479 | }, | 514 | }, |
480 | { /* 7400 rev 1.1 ? (no TAU) */ | 515 | { /* 7400 rev 1.1 ? (no TAU) */ |
481 | .pvr_mask = 0xffffffff, | 516 | .pvr_mask = 0xffffffff, |
@@ -486,7 +521,8 @@ struct cpu_spec cpu_specs[] = { | |||
486 | .icache_bsize = 32, | 521 | .icache_bsize = 32, |
487 | .dcache_bsize = 32, | 522 | .dcache_bsize = 32, |
488 | .num_pmcs = 4, | 523 | .num_pmcs = 4, |
489 | .cpu_setup = __setup_cpu_7400 | 524 | .cpu_setup = __setup_cpu_7400, |
525 | .platform = "ppc7400", | ||
490 | }, | 526 | }, |
491 | { /* 7400 */ | 527 | { /* 7400 */ |
492 | .pvr_mask = 0xffff0000, | 528 | .pvr_mask = 0xffff0000, |
@@ -497,7 +533,8 @@ struct cpu_spec cpu_specs[] = { | |||
497 | .icache_bsize = 32, | 533 | .icache_bsize = 32, |
498 | .dcache_bsize = 32, | 534 | .dcache_bsize = 32, |
499 | .num_pmcs = 4, | 535 | .num_pmcs = 4, |
500 | .cpu_setup = __setup_cpu_7400 | 536 | .cpu_setup = __setup_cpu_7400, |
537 | .platform = "ppc7400", | ||
501 | }, | 538 | }, |
502 | { /* 7410 */ | 539 | { /* 7410 */ |
503 | .pvr_mask = 0xffff0000, | 540 | .pvr_mask = 0xffff0000, |
@@ -508,7 +545,8 @@ struct cpu_spec cpu_specs[] = { | |||
508 | .icache_bsize = 32, | 545 | .icache_bsize = 32, |
509 | .dcache_bsize = 32, | 546 | .dcache_bsize = 32, |
510 | .num_pmcs = 4, | 547 | .num_pmcs = 4, |
511 | .cpu_setup = __setup_cpu_7410 | 548 | .cpu_setup = __setup_cpu_7410, |
549 | .platform = "ppc7400", | ||
512 | }, | 550 | }, |
513 | { /* 7450 2.0 - no doze/nap */ | 551 | { /* 7450 2.0 - no doze/nap */ |
514 | .pvr_mask = 0xffffffff, | 552 | .pvr_mask = 0xffffffff, |
@@ -521,7 +559,8 @@ struct cpu_spec cpu_specs[] = { | |||
521 | .num_pmcs = 6, | 559 | .num_pmcs = 6, |
522 | .cpu_setup = __setup_cpu_745x, | 560 | .cpu_setup = __setup_cpu_745x, |
523 | .oprofile_cpu_type = "ppc/7450", | 561 | .oprofile_cpu_type = "ppc/7450", |
524 | .oprofile_type = G4, | 562 | .oprofile_type = PPC_OPROFILE_G4, |
563 | .platform = "ppc7450", | ||
525 | }, | 564 | }, |
526 | { /* 7450 2.1 */ | 565 | { /* 7450 2.1 */ |
527 | .pvr_mask = 0xffffffff, | 566 | .pvr_mask = 0xffffffff, |
@@ -534,7 +573,8 @@ struct cpu_spec cpu_specs[] = { | |||
534 | .num_pmcs = 6, | 573 | .num_pmcs = 6, |
535 | .cpu_setup = __setup_cpu_745x, | 574 | .cpu_setup = __setup_cpu_745x, |
536 | .oprofile_cpu_type = "ppc/7450", | 575 | .oprofile_cpu_type = "ppc/7450", |
537 | .oprofile_type = G4, | 576 | .oprofile_type = PPC_OPROFILE_G4, |
577 | .platform = "ppc7450", | ||
538 | }, | 578 | }, |
539 | { /* 7450 2.3 and newer */ | 579 | { /* 7450 2.3 and newer */ |
540 | .pvr_mask = 0xffff0000, | 580 | .pvr_mask = 0xffff0000, |
@@ -547,7 +587,8 @@ struct cpu_spec cpu_specs[] = { | |||
547 | .num_pmcs = 6, | 587 | .num_pmcs = 6, |
548 | .cpu_setup = __setup_cpu_745x, | 588 | .cpu_setup = __setup_cpu_745x, |
549 | .oprofile_cpu_type = "ppc/7450", | 589 | .oprofile_cpu_type = "ppc/7450", |
550 | .oprofile_type = G4, | 590 | .oprofile_type = PPC_OPROFILE_G4, |
591 | .platform = "ppc7450", | ||
551 | }, | 592 | }, |
552 | { /* 7455 rev 1.x */ | 593 | { /* 7455 rev 1.x */ |
553 | .pvr_mask = 0xffffff00, | 594 | .pvr_mask = 0xffffff00, |
@@ -560,7 +601,8 @@ struct cpu_spec cpu_specs[] = { | |||
560 | .num_pmcs = 6, | 601 | .num_pmcs = 6, |
561 | .cpu_setup = __setup_cpu_745x, | 602 | .cpu_setup = __setup_cpu_745x, |
562 | .oprofile_cpu_type = "ppc/7450", | 603 | .oprofile_cpu_type = "ppc/7450", |
563 | .oprofile_type = G4, | 604 | .oprofile_type = PPC_OPROFILE_G4, |
605 | .platform = "ppc7450", | ||
564 | }, | 606 | }, |
565 | { /* 7455 rev 2.0 */ | 607 | { /* 7455 rev 2.0 */ |
566 | .pvr_mask = 0xffffffff, | 608 | .pvr_mask = 0xffffffff, |
@@ -573,7 +615,8 @@ struct cpu_spec cpu_specs[] = { | |||
573 | .num_pmcs = 6, | 615 | .num_pmcs = 6, |
574 | .cpu_setup = __setup_cpu_745x, | 616 | .cpu_setup = __setup_cpu_745x, |
575 | .oprofile_cpu_type = "ppc/7450", | 617 | .oprofile_cpu_type = "ppc/7450", |
576 | .oprofile_type = G4, | 618 | .oprofile_type = PPC_OPROFILE_G4, |
619 | .platform = "ppc7450", | ||
577 | }, | 620 | }, |
578 | { /* 7455 others */ | 621 | { /* 7455 others */ |
579 | .pvr_mask = 0xffff0000, | 622 | .pvr_mask = 0xffff0000, |
@@ -586,7 +629,8 @@ struct cpu_spec cpu_specs[] = { | |||
586 | .num_pmcs = 6, | 629 | .num_pmcs = 6, |
587 | .cpu_setup = __setup_cpu_745x, | 630 | .cpu_setup = __setup_cpu_745x, |
588 | .oprofile_cpu_type = "ppc/7450", | 631 | .oprofile_cpu_type = "ppc/7450", |
589 | .oprofile_type = G4, | 632 | .oprofile_type = PPC_OPROFILE_G4, |
633 | .platform = "ppc7450", | ||
590 | }, | 634 | }, |
591 | { /* 7447/7457 Rev 1.0 */ | 635 | { /* 7447/7457 Rev 1.0 */ |
592 | .pvr_mask = 0xffffffff, | 636 | .pvr_mask = 0xffffffff, |
@@ -599,7 +643,8 @@ struct cpu_spec cpu_specs[] = { | |||
599 | .num_pmcs = 6, | 643 | .num_pmcs = 6, |
600 | .cpu_setup = __setup_cpu_745x, | 644 | .cpu_setup = __setup_cpu_745x, |
601 | .oprofile_cpu_type = "ppc/7450", | 645 | .oprofile_cpu_type = "ppc/7450", |
602 | .oprofile_type = G4, | 646 | .oprofile_type = PPC_OPROFILE_G4, |
647 | .platform = "ppc7450", | ||
603 | }, | 648 | }, |
604 | { /* 7447/7457 Rev 1.1 */ | 649 | { /* 7447/7457 Rev 1.1 */ |
605 | .pvr_mask = 0xffffffff, | 650 | .pvr_mask = 0xffffffff, |
@@ -612,7 +657,8 @@ struct cpu_spec cpu_specs[] = { | |||
612 | .num_pmcs = 6, | 657 | .num_pmcs = 6, |
613 | .cpu_setup = __setup_cpu_745x, | 658 | .cpu_setup = __setup_cpu_745x, |
614 | .oprofile_cpu_type = "ppc/7450", | 659 | .oprofile_cpu_type = "ppc/7450", |
615 | .oprofile_type = G4, | 660 | .oprofile_type = PPC_OPROFILE_G4, |
661 | .platform = "ppc7450", | ||
616 | }, | 662 | }, |
617 | { /* 7447/7457 Rev 1.2 and later */ | 663 | { /* 7447/7457 Rev 1.2 and later */ |
618 | .pvr_mask = 0xffff0000, | 664 | .pvr_mask = 0xffff0000, |
@@ -625,7 +671,8 @@ struct cpu_spec cpu_specs[] = { | |||
625 | .num_pmcs = 6, | 671 | .num_pmcs = 6, |
626 | .cpu_setup = __setup_cpu_745x, | 672 | .cpu_setup = __setup_cpu_745x, |
627 | .oprofile_cpu_type = "ppc/7450", | 673 | .oprofile_cpu_type = "ppc/7450", |
628 | .oprofile_type = G4, | 674 | .oprofile_type = PPC_OPROFILE_G4, |
675 | .platform = "ppc7450", | ||
629 | }, | 676 | }, |
630 | { /* 7447A */ | 677 | { /* 7447A */ |
631 | .pvr_mask = 0xffff0000, | 678 | .pvr_mask = 0xffff0000, |
@@ -638,7 +685,8 @@ struct cpu_spec cpu_specs[] = { | |||
638 | .num_pmcs = 6, | 685 | .num_pmcs = 6, |
639 | .cpu_setup = __setup_cpu_745x, | 686 | .cpu_setup = __setup_cpu_745x, |
640 | .oprofile_cpu_type = "ppc/7450", | 687 | .oprofile_cpu_type = "ppc/7450", |
641 | .oprofile_type = G4, | 688 | .oprofile_type = PPC_OPROFILE_G4, |
689 | .platform = "ppc7450", | ||
642 | }, | 690 | }, |
643 | { /* 7448 */ | 691 | { /* 7448 */ |
644 | .pvr_mask = 0xffff0000, | 692 | .pvr_mask = 0xffff0000, |
@@ -651,7 +699,8 @@ struct cpu_spec cpu_specs[] = { | |||
651 | .num_pmcs = 6, | 699 | .num_pmcs = 6, |
652 | .cpu_setup = __setup_cpu_745x, | 700 | .cpu_setup = __setup_cpu_745x, |
653 | .oprofile_cpu_type = "ppc/7450", | 701 | .oprofile_cpu_type = "ppc/7450", |
654 | .oprofile_type = G4, | 702 | .oprofile_type = PPC_OPROFILE_G4, |
703 | .platform = "ppc7450", | ||
655 | }, | 704 | }, |
656 | { /* 82xx (8240, 8245, 8260 are all 603e cores) */ | 705 | { /* 82xx (8240, 8245, 8260 are all 603e cores) */ |
657 | .pvr_mask = 0x7fff0000, | 706 | .pvr_mask = 0x7fff0000, |
@@ -661,7 +710,8 @@ struct cpu_spec cpu_specs[] = { | |||
661 | .cpu_user_features = COMMON_USER, | 710 | .cpu_user_features = COMMON_USER, |
662 | .icache_bsize = 32, | 711 | .icache_bsize = 32, |
663 | .dcache_bsize = 32, | 712 | .dcache_bsize = 32, |
664 | .cpu_setup = __setup_cpu_603 | 713 | .cpu_setup = __setup_cpu_603, |
714 | .platform = "ppc603", | ||
665 | }, | 715 | }, |
666 | { /* All G2_LE (603e core, plus some) have the same pvr */ | 716 | { /* All G2_LE (603e core, plus some) have the same pvr */ |
667 | .pvr_mask = 0x7fff0000, | 717 | .pvr_mask = 0x7fff0000, |
@@ -671,7 +721,8 @@ struct cpu_spec cpu_specs[] = { | |||
671 | .cpu_user_features = COMMON_USER, | 721 | .cpu_user_features = COMMON_USER, |
672 | .icache_bsize = 32, | 722 | .icache_bsize = 32, |
673 | .dcache_bsize = 32, | 723 | .dcache_bsize = 32, |
674 | .cpu_setup = __setup_cpu_603 | 724 | .cpu_setup = __setup_cpu_603, |
725 | .platform = "ppc603", | ||
675 | }, | 726 | }, |
676 | { /* e300 (a 603e core, plus some) on 83xx */ | 727 | { /* e300 (a 603e core, plus some) on 83xx */ |
677 | .pvr_mask = 0x7fff0000, | 728 | .pvr_mask = 0x7fff0000, |
@@ -681,7 +732,8 @@ struct cpu_spec cpu_specs[] = { | |||
681 | .cpu_user_features = COMMON_USER, | 732 | .cpu_user_features = COMMON_USER, |
682 | .icache_bsize = 32, | 733 | .icache_bsize = 32, |
683 | .dcache_bsize = 32, | 734 | .dcache_bsize = 32, |
684 | .cpu_setup = __setup_cpu_603 | 735 | .cpu_setup = __setup_cpu_603, |
736 | .platform = "ppc603", | ||
685 | }, | 737 | }, |
686 | { /* default match, we assume split I/D cache & TB (non-601)... */ | 738 | { /* default match, we assume split I/D cache & TB (non-601)... */ |
687 | .pvr_mask = 0x00000000, | 739 | .pvr_mask = 0x00000000, |
@@ -691,6 +743,7 @@ struct cpu_spec cpu_specs[] = { | |||
691 | .cpu_user_features = COMMON_USER, | 743 | .cpu_user_features = COMMON_USER, |
692 | .icache_bsize = 32, | 744 | .icache_bsize = 32, |
693 | .dcache_bsize = 32, | 745 | .dcache_bsize = 32, |
746 | .platform = "ppc603", | ||
694 | }, | 747 | }, |
695 | #endif /* CLASSIC_PPC */ | 748 | #endif /* CLASSIC_PPC */ |
696 | #ifdef CONFIG_8xx | 749 | #ifdef CONFIG_8xx |
@@ -704,6 +757,7 @@ struct cpu_spec cpu_specs[] = { | |||
704 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, | 757 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, |
705 | .icache_bsize = 16, | 758 | .icache_bsize = 16, |
706 | .dcache_bsize = 16, | 759 | .dcache_bsize = 16, |
760 | .platform = "ppc823", | ||
707 | }, | 761 | }, |
708 | #endif /* CONFIG_8xx */ | 762 | #endif /* CONFIG_8xx */ |
709 | #ifdef CONFIG_40x | 763 | #ifdef CONFIG_40x |
@@ -715,6 +769,7 @@ struct cpu_spec cpu_specs[] = { | |||
715 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, | 769 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, |
716 | .icache_bsize = 16, | 770 | .icache_bsize = 16, |
717 | .dcache_bsize = 16, | 771 | .dcache_bsize = 16, |
772 | .platform = "ppc403", | ||
718 | }, | 773 | }, |
719 | { /* 403GCX */ | 774 | { /* 403GCX */ |
720 | .pvr_mask = 0xffffff00, | 775 | .pvr_mask = 0xffffff00, |
@@ -725,6 +780,7 @@ struct cpu_spec cpu_specs[] = { | |||
725 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_NO_TB, | 780 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_NO_TB, |
726 | .icache_bsize = 16, | 781 | .icache_bsize = 16, |
727 | .dcache_bsize = 16, | 782 | .dcache_bsize = 16, |
783 | .platform = "ppc403", | ||
728 | }, | 784 | }, |
729 | { /* 403G ?? */ | 785 | { /* 403G ?? */ |
730 | .pvr_mask = 0xffff0000, | 786 | .pvr_mask = 0xffff0000, |
@@ -734,6 +790,7 @@ struct cpu_spec cpu_specs[] = { | |||
734 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, | 790 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, |
735 | .icache_bsize = 16, | 791 | .icache_bsize = 16, |
736 | .dcache_bsize = 16, | 792 | .dcache_bsize = 16, |
793 | .platform = "ppc403", | ||
737 | }, | 794 | }, |
738 | { /* 405GP */ | 795 | { /* 405GP */ |
739 | .pvr_mask = 0xffff0000, | 796 | .pvr_mask = 0xffff0000, |
@@ -744,6 +801,7 @@ struct cpu_spec cpu_specs[] = { | |||
744 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | 801 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, |
745 | .icache_bsize = 32, | 802 | .icache_bsize = 32, |
746 | .dcache_bsize = 32, | 803 | .dcache_bsize = 32, |
804 | .platform = "ppc405", | ||
747 | }, | 805 | }, |
748 | { /* STB 03xxx */ | 806 | { /* STB 03xxx */ |
749 | .pvr_mask = 0xffff0000, | 807 | .pvr_mask = 0xffff0000, |
@@ -754,6 +812,7 @@ struct cpu_spec cpu_specs[] = { | |||
754 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | 812 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, |
755 | .icache_bsize = 32, | 813 | .icache_bsize = 32, |
756 | .dcache_bsize = 32, | 814 | .dcache_bsize = 32, |
815 | .platform = "ppc405", | ||
757 | }, | 816 | }, |
758 | { /* STB 04xxx */ | 817 | { /* STB 04xxx */ |
759 | .pvr_mask = 0xffff0000, | 818 | .pvr_mask = 0xffff0000, |
@@ -764,6 +823,7 @@ struct cpu_spec cpu_specs[] = { | |||
764 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | 823 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, |
765 | .icache_bsize = 32, | 824 | .icache_bsize = 32, |
766 | .dcache_bsize = 32, | 825 | .dcache_bsize = 32, |
826 | .platform = "ppc405", | ||
767 | }, | 827 | }, |
768 | { /* NP405L */ | 828 | { /* NP405L */ |
769 | .pvr_mask = 0xffff0000, | 829 | .pvr_mask = 0xffff0000, |
@@ -774,6 +834,7 @@ struct cpu_spec cpu_specs[] = { | |||
774 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | 834 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, |
775 | .icache_bsize = 32, | 835 | .icache_bsize = 32, |
776 | .dcache_bsize = 32, | 836 | .dcache_bsize = 32, |
837 | .platform = "ppc405", | ||
777 | }, | 838 | }, |
778 | { /* NP4GS3 */ | 839 | { /* NP4GS3 */ |
779 | .pvr_mask = 0xffff0000, | 840 | .pvr_mask = 0xffff0000, |
@@ -784,6 +845,7 @@ struct cpu_spec cpu_specs[] = { | |||
784 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | 845 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, |
785 | .icache_bsize = 32, | 846 | .icache_bsize = 32, |
786 | .dcache_bsize = 32, | 847 | .dcache_bsize = 32, |
848 | .platform = "ppc405", | ||
787 | }, | 849 | }, |
788 | { /* NP405H */ | 850 | { /* NP405H */ |
789 | .pvr_mask = 0xffff0000, | 851 | .pvr_mask = 0xffff0000, |
@@ -794,6 +856,7 @@ struct cpu_spec cpu_specs[] = { | |||
794 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | 856 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, |
795 | .icache_bsize = 32, | 857 | .icache_bsize = 32, |
796 | .dcache_bsize = 32, | 858 | .dcache_bsize = 32, |
859 | .platform = "ppc405", | ||
797 | }, | 860 | }, |
798 | { /* 405GPr */ | 861 | { /* 405GPr */ |
799 | .pvr_mask = 0xffff0000, | 862 | .pvr_mask = 0xffff0000, |
@@ -804,6 +867,7 @@ struct cpu_spec cpu_specs[] = { | |||
804 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | 867 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, |
805 | .icache_bsize = 32, | 868 | .icache_bsize = 32, |
806 | .dcache_bsize = 32, | 869 | .dcache_bsize = 32, |
870 | .platform = "ppc405", | ||
807 | }, | 871 | }, |
808 | { /* STBx25xx */ | 872 | { /* STBx25xx */ |
809 | .pvr_mask = 0xffff0000, | 873 | .pvr_mask = 0xffff0000, |
@@ -814,6 +878,7 @@ struct cpu_spec cpu_specs[] = { | |||
814 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | 878 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, |
815 | .icache_bsize = 32, | 879 | .icache_bsize = 32, |
816 | .dcache_bsize = 32, | 880 | .dcache_bsize = 32, |
881 | .platform = "ppc405", | ||
817 | }, | 882 | }, |
818 | { /* 405LP */ | 883 | { /* 405LP */ |
819 | .pvr_mask = 0xffff0000, | 884 | .pvr_mask = 0xffff0000, |
@@ -823,6 +888,7 @@ struct cpu_spec cpu_specs[] = { | |||
823 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, | 888 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, |
824 | .icache_bsize = 32, | 889 | .icache_bsize = 32, |
825 | .dcache_bsize = 32, | 890 | .dcache_bsize = 32, |
891 | .platform = "ppc405", | ||
826 | }, | 892 | }, |
827 | { /* Xilinx Virtex-II Pro */ | 893 | { /* Xilinx Virtex-II Pro */ |
828 | .pvr_mask = 0xffff0000, | 894 | .pvr_mask = 0xffff0000, |
@@ -833,6 +899,7 @@ struct cpu_spec cpu_specs[] = { | |||
833 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | 899 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, |
834 | .icache_bsize = 32, | 900 | .icache_bsize = 32, |
835 | .dcache_bsize = 32, | 901 | .dcache_bsize = 32, |
902 | .platform = "ppc405", | ||
836 | }, | 903 | }, |
837 | { /* 405EP */ | 904 | { /* 405EP */ |
838 | .pvr_mask = 0xffff0000, | 905 | .pvr_mask = 0xffff0000, |
@@ -843,6 +910,7 @@ struct cpu_spec cpu_specs[] = { | |||
843 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, | 910 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC, |
844 | .icache_bsize = 32, | 911 | .icache_bsize = 32, |
845 | .dcache_bsize = 32, | 912 | .dcache_bsize = 32, |
913 | .platform = "ppc405", | ||
846 | }, | 914 | }, |
847 | 915 | ||
848 | #endif /* CONFIG_40x */ | 916 | #endif /* CONFIG_40x */ |
@@ -852,81 +920,90 @@ struct cpu_spec cpu_specs[] = { | |||
852 | .pvr_value = 0x40000850, | 920 | .pvr_value = 0x40000850, |
853 | .cpu_name = "440EP Rev. A", | 921 | .cpu_name = "440EP Rev. A", |
854 | .cpu_features = CPU_FTRS_44X, | 922 | .cpu_features = CPU_FTRS_44X, |
855 | .cpu_user_features = COMMON_USER, /* 440EP has an FPU */ | 923 | .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, |
856 | .icache_bsize = 32, | 924 | .icache_bsize = 32, |
857 | .dcache_bsize = 32, | 925 | .dcache_bsize = 32, |
926 | .platform = "ppc440", | ||
858 | }, | 927 | }, |
859 | { | 928 | { |
860 | .pvr_mask = 0xf0000fff, | 929 | .pvr_mask = 0xf0000fff, |
861 | .pvr_value = 0x400008d3, | 930 | .pvr_value = 0x400008d3, |
862 | .cpu_name = "440EP Rev. B", | 931 | .cpu_name = "440EP Rev. B", |
863 | .cpu_features = CPU_FTRS_44X, | 932 | .cpu_features = CPU_FTRS_44X, |
864 | .cpu_user_features = COMMON_USER, /* 440EP has an FPU */ | 933 | .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, |
865 | .icache_bsize = 32, | 934 | .icache_bsize = 32, |
866 | .dcache_bsize = 32, | 935 | .dcache_bsize = 32, |
936 | .platform = "ppc440", | ||
867 | }, | 937 | }, |
868 | { /* 440GP Rev. B */ | 938 | { /* 440GP Rev. B */ |
869 | .pvr_mask = 0xf0000fff, | 939 | .pvr_mask = 0xf0000fff, |
870 | .pvr_value = 0x40000440, | 940 | .pvr_value = 0x40000440, |
871 | .cpu_name = "440GP Rev. B", | 941 | .cpu_name = "440GP Rev. B", |
872 | .cpu_features = CPU_FTRS_44X, | 942 | .cpu_features = CPU_FTRS_44X, |
873 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, | 943 | .cpu_user_features = COMMON_USER_BOOKE, |
874 | .icache_bsize = 32, | 944 | .icache_bsize = 32, |
875 | .dcache_bsize = 32, | 945 | .dcache_bsize = 32, |
946 | .platform = "ppc440gp", | ||
876 | }, | 947 | }, |
877 | { /* 440GP Rev. C */ | 948 | { /* 440GP Rev. C */ |
878 | .pvr_mask = 0xf0000fff, | 949 | .pvr_mask = 0xf0000fff, |
879 | .pvr_value = 0x40000481, | 950 | .pvr_value = 0x40000481, |
880 | .cpu_name = "440GP Rev. C", | 951 | .cpu_name = "440GP Rev. C", |
881 | .cpu_features = CPU_FTRS_44X, | 952 | .cpu_features = CPU_FTRS_44X, |
882 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, | 953 | .cpu_user_features = COMMON_USER_BOOKE, |
883 | .icache_bsize = 32, | 954 | .icache_bsize = 32, |
884 | .dcache_bsize = 32, | 955 | .dcache_bsize = 32, |
956 | .platform = "ppc440gp", | ||
885 | }, | 957 | }, |
886 | { /* 440GX Rev. A */ | 958 | { /* 440GX Rev. A */ |
887 | .pvr_mask = 0xf0000fff, | 959 | .pvr_mask = 0xf0000fff, |
888 | .pvr_value = 0x50000850, | 960 | .pvr_value = 0x50000850, |
889 | .cpu_name = "440GX Rev. A", | 961 | .cpu_name = "440GX Rev. A", |
890 | .cpu_features = CPU_FTRS_44X, | 962 | .cpu_features = CPU_FTRS_44X, |
891 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, | 963 | .cpu_user_features = COMMON_USER_BOOKE, |
892 | .icache_bsize = 32, | 964 | .icache_bsize = 32, |
893 | .dcache_bsize = 32, | 965 | .dcache_bsize = 32, |
966 | .platform = "ppc440", | ||
894 | }, | 967 | }, |
895 | { /* 440GX Rev. B */ | 968 | { /* 440GX Rev. B */ |
896 | .pvr_mask = 0xf0000fff, | 969 | .pvr_mask = 0xf0000fff, |
897 | .pvr_value = 0x50000851, | 970 | .pvr_value = 0x50000851, |
898 | .cpu_name = "440GX Rev. B", | 971 | .cpu_name = "440GX Rev. B", |
899 | .cpu_features = CPU_FTRS_44X, | 972 | .cpu_features = CPU_FTRS_44X, |
900 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, | 973 | .cpu_user_features = COMMON_USER_BOOKE, |
901 | .icache_bsize = 32, | 974 | .icache_bsize = 32, |
902 | .dcache_bsize = 32, | 975 | .dcache_bsize = 32, |
976 | .platform = "ppc440", | ||
903 | }, | 977 | }, |
904 | { /* 440GX Rev. C */ | 978 | { /* 440GX Rev. C */ |
905 | .pvr_mask = 0xf0000fff, | 979 | .pvr_mask = 0xf0000fff, |
906 | .pvr_value = 0x50000892, | 980 | .pvr_value = 0x50000892, |
907 | .cpu_name = "440GX Rev. C", | 981 | .cpu_name = "440GX Rev. C", |
908 | .cpu_features = CPU_FTRS_44X, | 982 | .cpu_features = CPU_FTRS_44X, |
909 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, | 983 | .cpu_user_features = COMMON_USER_BOOKE, |
910 | .icache_bsize = 32, | 984 | .icache_bsize = 32, |
911 | .dcache_bsize = 32, | 985 | .dcache_bsize = 32, |
986 | .platform = "ppc440", | ||
912 | }, | 987 | }, |
913 | { /* 440GX Rev. F */ | 988 | { /* 440GX Rev. F */ |
914 | .pvr_mask = 0xf0000fff, | 989 | .pvr_mask = 0xf0000fff, |
915 | .pvr_value = 0x50000894, | 990 | .pvr_value = 0x50000894, |
916 | .cpu_name = "440GX Rev. F", | 991 | .cpu_name = "440GX Rev. F", |
917 | .cpu_features = CPU_FTRS_44X, | 992 | .cpu_features = CPU_FTRS_44X, |
918 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, | 993 | .cpu_user_features = COMMON_USER_BOOKE, |
919 | .icache_bsize = 32, | 994 | .icache_bsize = 32, |
920 | .dcache_bsize = 32, | 995 | .dcache_bsize = 32, |
996 | .platform = "ppc440", | ||
921 | }, | 997 | }, |
922 | { /* 440SP Rev. A */ | 998 | { /* 440SP Rev. A */ |
923 | .pvr_mask = 0xff000fff, | 999 | .pvr_mask = 0xff000fff, |
924 | .pvr_value = 0x53000891, | 1000 | .pvr_value = 0x53000891, |
925 | .cpu_name = "440SP Rev. A", | 1001 | .cpu_name = "440SP Rev. A", |
926 | .cpu_features = CPU_FTRS_44X, | 1002 | .cpu_features = CPU_FTRS_44X, |
927 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, | 1003 | .cpu_user_features = COMMON_USER_BOOKE, |
928 | .icache_bsize = 32, | 1004 | .icache_bsize = 32, |
929 | .dcache_bsize = 32, | 1005 | .dcache_bsize = 32, |
1006 | .platform = "ppc440", | ||
930 | }, | 1007 | }, |
931 | { /* 440SPe Rev. A */ | 1008 | { /* 440SPe Rev. A */ |
932 | .pvr_mask = 0xff000fff, | 1009 | .pvr_mask = 0xff000fff, |
@@ -934,9 +1011,10 @@ struct cpu_spec cpu_specs[] = { | |||
934 | .cpu_name = "440SPe Rev. A", | 1011 | .cpu_name = "440SPe Rev. A", |
935 | .cpu_features = CPU_FTR_SPLIT_ID_CACHE | | 1012 | .cpu_features = CPU_FTR_SPLIT_ID_CACHE | |
936 | CPU_FTR_USE_TB, | 1013 | CPU_FTR_USE_TB, |
937 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, | 1014 | .cpu_user_features = COMMON_USER_BOOKE, |
938 | .icache_bsize = 32, | 1015 | .icache_bsize = 32, |
939 | .dcache_bsize = 32, | 1016 | .dcache_bsize = 32, |
1017 | .platform = "ppc440", | ||
940 | }, | 1018 | }, |
941 | #endif /* CONFIG_44x */ | 1019 | #endif /* CONFIG_44x */ |
942 | #ifdef CONFIG_FSL_BOOKE | 1020 | #ifdef CONFIG_FSL_BOOKE |
@@ -946,10 +1024,11 @@ struct cpu_spec cpu_specs[] = { | |||
946 | .cpu_name = "e200z5", | 1024 | .cpu_name = "e200z5", |
947 | /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */ | 1025 | /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */ |
948 | .cpu_features = CPU_FTRS_E200, | 1026 | .cpu_features = CPU_FTRS_E200, |
949 | .cpu_user_features = PPC_FEATURE_32 | | 1027 | .cpu_user_features = COMMON_USER_BOOKE | |
950 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_EFP_SINGLE | | 1028 | PPC_FEATURE_HAS_EFP_SINGLE | |
951 | PPC_FEATURE_UNIFIED_CACHE, | 1029 | PPC_FEATURE_UNIFIED_CACHE, |
952 | .dcache_bsize = 32, | 1030 | .dcache_bsize = 32, |
1031 | .platform = "ppc5554", | ||
953 | }, | 1032 | }, |
954 | { /* e200z6 */ | 1033 | { /* e200z6 */ |
955 | .pvr_mask = 0xfff00000, | 1034 | .pvr_mask = 0xfff00000, |
@@ -957,11 +1036,12 @@ struct cpu_spec cpu_specs[] = { | |||
957 | .cpu_name = "e200z6", | 1036 | .cpu_name = "e200z6", |
958 | /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */ | 1037 | /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */ |
959 | .cpu_features = CPU_FTRS_E200, | 1038 | .cpu_features = CPU_FTRS_E200, |
960 | .cpu_user_features = PPC_FEATURE_32 | | 1039 | .cpu_user_features = COMMON_USER_BOOKE | |
961 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_SPE_COMP | | 1040 | PPC_FEATURE_SPE_COMP | |
962 | PPC_FEATURE_HAS_EFP_SINGLE | | 1041 | PPC_FEATURE_HAS_EFP_SINGLE | |
963 | PPC_FEATURE_UNIFIED_CACHE, | 1042 | PPC_FEATURE_UNIFIED_CACHE, |
964 | .dcache_bsize = 32, | 1043 | .dcache_bsize = 32, |
1044 | .platform = "ppc5554", | ||
965 | }, | 1045 | }, |
966 | { /* e500 */ | 1046 | { /* e500 */ |
967 | .pvr_mask = 0xffff0000, | 1047 | .pvr_mask = 0xffff0000, |
@@ -969,14 +1049,15 @@ struct cpu_spec cpu_specs[] = { | |||
969 | .cpu_name = "e500", | 1049 | .cpu_name = "e500", |
970 | /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */ | 1050 | /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */ |
971 | .cpu_features = CPU_FTRS_E500, | 1051 | .cpu_features = CPU_FTRS_E500, |
972 | .cpu_user_features = PPC_FEATURE_32 | | 1052 | .cpu_user_features = COMMON_USER_BOOKE | |
973 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_SPE_COMP | | 1053 | PPC_FEATURE_SPE_COMP | |
974 | PPC_FEATURE_HAS_EFP_SINGLE, | 1054 | PPC_FEATURE_HAS_EFP_SINGLE, |
975 | .icache_bsize = 32, | 1055 | .icache_bsize = 32, |
976 | .dcache_bsize = 32, | 1056 | .dcache_bsize = 32, |
977 | .num_pmcs = 4, | 1057 | .num_pmcs = 4, |
978 | .oprofile_cpu_type = "ppc/e500", | 1058 | .oprofile_cpu_type = "ppc/e500", |
979 | .oprofile_type = BOOKE, | 1059 | .oprofile_type = PPC_OPROFILE_BOOKE, |
1060 | .platform = "ppc8540", | ||
980 | }, | 1061 | }, |
981 | { /* e500v2 */ | 1062 | { /* e500v2 */ |
982 | .pvr_mask = 0xffff0000, | 1063 | .pvr_mask = 0xffff0000, |
@@ -984,14 +1065,16 @@ struct cpu_spec cpu_specs[] = { | |||
984 | .cpu_name = "e500v2", | 1065 | .cpu_name = "e500v2", |
985 | /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */ | 1066 | /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */ |
986 | .cpu_features = CPU_FTRS_E500_2, | 1067 | .cpu_features = CPU_FTRS_E500_2, |
987 | .cpu_user_features = PPC_FEATURE_32 | | 1068 | .cpu_user_features = COMMON_USER_BOOKE | |
988 | PPC_FEATURE_HAS_MMU | PPC_FEATURE_SPE_COMP | | 1069 | PPC_FEATURE_SPE_COMP | |
989 | PPC_FEATURE_HAS_EFP_SINGLE | PPC_FEATURE_HAS_EFP_DOUBLE, | 1070 | PPC_FEATURE_HAS_EFP_SINGLE | |
1071 | PPC_FEATURE_HAS_EFP_DOUBLE, | ||
990 | .icache_bsize = 32, | 1072 | .icache_bsize = 32, |
991 | .dcache_bsize = 32, | 1073 | .dcache_bsize = 32, |
992 | .num_pmcs = 4, | 1074 | .num_pmcs = 4, |
993 | .oprofile_cpu_type = "ppc/e500", | 1075 | .oprofile_cpu_type = "ppc/e500", |
994 | .oprofile_type = BOOKE, | 1076 | .oprofile_type = PPC_OPROFILE_BOOKE, |
1077 | .platform = "ppc8548", | ||
995 | }, | 1078 | }, |
996 | #endif | 1079 | #endif |
997 | #if !CLASSIC_PPC | 1080 | #if !CLASSIC_PPC |
@@ -1003,6 +1086,7 @@ struct cpu_spec cpu_specs[] = { | |||
1003 | .cpu_user_features = PPC_FEATURE_32, | 1086 | .cpu_user_features = PPC_FEATURE_32, |
1004 | .icache_bsize = 32, | 1087 | .icache_bsize = 32, |
1005 | .dcache_bsize = 32, | 1088 | .dcache_bsize = 32, |
1089 | .platform = "powerpc", | ||
1006 | } | 1090 | } |
1007 | #endif /* !CLASSIC_PPC */ | 1091 | #endif /* !CLASSIC_PPC */ |
1008 | #endif /* CONFIG_PPC32 */ | 1092 | #endif /* CONFIG_PPC32 */ |
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index 036b71d2adfc..d8da2a35c0a4 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S | |||
@@ -988,7 +988,7 @@ _GLOBAL(enter_rtas) | |||
988 | stwu r1,-INT_FRAME_SIZE(r1) | 988 | stwu r1,-INT_FRAME_SIZE(r1) |
989 | mflr r0 | 989 | mflr r0 |
990 | stw r0,INT_FRAME_SIZE+4(r1) | 990 | stw r0,INT_FRAME_SIZE+4(r1) |
991 | LOADADDR(r4, rtas) | 991 | LOAD_REG_ADDR(r4, rtas) |
992 | lis r6,1f@ha /* physical return address for rtas */ | 992 | lis r6,1f@ha /* physical return address for rtas */ |
993 | addi r6,r6,1f@l | 993 | addi r6,r6,1f@l |
994 | tophys(r6,r6) | 994 | tophys(r6,r6) |
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index aacebb33e98a..542036318866 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S | |||
@@ -511,7 +511,8 @@ restore: | |||
511 | cmpdi 0,r5,0 | 511 | cmpdi 0,r5,0 |
512 | beq 4f | 512 | beq 4f |
513 | /* Check for pending interrupts (iSeries) */ | 513 | /* Check for pending interrupts (iSeries) */ |
514 | ld r3,PACALPPACA+LPPACAANYINT(r13) | 514 | ld r3,PACALPPACAPTR(r13) |
515 | ld r3,LPPACAANYINT(r3) | ||
515 | cmpdi r3,0 | 516 | cmpdi r3,0 |
516 | beq+ 4f /* skip do_IRQ if no interrupts */ | 517 | beq+ 4f /* skip do_IRQ if no interrupts */ |
517 | 518 | ||
@@ -689,9 +690,8 @@ _GLOBAL(enter_rtas) | |||
689 | std r6,PACASAVEDMSR(r13) | 690 | std r6,PACASAVEDMSR(r13) |
690 | 691 | ||
691 | /* Setup our real return addr */ | 692 | /* Setup our real return addr */ |
692 | SET_REG_TO_LABEL(r4,.rtas_return_loc) | 693 | LOAD_REG_ADDR(r4,.rtas_return_loc) |
693 | SET_REG_TO_CONST(r9,PAGE_OFFSET) | 694 | clrldi r4,r4,2 /* convert to realmode address */ |
694 | sub r4,r4,r9 | ||
695 | mtlr r4 | 695 | mtlr r4 |
696 | 696 | ||
697 | li r0,0 | 697 | li r0,0 |
@@ -706,7 +706,7 @@ _GLOBAL(enter_rtas) | |||
706 | sync /* disable interrupts so SRR0/1 */ | 706 | sync /* disable interrupts so SRR0/1 */ |
707 | mtmsrd r0 /* don't get trashed */ | 707 | mtmsrd r0 /* don't get trashed */ |
708 | 708 | ||
709 | SET_REG_TO_LABEL(r4,rtas) | 709 | LOAD_REG_ADDR(r4, rtas) |
710 | ld r5,RTASENTRY(r4) /* get the rtas->entry value */ | 710 | ld r5,RTASENTRY(r4) /* get the rtas->entry value */ |
711 | ld r4,RTASBASE(r4) /* get the rtas->base value */ | 711 | ld r4,RTASBASE(r4) /* get the rtas->base value */ |
712 | 712 | ||
@@ -718,8 +718,7 @@ _GLOBAL(enter_rtas) | |||
718 | _STATIC(rtas_return_loc) | 718 | _STATIC(rtas_return_loc) |
719 | /* relocation is off at this point */ | 719 | /* relocation is off at this point */ |
720 | mfspr r4,SPRN_SPRG3 /* Get PACA */ | 720 | mfspr r4,SPRN_SPRG3 /* Get PACA */ |
721 | SET_REG_TO_CONST(r5, PAGE_OFFSET) | 721 | clrldi r4,r4,2 /* convert to realmode address */ |
722 | sub r4,r4,r5 /* RELOC the PACA base pointer */ | ||
723 | 722 | ||
724 | mfmsr r6 | 723 | mfmsr r6 |
725 | li r0,MSR_RI | 724 | li r0,MSR_RI |
@@ -728,7 +727,7 @@ _STATIC(rtas_return_loc) | |||
728 | mtmsrd r6 | 727 | mtmsrd r6 |
729 | 728 | ||
730 | ld r1,PACAR1(r4) /* Restore our SP */ | 729 | ld r1,PACAR1(r4) /* Restore our SP */ |
731 | LOADADDR(r3,.rtas_restore_regs) | 730 | LOAD_REG_IMMEDIATE(r3,.rtas_restore_regs) |
732 | ld r4,PACASAVEDMSR(r4) /* Restore our MSR */ | 731 | ld r4,PACASAVEDMSR(r4) /* Restore our MSR */ |
733 | 732 | ||
734 | mtspr SPRN_SRR0,r3 | 733 | mtspr SPRN_SRR0,r3 |
diff --git a/arch/powerpc/kernel/fpu.S b/arch/powerpc/kernel/fpu.S index b780b42c95fc..e4362dfa37fb 100644 --- a/arch/powerpc/kernel/fpu.S +++ b/arch/powerpc/kernel/fpu.S | |||
@@ -39,9 +39,9 @@ _GLOBAL(load_up_fpu) | |||
39 | * to another. Instead we call giveup_fpu in switch_to. | 39 | * to another. Instead we call giveup_fpu in switch_to. |
40 | */ | 40 | */ |
41 | #ifndef CONFIG_SMP | 41 | #ifndef CONFIG_SMP |
42 | LOADBASE(r3, last_task_used_math) | 42 | LOAD_REG_ADDRBASE(r3, last_task_used_math) |
43 | toreal(r3) | 43 | toreal(r3) |
44 | PPC_LL r4,OFF(last_task_used_math)(r3) | 44 | PPC_LL r4,ADDROFF(last_task_used_math)(r3) |
45 | PPC_LCMPI 0,r4,0 | 45 | PPC_LCMPI 0,r4,0 |
46 | beq 1f | 46 | beq 1f |
47 | toreal(r4) | 47 | toreal(r4) |
@@ -77,7 +77,7 @@ _GLOBAL(load_up_fpu) | |||
77 | #ifndef CONFIG_SMP | 77 | #ifndef CONFIG_SMP |
78 | subi r4,r5,THREAD | 78 | subi r4,r5,THREAD |
79 | fromreal(r4) | 79 | fromreal(r4) |
80 | PPC_STL r4,OFF(last_task_used_math)(r3) | 80 | PPC_STL r4,ADDROFF(last_task_used_math)(r3) |
81 | #endif /* CONFIG_SMP */ | 81 | #endif /* CONFIG_SMP */ |
82 | /* restore registers and return */ | 82 | /* restore registers and return */ |
83 | /* we haven't used ctr or xer or lr */ | 83 | /* we haven't used ctr or xer or lr */ |
@@ -113,8 +113,8 @@ _GLOBAL(giveup_fpu) | |||
113 | 1: | 113 | 1: |
114 | #ifndef CONFIG_SMP | 114 | #ifndef CONFIG_SMP |
115 | li r5,0 | 115 | li r5,0 |
116 | LOADBASE(r4,last_task_used_math) | 116 | LOAD_REG_ADDRBASE(r4,last_task_used_math) |
117 | PPC_STL r5,OFF(last_task_used_math)(r4) | 117 | PPC_STL r5,ADDROFF(last_task_used_math)(r4) |
118 | #endif /* CONFIG_SMP */ | 118 | #endif /* CONFIG_SMP */ |
119 | blr | 119 | blr |
120 | 120 | ||
diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S index 1c066d125375..308268466342 100644 --- a/arch/powerpc/kernel/head_64.S +++ b/arch/powerpc/kernel/head_64.S | |||
@@ -154,12 +154,12 @@ _GLOBAL(__secondary_hold) | |||
154 | bne 100b | 154 | bne 100b |
155 | 155 | ||
156 | #ifdef CONFIG_HMT | 156 | #ifdef CONFIG_HMT |
157 | LOADADDR(r4, .hmt_init) | 157 | SET_REG_IMMEDIATE(r4, .hmt_init) |
158 | mtctr r4 | 158 | mtctr r4 |
159 | bctr | 159 | bctr |
160 | #else | 160 | #else |
161 | #ifdef CONFIG_SMP | 161 | #ifdef CONFIG_SMP |
162 | LOADADDR(r4, .pSeries_secondary_smp_init) | 162 | LOAD_REG_IMMEDIATE(r4, .pSeries_secondary_smp_init) |
163 | mtctr r4 | 163 | mtctr r4 |
164 | mr r3,r24 | 164 | mr r3,r24 |
165 | bctr | 165 | bctr |
@@ -205,9 +205,10 @@ exception_marker: | |||
205 | #define EX_LR 72 | 205 | #define EX_LR 72 |
206 | 206 | ||
207 | /* | 207 | /* |
208 | * We're short on space and time in the exception prolog, so we can't use | 208 | * We're short on space and time in the exception prolog, so we can't |
209 | * the normal LOADADDR macro. Normally we just need the low halfword of the | 209 | * use the normal SET_REG_IMMEDIATE macro. Normally we just need the |
210 | * address, but for Kdump we need the whole low word. | 210 | * low halfword of the address, but for Kdump we need the whole low |
211 | * word. | ||
211 | */ | 212 | */ |
212 | #ifdef CONFIG_CRASH_DUMP | 213 | #ifdef CONFIG_CRASH_DUMP |
213 | #define LOAD_HANDLER(reg, label) \ | 214 | #define LOAD_HANDLER(reg, label) \ |
@@ -254,8 +255,9 @@ exception_marker: | |||
254 | 255 | ||
255 | #define EXCEPTION_PROLOG_ISERIES_2 \ | 256 | #define EXCEPTION_PROLOG_ISERIES_2 \ |
256 | mfmsr r10; \ | 257 | mfmsr r10; \ |
257 | ld r11,PACALPPACA+LPPACASRR0(r13); \ | 258 | ld r12,PACALPPACAPTR(r13); \ |
258 | ld r12,PACALPPACA+LPPACASRR1(r13); \ | 259 | ld r11,LPPACASRR0(r12); \ |
260 | ld r12,LPPACASRR1(r12); \ | ||
259 | ori r10,r10,MSR_RI; \ | 261 | ori r10,r10,MSR_RI; \ |
260 | mtmsrd r10,1 | 262 | mtmsrd r10,1 |
261 | 263 | ||
@@ -634,7 +636,8 @@ data_access_slb_iSeries: | |||
634 | std r12,PACA_EXSLB+EX_R12(r13) | 636 | std r12,PACA_EXSLB+EX_R12(r13) |
635 | mfspr r10,SPRN_SPRG1 | 637 | mfspr r10,SPRN_SPRG1 |
636 | std r10,PACA_EXSLB+EX_R13(r13) | 638 | std r10,PACA_EXSLB+EX_R13(r13) |
637 | ld r12,PACALPPACA+LPPACASRR1(r13); | 639 | ld r12,PACALPPACAPTR(r13) |
640 | ld r12,LPPACASRR1(r12) | ||
638 | b .slb_miss_realmode | 641 | b .slb_miss_realmode |
639 | 642 | ||
640 | STD_EXCEPTION_ISERIES(0x400, instruction_access, PACA_EXGEN) | 643 | STD_EXCEPTION_ISERIES(0x400, instruction_access, PACA_EXGEN) |
@@ -644,7 +647,8 @@ instruction_access_slb_iSeries: | |||
644 | mtspr SPRN_SPRG1,r13 /* save r13 */ | 647 | mtspr SPRN_SPRG1,r13 /* save r13 */ |
645 | mfspr r13,SPRN_SPRG3 /* get paca address into r13 */ | 648 | mfspr r13,SPRN_SPRG3 /* get paca address into r13 */ |
646 | std r3,PACA_EXSLB+EX_R3(r13) | 649 | std r3,PACA_EXSLB+EX_R3(r13) |
647 | ld r3,PACALPPACA+LPPACASRR0(r13) /* get SRR0 value */ | 650 | ld r3,PACALPPACAPTR(r13) |
651 | ld r3,LPPACASRR0(r3) /* get SRR0 value */ | ||
648 | std r9,PACA_EXSLB+EX_R9(r13) | 652 | std r9,PACA_EXSLB+EX_R9(r13) |
649 | mfcr r9 | 653 | mfcr r9 |
650 | #ifdef __DISABLED__ | 654 | #ifdef __DISABLED__ |
@@ -656,7 +660,8 @@ instruction_access_slb_iSeries: | |||
656 | std r12,PACA_EXSLB+EX_R12(r13) | 660 | std r12,PACA_EXSLB+EX_R12(r13) |
657 | mfspr r10,SPRN_SPRG1 | 661 | mfspr r10,SPRN_SPRG1 |
658 | std r10,PACA_EXSLB+EX_R13(r13) | 662 | std r10,PACA_EXSLB+EX_R13(r13) |
659 | ld r12,PACALPPACA+LPPACASRR1(r13); | 663 | ld r12,PACALPPACAPTR(r13) |
664 | ld r12,LPPACASRR1(r12) | ||
660 | b .slb_miss_realmode | 665 | b .slb_miss_realmode |
661 | 666 | ||
662 | #ifdef __DISABLED__ | 667 | #ifdef __DISABLED__ |
@@ -713,7 +718,7 @@ system_reset_iSeries: | |||
713 | lbz r23,PACAPROCSTART(r13) /* Test if this processor | 718 | lbz r23,PACAPROCSTART(r13) /* Test if this processor |
714 | * should start */ | 719 | * should start */ |
715 | sync | 720 | sync |
716 | LOADADDR(r3,current_set) | 721 | LOAD_REG_IMMEDIATE(r3,current_set) |
717 | sldi r28,r24,3 /* get current_set[cpu#] */ | 722 | sldi r28,r24,3 /* get current_set[cpu#] */ |
718 | ldx r3,r3,r28 | 723 | ldx r3,r3,r28 |
719 | addi r1,r3,THREAD_SIZE | 724 | addi r1,r3,THREAD_SIZE |
@@ -745,17 +750,19 @@ iSeries_secondary_smp_loop: | |||
745 | .globl decrementer_iSeries_masked | 750 | .globl decrementer_iSeries_masked |
746 | decrementer_iSeries_masked: | 751 | decrementer_iSeries_masked: |
747 | li r11,1 | 752 | li r11,1 |
748 | stb r11,PACALPPACA+LPPACADECRINT(r13) | 753 | ld r12,PACALPPACAPTR(r13) |
749 | LOADBASE(r12,tb_ticks_per_jiffy) | 754 | stb r11,LPPACADECRINT(r12) |
750 | lwz r12,OFF(tb_ticks_per_jiffy)(r12) | 755 | LOAD_REG_ADDRBASE(r12,tb_ticks_per_jiffy) |
756 | lwz r12,ADDROFF(tb_ticks_per_jiffy)(r12) | ||
751 | mtspr SPRN_DEC,r12 | 757 | mtspr SPRN_DEC,r12 |
752 | /* fall through */ | 758 | /* fall through */ |
753 | 759 | ||
754 | .globl hardware_interrupt_iSeries_masked | 760 | .globl hardware_interrupt_iSeries_masked |
755 | hardware_interrupt_iSeries_masked: | 761 | hardware_interrupt_iSeries_masked: |
756 | mtcrf 0x80,r9 /* Restore regs */ | 762 | mtcrf 0x80,r9 /* Restore regs */ |
757 | ld r11,PACALPPACA+LPPACASRR0(r13) | 763 | ld r12,PACALPPACAPTR(r13) |
758 | ld r12,PACALPPACA+LPPACASRR1(r13) | 764 | ld r11,LPPACASRR0(r12) |
765 | ld r12,LPPACASRR1(r12) | ||
759 | mtspr SPRN_SRR0,r11 | 766 | mtspr SPRN_SRR0,r11 |
760 | mtspr SPRN_SRR1,r12 | 767 | mtspr SPRN_SRR1,r12 |
761 | ld r9,PACA_EXGEN+EX_R9(r13) | 768 | ld r9,PACA_EXGEN+EX_R9(r13) |
@@ -994,7 +1001,8 @@ _GLOBAL(slb_miss_realmode) | |||
994 | ld r3,PACA_EXSLB+EX_R3(r13) | 1001 | ld r3,PACA_EXSLB+EX_R3(r13) |
995 | lwz r9,PACA_EXSLB+EX_CCR(r13) /* get saved CR */ | 1002 | lwz r9,PACA_EXSLB+EX_CCR(r13) /* get saved CR */ |
996 | #ifdef CONFIG_PPC_ISERIES | 1003 | #ifdef CONFIG_PPC_ISERIES |
997 | ld r11,PACALPPACA+LPPACASRR0(r13) /* get SRR0 value */ | 1004 | ld r11,PACALPPACAPTR(r13) |
1005 | ld r11,LPPACASRR0(r11) /* get SRR0 value */ | ||
998 | #endif /* CONFIG_PPC_ISERIES */ | 1006 | #endif /* CONFIG_PPC_ISERIES */ |
999 | 1007 | ||
1000 | mtlr r10 | 1008 | mtlr r10 |
@@ -1412,7 +1420,7 @@ _GLOBAL(pSeries_secondary_smp_init) | |||
1412 | * physical cpu id in r24, we need to search the pacas to find | 1420 | * physical cpu id in r24, we need to search the pacas to find |
1413 | * which logical id maps to our physical one. | 1421 | * which logical id maps to our physical one. |
1414 | */ | 1422 | */ |
1415 | LOADADDR(r13, paca) /* Get base vaddr of paca array */ | 1423 | LOAD_REG_IMMEDIATE(r13, paca) /* Get base vaddr of paca array */ |
1416 | li r5,0 /* logical cpu id */ | 1424 | li r5,0 /* logical cpu id */ |
1417 | 1: lhz r6,PACAHWCPUID(r13) /* Load HW procid from paca */ | 1425 | 1: lhz r6,PACAHWCPUID(r13) /* Load HW procid from paca */ |
1418 | cmpw r6,r24 /* Compare to our id */ | 1426 | cmpw r6,r24 /* Compare to our id */ |
@@ -1446,8 +1454,8 @@ _GLOBAL(pSeries_secondary_smp_init) | |||
1446 | #ifdef CONFIG_PPC_ISERIES | 1454 | #ifdef CONFIG_PPC_ISERIES |
1447 | _STATIC(__start_initialization_iSeries) | 1455 | _STATIC(__start_initialization_iSeries) |
1448 | /* Clear out the BSS */ | 1456 | /* Clear out the BSS */ |
1449 | LOADADDR(r11,__bss_stop) | 1457 | LOAD_REG_IMMEDIATE(r11,__bss_stop) |
1450 | LOADADDR(r8,__bss_start) | 1458 | LOAD_REG_IMMEDIATE(r8,__bss_start) |
1451 | sub r11,r11,r8 /* bss size */ | 1459 | sub r11,r11,r8 /* bss size */ |
1452 | addi r11,r11,7 /* round up to an even double word */ | 1460 | addi r11,r11,7 /* round up to an even double word */ |
1453 | rldicl. r11,r11,61,3 /* shift right by 3 */ | 1461 | rldicl. r11,r11,61,3 /* shift right by 3 */ |
@@ -1458,17 +1466,17 @@ _STATIC(__start_initialization_iSeries) | |||
1458 | 3: stdu r0,8(r8) | 1466 | 3: stdu r0,8(r8) |
1459 | bdnz 3b | 1467 | bdnz 3b |
1460 | 4: | 1468 | 4: |
1461 | LOADADDR(r1,init_thread_union) | 1469 | LOAD_REG_IMMEDIATE(r1,init_thread_union) |
1462 | addi r1,r1,THREAD_SIZE | 1470 | addi r1,r1,THREAD_SIZE |
1463 | li r0,0 | 1471 | li r0,0 |
1464 | stdu r0,-STACK_FRAME_OVERHEAD(r1) | 1472 | stdu r0,-STACK_FRAME_OVERHEAD(r1) |
1465 | 1473 | ||
1466 | LOADADDR(r3,cpu_specs) | 1474 | LOAD_REG_IMMEDIATE(r3,cpu_specs) |
1467 | LOADADDR(r4,cur_cpu_spec) | 1475 | LOAD_REG_IMMEDIATE(r4,cur_cpu_spec) |
1468 | li r5,0 | 1476 | li r5,0 |
1469 | bl .identify_cpu | 1477 | bl .identify_cpu |
1470 | 1478 | ||
1471 | LOADADDR(r2,__toc_start) | 1479 | LOAD_REG_IMMEDIATE(r2,__toc_start) |
1472 | addi r2,r2,0x4000 | 1480 | addi r2,r2,0x4000 |
1473 | addi r2,r2,0x4000 | 1481 | addi r2,r2,0x4000 |
1474 | 1482 | ||
@@ -1528,7 +1536,7 @@ _GLOBAL(__start_initialization_multiplatform) | |||
1528 | li r24,0 | 1536 | li r24,0 |
1529 | 1537 | ||
1530 | /* Switch off MMU if not already */ | 1538 | /* Switch off MMU if not already */ |
1531 | LOADADDR(r4, .__after_prom_start - KERNELBASE) | 1539 | LOAD_REG_IMMEDIATE(r4, .__after_prom_start - KERNELBASE) |
1532 | add r4,r4,r30 | 1540 | add r4,r4,r30 |
1533 | bl .__mmu_off | 1541 | bl .__mmu_off |
1534 | b .__after_prom_start | 1542 | b .__after_prom_start |
@@ -1548,7 +1556,7 @@ _STATIC(__boot_from_prom) | |||
1548 | /* put a relocation offset into r3 */ | 1556 | /* put a relocation offset into r3 */ |
1549 | bl .reloc_offset | 1557 | bl .reloc_offset |
1550 | 1558 | ||
1551 | LOADADDR(r2,__toc_start) | 1559 | LOAD_REG_IMMEDIATE(r2,__toc_start) |
1552 | addi r2,r2,0x4000 | 1560 | addi r2,r2,0x4000 |
1553 | addi r2,r2,0x4000 | 1561 | addi r2,r2,0x4000 |
1554 | 1562 | ||
@@ -1588,9 +1596,9 @@ _STATIC(__after_prom_start) | |||
1588 | */ | 1596 | */ |
1589 | bl .reloc_offset | 1597 | bl .reloc_offset |
1590 | mr r26,r3 | 1598 | mr r26,r3 |
1591 | SET_REG_TO_CONST(r27,KERNELBASE) | 1599 | LOAD_REG_IMMEDIATE(r27, KERNELBASE) |
1592 | 1600 | ||
1593 | LOADADDR(r3, PHYSICAL_START) /* target addr */ | 1601 | LOAD_REG_IMMEDIATE(r3, PHYSICAL_START) /* target addr */ |
1594 | 1602 | ||
1595 | // XXX FIXME: Use phys returned by OF (r30) | 1603 | // XXX FIXME: Use phys returned by OF (r30) |
1596 | add r4,r27,r26 /* source addr */ | 1604 | add r4,r27,r26 /* source addr */ |
@@ -1598,7 +1606,7 @@ _STATIC(__after_prom_start) | |||
1598 | /* i.e. where we are running */ | 1606 | /* i.e. where we are running */ |
1599 | /* the source addr */ | 1607 | /* the source addr */ |
1600 | 1608 | ||
1601 | LOADADDR(r5,copy_to_here) /* # bytes of memory to copy */ | 1609 | LOAD_REG_IMMEDIATE(r5,copy_to_here) /* # bytes of memory to copy */ |
1602 | sub r5,r5,r27 | 1610 | sub r5,r5,r27 |
1603 | 1611 | ||
1604 | li r6,0x100 /* Start offset, the first 0x100 */ | 1612 | li r6,0x100 /* Start offset, the first 0x100 */ |
@@ -1608,11 +1616,11 @@ _STATIC(__after_prom_start) | |||
1608 | /* this includes the code being */ | 1616 | /* this includes the code being */ |
1609 | /* executed here. */ | 1617 | /* executed here. */ |
1610 | 1618 | ||
1611 | LOADADDR(r0, 4f) /* Jump to the copy of this code */ | 1619 | LOAD_REG_IMMEDIATE(r0, 4f) /* Jump to the copy of this code */ |
1612 | mtctr r0 /* that we just made/relocated */ | 1620 | mtctr r0 /* that we just made/relocated */ |
1613 | bctr | 1621 | bctr |
1614 | 1622 | ||
1615 | 4: LOADADDR(r5,klimit) | 1623 | 4: LOAD_REG_IMMEDIATE(r5,klimit) |
1616 | add r5,r5,r26 | 1624 | add r5,r5,r26 |
1617 | ld r5,0(r5) /* get the value of klimit */ | 1625 | ld r5,0(r5) /* get the value of klimit */ |
1618 | sub r5,r5,r27 | 1626 | sub r5,r5,r27 |
@@ -1694,7 +1702,7 @@ _GLOBAL(pmac_secondary_start) | |||
1694 | mtmsrd r3 /* RI on */ | 1702 | mtmsrd r3 /* RI on */ |
1695 | 1703 | ||
1696 | /* Set up a paca value for this processor. */ | 1704 | /* Set up a paca value for this processor. */ |
1697 | LOADADDR(r4, paca) /* Get base vaddr of paca array */ | 1705 | LOAD_REG_IMMEDIATE(r4, paca) /* Get base vaddr of paca array */ |
1698 | mulli r13,r24,PACA_SIZE /* Calculate vaddr of right paca */ | 1706 | mulli r13,r24,PACA_SIZE /* Calculate vaddr of right paca */ |
1699 | add r13,r13,r4 /* for this processor. */ | 1707 | add r13,r13,r4 /* for this processor. */ |
1700 | mtspr SPRN_SPRG3,r13 /* Save vaddr of paca in SPRG3 */ | 1708 | mtspr SPRN_SPRG3,r13 /* Save vaddr of paca in SPRG3 */ |
@@ -1731,7 +1739,7 @@ _GLOBAL(__secondary_start) | |||
1731 | bl .early_setup_secondary | 1739 | bl .early_setup_secondary |
1732 | 1740 | ||
1733 | /* Initialize the kernel stack. Just a repeat for iSeries. */ | 1741 | /* Initialize the kernel stack. Just a repeat for iSeries. */ |
1734 | LOADADDR(r3,current_set) | 1742 | LOAD_REG_ADDR(r3, current_set) |
1735 | sldi r28,r24,3 /* get current_set[cpu#] */ | 1743 | sldi r28,r24,3 /* get current_set[cpu#] */ |
1736 | ldx r1,r3,r28 | 1744 | ldx r1,r3,r28 |
1737 | addi r1,r1,THREAD_SIZE-STACK_FRAME_OVERHEAD | 1745 | addi r1,r1,THREAD_SIZE-STACK_FRAME_OVERHEAD |
@@ -1742,8 +1750,8 @@ _GLOBAL(__secondary_start) | |||
1742 | mtlr r7 | 1750 | mtlr r7 |
1743 | 1751 | ||
1744 | /* enable MMU and jump to start_secondary */ | 1752 | /* enable MMU and jump to start_secondary */ |
1745 | LOADADDR(r3,.start_secondary_prolog) | 1753 | LOAD_REG_ADDR(r3, .start_secondary_prolog) |
1746 | SET_REG_TO_CONST(r4, MSR_KERNEL) | 1754 | LOAD_REG_IMMEDIATE(r4, MSR_KERNEL) |
1747 | #ifdef DO_SOFT_DISABLE | 1755 | #ifdef DO_SOFT_DISABLE |
1748 | ori r4,r4,MSR_EE | 1756 | ori r4,r4,MSR_EE |
1749 | #endif | 1757 | #endif |
@@ -1792,8 +1800,8 @@ _STATIC(start_here_multiplatform) | |||
1792 | * be detached from the kernel completely. Besides, we need | 1800 | * be detached from the kernel completely. Besides, we need |
1793 | * to clear it now for kexec-style entry. | 1801 | * to clear it now for kexec-style entry. |
1794 | */ | 1802 | */ |
1795 | LOADADDR(r11,__bss_stop) | 1803 | LOAD_REG_IMMEDIATE(r11,__bss_stop) |
1796 | LOADADDR(r8,__bss_start) | 1804 | LOAD_REG_IMMEDIATE(r8,__bss_start) |
1797 | sub r11,r11,r8 /* bss size */ | 1805 | sub r11,r11,r8 /* bss size */ |
1798 | addi r11,r11,7 /* round up to an even double word */ | 1806 | addi r11,r11,7 /* round up to an even double word */ |
1799 | rldicl. r11,r11,61,3 /* shift right by 3 */ | 1807 | rldicl. r11,r11,61,3 /* shift right by 3 */ |
@@ -1831,7 +1839,7 @@ _STATIC(start_here_multiplatform) | |||
1831 | /* up the htab. This is done because we have relocated the */ | 1839 | /* up the htab. This is done because we have relocated the */ |
1832 | /* kernel but are still running in real mode. */ | 1840 | /* kernel but are still running in real mode. */ |
1833 | 1841 | ||
1834 | LOADADDR(r3,init_thread_union) | 1842 | LOAD_REG_IMMEDIATE(r3,init_thread_union) |
1835 | add r3,r3,r26 | 1843 | add r3,r3,r26 |
1836 | 1844 | ||
1837 | /* set up a stack pointer (physical address) */ | 1845 | /* set up a stack pointer (physical address) */ |
@@ -1840,14 +1848,14 @@ _STATIC(start_here_multiplatform) | |||
1840 | stdu r0,-STACK_FRAME_OVERHEAD(r1) | 1848 | stdu r0,-STACK_FRAME_OVERHEAD(r1) |
1841 | 1849 | ||
1842 | /* set up the TOC (physical address) */ | 1850 | /* set up the TOC (physical address) */ |
1843 | LOADADDR(r2,__toc_start) | 1851 | LOAD_REG_IMMEDIATE(r2,__toc_start) |
1844 | addi r2,r2,0x4000 | 1852 | addi r2,r2,0x4000 |
1845 | addi r2,r2,0x4000 | 1853 | addi r2,r2,0x4000 |
1846 | add r2,r2,r26 | 1854 | add r2,r2,r26 |
1847 | 1855 | ||
1848 | LOADADDR(r3,cpu_specs) | 1856 | LOAD_REG_IMMEDIATE(r3, cpu_specs) |
1849 | add r3,r3,r26 | 1857 | add r3,r3,r26 |
1850 | LOADADDR(r4,cur_cpu_spec) | 1858 | LOAD_REG_IMMEDIATE(r4,cur_cpu_spec) |
1851 | add r4,r4,r26 | 1859 | add r4,r4,r26 |
1852 | mr r5,r26 | 1860 | mr r5,r26 |
1853 | bl .identify_cpu | 1861 | bl .identify_cpu |
@@ -1863,11 +1871,11 @@ _STATIC(start_here_multiplatform) | |||
1863 | * nowhere it can be initialized differently before we reach this | 1871 | * nowhere it can be initialized differently before we reach this |
1864 | * code | 1872 | * code |
1865 | */ | 1873 | */ |
1866 | LOADADDR(r27, boot_cpuid) | 1874 | LOAD_REG_IMMEDIATE(r27, boot_cpuid) |
1867 | add r27,r27,r26 | 1875 | add r27,r27,r26 |
1868 | lwz r27,0(r27) | 1876 | lwz r27,0(r27) |
1869 | 1877 | ||
1870 | LOADADDR(r24, paca) /* Get base vaddr of paca array */ | 1878 | LOAD_REG_IMMEDIATE(r24, paca) /* Get base vaddr of paca array */ |
1871 | mulli r13,r27,PACA_SIZE /* Calculate vaddr of right paca */ | 1879 | mulli r13,r27,PACA_SIZE /* Calculate vaddr of right paca */ |
1872 | add r13,r13,r24 /* for this processor. */ | 1880 | add r13,r13,r24 /* for this processor. */ |
1873 | add r13,r13,r26 /* convert to physical addr */ | 1881 | add r13,r13,r26 /* convert to physical addr */ |
@@ -1880,8 +1888,8 @@ _STATIC(start_here_multiplatform) | |||
1880 | mr r3,r31 | 1888 | mr r3,r31 |
1881 | bl .early_setup | 1889 | bl .early_setup |
1882 | 1890 | ||
1883 | LOADADDR(r3,.start_here_common) | 1891 | LOAD_REG_IMMEDIATE(r3, .start_here_common) |
1884 | SET_REG_TO_CONST(r4, MSR_KERNEL) | 1892 | LOAD_REG_IMMEDIATE(r4, MSR_KERNEL) |
1885 | mtspr SPRN_SRR0,r3 | 1893 | mtspr SPRN_SRR0,r3 |
1886 | mtspr SPRN_SRR1,r4 | 1894 | mtspr SPRN_SRR1,r4 |
1887 | rfid | 1895 | rfid |
@@ -1895,7 +1903,7 @@ _STATIC(start_here_common) | |||
1895 | /* The following code sets up the SP and TOC now that we are */ | 1903 | /* The following code sets up the SP and TOC now that we are */ |
1896 | /* running with translation enabled. */ | 1904 | /* running with translation enabled. */ |
1897 | 1905 | ||
1898 | LOADADDR(r3,init_thread_union) | 1906 | LOAD_REG_IMMEDIATE(r3,init_thread_union) |
1899 | 1907 | ||
1900 | /* set up the stack */ | 1908 | /* set up the stack */ |
1901 | addi r1,r3,THREAD_SIZE | 1909 | addi r1,r3,THREAD_SIZE |
@@ -1908,16 +1916,16 @@ _STATIC(start_here_common) | |||
1908 | li r3,0 | 1916 | li r3,0 |
1909 | bl .do_cpu_ftr_fixups | 1917 | bl .do_cpu_ftr_fixups |
1910 | 1918 | ||
1911 | LOADADDR(r26, boot_cpuid) | 1919 | LOAD_REG_IMMEDIATE(r26, boot_cpuid) |
1912 | lwz r26,0(r26) | 1920 | lwz r26,0(r26) |
1913 | 1921 | ||
1914 | LOADADDR(r24, paca) /* Get base vaddr of paca array */ | 1922 | LOAD_REG_IMMEDIATE(r24, paca) /* Get base vaddr of paca array */ |
1915 | mulli r13,r26,PACA_SIZE /* Calculate vaddr of right paca */ | 1923 | mulli r13,r26,PACA_SIZE /* Calculate vaddr of right paca */ |
1916 | add r13,r13,r24 /* for this processor. */ | 1924 | add r13,r13,r24 /* for this processor. */ |
1917 | mtspr SPRN_SPRG3,r13 | 1925 | mtspr SPRN_SPRG3,r13 |
1918 | 1926 | ||
1919 | /* ptr to current */ | 1927 | /* ptr to current */ |
1920 | LOADADDR(r4,init_task) | 1928 | LOAD_REG_IMMEDIATE(r4, init_task) |
1921 | std r4,PACACURRENT(r13) | 1929 | std r4,PACACURRENT(r13) |
1922 | 1930 | ||
1923 | /* Load the TOC */ | 1931 | /* Load the TOC */ |
@@ -1940,7 +1948,7 @@ _STATIC(start_here_common) | |||
1940 | 1948 | ||
1941 | _GLOBAL(hmt_init) | 1949 | _GLOBAL(hmt_init) |
1942 | #ifdef CONFIG_HMT | 1950 | #ifdef CONFIG_HMT |
1943 | LOADADDR(r5, hmt_thread_data) | 1951 | LOAD_REG_IMMEDIATE(r5, hmt_thread_data) |
1944 | mfspr r7,SPRN_PVR | 1952 | mfspr r7,SPRN_PVR |
1945 | srwi r7,r7,16 | 1953 | srwi r7,r7,16 |
1946 | cmpwi r7,0x34 /* Pulsar */ | 1954 | cmpwi r7,0x34 /* Pulsar */ |
@@ -1961,7 +1969,7 @@ _GLOBAL(hmt_init) | |||
1961 | b 101f | 1969 | b 101f |
1962 | 1970 | ||
1963 | __hmt_secondary_hold: | 1971 | __hmt_secondary_hold: |
1964 | LOADADDR(r5, hmt_thread_data) | 1972 | LOAD_REG_IMMEDIATE(r5, hmt_thread_data) |
1965 | clrldi r5,r5,4 | 1973 | clrldi r5,r5,4 |
1966 | li r7,0 | 1974 | li r7,0 |
1967 | mfspr r6,SPRN_PIR | 1975 | mfspr r6,SPRN_PIR |
@@ -1989,7 +1997,7 @@ __hmt_secondary_hold: | |||
1989 | 1997 | ||
1990 | #ifdef CONFIG_HMT | 1998 | #ifdef CONFIG_HMT |
1991 | _GLOBAL(hmt_start_secondary) | 1999 | _GLOBAL(hmt_start_secondary) |
1992 | LOADADDR(r4,__hmt_secondary_hold) | 2000 | LOAD_REG_IMMEDIATE(r4,__hmt_secondary_hold) |
1993 | clrldi r4,r4,4 | 2001 | clrldi r4,r4,4 |
1994 | mtspr SPRN_NIADORM, r4 | 2002 | mtspr SPRN_NIADORM, r4 |
1995 | mfspr r4, SPRN_MSRDORM | 2003 | mfspr r4, SPRN_MSRDORM |
diff --git a/arch/powerpc/kernel/idle_power4.S b/arch/powerpc/kernel/idle_power4.S index 1494e2f177f7..c16b4afab582 100644 --- a/arch/powerpc/kernel/idle_power4.S +++ b/arch/powerpc/kernel/idle_power4.S | |||
@@ -38,14 +38,14 @@ END_FTR_SECTION_IFCLR(CPU_FTR_CAN_NAP) | |||
38 | /* We must dynamically check for the NAP feature as it | 38 | /* We must dynamically check for the NAP feature as it |
39 | * can be cleared by CPU init after the fixups are done | 39 | * can be cleared by CPU init after the fixups are done |
40 | */ | 40 | */ |
41 | LOADBASE(r3,cur_cpu_spec) | 41 | LOAD_REG_ADDRBASE(r3,cur_cpu_spec) |
42 | ld r4,OFF(cur_cpu_spec)(r3) | 42 | ld r4,ADDROFF(cur_cpu_spec)(r3) |
43 | ld r4,CPU_SPEC_FEATURES(r4) | 43 | ld r4,CPU_SPEC_FEATURES(r4) |
44 | andi. r0,r4,CPU_FTR_CAN_NAP | 44 | andi. r0,r4,CPU_FTR_CAN_NAP |
45 | beqlr | 45 | beqlr |
46 | /* Now check if user or arch enabled NAP mode */ | 46 | /* Now check if user or arch enabled NAP mode */ |
47 | LOADBASE(r3,powersave_nap) | 47 | LOAD_REG_ADDRBASE(r3,powersave_nap) |
48 | lwz r4,OFF(powersave_nap)(r3) | 48 | lwz r4,ADDROFF(powersave_nap)(r3) |
49 | cmpwi 0,r4,0 | 49 | cmpwi 0,r4,0 |
50 | beqlr | 50 | beqlr |
51 | 51 | ||
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 5651032d8706..d1fffce86df9 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c | |||
@@ -238,14 +238,10 @@ void do_IRQ(struct pt_regs *regs) | |||
238 | irq_exit(); | 238 | irq_exit(); |
239 | 239 | ||
240 | #ifdef CONFIG_PPC_ISERIES | 240 | #ifdef CONFIG_PPC_ISERIES |
241 | { | 241 | if (get_lppaca()->int_dword.fields.decr_int) { |
242 | struct paca_struct *lpaca = get_paca(); | 242 | get_lppaca()->int_dword.fields.decr_int = 0; |
243 | 243 | /* Signal a fake decrementer interrupt */ | |
244 | if (lpaca->lppaca.int_dword.fields.decr_int) { | 244 | timer_interrupt(regs); |
245 | lpaca->lppaca.int_dword.fields.decr_int = 0; | ||
246 | /* Signal a fake decrementer interrupt */ | ||
247 | timer_interrupt(regs); | ||
248 | } | ||
249 | } | 245 | } |
250 | #endif | 246 | #endif |
251 | } | 247 | } |
diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c index 9dda16ccde78..1ae96a8ed7e2 100644 --- a/arch/powerpc/kernel/lparcfg.c +++ b/arch/powerpc/kernel/lparcfg.c | |||
@@ -55,15 +55,13 @@ static unsigned long get_purr(void) | |||
55 | { | 55 | { |
56 | unsigned long sum_purr = 0; | 56 | unsigned long sum_purr = 0; |
57 | int cpu; | 57 | int cpu; |
58 | struct paca_struct *lpaca; | ||
59 | 58 | ||
60 | for_each_cpu(cpu) { | 59 | for_each_cpu(cpu) { |
61 | lpaca = paca + cpu; | 60 | sum_purr += lppaca[cpu].emulated_time_base; |
62 | sum_purr += lpaca->lppaca.emulated_time_base; | ||
63 | 61 | ||
64 | #ifdef PURR_DEBUG | 62 | #ifdef PURR_DEBUG |
65 | printk(KERN_INFO "get_purr for cpu (%d) has value (%ld) \n", | 63 | printk(KERN_INFO "get_purr for cpu (%d) has value (%ld) \n", |
66 | cpu, lpaca->lppaca.emulated_time_base); | 64 | cpu, lppaca[cpu].emulated_time_base); |
67 | #endif | 65 | #endif |
68 | } | 66 | } |
69 | return sum_purr; | 67 | return sum_purr; |
@@ -79,12 +77,11 @@ static int lparcfg_data(struct seq_file *m, void *v) | |||
79 | unsigned long pool_id, lp_index; | 77 | unsigned long pool_id, lp_index; |
80 | int shared, entitled_capacity, max_entitled_capacity; | 78 | int shared, entitled_capacity, max_entitled_capacity; |
81 | int processors, max_processors; | 79 | int processors, max_processors; |
82 | struct paca_struct *lpaca = get_paca(); | ||
83 | unsigned long purr = get_purr(); | 80 | unsigned long purr = get_purr(); |
84 | 81 | ||
85 | seq_printf(m, "%s %s \n", MODULE_NAME, MODULE_VERS); | 82 | seq_printf(m, "%s %s \n", MODULE_NAME, MODULE_VERS); |
86 | 83 | ||
87 | shared = (int)(lpaca->lppaca_ptr->shared_proc); | 84 | shared = (int)(get_lppaca()->shared_proc); |
88 | seq_printf(m, "serial_number=%c%c%c%c%c%c%c\n", | 85 | seq_printf(m, "serial_number=%c%c%c%c%c%c%c\n", |
89 | e2a(xItExtVpdPanel.mfgID[2]), | 86 | e2a(xItExtVpdPanel.mfgID[2]), |
90 | e2a(xItExtVpdPanel.mfgID[3]), | 87 | e2a(xItExtVpdPanel.mfgID[3]), |
@@ -402,7 +399,7 @@ static int lparcfg_data(struct seq_file *m, void *v) | |||
402 | (h_resource >> 0 * 8) & 0xffff); | 399 | (h_resource >> 0 * 8) & 0xffff); |
403 | 400 | ||
404 | /* pool related entries are apropriate for shared configs */ | 401 | /* pool related entries are apropriate for shared configs */ |
405 | if (paca[0].lppaca.shared_proc) { | 402 | if (lppaca[0].shared_proc) { |
406 | 403 | ||
407 | h_pic(&pool_idle_time, &pool_procs); | 404 | h_pic(&pool_idle_time, &pool_procs); |
408 | 405 | ||
@@ -451,7 +448,7 @@ static int lparcfg_data(struct seq_file *m, void *v) | |||
451 | seq_printf(m, "partition_potential_processors=%d\n", | 448 | seq_printf(m, "partition_potential_processors=%d\n", |
452 | partition_potential_processors); | 449 | partition_potential_processors); |
453 | 450 | ||
454 | seq_printf(m, "shared_processor_mode=%d\n", paca[0].lppaca.shared_proc); | 451 | seq_printf(m, "shared_processor_mode=%d\n", lppaca[0].shared_proc); |
455 | 452 | ||
456 | return 0; | 453 | return 0; |
457 | } | 454 | } |
diff --git a/arch/powerpc/kernel/misc_32.S b/arch/powerpc/kernel/misc_32.S index 01d0d97a16e1..be982023409e 100644 --- a/arch/powerpc/kernel/misc_32.S +++ b/arch/powerpc/kernel/misc_32.S | |||
@@ -68,7 +68,7 @@ _GLOBAL(reloc_offset) | |||
68 | mflr r0 | 68 | mflr r0 |
69 | bl 1f | 69 | bl 1f |
70 | 1: mflr r3 | 70 | 1: mflr r3 |
71 | LOADADDR(r4,1b) | 71 | LOAD_REG_IMMEDIATE(r4,1b) |
72 | subf r3,r4,r3 | 72 | subf r3,r4,r3 |
73 | mtlr r0 | 73 | mtlr r0 |
74 | blr | 74 | blr |
@@ -80,7 +80,7 @@ _GLOBAL(add_reloc_offset) | |||
80 | mflr r0 | 80 | mflr r0 |
81 | bl 1f | 81 | bl 1f |
82 | 1: mflr r5 | 82 | 1: mflr r5 |
83 | LOADADDR(r4,1b) | 83 | LOAD_REG_IMMEDIATE(r4,1b) |
84 | subf r5,r4,r5 | 84 | subf r5,r4,r5 |
85 | add r3,r3,r5 | 85 | add r3,r3,r5 |
86 | mtlr r0 | 86 | mtlr r0 |
diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S index ae48a002f81a..2778cce058e2 100644 --- a/arch/powerpc/kernel/misc_64.S +++ b/arch/powerpc/kernel/misc_64.S | |||
@@ -39,7 +39,7 @@ _GLOBAL(reloc_offset) | |||
39 | mflr r0 | 39 | mflr r0 |
40 | bl 1f | 40 | bl 1f |
41 | 1: mflr r3 | 41 | 1: mflr r3 |
42 | LOADADDR(r4,1b) | 42 | LOAD_REG_IMMEDIATE(r4,1b) |
43 | subf r3,r4,r3 | 43 | subf r3,r4,r3 |
44 | mtlr r0 | 44 | mtlr r0 |
45 | blr | 45 | blr |
@@ -51,7 +51,7 @@ _GLOBAL(add_reloc_offset) | |||
51 | mflr r0 | 51 | mflr r0 |
52 | bl 1f | 52 | bl 1f |
53 | 1: mflr r5 | 53 | 1: mflr r5 |
54 | LOADADDR(r4,1b) | 54 | LOAD_REG_IMMEDIATE(r4,1b) |
55 | subf r5,r4,r5 | 55 | subf r5,r4,r5 |
56 | add r3,r3,r5 | 56 | add r3,r3,r5 |
57 | mtlr r0 | 57 | mtlr r0 |
@@ -498,15 +498,15 @@ _GLOBAL(identify_cpu) | |||
498 | */ | 498 | */ |
499 | _GLOBAL(do_cpu_ftr_fixups) | 499 | _GLOBAL(do_cpu_ftr_fixups) |
500 | /* Get CPU 0 features */ | 500 | /* Get CPU 0 features */ |
501 | LOADADDR(r6,cur_cpu_spec) | 501 | LOAD_REG_IMMEDIATE(r6,cur_cpu_spec) |
502 | sub r6,r6,r3 | 502 | sub r6,r6,r3 |
503 | ld r4,0(r6) | 503 | ld r4,0(r6) |
504 | sub r4,r4,r3 | 504 | sub r4,r4,r3 |
505 | ld r4,CPU_SPEC_FEATURES(r4) | 505 | ld r4,CPU_SPEC_FEATURES(r4) |
506 | /* Get the fixup table */ | 506 | /* Get the fixup table */ |
507 | LOADADDR(r6,__start___ftr_fixup) | 507 | LOAD_REG_IMMEDIATE(r6,__start___ftr_fixup) |
508 | sub r6,r6,r3 | 508 | sub r6,r6,r3 |
509 | LOADADDR(r7,__stop___ftr_fixup) | 509 | LOAD_REG_IMMEDIATE(r7,__stop___ftr_fixup) |
510 | sub r7,r7,r3 | 510 | sub r7,r7,r3 |
511 | /* Do the fixup */ | 511 | /* Do the fixup */ |
512 | 1: cmpld r6,r7 | 512 | 1: cmpld r6,r7 |
diff --git a/arch/powerpc/kernel/of_device.c b/arch/powerpc/kernel/of_device.c index 7065e40e2f42..22d83d4d1af5 100644 --- a/arch/powerpc/kernel/of_device.c +++ b/arch/powerpc/kernel/of_device.c | |||
@@ -132,6 +132,8 @@ static int of_device_resume(struct device * dev) | |||
132 | struct bus_type of_platform_bus_type = { | 132 | struct bus_type of_platform_bus_type = { |
133 | .name = "of_platform", | 133 | .name = "of_platform", |
134 | .match = of_platform_bus_match, | 134 | .match = of_platform_bus_match, |
135 | .probe = of_device_probe, | ||
136 | .remove = of_device_remove, | ||
135 | .suspend = of_device_suspend, | 137 | .suspend = of_device_suspend, |
136 | .resume = of_device_resume, | 138 | .resume = of_device_resume, |
137 | }; | 139 | }; |
@@ -150,8 +152,6 @@ int of_register_driver(struct of_platform_driver *drv) | |||
150 | /* initialize common driver fields */ | 152 | /* initialize common driver fields */ |
151 | drv->driver.name = drv->name; | 153 | drv->driver.name = drv->name; |
152 | drv->driver.bus = &of_platform_bus_type; | 154 | drv->driver.bus = &of_platform_bus_type; |
153 | drv->driver.probe = of_device_probe; | ||
154 | drv->driver.remove = of_device_remove; | ||
155 | 155 | ||
156 | /* register with core */ | 156 | /* register with core */ |
157 | count = driver_register(&drv->driver); | 157 | count = driver_register(&drv->driver); |
diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c index 999bdd816769..5d1b708086bd 100644 --- a/arch/powerpc/kernel/paca.c +++ b/arch/powerpc/kernel/paca.c | |||
@@ -25,6 +25,28 @@ | |||
25 | * field correctly */ | 25 | * field correctly */ |
26 | extern unsigned long __toc_start; | 26 | extern unsigned long __toc_start; |
27 | 27 | ||
28 | /* | ||
29 | * iSeries structure which the hypervisor knows about - this structure | ||
30 | * should not cross a page boundary. The vpa_init/register_vpa call | ||
31 | * is now known to fail if the lppaca structure crosses a page | ||
32 | * boundary. The lppaca is also used on POWER5 pSeries boxes. The | ||
33 | * lppaca is 640 bytes long, and cannot readily change since the | ||
34 | * hypervisor knows its layout, so a 1kB alignment will suffice to | ||
35 | * ensure that it doesn't cross a page boundary. | ||
36 | */ | ||
37 | struct lppaca lppaca[] = { | ||
38 | [0 ... (NR_CPUS-1)] = { | ||
39 | .desc = 0xd397d781, /* "LpPa" */ | ||
40 | .size = sizeof(struct lppaca), | ||
41 | .dyn_proc_status = 2, | ||
42 | .decr_val = 0x00ff0000, | ||
43 | .fpregs_in_use = 1, | ||
44 | .end_of_quantum = 0xfffffffffffffffful, | ||
45 | .slb_count = 64, | ||
46 | .vmxregs_in_use = 0, | ||
47 | }, | ||
48 | }; | ||
49 | |||
28 | /* The Paca is an array with one entry per processor. Each contains an | 50 | /* The Paca is an array with one entry per processor. Each contains an |
29 | * lppaca, which contains the information shared between the | 51 | * lppaca, which contains the information shared between the |
30 | * hypervisor and Linux. | 52 | * hypervisor and Linux. |
@@ -35,27 +57,17 @@ extern unsigned long __toc_start; | |||
35 | * processor (not thread). | 57 | * processor (not thread). |
36 | */ | 58 | */ |
37 | #define PACA_INIT_COMMON(number, start, asrr, asrv) \ | 59 | #define PACA_INIT_COMMON(number, start, asrr, asrv) \ |
60 | .lppaca_ptr = &lppaca[number], \ | ||
38 | .lock_token = 0x8000, \ | 61 | .lock_token = 0x8000, \ |
39 | .paca_index = (number), /* Paca Index */ \ | 62 | .paca_index = (number), /* Paca Index */ \ |
40 | .kernel_toc = (unsigned long)(&__toc_start) + 0x8000UL, \ | 63 | .kernel_toc = (unsigned long)(&__toc_start) + 0x8000UL, \ |
41 | .stab_real = (asrr), /* Real pointer to segment table */ \ | 64 | .stab_real = (asrr), /* Real pointer to segment table */ \ |
42 | .stab_addr = (asrv), /* Virt pointer to segment table */ \ | 65 | .stab_addr = (asrv), /* Virt pointer to segment table */ \ |
43 | .cpu_start = (start), /* Processor start */ \ | 66 | .cpu_start = (start), /* Processor start */ \ |
44 | .hw_cpu_id = 0xffff, \ | 67 | .hw_cpu_id = 0xffff, |
45 | .lppaca = { \ | ||
46 | .desc = 0xd397d781, /* "LpPa" */ \ | ||
47 | .size = sizeof(struct lppaca), \ | ||
48 | .dyn_proc_status = 2, \ | ||
49 | .decr_val = 0x00ff0000, \ | ||
50 | .fpregs_in_use = 1, \ | ||
51 | .end_of_quantum = 0xfffffffffffffffful, \ | ||
52 | .slb_count = 64, \ | ||
53 | .vmxregs_in_use = 0, \ | ||
54 | }, \ | ||
55 | 68 | ||
56 | #ifdef CONFIG_PPC_ISERIES | 69 | #ifdef CONFIG_PPC_ISERIES |
57 | #define PACA_INIT_ISERIES(number) \ | 70 | #define PACA_INIT_ISERIES(number) \ |
58 | .lppaca_ptr = &paca[number].lppaca, \ | ||
59 | .reg_save_ptr = &iseries_reg_save[number], | 71 | .reg_save_ptr = &iseries_reg_save[number], |
60 | 72 | ||
61 | #define PACA_INIT(number) \ | 73 | #define PACA_INIT(number) \ |
diff --git a/arch/powerpc/kernel/ppc_ksyms.c b/arch/powerpc/kernel/ppc_ksyms.c index 16d9a904f3cb..d9a459c144d8 100644 --- a/arch/powerpc/kernel/ppc_ksyms.c +++ b/arch/powerpc/kernel/ppc_ksyms.c | |||
@@ -230,8 +230,7 @@ EXPORT_SYMBOL(__down_interruptible); | |||
230 | EXPORT_SYMBOL(cpm_install_handler); | 230 | EXPORT_SYMBOL(cpm_install_handler); |
231 | EXPORT_SYMBOL(cpm_free_handler); | 231 | EXPORT_SYMBOL(cpm_free_handler); |
232 | #endif /* CONFIG_8xx */ | 232 | #endif /* CONFIG_8xx */ |
233 | #if defined(CONFIG_8xx) || defined(CONFIG_40x) || defined(CONFIG_85xx) ||\ | 233 | #if defined(CONFIG_8xx) || defined(CONFIG_40x) |
234 | defined(CONFIG_83xx) | ||
235 | EXPORT_SYMBOL(__res); | 234 | EXPORT_SYMBOL(__res); |
236 | #endif | 235 | #endif |
237 | 236 | ||
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index 02e2115323e4..d50c8df0183e 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
@@ -1627,6 +1627,11 @@ static void of_node_release(struct kref *kref) | |||
1627 | kfree(prop->value); | 1627 | kfree(prop->value); |
1628 | kfree(prop); | 1628 | kfree(prop); |
1629 | prop = next; | 1629 | prop = next; |
1630 | |||
1631 | if (!prop) { | ||
1632 | prop = node->deadprops; | ||
1633 | node->deadprops = NULL; | ||
1634 | } | ||
1630 | } | 1635 | } |
1631 | kfree(node->intrs); | 1636 | kfree(node->intrs); |
1632 | kfree(node->full_name); | 1637 | kfree(node->full_name); |
@@ -1774,22 +1779,32 @@ static int __init prom_reconfig_setup(void) | |||
1774 | __initcall(prom_reconfig_setup); | 1779 | __initcall(prom_reconfig_setup); |
1775 | #endif | 1780 | #endif |
1776 | 1781 | ||
1777 | /* | 1782 | struct property *of_find_property(struct device_node *np, const char *name, |
1778 | * Find a property with a given name for a given node | 1783 | int *lenp) |
1779 | * and return the value. | ||
1780 | */ | ||
1781 | unsigned char *get_property(struct device_node *np, const char *name, | ||
1782 | int *lenp) | ||
1783 | { | 1784 | { |
1784 | struct property *pp; | 1785 | struct property *pp; |
1785 | 1786 | ||
1787 | read_lock(&devtree_lock); | ||
1786 | for (pp = np->properties; pp != 0; pp = pp->next) | 1788 | for (pp = np->properties; pp != 0; pp = pp->next) |
1787 | if (strcmp(pp->name, name) == 0) { | 1789 | if (strcmp(pp->name, name) == 0) { |
1788 | if (lenp != 0) | 1790 | if (lenp != 0) |
1789 | *lenp = pp->length; | 1791 | *lenp = pp->length; |
1790 | return pp->value; | 1792 | break; |
1791 | } | 1793 | } |
1792 | return NULL; | 1794 | read_unlock(&devtree_lock); |
1795 | |||
1796 | return pp; | ||
1797 | } | ||
1798 | |||
1799 | /* | ||
1800 | * Find a property with a given name for a given node | ||
1801 | * and return the value. | ||
1802 | */ | ||
1803 | unsigned char *get_property(struct device_node *np, const char *name, | ||
1804 | int *lenp) | ||
1805 | { | ||
1806 | struct property *pp = of_find_property(np,name,lenp); | ||
1807 | return pp ? pp->value : NULL; | ||
1793 | } | 1808 | } |
1794 | EXPORT_SYMBOL(get_property); | 1809 | EXPORT_SYMBOL(get_property); |
1795 | 1810 | ||
@@ -1823,4 +1838,82 @@ int prom_add_property(struct device_node* np, struct property* prop) | |||
1823 | return 0; | 1838 | return 0; |
1824 | } | 1839 | } |
1825 | 1840 | ||
1841 | /* | ||
1842 | * Remove a property from a node. Note that we don't actually | ||
1843 | * remove it, since we have given out who-knows-how-many pointers | ||
1844 | * to the data using get-property. Instead we just move the property | ||
1845 | * to the "dead properties" list, so it won't be found any more. | ||
1846 | */ | ||
1847 | int prom_remove_property(struct device_node *np, struct property *prop) | ||
1848 | { | ||
1849 | struct property **next; | ||
1850 | int found = 0; | ||
1826 | 1851 | ||
1852 | write_lock(&devtree_lock); | ||
1853 | next = &np->properties; | ||
1854 | while (*next) { | ||
1855 | if (*next == prop) { | ||
1856 | /* found the node */ | ||
1857 | *next = prop->next; | ||
1858 | prop->next = np->deadprops; | ||
1859 | np->deadprops = prop; | ||
1860 | found = 1; | ||
1861 | break; | ||
1862 | } | ||
1863 | next = &(*next)->next; | ||
1864 | } | ||
1865 | write_unlock(&devtree_lock); | ||
1866 | |||
1867 | if (!found) | ||
1868 | return -ENODEV; | ||
1869 | |||
1870 | #ifdef CONFIG_PROC_DEVICETREE | ||
1871 | /* try to remove the proc node as well */ | ||
1872 | if (np->pde) | ||
1873 | proc_device_tree_remove_prop(np->pde, prop); | ||
1874 | #endif /* CONFIG_PROC_DEVICETREE */ | ||
1875 | |||
1876 | return 0; | ||
1877 | } | ||
1878 | |||
1879 | /* | ||
1880 | * Update a property in a node. Note that we don't actually | ||
1881 | * remove it, since we have given out who-knows-how-many pointers | ||
1882 | * to the data using get-property. Instead we just move the property | ||
1883 | * to the "dead properties" list, and add the new property to the | ||
1884 | * property list | ||
1885 | */ | ||
1886 | int prom_update_property(struct device_node *np, | ||
1887 | struct property *newprop, | ||
1888 | struct property *oldprop) | ||
1889 | { | ||
1890 | struct property **next; | ||
1891 | int found = 0; | ||
1892 | |||
1893 | write_lock(&devtree_lock); | ||
1894 | next = &np->properties; | ||
1895 | while (*next) { | ||
1896 | if (*next == oldprop) { | ||
1897 | /* found the node */ | ||
1898 | newprop->next = oldprop->next; | ||
1899 | *next = newprop; | ||
1900 | oldprop->next = np->deadprops; | ||
1901 | np->deadprops = oldprop; | ||
1902 | found = 1; | ||
1903 | break; | ||
1904 | } | ||
1905 | next = &(*next)->next; | ||
1906 | } | ||
1907 | write_unlock(&devtree_lock); | ||
1908 | |||
1909 | if (!found) | ||
1910 | return -ENODEV; | ||
1911 | |||
1912 | #ifdef CONFIG_PROC_DEVICETREE | ||
1913 | /* try to add to proc as well if it was initialized */ | ||
1914 | if (np->pde) | ||
1915 | proc_device_tree_update_prop(np->pde, newprop, oldprop); | ||
1916 | #endif /* CONFIG_PROC_DEVICETREE */ | ||
1917 | |||
1918 | return 0; | ||
1919 | } | ||
diff --git a/arch/powerpc/kernel/prom_parse.c b/arch/powerpc/kernel/prom_parse.c index 309ae1d5fa77..a8099c806150 100644 --- a/arch/powerpc/kernel/prom_parse.c +++ b/arch/powerpc/kernel/prom_parse.c | |||
@@ -113,7 +113,8 @@ static unsigned int of_bus_default_get_flags(u32 *addr) | |||
113 | 113 | ||
114 | static int of_bus_pci_match(struct device_node *np) | 114 | static int of_bus_pci_match(struct device_node *np) |
115 | { | 115 | { |
116 | return !strcmp(np->type, "pci"); | 116 | /* "vci" is for the /chaos bridge on 1st-gen PCI powermacs */ |
117 | return !strcmp(np->type, "pci") || !strcmp(np->type, "vci"); | ||
117 | } | 118 | } |
118 | 119 | ||
119 | static void of_bus_pci_count_cells(struct device_node *np, | 120 | static void of_bus_pci_count_cells(struct device_node *np, |
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index 4b9cfe4637b1..7fe4a5c944c9 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c | |||
@@ -36,6 +36,11 @@ struct rtas_t rtas = { | |||
36 | .lock = SPIN_LOCK_UNLOCKED | 36 | .lock = SPIN_LOCK_UNLOCKED |
37 | }; | 37 | }; |
38 | 38 | ||
39 | struct rtas_suspend_me_data { | ||
40 | long waiting; | ||
41 | struct rtas_args *args; | ||
42 | }; | ||
43 | |||
39 | EXPORT_SYMBOL(rtas); | 44 | EXPORT_SYMBOL(rtas); |
40 | 45 | ||
41 | DEFINE_SPINLOCK(rtas_data_buf_lock); | 46 | DEFINE_SPINLOCK(rtas_data_buf_lock); |
@@ -556,6 +561,80 @@ void rtas_os_term(char *str) | |||
556 | } while (status == RTAS_BUSY); | 561 | } while (status == RTAS_BUSY); |
557 | } | 562 | } |
558 | 563 | ||
564 | static int ibm_suspend_me_token = RTAS_UNKNOWN_SERVICE; | ||
565 | #ifdef CONFIG_PPC_PSERIES | ||
566 | static void rtas_percpu_suspend_me(void *info) | ||
567 | { | ||
568 | long rc; | ||
569 | long flags; | ||
570 | struct rtas_suspend_me_data *data = | ||
571 | (struct rtas_suspend_me_data *)info; | ||
572 | |||
573 | /* | ||
574 | * We use "waiting" to indicate our state. As long | ||
575 | * as it is >0, we are still trying to all join up. | ||
576 | * If it goes to 0, we have successfully joined up and | ||
577 | * one thread got H_Continue. If any error happens, | ||
578 | * we set it to <0. | ||
579 | */ | ||
580 | local_irq_save(flags); | ||
581 | do { | ||
582 | rc = plpar_hcall_norets(H_JOIN); | ||
583 | smp_rmb(); | ||
584 | } while (rc == H_Success && data->waiting > 0); | ||
585 | if (rc == H_Success) | ||
586 | goto out; | ||
587 | |||
588 | if (rc == H_Continue) { | ||
589 | data->waiting = 0; | ||
590 | rtas_call(ibm_suspend_me_token, 0, 1, | ||
591 | data->args->args); | ||
592 | } else { | ||
593 | data->waiting = -EBUSY; | ||
594 | printk(KERN_ERR "Error on H_Join hypervisor call\n"); | ||
595 | } | ||
596 | |||
597 | out: | ||
598 | /* before we restore interrupts, make sure we don't | ||
599 | * generate a spurious soft lockup errors | ||
600 | */ | ||
601 | touch_softlockup_watchdog(); | ||
602 | local_irq_restore(flags); | ||
603 | return; | ||
604 | } | ||
605 | |||
606 | static int rtas_ibm_suspend_me(struct rtas_args *args) | ||
607 | { | ||
608 | int i; | ||
609 | |||
610 | struct rtas_suspend_me_data data; | ||
611 | |||
612 | data.waiting = 1; | ||
613 | data.args = args; | ||
614 | |||
615 | /* Call function on all CPUs. One of us will make the | ||
616 | * rtas call | ||
617 | */ | ||
618 | if (on_each_cpu(rtas_percpu_suspend_me, &data, 1, 0)) | ||
619 | data.waiting = -EINVAL; | ||
620 | |||
621 | if (data.waiting != 0) | ||
622 | printk(KERN_ERR "Error doing global join\n"); | ||
623 | |||
624 | /* Prod each CPU. This won't hurt, and will wake | ||
625 | * anyone we successfully put to sleep with H_Join | ||
626 | */ | ||
627 | for_each_cpu(i) | ||
628 | plpar_hcall_norets(H_PROD, i); | ||
629 | |||
630 | return data.waiting; | ||
631 | } | ||
632 | #else /* CONFIG_PPC_PSERIES */ | ||
633 | static int rtas_ibm_suspend_me(struct rtas_args *args) | ||
634 | { | ||
635 | return -ENOSYS; | ||
636 | } | ||
637 | #endif | ||
559 | 638 | ||
560 | asmlinkage int ppc_rtas(struct rtas_args __user *uargs) | 639 | asmlinkage int ppc_rtas(struct rtas_args __user *uargs) |
561 | { | 640 | { |
@@ -563,6 +642,7 @@ asmlinkage int ppc_rtas(struct rtas_args __user *uargs) | |||
563 | unsigned long flags; | 642 | unsigned long flags; |
564 | char *buff_copy, *errbuf = NULL; | 643 | char *buff_copy, *errbuf = NULL; |
565 | int nargs; | 644 | int nargs; |
645 | int rc; | ||
566 | 646 | ||
567 | if (!capable(CAP_SYS_ADMIN)) | 647 | if (!capable(CAP_SYS_ADMIN)) |
568 | return -EPERM; | 648 | return -EPERM; |
@@ -581,6 +661,17 @@ asmlinkage int ppc_rtas(struct rtas_args __user *uargs) | |||
581 | nargs * sizeof(rtas_arg_t)) != 0) | 661 | nargs * sizeof(rtas_arg_t)) != 0) |
582 | return -EFAULT; | 662 | return -EFAULT; |
583 | 663 | ||
664 | if (args.token == RTAS_UNKNOWN_SERVICE) | ||
665 | return -EINVAL; | ||
666 | |||
667 | /* Need to handle ibm,suspend_me call specially */ | ||
668 | if (args.token == ibm_suspend_me_token) { | ||
669 | rc = rtas_ibm_suspend_me(&args); | ||
670 | if (rc) | ||
671 | return rc; | ||
672 | goto copy_return; | ||
673 | } | ||
674 | |||
584 | buff_copy = get_errorlog_buffer(); | 675 | buff_copy = get_errorlog_buffer(); |
585 | 676 | ||
586 | spin_lock_irqsave(&rtas.lock, flags); | 677 | spin_lock_irqsave(&rtas.lock, flags); |
@@ -604,6 +695,7 @@ asmlinkage int ppc_rtas(struct rtas_args __user *uargs) | |||
604 | kfree(buff_copy); | 695 | kfree(buff_copy); |
605 | } | 696 | } |
606 | 697 | ||
698 | copy_return: | ||
607 | /* Copy out args. */ | 699 | /* Copy out args. */ |
608 | if (copy_to_user(uargs->args + nargs, | 700 | if (copy_to_user(uargs->args + nargs, |
609 | args.args + nargs, | 701 | args.args + nargs, |
@@ -675,8 +767,10 @@ void __init rtas_initialize(void) | |||
675 | * the stop-self token if any | 767 | * the stop-self token if any |
676 | */ | 768 | */ |
677 | #ifdef CONFIG_PPC64 | 769 | #ifdef CONFIG_PPC64 |
678 | if (_machine == PLATFORM_PSERIES_LPAR) | 770 | if (_machine == PLATFORM_PSERIES_LPAR) { |
679 | rtas_region = min(lmb.rmo_size, RTAS_INSTANTIATE_MAX); | 771 | rtas_region = min(lmb.rmo_size, RTAS_INSTANTIATE_MAX); |
772 | ibm_suspend_me_token = rtas_token("ibm,suspend-me"); | ||
773 | } | ||
680 | #endif | 774 | #endif |
681 | rtas_rmo_buf = lmb_alloc_base(RTAS_RMOBUF_MAX, PAGE_SIZE, rtas_region); | 775 | rtas_rmo_buf = lmb_alloc_base(RTAS_RMOBUF_MAX, PAGE_SIZE, rtas_region); |
682 | 776 | ||
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index d5c52fae023a..be12041c0fc5 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c | |||
@@ -100,7 +100,8 @@ void machine_shutdown(void) | |||
100 | void machine_restart(char *cmd) | 100 | void machine_restart(char *cmd) |
101 | { | 101 | { |
102 | machine_shutdown(); | 102 | machine_shutdown(); |
103 | ppc_md.restart(cmd); | 103 | if (ppc_md.restart) |
104 | ppc_md.restart(cmd); | ||
104 | #ifdef CONFIG_SMP | 105 | #ifdef CONFIG_SMP |
105 | smp_send_stop(); | 106 | smp_send_stop(); |
106 | #endif | 107 | #endif |
@@ -112,7 +113,8 @@ void machine_restart(char *cmd) | |||
112 | void machine_power_off(void) | 113 | void machine_power_off(void) |
113 | { | 114 | { |
114 | machine_shutdown(); | 115 | machine_shutdown(); |
115 | ppc_md.power_off(); | 116 | if (ppc_md.power_off) |
117 | ppc_md.power_off(); | ||
116 | #ifdef CONFIG_SMP | 118 | #ifdef CONFIG_SMP |
117 | smp_send_stop(); | 119 | smp_send_stop(); |
118 | #endif | 120 | #endif |
@@ -129,7 +131,8 @@ EXPORT_SYMBOL_GPL(pm_power_off); | |||
129 | void machine_halt(void) | 131 | void machine_halt(void) |
130 | { | 132 | { |
131 | machine_shutdown(); | 133 | machine_shutdown(); |
132 | ppc_md.halt(); | 134 | if (ppc_md.halt) |
135 | ppc_md.halt(); | ||
133 | #ifdef CONFIG_SMP | 136 | #ifdef CONFIG_SMP |
134 | smp_send_stop(); | 137 | smp_send_stop(); |
135 | #endif | 138 | #endif |
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index 56f50e91bddb..c4a294d657b9 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
@@ -431,7 +431,7 @@ void timer_interrupt(struct pt_regs * regs) | |||
431 | profile_tick(CPU_PROFILING, regs); | 431 | profile_tick(CPU_PROFILING, regs); |
432 | 432 | ||
433 | #ifdef CONFIG_PPC_ISERIES | 433 | #ifdef CONFIG_PPC_ISERIES |
434 | get_paca()->lppaca.int_dword.fields.decr_int = 0; | 434 | get_lppaca()->int_dword.fields.decr_int = 0; |
435 | #endif | 435 | #endif |
436 | 436 | ||
437 | while ((ticks = tb_ticks_since(per_cpu(last_jiffy, cpu))) | 437 | while ((ticks = tb_ticks_since(per_cpu(last_jiffy, cpu))) |
diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c index 13c41495fe06..13c655ba2841 100644 --- a/arch/powerpc/kernel/vio.c +++ b/arch/powerpc/kernel/vio.c | |||
@@ -76,7 +76,7 @@ static void vio_bus_shutdown(struct device *dev) | |||
76 | struct vio_dev *viodev = to_vio_dev(dev); | 76 | struct vio_dev *viodev = to_vio_dev(dev); |
77 | struct vio_driver *viodrv = to_vio_driver(dev->driver); | 77 | struct vio_driver *viodrv = to_vio_driver(dev->driver); |
78 | 78 | ||
79 | if (viodrv->shutdown) | 79 | if (dev->driver && viodrv->shutdown) |
80 | viodrv->shutdown(viodev); | 80 | viodrv->shutdown(viodev); |
81 | } | 81 | } |
82 | 82 | ||
@@ -91,9 +91,6 @@ int vio_register_driver(struct vio_driver *viodrv) | |||
91 | 91 | ||
92 | /* fill in 'struct driver' fields */ | 92 | /* fill in 'struct driver' fields */ |
93 | viodrv->driver.bus = &vio_bus_type; | 93 | viodrv->driver.bus = &vio_bus_type; |
94 | viodrv->driver.probe = vio_bus_probe; | ||
95 | viodrv->driver.remove = vio_bus_remove; | ||
96 | viodrv->driver.shutdown = vio_bus_shutdown; | ||
97 | 94 | ||
98 | return driver_register(&viodrv->driver); | 95 | return driver_register(&viodrv->driver); |
99 | } | 96 | } |
@@ -295,4 +292,7 @@ struct bus_type vio_bus_type = { | |||
295 | .name = "vio", | 292 | .name = "vio", |
296 | .uevent = vio_hotplug, | 293 | .uevent = vio_hotplug, |
297 | .match = vio_bus_match, | 294 | .match = vio_bus_match, |
295 | .probe = vio_bus_probe, | ||
296 | .remove = vio_bus_remove, | ||
297 | .shutdown = vio_bus_shutdown, | ||
298 | }; | 298 | }; |