1 /* SPDX-License-Identifier: GPL-2.0-or-later */
5 * Modifications for ppc64:
10 * Unlike ppc32, ppc64 will only call cpu_setup() for the boot CPU, it's
11 * the responsibility of the appropriate CPU save/restore functions to
12 * eventually copy these settings over. Those save/restore aren't yet
13 * part of the cputable though. That has to be fixed for both ppc32
16 #define COMMON_USER_PPC64 (PPC_FEATURE_32 | PPC_FEATURE_HAS_FPU | \
17 PPC_FEATURE_HAS_MMU | PPC_FEATURE_64)
18 #define COMMON_USER_POWER4 (COMMON_USER_PPC64 | PPC_FEATURE_POWER4)
19 #define COMMON_USER_POWER5 (COMMON_USER_PPC64 | PPC_FEATURE_POWER5 |\
20 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP)
21 #define COMMON_USER_POWER5_PLUS (COMMON_USER_PPC64 | PPC_FEATURE_POWER5_PLUS|\
22 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP)
23 #define COMMON_USER_POWER6 (COMMON_USER_PPC64 | PPC_FEATURE_ARCH_2_05 |\
24 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP | \
25 PPC_FEATURE_TRUE_LE | \
26 PPC_FEATURE_PSERIES_PERFMON_COMPAT)
27 #define COMMON_USER_POWER7 (COMMON_USER_PPC64 | PPC_FEATURE_ARCH_2_06 |\
28 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP | \
29 PPC_FEATURE_TRUE_LE | \
30 PPC_FEATURE_PSERIES_PERFMON_COMPAT)
31 #define COMMON_USER2_POWER7 (PPC_FEATURE2_DSCR)
32 #define COMMON_USER_POWER8 (COMMON_USER_PPC64 | PPC_FEATURE_ARCH_2_06 |\
33 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP | \
34 PPC_FEATURE_TRUE_LE | \
35 PPC_FEATURE_PSERIES_PERFMON_COMPAT)
36 #define COMMON_USER2_POWER8 (PPC_FEATURE2_ARCH_2_07 | \
37 PPC_FEATURE2_HTM_COMP | \
38 PPC_FEATURE2_HTM_NOSC_COMP | \
40 PPC_FEATURE2_ISEL | PPC_FEATURE2_TAR | \
41 PPC_FEATURE2_VEC_CRYPTO)
42 #define COMMON_USER_PA6T (COMMON_USER_PPC64 | PPC_FEATURE_PA6T |\
43 PPC_FEATURE_TRUE_LE | \
44 PPC_FEATURE_HAS_ALTIVEC_COMP)
45 #define COMMON_USER_POWER9 COMMON_USER_POWER8
46 #define COMMON_USER2_POWER9 (COMMON_USER2_POWER8 | \
47 PPC_FEATURE2_ARCH_3_00 | \
48 PPC_FEATURE2_HAS_IEEE128 | \
51 #define COMMON_USER_POWER10 COMMON_USER_POWER9
52 #define COMMON_USER2_POWER10 (PPC_FEATURE2_ARCH_3_1 | \
54 PPC_FEATURE2_ARCH_3_00 | \
55 PPC_FEATURE2_HAS_IEEE128 | \
58 PPC_FEATURE2_ARCH_2_07 | \
60 PPC_FEATURE2_ISEL | PPC_FEATURE2_TAR | \
61 PPC_FEATURE2_VEC_CRYPTO)
63 #define COMMON_USER_POWER11 COMMON_USER_POWER10
64 #define COMMON_USER2_POWER11 COMMON_USER2_POWER10
66 static struct cpu_spec cpu_specs[] __initdata = {
68 .pvr_mask = 0xffff0000,
69 .pvr_value = 0x00390000,
71 .cpu_features = CPU_FTRS_PPC970,
72 .cpu_user_features = COMMON_USER_POWER4 | PPC_FEATURE_HAS_ALTIVEC_COMP,
73 .mmu_features = MMU_FTRS_PPC970,
77 .pmc_type = PPC_PMC_IBM,
78 .cpu_setup = __setup_cpu_ppc970,
79 .cpu_restore = __restore_cpu_ppc970,
83 .pvr_mask = 0xffff0000,
84 .pvr_value = 0x003c0000,
85 .cpu_name = "PPC970FX",
86 .cpu_features = CPU_FTRS_PPC970,
87 .cpu_user_features = COMMON_USER_POWER4 | PPC_FEATURE_HAS_ALTIVEC_COMP,
88 .mmu_features = MMU_FTRS_PPC970,
92 .pmc_type = PPC_PMC_IBM,
93 .cpu_setup = __setup_cpu_ppc970,
94 .cpu_restore = __restore_cpu_ppc970,
97 { /* PPC970MP DD1.0 - no DEEPNAP, use regular 970 init */
98 .pvr_mask = 0xffffffff,
99 .pvr_value = 0x00440100,
100 .cpu_name = "PPC970MP",
101 .cpu_features = CPU_FTRS_PPC970,
102 .cpu_user_features = COMMON_USER_POWER4 | PPC_FEATURE_HAS_ALTIVEC_COMP,
103 .mmu_features = MMU_FTRS_PPC970,
107 .pmc_type = PPC_PMC_IBM,
108 .cpu_setup = __setup_cpu_ppc970,
109 .cpu_restore = __restore_cpu_ppc970,
110 .platform = "ppc970",
113 .pvr_mask = 0xffff0000,
114 .pvr_value = 0x00440000,
115 .cpu_name = "PPC970MP",
116 .cpu_features = CPU_FTRS_PPC970,
117 .cpu_user_features = COMMON_USER_POWER4 | PPC_FEATURE_HAS_ALTIVEC_COMP,
118 .mmu_features = MMU_FTRS_PPC970,
122 .pmc_type = PPC_PMC_IBM,
123 .cpu_setup = __setup_cpu_ppc970MP,
124 .cpu_restore = __restore_cpu_ppc970,
125 .platform = "ppc970",
128 .pvr_mask = 0xffff0000,
129 .pvr_value = 0x00450000,
130 .cpu_name = "PPC970GX",
131 .cpu_features = CPU_FTRS_PPC970,
132 .cpu_user_features = COMMON_USER_POWER4 | PPC_FEATURE_HAS_ALTIVEC_COMP,
133 .mmu_features = MMU_FTRS_PPC970,
137 .pmc_type = PPC_PMC_IBM,
138 .cpu_setup = __setup_cpu_ppc970,
139 .platform = "ppc970",
142 .pvr_mask = 0xffff0000,
143 .pvr_value = 0x003a0000,
144 .cpu_name = "POWER5 (gr)",
145 .cpu_features = CPU_FTRS_POWER5,
146 .cpu_user_features = COMMON_USER_POWER5,
147 .mmu_features = MMU_FTRS_POWER5,
151 .pmc_type = PPC_PMC_IBM,
152 .platform = "power5",
155 .pvr_mask = 0xffffff00,
156 .pvr_value = 0x003b0300,
157 .cpu_name = "POWER5+ (gs)",
158 .cpu_features = CPU_FTRS_POWER5,
159 .cpu_user_features = COMMON_USER_POWER5_PLUS,
160 .mmu_features = MMU_FTRS_POWER5,
164 .platform = "power5+",
167 .pvr_mask = 0xffff0000,
168 .pvr_value = 0x003b0000,
169 .cpu_name = "POWER5+ (gs)",
170 .cpu_features = CPU_FTRS_POWER5,
171 .cpu_user_features = COMMON_USER_POWER5_PLUS,
172 .mmu_features = MMU_FTRS_POWER5,
176 .pmc_type = PPC_PMC_IBM,
177 .platform = "power5+",
179 { /* POWER6 in P5+ mode; 2.04-compliant processor */
180 .pvr_mask = 0xffffffff,
181 .pvr_value = 0x0f000001,
182 .cpu_name = "POWER5+",
183 .cpu_features = CPU_FTRS_POWER5,
184 .cpu_user_features = COMMON_USER_POWER5_PLUS,
185 .mmu_features = MMU_FTRS_POWER5,
188 .platform = "power5+",
191 .pvr_mask = 0xffff0000,
192 .pvr_value = 0x003e0000,
193 .cpu_name = "POWER6 (raw)",
194 .cpu_features = CPU_FTRS_POWER6,
195 .cpu_user_features = COMMON_USER_POWER6 | PPC_FEATURE_POWER6_EXT,
196 .mmu_features = MMU_FTRS_POWER6,
200 .pmc_type = PPC_PMC_IBM,
201 .platform = "power6x",
203 { /* 2.05-compliant processor, i.e. Power6 "architected" mode */
204 .pvr_mask = 0xffffffff,
205 .pvr_value = 0x0f000002,
206 .cpu_name = "POWER6 (architected)",
207 .cpu_features = CPU_FTRS_POWER6,
208 .cpu_user_features = COMMON_USER_POWER6,
209 .mmu_features = MMU_FTRS_POWER6,
212 .platform = "power6",
214 { /* 2.06-compliant processor, i.e. Power7 "architected" mode */
215 .pvr_mask = 0xffffffff,
216 .pvr_value = 0x0f000003,
217 .cpu_name = "POWER7 (architected)",
218 .cpu_features = CPU_FTRS_POWER7,
219 .cpu_user_features = COMMON_USER_POWER7,
220 .cpu_user_features2 = COMMON_USER2_POWER7,
221 .mmu_features = MMU_FTRS_POWER7,
224 .cpu_setup = __setup_cpu_power7,
225 .cpu_restore = __restore_cpu_power7,
226 .machine_check_early = __machine_check_early_realmode_p7,
227 .platform = "power7",
229 { /* 2.07-compliant processor, i.e. Power8 "architected" mode */
230 .pvr_mask = 0xffffffff,
231 .pvr_value = 0x0f000004,
232 .cpu_name = "POWER8 (architected)",
233 .cpu_features = CPU_FTRS_POWER8,
234 .cpu_user_features = COMMON_USER_POWER8,
235 .cpu_user_features2 = COMMON_USER2_POWER8,
236 .mmu_features = MMU_FTRS_POWER8,
239 .cpu_setup = __setup_cpu_power8,
240 .cpu_restore = __restore_cpu_power8,
241 .machine_check_early = __machine_check_early_realmode_p8,
242 .platform = "power8",
244 { /* 2.07-compliant processor, HeXin C2000 processor */
245 .pvr_mask = 0xffff0000,
246 .pvr_value = 0x00660000,
247 .cpu_name = "HX-C2000",
248 .cpu_features = CPU_FTRS_POWER8,
249 .cpu_user_features = COMMON_USER_POWER8,
250 .cpu_user_features2 = COMMON_USER2_POWER8,
251 .mmu_features = MMU_FTRS_POWER8,
254 .cpu_setup = __setup_cpu_power8,
255 .cpu_restore = __restore_cpu_power8,
256 .machine_check_early = __machine_check_early_realmode_p8,
257 .platform = "power8",
259 { /* 3.00-compliant processor, i.e. Power9 "architected" mode */
260 .pvr_mask = 0xffffffff,
261 .pvr_value = 0x0f000005,
262 .cpu_name = "POWER9 (architected)",
263 .cpu_features = CPU_FTRS_POWER9,
264 .cpu_user_features = COMMON_USER_POWER9,
265 .cpu_user_features2 = COMMON_USER2_POWER9,
266 .mmu_features = MMU_FTRS_POWER9,
269 .cpu_setup = __setup_cpu_power9,
270 .cpu_restore = __restore_cpu_power9,
271 .platform = "power9",
273 { /* 3.1-compliant processor, i.e. Power10 "architected" mode */
274 .pvr_mask = 0xffffffff,
275 .pvr_value = 0x0f000006,
276 .cpu_name = "POWER10 (architected)",
277 .cpu_features = CPU_FTRS_POWER10,
278 .cpu_user_features = COMMON_USER_POWER10,
279 .cpu_user_features2 = COMMON_USER2_POWER10,
280 .mmu_features = MMU_FTRS_POWER10,
283 .cpu_setup = __setup_cpu_power10,
284 .cpu_restore = __restore_cpu_power10,
285 .platform = "power10",
287 { /* 3.1-compliant processor, i.e. Power11 "architected" mode */
288 .pvr_mask = 0xffffffff,
289 .pvr_value = 0x0f000007,
290 .cpu_name = "Power11 (architected)",
291 .cpu_features = CPU_FTRS_POWER11,
292 .cpu_user_features = COMMON_USER_POWER11,
293 .cpu_user_features2 = COMMON_USER2_POWER11,
294 .mmu_features = MMU_FTRS_POWER11,
297 .cpu_setup = __setup_cpu_power10,
298 .cpu_restore = __restore_cpu_power10,
299 .platform = "power11",
302 .pvr_mask = 0xffff0000,
303 .pvr_value = 0x003f0000,
304 .cpu_name = "POWER7 (raw)",
305 .cpu_features = CPU_FTRS_POWER7,
306 .cpu_user_features = COMMON_USER_POWER7,
307 .cpu_user_features2 = COMMON_USER2_POWER7,
308 .mmu_features = MMU_FTRS_POWER7,
312 .pmc_type = PPC_PMC_IBM,
313 .cpu_setup = __setup_cpu_power7,
314 .cpu_restore = __restore_cpu_power7,
315 .machine_check_early = __machine_check_early_realmode_p7,
316 .platform = "power7",
319 .pvr_mask = 0xffff0000,
320 .pvr_value = 0x004A0000,
321 .cpu_name = "POWER7+ (raw)",
322 .cpu_features = CPU_FTRS_POWER7,
323 .cpu_user_features = COMMON_USER_POWER7,
324 .cpu_user_features2 = COMMON_USER2_POWER7,
325 .mmu_features = MMU_FTRS_POWER7,
329 .pmc_type = PPC_PMC_IBM,
330 .cpu_setup = __setup_cpu_power7,
331 .cpu_restore = __restore_cpu_power7,
332 .machine_check_early = __machine_check_early_realmode_p7,
333 .platform = "power7+",
336 .pvr_mask = 0xffff0000,
337 .pvr_value = 0x004b0000,
338 .cpu_name = "POWER8E (raw)",
339 .cpu_features = CPU_FTRS_POWER8E,
340 .cpu_user_features = COMMON_USER_POWER8,
341 .cpu_user_features2 = COMMON_USER2_POWER8,
342 .mmu_features = MMU_FTRS_POWER8,
346 .pmc_type = PPC_PMC_IBM,
347 .cpu_setup = __setup_cpu_power8,
348 .cpu_restore = __restore_cpu_power8,
349 .machine_check_early = __machine_check_early_realmode_p8,
350 .platform = "power8",
353 .pvr_mask = 0xffff0000,
354 .pvr_value = 0x004c0000,
355 .cpu_name = "POWER8NVL (raw)",
356 .cpu_features = CPU_FTRS_POWER8,
357 .cpu_user_features = COMMON_USER_POWER8,
358 .cpu_user_features2 = COMMON_USER2_POWER8,
359 .mmu_features = MMU_FTRS_POWER8,
363 .pmc_type = PPC_PMC_IBM,
364 .cpu_setup = __setup_cpu_power8,
365 .cpu_restore = __restore_cpu_power8,
366 .machine_check_early = __machine_check_early_realmode_p8,
367 .platform = "power8",
370 .pvr_mask = 0xffff0000,
371 .pvr_value = 0x004d0000,
372 .cpu_name = "POWER8 (raw)",
373 .cpu_features = CPU_FTRS_POWER8,
374 .cpu_user_features = COMMON_USER_POWER8,
375 .cpu_user_features2 = COMMON_USER2_POWER8,
376 .mmu_features = MMU_FTRS_POWER8,
380 .pmc_type = PPC_PMC_IBM,
381 .cpu_setup = __setup_cpu_power8,
382 .cpu_restore = __restore_cpu_power8,
383 .machine_check_early = __machine_check_early_realmode_p8,
384 .platform = "power8",
387 .pvr_mask = 0xffffefff,
388 .pvr_value = 0x004e0200,
389 .cpu_name = "POWER9 (raw)",
390 .cpu_features = CPU_FTRS_POWER9_DD2_0,
391 .cpu_user_features = COMMON_USER_POWER9,
392 .cpu_user_features2 = COMMON_USER2_POWER9,
393 .mmu_features = MMU_FTRS_POWER9,
397 .pmc_type = PPC_PMC_IBM,
398 .cpu_setup = __setup_cpu_power9,
399 .cpu_restore = __restore_cpu_power9,
400 .machine_check_early = __machine_check_early_realmode_p9,
401 .platform = "power9",
403 { /* Power9 DD 2.1 */
404 .pvr_mask = 0xffffefff,
405 .pvr_value = 0x004e0201,
406 .cpu_name = "POWER9 (raw)",
407 .cpu_features = CPU_FTRS_POWER9_DD2_1,
408 .cpu_user_features = COMMON_USER_POWER9,
409 .cpu_user_features2 = COMMON_USER2_POWER9,
410 .mmu_features = MMU_FTRS_POWER9,
414 .pmc_type = PPC_PMC_IBM,
415 .cpu_setup = __setup_cpu_power9,
416 .cpu_restore = __restore_cpu_power9,
417 .machine_check_early = __machine_check_early_realmode_p9,
418 .platform = "power9",
421 .pvr_mask = 0xffffefff,
422 .pvr_value = 0x004e0202,
423 .cpu_name = "POWER9 (raw)",
424 .cpu_features = CPU_FTRS_POWER9_DD2_2,
425 .cpu_user_features = COMMON_USER_POWER9,
426 .cpu_user_features2 = COMMON_USER2_POWER9,
427 .mmu_features = MMU_FTRS_POWER9,
431 .pmc_type = PPC_PMC_IBM,
432 .cpu_setup = __setup_cpu_power9,
433 .cpu_restore = __restore_cpu_power9,
434 .machine_check_early = __machine_check_early_realmode_p9,
435 .platform = "power9",
437 { /* Power9 DD2.3 or later */
438 .pvr_mask = 0xffff0000,
439 .pvr_value = 0x004e0000,
440 .cpu_name = "POWER9 (raw)",
441 .cpu_features = CPU_FTRS_POWER9_DD2_3,
442 .cpu_user_features = COMMON_USER_POWER9,
443 .cpu_user_features2 = COMMON_USER2_POWER9,
444 .mmu_features = MMU_FTRS_POWER9,
448 .pmc_type = PPC_PMC_IBM,
449 .cpu_setup = __setup_cpu_power9,
450 .cpu_restore = __restore_cpu_power9,
451 .machine_check_early = __machine_check_early_realmode_p9,
452 .platform = "power9",
455 .pvr_mask = 0xffff0000,
456 .pvr_value = 0x00800000,
457 .cpu_name = "POWER10 (raw)",
458 .cpu_features = CPU_FTRS_POWER10,
459 .cpu_user_features = COMMON_USER_POWER10,
460 .cpu_user_features2 = COMMON_USER2_POWER10,
461 .mmu_features = MMU_FTRS_POWER10,
465 .pmc_type = PPC_PMC_IBM,
466 .cpu_setup = __setup_cpu_power10,
467 .cpu_restore = __restore_cpu_power10,
468 .machine_check_early = __machine_check_early_realmode_p10,
469 .platform = "power10",
472 .pvr_mask = 0xffff0000,
473 .pvr_value = 0x00820000,
474 .cpu_name = "Power11 (raw)",
475 .cpu_features = CPU_FTRS_POWER11,
476 .cpu_user_features = COMMON_USER_POWER11,
477 .cpu_user_features2 = COMMON_USER2_POWER11,
478 .mmu_features = MMU_FTRS_POWER11,
482 .pmc_type = PPC_PMC_IBM,
483 .cpu_setup = __setup_cpu_power10,
484 .cpu_restore = __restore_cpu_power10,
485 .machine_check_early = __machine_check_early_realmode_p10,
486 .platform = "power11",
488 { /* Cell Broadband Engine */
489 .pvr_mask = 0xffff0000,
490 .pvr_value = 0x00700000,
491 .cpu_name = "Cell Broadband Engine",
492 .cpu_features = CPU_FTRS_CELL,
493 .cpu_user_features = COMMON_USER_PPC64 | PPC_FEATURE_CELL |
494 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_SMT,
495 .mmu_features = MMU_FTRS_CELL,
499 .pmc_type = PPC_PMC_IBM,
500 .platform = "ppc-cell-be",
503 .pvr_mask = 0x7fff0000,
504 .pvr_value = 0x00900000,
506 .cpu_features = CPU_FTRS_PA6T,
507 .cpu_user_features = COMMON_USER_PA6T,
508 .mmu_features = MMU_FTRS_PA6T,
512 .pmc_type = PPC_PMC_PA6T,
513 .cpu_setup = __setup_cpu_pa6t,
514 .cpu_restore = __restore_cpu_pa6t,
517 { /* default match */
518 .pvr_mask = 0x00000000,
519 .pvr_value = 0x00000000,
520 .cpu_name = "POWER5 (compatible)",
521 .cpu_features = CPU_FTRS_COMPATIBLE,
522 .cpu_user_features = COMMON_USER_PPC64,
523 .mmu_features = MMU_FTRS_POWER,
527 .pmc_type = PPC_PMC_IBM,
528 .platform = "power5",