diff options
Diffstat (limited to 'arch/powerpc/kernel/cputable.c')
-rw-r--r-- | arch/powerpc/kernel/cputable.c | 174 |
1 files changed, 118 insertions, 56 deletions
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index 1f9123f412ec..9fb933248ab6 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
@@ -48,6 +48,7 @@ extern void __setup_cpu_440x5(unsigned long offset, struct cpu_spec* spec); | |||
48 | extern void __setup_cpu_460ex(unsigned long offset, struct cpu_spec* spec); | 48 | extern void __setup_cpu_460ex(unsigned long offset, struct cpu_spec* spec); |
49 | extern void __setup_cpu_460gt(unsigned long offset, struct cpu_spec* spec); | 49 | extern void __setup_cpu_460gt(unsigned long offset, struct cpu_spec* spec); |
50 | extern void __setup_cpu_460sx(unsigned long offset, struct cpu_spec *spec); | 50 | extern void __setup_cpu_460sx(unsigned long offset, struct cpu_spec *spec); |
51 | extern void __setup_cpu_apm821xx(unsigned long offset, struct cpu_spec *spec); | ||
51 | extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec); | 52 | extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec); |
52 | extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec); | 53 | extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec); |
53 | extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec); | 54 | extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec); |
@@ -61,11 +62,17 @@ extern void __setup_cpu_745x(unsigned long offset, struct cpu_spec* spec); | |||
61 | extern void __setup_cpu_ppc970(unsigned long offset, struct cpu_spec* spec); | 62 | extern void __setup_cpu_ppc970(unsigned long offset, struct cpu_spec* spec); |
62 | extern void __setup_cpu_ppc970MP(unsigned long offset, struct cpu_spec* spec); | 63 | extern void __setup_cpu_ppc970MP(unsigned long offset, struct cpu_spec* spec); |
63 | extern void __setup_cpu_pa6t(unsigned long offset, struct cpu_spec* spec); | 64 | extern void __setup_cpu_pa6t(unsigned long offset, struct cpu_spec* spec); |
65 | extern void __setup_cpu_a2(unsigned long offset, struct cpu_spec* spec); | ||
64 | extern void __restore_cpu_pa6t(void); | 66 | extern void __restore_cpu_pa6t(void); |
65 | extern void __restore_cpu_ppc970(void); | 67 | extern void __restore_cpu_ppc970(void); |
66 | extern void __setup_cpu_power7(unsigned long offset, struct cpu_spec* spec); | 68 | extern void __setup_cpu_power7(unsigned long offset, struct cpu_spec* spec); |
67 | extern void __restore_cpu_power7(void); | 69 | extern void __restore_cpu_power7(void); |
70 | extern void __restore_cpu_a2(void); | ||
68 | #endif /* CONFIG_PPC64 */ | 71 | #endif /* CONFIG_PPC64 */ |
72 | #if defined(CONFIG_E500) | ||
73 | extern void __setup_cpu_e5500(unsigned long offset, struct cpu_spec* spec); | ||
74 | extern void __restore_cpu_e5500(void); | ||
75 | #endif /* CONFIG_E500 */ | ||
69 | 76 | ||
70 | /* This table only contains "desktop" CPUs, it need to be filled with embedded | 77 | /* This table only contains "desktop" CPUs, it need to be filled with embedded |
71 | * ones as well... | 78 | * ones as well... |
@@ -111,7 +118,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
111 | .pmc_type = PPC_PMC_IBM, | 118 | .pmc_type = PPC_PMC_IBM, |
112 | .oprofile_cpu_type = "ppc64/power3", | 119 | .oprofile_cpu_type = "ppc64/power3", |
113 | .oprofile_type = PPC_OPROFILE_RS64, | 120 | .oprofile_type = PPC_OPROFILE_RS64, |
114 | .machine_check = machine_check_generic, | ||
115 | .platform = "power3", | 121 | .platform = "power3", |
116 | }, | 122 | }, |
117 | { /* Power3+ */ | 123 | { /* Power3+ */ |
@@ -127,7 +133,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
127 | .pmc_type = PPC_PMC_IBM, | 133 | .pmc_type = PPC_PMC_IBM, |
128 | .oprofile_cpu_type = "ppc64/power3", | 134 | .oprofile_cpu_type = "ppc64/power3", |
129 | .oprofile_type = PPC_OPROFILE_RS64, | 135 | .oprofile_type = PPC_OPROFILE_RS64, |
130 | .machine_check = machine_check_generic, | ||
131 | .platform = "power3", | 136 | .platform = "power3", |
132 | }, | 137 | }, |
133 | { /* Northstar */ | 138 | { /* Northstar */ |
@@ -143,7 +148,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
143 | .pmc_type = PPC_PMC_IBM, | 148 | .pmc_type = PPC_PMC_IBM, |
144 | .oprofile_cpu_type = "ppc64/rs64", | 149 | .oprofile_cpu_type = "ppc64/rs64", |
145 | .oprofile_type = PPC_OPROFILE_RS64, | 150 | .oprofile_type = PPC_OPROFILE_RS64, |
146 | .machine_check = machine_check_generic, | ||
147 | .platform = "rs64", | 151 | .platform = "rs64", |
148 | }, | 152 | }, |
149 | { /* Pulsar */ | 153 | { /* Pulsar */ |
@@ -159,7 +163,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
159 | .pmc_type = PPC_PMC_IBM, | 163 | .pmc_type = PPC_PMC_IBM, |
160 | .oprofile_cpu_type = "ppc64/rs64", | 164 | .oprofile_cpu_type = "ppc64/rs64", |
161 | .oprofile_type = PPC_OPROFILE_RS64, | 165 | .oprofile_type = PPC_OPROFILE_RS64, |
162 | .machine_check = machine_check_generic, | ||
163 | .platform = "rs64", | 166 | .platform = "rs64", |
164 | }, | 167 | }, |
165 | { /* I-star */ | 168 | { /* I-star */ |
@@ -175,7 +178,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
175 | .pmc_type = PPC_PMC_IBM, | 178 | .pmc_type = PPC_PMC_IBM, |
176 | .oprofile_cpu_type = "ppc64/rs64", | 179 | .oprofile_cpu_type = "ppc64/rs64", |
177 | .oprofile_type = PPC_OPROFILE_RS64, | 180 | .oprofile_type = PPC_OPROFILE_RS64, |
178 | .machine_check = machine_check_generic, | ||
179 | .platform = "rs64", | 181 | .platform = "rs64", |
180 | }, | 182 | }, |
181 | { /* S-star */ | 183 | { /* S-star */ |
@@ -191,7 +193,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
191 | .pmc_type = PPC_PMC_IBM, | 193 | .pmc_type = PPC_PMC_IBM, |
192 | .oprofile_cpu_type = "ppc64/rs64", | 194 | .oprofile_cpu_type = "ppc64/rs64", |
193 | .oprofile_type = PPC_OPROFILE_RS64, | 195 | .oprofile_type = PPC_OPROFILE_RS64, |
194 | .machine_check = machine_check_generic, | ||
195 | .platform = "rs64", | 196 | .platform = "rs64", |
196 | }, | 197 | }, |
197 | { /* Power4 */ | 198 | { /* Power4 */ |
@@ -200,14 +201,13 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
200 | .cpu_name = "POWER4 (gp)", | 201 | .cpu_name = "POWER4 (gp)", |
201 | .cpu_features = CPU_FTRS_POWER4, | 202 | .cpu_features = CPU_FTRS_POWER4, |
202 | .cpu_user_features = COMMON_USER_POWER4, | 203 | .cpu_user_features = COMMON_USER_POWER4, |
203 | .mmu_features = MMU_FTR_HPTE_TABLE, | 204 | .mmu_features = MMU_FTRS_POWER4, |
204 | .icache_bsize = 128, | 205 | .icache_bsize = 128, |
205 | .dcache_bsize = 128, | 206 | .dcache_bsize = 128, |
206 | .num_pmcs = 8, | 207 | .num_pmcs = 8, |
207 | .pmc_type = PPC_PMC_IBM, | 208 | .pmc_type = PPC_PMC_IBM, |
208 | .oprofile_cpu_type = "ppc64/power4", | 209 | .oprofile_cpu_type = "ppc64/power4", |
209 | .oprofile_type = PPC_OPROFILE_POWER4, | 210 | .oprofile_type = PPC_OPROFILE_POWER4, |
210 | .machine_check = machine_check_generic, | ||
211 | .platform = "power4", | 211 | .platform = "power4", |
212 | }, | 212 | }, |
213 | { /* Power4+ */ | 213 | { /* Power4+ */ |
@@ -216,14 +216,13 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
216 | .cpu_name = "POWER4+ (gq)", | 216 | .cpu_name = "POWER4+ (gq)", |
217 | .cpu_features = CPU_FTRS_POWER4, | 217 | .cpu_features = CPU_FTRS_POWER4, |
218 | .cpu_user_features = COMMON_USER_POWER4, | 218 | .cpu_user_features = COMMON_USER_POWER4, |
219 | .mmu_features = MMU_FTR_HPTE_TABLE, | 219 | .mmu_features = MMU_FTRS_POWER4, |
220 | .icache_bsize = 128, | 220 | .icache_bsize = 128, |
221 | .dcache_bsize = 128, | 221 | .dcache_bsize = 128, |
222 | .num_pmcs = 8, | 222 | .num_pmcs = 8, |
223 | .pmc_type = PPC_PMC_IBM, | 223 | .pmc_type = PPC_PMC_IBM, |
224 | .oprofile_cpu_type = "ppc64/power4", | 224 | .oprofile_cpu_type = "ppc64/power4", |
225 | .oprofile_type = PPC_OPROFILE_POWER4, | 225 | .oprofile_type = PPC_OPROFILE_POWER4, |
226 | .machine_check = machine_check_generic, | ||
227 | .platform = "power4", | 226 | .platform = "power4", |
228 | }, | 227 | }, |
229 | { /* PPC970 */ | 228 | { /* PPC970 */ |
@@ -233,7 +232,7 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
233 | .cpu_features = CPU_FTRS_PPC970, | 232 | .cpu_features = CPU_FTRS_PPC970, |
234 | .cpu_user_features = COMMON_USER_POWER4 | | 233 | .cpu_user_features = COMMON_USER_POWER4 | |
235 | PPC_FEATURE_HAS_ALTIVEC_COMP, | 234 | PPC_FEATURE_HAS_ALTIVEC_COMP, |
236 | .mmu_features = MMU_FTR_HPTE_TABLE, | 235 | .mmu_features = MMU_FTRS_PPC970, |
237 | .icache_bsize = 128, | 236 | .icache_bsize = 128, |
238 | .dcache_bsize = 128, | 237 | .dcache_bsize = 128, |
239 | .num_pmcs = 8, | 238 | .num_pmcs = 8, |
@@ -242,7 +241,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
242 | .cpu_restore = __restore_cpu_ppc970, | 241 | .cpu_restore = __restore_cpu_ppc970, |
243 | .oprofile_cpu_type = "ppc64/970", | 242 | .oprofile_cpu_type = "ppc64/970", |
244 | .oprofile_type = PPC_OPROFILE_POWER4, | 243 | .oprofile_type = PPC_OPROFILE_POWER4, |
245 | .machine_check = machine_check_generic, | ||
246 | .platform = "ppc970", | 244 | .platform = "ppc970", |
247 | }, | 245 | }, |
248 | { /* PPC970FX */ | 246 | { /* PPC970FX */ |
@@ -252,7 +250,7 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
252 | .cpu_features = CPU_FTRS_PPC970, | 250 | .cpu_features = CPU_FTRS_PPC970, |
253 | .cpu_user_features = COMMON_USER_POWER4 | | 251 | .cpu_user_features = COMMON_USER_POWER4 | |
254 | PPC_FEATURE_HAS_ALTIVEC_COMP, | 252 | PPC_FEATURE_HAS_ALTIVEC_COMP, |
255 | .mmu_features = MMU_FTR_HPTE_TABLE, | 253 | .mmu_features = MMU_FTRS_PPC970, |
256 | .icache_bsize = 128, | 254 | .icache_bsize = 128, |
257 | .dcache_bsize = 128, | 255 | .dcache_bsize = 128, |
258 | .num_pmcs = 8, | 256 | .num_pmcs = 8, |
@@ -261,7 +259,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
261 | .cpu_restore = __restore_cpu_ppc970, | 259 | .cpu_restore = __restore_cpu_ppc970, |
262 | .oprofile_cpu_type = "ppc64/970", | 260 | .oprofile_cpu_type = "ppc64/970", |
263 | .oprofile_type = PPC_OPROFILE_POWER4, | 261 | .oprofile_type = PPC_OPROFILE_POWER4, |
264 | .machine_check = machine_check_generic, | ||
265 | .platform = "ppc970", | 262 | .platform = "ppc970", |
266 | }, | 263 | }, |
267 | { /* PPC970MP DD1.0 - no DEEPNAP, use regular 970 init */ | 264 | { /* PPC970MP DD1.0 - no DEEPNAP, use regular 970 init */ |
@@ -280,7 +277,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
280 | .cpu_restore = __restore_cpu_ppc970, | 277 | .cpu_restore = __restore_cpu_ppc970, |
281 | .oprofile_cpu_type = "ppc64/970MP", | 278 | .oprofile_cpu_type = "ppc64/970MP", |
282 | .oprofile_type = PPC_OPROFILE_POWER4, | 279 | .oprofile_type = PPC_OPROFILE_POWER4, |
283 | .machine_check = machine_check_generic, | ||
284 | .platform = "ppc970", | 280 | .platform = "ppc970", |
285 | }, | 281 | }, |
286 | { /* PPC970MP */ | 282 | { /* PPC970MP */ |
@@ -290,7 +286,7 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
290 | .cpu_features = CPU_FTRS_PPC970, | 286 | .cpu_features = CPU_FTRS_PPC970, |
291 | .cpu_user_features = COMMON_USER_POWER4 | | 287 | .cpu_user_features = COMMON_USER_POWER4 | |
292 | PPC_FEATURE_HAS_ALTIVEC_COMP, | 288 | PPC_FEATURE_HAS_ALTIVEC_COMP, |
293 | .mmu_features = MMU_FTR_HPTE_TABLE, | 289 | .mmu_features = MMU_FTRS_PPC970, |
294 | .icache_bsize = 128, | 290 | .icache_bsize = 128, |
295 | .dcache_bsize = 128, | 291 | .dcache_bsize = 128, |
296 | .num_pmcs = 8, | 292 | .num_pmcs = 8, |
@@ -299,7 +295,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
299 | .cpu_restore = __restore_cpu_ppc970, | 295 | .cpu_restore = __restore_cpu_ppc970, |
300 | .oprofile_cpu_type = "ppc64/970MP", | 296 | .oprofile_cpu_type = "ppc64/970MP", |
301 | .oprofile_type = PPC_OPROFILE_POWER4, | 297 | .oprofile_type = PPC_OPROFILE_POWER4, |
302 | .machine_check = machine_check_generic, | ||
303 | .platform = "ppc970", | 298 | .platform = "ppc970", |
304 | }, | 299 | }, |
305 | { /* PPC970GX */ | 300 | { /* PPC970GX */ |
@@ -309,7 +304,7 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
309 | .cpu_features = CPU_FTRS_PPC970, | 304 | .cpu_features = CPU_FTRS_PPC970, |
310 | .cpu_user_features = COMMON_USER_POWER4 | | 305 | .cpu_user_features = COMMON_USER_POWER4 | |
311 | PPC_FEATURE_HAS_ALTIVEC_COMP, | 306 | PPC_FEATURE_HAS_ALTIVEC_COMP, |
312 | .mmu_features = MMU_FTR_HPTE_TABLE, | 307 | .mmu_features = MMU_FTRS_PPC970, |
313 | .icache_bsize = 128, | 308 | .icache_bsize = 128, |
314 | .dcache_bsize = 128, | 309 | .dcache_bsize = 128, |
315 | .num_pmcs = 8, | 310 | .num_pmcs = 8, |
@@ -317,7 +312,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
317 | .cpu_setup = __setup_cpu_ppc970, | 312 | .cpu_setup = __setup_cpu_ppc970, |
318 | .oprofile_cpu_type = "ppc64/970", | 313 | .oprofile_cpu_type = "ppc64/970", |
319 | .oprofile_type = PPC_OPROFILE_POWER4, | 314 | .oprofile_type = PPC_OPROFILE_POWER4, |
320 | .machine_check = machine_check_generic, | ||
321 | .platform = "ppc970", | 315 | .platform = "ppc970", |
322 | }, | 316 | }, |
323 | { /* Power5 GR */ | 317 | { /* Power5 GR */ |
@@ -326,7 +320,7 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
326 | .cpu_name = "POWER5 (gr)", | 320 | .cpu_name = "POWER5 (gr)", |
327 | .cpu_features = CPU_FTRS_POWER5, | 321 | .cpu_features = CPU_FTRS_POWER5, |
328 | .cpu_user_features = COMMON_USER_POWER5, | 322 | .cpu_user_features = COMMON_USER_POWER5, |
329 | .mmu_features = MMU_FTR_HPTE_TABLE, | 323 | .mmu_features = MMU_FTRS_POWER5, |
330 | .icache_bsize = 128, | 324 | .icache_bsize = 128, |
331 | .dcache_bsize = 128, | 325 | .dcache_bsize = 128, |
332 | .num_pmcs = 6, | 326 | .num_pmcs = 6, |
@@ -338,7 +332,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
338 | */ | 332 | */ |
339 | .oprofile_mmcra_sihv = MMCRA_SIHV, | 333 | .oprofile_mmcra_sihv = MMCRA_SIHV, |
340 | .oprofile_mmcra_sipr = MMCRA_SIPR, | 334 | .oprofile_mmcra_sipr = MMCRA_SIPR, |
341 | .machine_check = machine_check_generic, | ||
342 | .platform = "power5", | 335 | .platform = "power5", |
343 | }, | 336 | }, |
344 | { /* Power5++ */ | 337 | { /* Power5++ */ |
@@ -347,7 +340,7 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
347 | .cpu_name = "POWER5+ (gs)", | 340 | .cpu_name = "POWER5+ (gs)", |
348 | .cpu_features = CPU_FTRS_POWER5, | 341 | .cpu_features = CPU_FTRS_POWER5, |
349 | .cpu_user_features = COMMON_USER_POWER5_PLUS, | 342 | .cpu_user_features = COMMON_USER_POWER5_PLUS, |
350 | .mmu_features = MMU_FTR_HPTE_TABLE, | 343 | .mmu_features = MMU_FTRS_POWER5, |
351 | .icache_bsize = 128, | 344 | .icache_bsize = 128, |
352 | .dcache_bsize = 128, | 345 | .dcache_bsize = 128, |
353 | .num_pmcs = 6, | 346 | .num_pmcs = 6, |
@@ -355,7 +348,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
355 | .oprofile_type = PPC_OPROFILE_POWER4, | 348 | .oprofile_type = PPC_OPROFILE_POWER4, |
356 | .oprofile_mmcra_sihv = MMCRA_SIHV, | 349 | .oprofile_mmcra_sihv = MMCRA_SIHV, |
357 | .oprofile_mmcra_sipr = MMCRA_SIPR, | 350 | .oprofile_mmcra_sipr = MMCRA_SIPR, |
358 | .machine_check = machine_check_generic, | ||
359 | .platform = "power5+", | 351 | .platform = "power5+", |
360 | }, | 352 | }, |
361 | { /* Power5 GS */ | 353 | { /* Power5 GS */ |
@@ -364,7 +356,7 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
364 | .cpu_name = "POWER5+ (gs)", | 356 | .cpu_name = "POWER5+ (gs)", |
365 | .cpu_features = CPU_FTRS_POWER5, | 357 | .cpu_features = CPU_FTRS_POWER5, |
366 | .cpu_user_features = COMMON_USER_POWER5_PLUS, | 358 | .cpu_user_features = COMMON_USER_POWER5_PLUS, |
367 | .mmu_features = MMU_FTR_HPTE_TABLE, | 359 | .mmu_features = MMU_FTRS_POWER5, |
368 | .icache_bsize = 128, | 360 | .icache_bsize = 128, |
369 | .dcache_bsize = 128, | 361 | .dcache_bsize = 128, |
370 | .num_pmcs = 6, | 362 | .num_pmcs = 6, |
@@ -373,7 +365,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
373 | .oprofile_type = PPC_OPROFILE_POWER4, | 365 | .oprofile_type = PPC_OPROFILE_POWER4, |
374 | .oprofile_mmcra_sihv = MMCRA_SIHV, | 366 | .oprofile_mmcra_sihv = MMCRA_SIHV, |
375 | .oprofile_mmcra_sipr = MMCRA_SIPR, | 367 | .oprofile_mmcra_sipr = MMCRA_SIPR, |
376 | .machine_check = machine_check_generic, | ||
377 | .platform = "power5+", | 368 | .platform = "power5+", |
378 | }, | 369 | }, |
379 | { /* POWER6 in P5+ mode; 2.04-compliant processor */ | 370 | { /* POWER6 in P5+ mode; 2.04-compliant processor */ |
@@ -382,10 +373,9 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
382 | .cpu_name = "POWER5+", | 373 | .cpu_name = "POWER5+", |
383 | .cpu_features = CPU_FTRS_POWER5, | 374 | .cpu_features = CPU_FTRS_POWER5, |
384 | .cpu_user_features = COMMON_USER_POWER5_PLUS, | 375 | .cpu_user_features = COMMON_USER_POWER5_PLUS, |
385 | .mmu_features = MMU_FTR_HPTE_TABLE, | 376 | .mmu_features = MMU_FTRS_POWER5, |
386 | .icache_bsize = 128, | 377 | .icache_bsize = 128, |
387 | .dcache_bsize = 128, | 378 | .dcache_bsize = 128, |
388 | .machine_check = machine_check_generic, | ||
389 | .oprofile_cpu_type = "ppc64/ibm-compat-v1", | 379 | .oprofile_cpu_type = "ppc64/ibm-compat-v1", |
390 | .oprofile_type = PPC_OPROFILE_POWER4, | 380 | .oprofile_type = PPC_OPROFILE_POWER4, |
391 | .platform = "power5+", | 381 | .platform = "power5+", |
@@ -397,7 +387,7 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
397 | .cpu_features = CPU_FTRS_POWER6, | 387 | .cpu_features = CPU_FTRS_POWER6, |
398 | .cpu_user_features = COMMON_USER_POWER6 | | 388 | .cpu_user_features = COMMON_USER_POWER6 | |
399 | PPC_FEATURE_POWER6_EXT, | 389 | PPC_FEATURE_POWER6_EXT, |
400 | .mmu_features = MMU_FTR_HPTE_TABLE, | 390 | .mmu_features = MMU_FTRS_POWER6, |
401 | .icache_bsize = 128, | 391 | .icache_bsize = 128, |
402 | .dcache_bsize = 128, | 392 | .dcache_bsize = 128, |
403 | .num_pmcs = 6, | 393 | .num_pmcs = 6, |
@@ -408,7 +398,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
408 | .oprofile_mmcra_sipr = POWER6_MMCRA_SIPR, | 398 | .oprofile_mmcra_sipr = POWER6_MMCRA_SIPR, |
409 | .oprofile_mmcra_clear = POWER6_MMCRA_THRM | | 399 | .oprofile_mmcra_clear = POWER6_MMCRA_THRM | |
410 | POWER6_MMCRA_OTHER, | 400 | POWER6_MMCRA_OTHER, |
411 | .machine_check = machine_check_generic, | ||
412 | .platform = "power6x", | 401 | .platform = "power6x", |
413 | }, | 402 | }, |
414 | { /* 2.05-compliant processor, i.e. Power6 "architected" mode */ | 403 | { /* 2.05-compliant processor, i.e. Power6 "architected" mode */ |
@@ -417,10 +406,9 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
417 | .cpu_name = "POWER6 (architected)", | 406 | .cpu_name = "POWER6 (architected)", |
418 | .cpu_features = CPU_FTRS_POWER6, | 407 | .cpu_features = CPU_FTRS_POWER6, |
419 | .cpu_user_features = COMMON_USER_POWER6, | 408 | .cpu_user_features = COMMON_USER_POWER6, |
420 | .mmu_features = MMU_FTR_HPTE_TABLE, | 409 | .mmu_features = MMU_FTRS_POWER6, |
421 | .icache_bsize = 128, | 410 | .icache_bsize = 128, |
422 | .dcache_bsize = 128, | 411 | .dcache_bsize = 128, |
423 | .machine_check = machine_check_generic, | ||
424 | .oprofile_cpu_type = "ppc64/ibm-compat-v1", | 412 | .oprofile_cpu_type = "ppc64/ibm-compat-v1", |
425 | .oprofile_type = PPC_OPROFILE_POWER4, | 413 | .oprofile_type = PPC_OPROFILE_POWER4, |
426 | .platform = "power6", | 414 | .platform = "power6", |
@@ -431,13 +419,13 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
431 | .cpu_name = "POWER7 (architected)", | 419 | .cpu_name = "POWER7 (architected)", |
432 | .cpu_features = CPU_FTRS_POWER7, | 420 | .cpu_features = CPU_FTRS_POWER7, |
433 | .cpu_user_features = COMMON_USER_POWER7, | 421 | .cpu_user_features = COMMON_USER_POWER7, |
434 | .mmu_features = MMU_FTR_HPTE_TABLE | | 422 | .mmu_features = MMU_FTRS_POWER7, |
435 | MMU_FTR_TLBIE_206, | ||
436 | .icache_bsize = 128, | 423 | .icache_bsize = 128, |
437 | .dcache_bsize = 128, | 424 | .dcache_bsize = 128, |
438 | .machine_check = machine_check_generic, | ||
439 | .oprofile_type = PPC_OPROFILE_POWER4, | 425 | .oprofile_type = PPC_OPROFILE_POWER4, |
440 | .oprofile_cpu_type = "ppc64/ibm-compat-v1", | 426 | .oprofile_cpu_type = "ppc64/ibm-compat-v1", |
427 | .cpu_setup = __setup_cpu_power7, | ||
428 | .cpu_restore = __restore_cpu_power7, | ||
441 | .platform = "power7", | 429 | .platform = "power7", |
442 | }, | 430 | }, |
443 | { /* Power7 */ | 431 | { /* Power7 */ |
@@ -446,21 +434,33 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
446 | .cpu_name = "POWER7 (raw)", | 434 | .cpu_name = "POWER7 (raw)", |
447 | .cpu_features = CPU_FTRS_POWER7, | 435 | .cpu_features = CPU_FTRS_POWER7, |
448 | .cpu_user_features = COMMON_USER_POWER7, | 436 | .cpu_user_features = COMMON_USER_POWER7, |
449 | .mmu_features = MMU_FTR_HPTE_TABLE | | 437 | .mmu_features = MMU_FTRS_POWER7, |
450 | MMU_FTR_TLBIE_206, | ||
451 | .icache_bsize = 128, | 438 | .icache_bsize = 128, |
452 | .dcache_bsize = 128, | 439 | .dcache_bsize = 128, |
453 | .num_pmcs = 6, | 440 | .num_pmcs = 6, |
454 | .pmc_type = PPC_PMC_IBM, | 441 | .pmc_type = PPC_PMC_IBM, |
442 | .oprofile_cpu_type = "ppc64/power7", | ||
443 | .oprofile_type = PPC_OPROFILE_POWER4, | ||
455 | .cpu_setup = __setup_cpu_power7, | 444 | .cpu_setup = __setup_cpu_power7, |
456 | .cpu_restore = __restore_cpu_power7, | 445 | .cpu_restore = __restore_cpu_power7, |
446 | .platform = "power7", | ||
447 | }, | ||
448 | { /* Power7+ */ | ||
449 | .pvr_mask = 0xffff0000, | ||
450 | .pvr_value = 0x004A0000, | ||
451 | .cpu_name = "POWER7+ (raw)", | ||
452 | .cpu_features = CPU_FTRS_POWER7, | ||
453 | .cpu_user_features = COMMON_USER_POWER7, | ||
454 | .mmu_features = MMU_FTRS_POWER7, | ||
455 | .icache_bsize = 128, | ||
456 | .dcache_bsize = 128, | ||
457 | .num_pmcs = 6, | ||
458 | .pmc_type = PPC_PMC_IBM, | ||
457 | .oprofile_cpu_type = "ppc64/power7", | 459 | .oprofile_cpu_type = "ppc64/power7", |
458 | .oprofile_type = PPC_OPROFILE_POWER4, | 460 | .oprofile_type = PPC_OPROFILE_POWER4, |
459 | .oprofile_mmcra_sihv = POWER6_MMCRA_SIHV, | 461 | .cpu_setup = __setup_cpu_power7, |
460 | .oprofile_mmcra_sipr = POWER6_MMCRA_SIPR, | 462 | .cpu_restore = __restore_cpu_power7, |
461 | .oprofile_mmcra_clear = POWER6_MMCRA_THRM | | 463 | .platform = "power7+", |
462 | POWER6_MMCRA_OTHER, | ||
463 | .platform = "power7", | ||
464 | }, | 464 | }, |
465 | { /* Cell Broadband Engine */ | 465 | { /* Cell Broadband Engine */ |
466 | .pvr_mask = 0xffff0000, | 466 | .pvr_mask = 0xffff0000, |
@@ -470,14 +470,13 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
470 | .cpu_user_features = COMMON_USER_PPC64 | | 470 | .cpu_user_features = COMMON_USER_PPC64 | |
471 | PPC_FEATURE_CELL | PPC_FEATURE_HAS_ALTIVEC_COMP | | 471 | PPC_FEATURE_CELL | PPC_FEATURE_HAS_ALTIVEC_COMP | |
472 | PPC_FEATURE_SMT, | 472 | PPC_FEATURE_SMT, |
473 | .mmu_features = MMU_FTR_HPTE_TABLE, | 473 | .mmu_features = MMU_FTRS_CELL, |
474 | .icache_bsize = 128, | 474 | .icache_bsize = 128, |
475 | .dcache_bsize = 128, | 475 | .dcache_bsize = 128, |
476 | .num_pmcs = 4, | 476 | .num_pmcs = 4, |
477 | .pmc_type = PPC_PMC_IBM, | 477 | .pmc_type = PPC_PMC_IBM, |
478 | .oprofile_cpu_type = "ppc64/cell-be", | 478 | .oprofile_cpu_type = "ppc64/cell-be", |
479 | .oprofile_type = PPC_OPROFILE_CELL, | 479 | .oprofile_type = PPC_OPROFILE_CELL, |
480 | .machine_check = machine_check_generic, | ||
481 | .platform = "ppc-cell-be", | 480 | .platform = "ppc-cell-be", |
482 | }, | 481 | }, |
483 | { /* PA Semi PA6T */ | 482 | { /* PA Semi PA6T */ |
@@ -486,7 +485,7 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
486 | .cpu_name = "PA6T", | 485 | .cpu_name = "PA6T", |
487 | .cpu_features = CPU_FTRS_PA6T, | 486 | .cpu_features = CPU_FTRS_PA6T, |
488 | .cpu_user_features = COMMON_USER_PA6T, | 487 | .cpu_user_features = COMMON_USER_PA6T, |
489 | .mmu_features = MMU_FTR_HPTE_TABLE, | 488 | .mmu_features = MMU_FTRS_PA6T, |
490 | .icache_bsize = 64, | 489 | .icache_bsize = 64, |
491 | .dcache_bsize = 64, | 490 | .dcache_bsize = 64, |
492 | .num_pmcs = 6, | 491 | .num_pmcs = 6, |
@@ -495,7 +494,6 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
495 | .cpu_restore = __restore_cpu_pa6t, | 494 | .cpu_restore = __restore_cpu_pa6t, |
496 | .oprofile_cpu_type = "ppc64/pa6t", | 495 | .oprofile_cpu_type = "ppc64/pa6t", |
497 | .oprofile_type = PPC_OPROFILE_PA6T, | 496 | .oprofile_type = PPC_OPROFILE_PA6T, |
498 | .machine_check = machine_check_generic, | ||
499 | .platform = "pa6t", | 497 | .platform = "pa6t", |
500 | }, | 498 | }, |
501 | { /* default match */ | 499 | { /* default match */ |
@@ -504,12 +502,11 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
504 | .cpu_name = "POWER4 (compatible)", | 502 | .cpu_name = "POWER4 (compatible)", |
505 | .cpu_features = CPU_FTRS_COMPATIBLE, | 503 | .cpu_features = CPU_FTRS_COMPATIBLE, |
506 | .cpu_user_features = COMMON_USER_PPC64, | 504 | .cpu_user_features = COMMON_USER_PPC64, |
507 | .mmu_features = MMU_FTR_HPTE_TABLE, | 505 | .mmu_features = MMU_FTRS_DEFAULT_HPTE_ARCH_V2, |
508 | .icache_bsize = 128, | 506 | .icache_bsize = 128, |
509 | .dcache_bsize = 128, | 507 | .dcache_bsize = 128, |
510 | .num_pmcs = 6, | 508 | .num_pmcs = 6, |
511 | .pmc_type = PPC_PMC_IBM, | 509 | .pmc_type = PPC_PMC_IBM, |
512 | .machine_check = machine_check_generic, | ||
513 | .platform = "power4", | 510 | .platform = "power4", |
514 | } | 511 | } |
515 | #endif /* CONFIG_PPC_BOOK3S_64 */ | 512 | #endif /* CONFIG_PPC_BOOK3S_64 */ |
@@ -1805,11 +1802,25 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
1805 | .machine_check = machine_check_440A, | 1802 | .machine_check = machine_check_440A, |
1806 | .platform = "ppc440", | 1803 | .platform = "ppc440", |
1807 | }, | 1804 | }, |
1808 | { /* 476 core */ | 1805 | { /* 464 in APM821xx */ |
1809 | .pvr_mask = 0xffff0000, | 1806 | .pvr_mask = 0xffffff00, |
1810 | .pvr_value = 0x11a50000, | 1807 | .pvr_value = 0x12C41C80, |
1808 | .cpu_name = "APM821XX", | ||
1809 | .cpu_features = CPU_FTRS_44X, | ||
1810 | .cpu_user_features = COMMON_USER_BOOKE | | ||
1811 | PPC_FEATURE_HAS_FPU, | ||
1812 | .mmu_features = MMU_FTR_TYPE_44x, | ||
1813 | .icache_bsize = 32, | ||
1814 | .dcache_bsize = 32, | ||
1815 | .cpu_setup = __setup_cpu_apm821xx, | ||
1816 | .machine_check = machine_check_440A, | ||
1817 | .platform = "ppc440", | ||
1818 | }, | ||
1819 | { /* 476 DD2 core */ | ||
1820 | .pvr_mask = 0xffffffff, | ||
1821 | .pvr_value = 0x11a52080, | ||
1811 | .cpu_name = "476", | 1822 | .cpu_name = "476", |
1812 | .cpu_features = CPU_FTRS_47X, | 1823 | .cpu_features = CPU_FTRS_47X | CPU_FTR_476_DD2, |
1813 | .cpu_user_features = COMMON_USER_BOOKE | | 1824 | .cpu_user_features = COMMON_USER_BOOKE | |
1814 | PPC_FEATURE_HAS_FPU, | 1825 | PPC_FEATURE_HAS_FPU, |
1815 | .mmu_features = MMU_FTR_TYPE_47x | | 1826 | .mmu_features = MMU_FTR_TYPE_47x | |
@@ -1833,6 +1844,20 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
1833 | .machine_check = machine_check_47x, | 1844 | .machine_check = machine_check_47x, |
1834 | .platform = "ppc470", | 1845 | .platform = "ppc470", |
1835 | }, | 1846 | }, |
1847 | { /* 476 others */ | ||
1848 | .pvr_mask = 0xffff0000, | ||
1849 | .pvr_value = 0x11a50000, | ||
1850 | .cpu_name = "476", | ||
1851 | .cpu_features = CPU_FTRS_47X, | ||
1852 | .cpu_user_features = COMMON_USER_BOOKE | | ||
1853 | PPC_FEATURE_HAS_FPU, | ||
1854 | .mmu_features = MMU_FTR_TYPE_47x | | ||
1855 | MMU_FTR_USE_TLBIVAX_BCAST | MMU_FTR_LOCK_BCAST_INVAL, | ||
1856 | .icache_bsize = 32, | ||
1857 | .dcache_bsize = 128, | ||
1858 | .machine_check = machine_check_47x, | ||
1859 | .platform = "ppc470", | ||
1860 | }, | ||
1836 | { /* default match */ | 1861 | { /* default match */ |
1837 | .pvr_mask = 0x00000000, | 1862 | .pvr_mask = 0x00000000, |
1838 | .pvr_value = 0x00000000, | 1863 | .pvr_value = 0x00000000, |
@@ -1891,7 +1916,9 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
1891 | .platform = "ppc5554", | 1916 | .platform = "ppc5554", |
1892 | } | 1917 | } |
1893 | #endif /* CONFIG_E200 */ | 1918 | #endif /* CONFIG_E200 */ |
1919 | #endif /* CONFIG_PPC32 */ | ||
1894 | #ifdef CONFIG_E500 | 1920 | #ifdef CONFIG_E500 |
1921 | #ifdef CONFIG_PPC32 | ||
1895 | { /* e500 */ | 1922 | { /* e500 */ |
1896 | .pvr_mask = 0xffff0000, | 1923 | .pvr_mask = 0xffff0000, |
1897 | .pvr_value = 0x80200000, | 1924 | .pvr_value = 0x80200000, |
@@ -1946,6 +1973,26 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
1946 | .machine_check = machine_check_e500mc, | 1973 | .machine_check = machine_check_e500mc, |
1947 | .platform = "ppce500mc", | 1974 | .platform = "ppce500mc", |
1948 | }, | 1975 | }, |
1976 | #endif /* CONFIG_PPC32 */ | ||
1977 | { /* e5500 */ | ||
1978 | .pvr_mask = 0xffff0000, | ||
1979 | .pvr_value = 0x80240000, | ||
1980 | .cpu_name = "e5500", | ||
1981 | .cpu_features = CPU_FTRS_E5500, | ||
1982 | .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, | ||
1983 | .mmu_features = MMU_FTR_TYPE_FSL_E | MMU_FTR_BIG_PHYS | | ||
1984 | MMU_FTR_USE_TLBILX, | ||
1985 | .icache_bsize = 64, | ||
1986 | .dcache_bsize = 64, | ||
1987 | .num_pmcs = 4, | ||
1988 | .oprofile_cpu_type = "ppc/e500mc", | ||
1989 | .oprofile_type = PPC_OPROFILE_FSL_EMB, | ||
1990 | .cpu_setup = __setup_cpu_e5500, | ||
1991 | .cpu_restore = __restore_cpu_e5500, | ||
1992 | .machine_check = machine_check_e500mc, | ||
1993 | .platform = "ppce5500", | ||
1994 | }, | ||
1995 | #ifdef CONFIG_PPC32 | ||
1949 | { /* default match */ | 1996 | { /* default match */ |
1950 | .pvr_mask = 0x00000000, | 1997 | .pvr_mask = 0x00000000, |
1951 | .pvr_value = 0x00000000, | 1998 | .pvr_value = 0x00000000, |
@@ -1960,10 +2007,25 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
1960 | .machine_check = machine_check_e500, | 2007 | .machine_check = machine_check_e500, |
1961 | .platform = "powerpc", | 2008 | .platform = "powerpc", |
1962 | } | 2009 | } |
1963 | #endif /* CONFIG_E500 */ | ||
1964 | #endif /* CONFIG_PPC32 */ | 2010 | #endif /* CONFIG_PPC32 */ |
2011 | #endif /* CONFIG_E500 */ | ||
1965 | 2012 | ||
1966 | #ifdef CONFIG_PPC_BOOK3E_64 | 2013 | #ifdef CONFIG_PPC_A2 |
2014 | { /* Standard A2 (>= DD2) + FPU core */ | ||
2015 | .pvr_mask = 0xffff0000, | ||
2016 | .pvr_value = 0x00480000, | ||
2017 | .cpu_name = "A2 (>= DD2)", | ||
2018 | .cpu_features = CPU_FTRS_A2, | ||
2019 | .cpu_user_features = COMMON_USER_PPC64, | ||
2020 | .mmu_features = MMU_FTRS_A2, | ||
2021 | .icache_bsize = 64, | ||
2022 | .dcache_bsize = 64, | ||
2023 | .num_pmcs = 0, | ||
2024 | .cpu_setup = __setup_cpu_a2, | ||
2025 | .cpu_restore = __restore_cpu_a2, | ||
2026 | .machine_check = machine_check_generic, | ||
2027 | .platform = "ppca2", | ||
2028 | }, | ||
1967 | { /* This is a default entry to get going, to be replaced by | 2029 | { /* This is a default entry to get going, to be replaced by |
1968 | * a real one at some stage | 2030 | * a real one at some stage |
1969 | */ | 2031 | */ |
@@ -1984,7 +2046,7 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
1984 | .machine_check = machine_check_generic, | 2046 | .machine_check = machine_check_generic, |
1985 | .platform = "power6", | 2047 | .platform = "power6", |
1986 | }, | 2048 | }, |
1987 | #endif | 2049 | #endif /* CONFIG_PPC_A2 */ |
1988 | }; | 2050 | }; |
1989 | 2051 | ||
1990 | static struct cpu_spec the_cpu_spec; | 2052 | static struct cpu_spec the_cpu_spec; |
@@ -2048,8 +2110,8 @@ static void __init setup_cpu_spec(unsigned long offset, struct cpu_spec *s) | |||
2048 | * pointer on ppc64 and booke as we are running at 0 in real mode | 2110 | * pointer on ppc64 and booke as we are running at 0 in real mode |
2049 | * on ppc64 and reloc_offset is always 0 on booke. | 2111 | * on ppc64 and reloc_offset is always 0 on booke. |
2050 | */ | 2112 | */ |
2051 | if (s->cpu_setup) { | 2113 | if (t->cpu_setup) { |
2052 | s->cpu_setup(offset, s); | 2114 | t->cpu_setup(offset, t); |
2053 | } | 2115 | } |
2054 | #endif /* CONFIG_PPC64 || CONFIG_BOOKE */ | 2116 | #endif /* CONFIG_PPC64 || CONFIG_BOOKE */ |
2055 | } | 2117 | } |