aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/cputable.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kernel/cputable.c')
-rw-r--r--arch/powerpc/kernel/cputable.c174
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);
48extern void __setup_cpu_460ex(unsigned long offset, struct cpu_spec* spec); 48extern void __setup_cpu_460ex(unsigned long offset, struct cpu_spec* spec);
49extern void __setup_cpu_460gt(unsigned long offset, struct cpu_spec* spec); 49extern void __setup_cpu_460gt(unsigned long offset, struct cpu_spec* spec);
50extern void __setup_cpu_460sx(unsigned long offset, struct cpu_spec *spec); 50extern void __setup_cpu_460sx(unsigned long offset, struct cpu_spec *spec);
51extern void __setup_cpu_apm821xx(unsigned long offset, struct cpu_spec *spec);
51extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec); 52extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec);
52extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec); 53extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec);
53extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec); 54extern 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);
61extern void __setup_cpu_ppc970(unsigned long offset, struct cpu_spec* spec); 62extern void __setup_cpu_ppc970(unsigned long offset, struct cpu_spec* spec);
62extern void __setup_cpu_ppc970MP(unsigned long offset, struct cpu_spec* spec); 63extern void __setup_cpu_ppc970MP(unsigned long offset, struct cpu_spec* spec);
63extern void __setup_cpu_pa6t(unsigned long offset, struct cpu_spec* spec); 64extern void __setup_cpu_pa6t(unsigned long offset, struct cpu_spec* spec);
65extern void __setup_cpu_a2(unsigned long offset, struct cpu_spec* spec);
64extern void __restore_cpu_pa6t(void); 66extern void __restore_cpu_pa6t(void);
65extern void __restore_cpu_ppc970(void); 67extern void __restore_cpu_ppc970(void);
66extern void __setup_cpu_power7(unsigned long offset, struct cpu_spec* spec); 68extern void __setup_cpu_power7(unsigned long offset, struct cpu_spec* spec);
67extern void __restore_cpu_power7(void); 69extern void __restore_cpu_power7(void);
70extern void __restore_cpu_a2(void);
68#endif /* CONFIG_PPC64 */ 71#endif /* CONFIG_PPC64 */
72#if defined(CONFIG_E500)
73extern void __setup_cpu_e5500(unsigned long offset, struct cpu_spec* spec);
74extern 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
1990static struct cpu_spec the_cpu_spec; 2052static 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}