Loading...
Note: File does not exist in v3.15.
1/* SPDX-License-Identifier: GPL-2.0-or-later */
2/*
3 * Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org)
4 *
5 * Modifications for ppc64:
6 * Copyright (C) 2003 Dave Engebretsen <engebret@us.ibm.com>
7 */
8
9/* NOTE:
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
14 * and ppc64
15 */
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 | \
39 PPC_FEATURE2_DSCR | \
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 | \
49 PPC_FEATURE2_DARN | \
50 PPC_FEATURE2_SCV)
51#define COMMON_USER_POWER10 COMMON_USER_POWER9
52#define COMMON_USER2_POWER10 (PPC_FEATURE2_ARCH_3_1 | \
53 PPC_FEATURE2_MMA | \
54 PPC_FEATURE2_ARCH_3_00 | \
55 PPC_FEATURE2_HAS_IEEE128 | \
56 PPC_FEATURE2_DARN | \
57 PPC_FEATURE2_SCV | \
58 PPC_FEATURE2_ARCH_2_07 | \
59 PPC_FEATURE2_DSCR | \
60 PPC_FEATURE2_ISEL | PPC_FEATURE2_TAR | \
61 PPC_FEATURE2_VEC_CRYPTO)
62
63static struct cpu_spec cpu_specs[] __initdata = {
64 { /* PPC970 */
65 .pvr_mask = 0xffff0000,
66 .pvr_value = 0x00390000,
67 .cpu_name = "PPC970",
68 .cpu_features = CPU_FTRS_PPC970,
69 .cpu_user_features = COMMON_USER_POWER4 | PPC_FEATURE_HAS_ALTIVEC_COMP,
70 .mmu_features = MMU_FTRS_PPC970,
71 .icache_bsize = 128,
72 .dcache_bsize = 128,
73 .num_pmcs = 8,
74 .pmc_type = PPC_PMC_IBM,
75 .cpu_setup = __setup_cpu_ppc970,
76 .cpu_restore = __restore_cpu_ppc970,
77 .platform = "ppc970",
78 },
79 { /* PPC970FX */
80 .pvr_mask = 0xffff0000,
81 .pvr_value = 0x003c0000,
82 .cpu_name = "PPC970FX",
83 .cpu_features = CPU_FTRS_PPC970,
84 .cpu_user_features = COMMON_USER_POWER4 | PPC_FEATURE_HAS_ALTIVEC_COMP,
85 .mmu_features = MMU_FTRS_PPC970,
86 .icache_bsize = 128,
87 .dcache_bsize = 128,
88 .num_pmcs = 8,
89 .pmc_type = PPC_PMC_IBM,
90 .cpu_setup = __setup_cpu_ppc970,
91 .cpu_restore = __restore_cpu_ppc970,
92 .platform = "ppc970",
93 },
94 { /* PPC970MP DD1.0 - no DEEPNAP, use regular 970 init */
95 .pvr_mask = 0xffffffff,
96 .pvr_value = 0x00440100,
97 .cpu_name = "PPC970MP",
98 .cpu_features = CPU_FTRS_PPC970,
99 .cpu_user_features = COMMON_USER_POWER4 | PPC_FEATURE_HAS_ALTIVEC_COMP,
100 .mmu_features = MMU_FTRS_PPC970,
101 .icache_bsize = 128,
102 .dcache_bsize = 128,
103 .num_pmcs = 8,
104 .pmc_type = PPC_PMC_IBM,
105 .cpu_setup = __setup_cpu_ppc970,
106 .cpu_restore = __restore_cpu_ppc970,
107 .platform = "ppc970",
108 },
109 { /* PPC970MP */
110 .pvr_mask = 0xffff0000,
111 .pvr_value = 0x00440000,
112 .cpu_name = "PPC970MP",
113 .cpu_features = CPU_FTRS_PPC970,
114 .cpu_user_features = COMMON_USER_POWER4 | PPC_FEATURE_HAS_ALTIVEC_COMP,
115 .mmu_features = MMU_FTRS_PPC970,
116 .icache_bsize = 128,
117 .dcache_bsize = 128,
118 .num_pmcs = 8,
119 .pmc_type = PPC_PMC_IBM,
120 .cpu_setup = __setup_cpu_ppc970MP,
121 .cpu_restore = __restore_cpu_ppc970,
122 .platform = "ppc970",
123 },
124 { /* PPC970GX */
125 .pvr_mask = 0xffff0000,
126 .pvr_value = 0x00450000,
127 .cpu_name = "PPC970GX",
128 .cpu_features = CPU_FTRS_PPC970,
129 .cpu_user_features = COMMON_USER_POWER4 | PPC_FEATURE_HAS_ALTIVEC_COMP,
130 .mmu_features = MMU_FTRS_PPC970,
131 .icache_bsize = 128,
132 .dcache_bsize = 128,
133 .num_pmcs = 8,
134 .pmc_type = PPC_PMC_IBM,
135 .cpu_setup = __setup_cpu_ppc970,
136 .platform = "ppc970",
137 },
138 { /* Power5 GR */
139 .pvr_mask = 0xffff0000,
140 .pvr_value = 0x003a0000,
141 .cpu_name = "POWER5 (gr)",
142 .cpu_features = CPU_FTRS_POWER5,
143 .cpu_user_features = COMMON_USER_POWER5,
144 .mmu_features = MMU_FTRS_POWER5,
145 .icache_bsize = 128,
146 .dcache_bsize = 128,
147 .num_pmcs = 6,
148 .pmc_type = PPC_PMC_IBM,
149 .platform = "power5",
150 },
151 { /* Power5++ */
152 .pvr_mask = 0xffffff00,
153 .pvr_value = 0x003b0300,
154 .cpu_name = "POWER5+ (gs)",
155 .cpu_features = CPU_FTRS_POWER5,
156 .cpu_user_features = COMMON_USER_POWER5_PLUS,
157 .mmu_features = MMU_FTRS_POWER5,
158 .icache_bsize = 128,
159 .dcache_bsize = 128,
160 .num_pmcs = 6,
161 .platform = "power5+",
162 },
163 { /* Power5 GS */
164 .pvr_mask = 0xffff0000,
165 .pvr_value = 0x003b0000,
166 .cpu_name = "POWER5+ (gs)",
167 .cpu_features = CPU_FTRS_POWER5,
168 .cpu_user_features = COMMON_USER_POWER5_PLUS,
169 .mmu_features = MMU_FTRS_POWER5,
170 .icache_bsize = 128,
171 .dcache_bsize = 128,
172 .num_pmcs = 6,
173 .pmc_type = PPC_PMC_IBM,
174 .platform = "power5+",
175 },
176 { /* POWER6 in P5+ mode; 2.04-compliant processor */
177 .pvr_mask = 0xffffffff,
178 .pvr_value = 0x0f000001,
179 .cpu_name = "POWER5+",
180 .cpu_features = CPU_FTRS_POWER5,
181 .cpu_user_features = COMMON_USER_POWER5_PLUS,
182 .mmu_features = MMU_FTRS_POWER5,
183 .icache_bsize = 128,
184 .dcache_bsize = 128,
185 .platform = "power5+",
186 },
187 { /* Power6 */
188 .pvr_mask = 0xffff0000,
189 .pvr_value = 0x003e0000,
190 .cpu_name = "POWER6 (raw)",
191 .cpu_features = CPU_FTRS_POWER6,
192 .cpu_user_features = COMMON_USER_POWER6 | PPC_FEATURE_POWER6_EXT,
193 .mmu_features = MMU_FTRS_POWER6,
194 .icache_bsize = 128,
195 .dcache_bsize = 128,
196 .num_pmcs = 6,
197 .pmc_type = PPC_PMC_IBM,
198 .platform = "power6x",
199 },
200 { /* 2.05-compliant processor, i.e. Power6 "architected" mode */
201 .pvr_mask = 0xffffffff,
202 .pvr_value = 0x0f000002,
203 .cpu_name = "POWER6 (architected)",
204 .cpu_features = CPU_FTRS_POWER6,
205 .cpu_user_features = COMMON_USER_POWER6,
206 .mmu_features = MMU_FTRS_POWER6,
207 .icache_bsize = 128,
208 .dcache_bsize = 128,
209 .platform = "power6",
210 },
211 { /* 2.06-compliant processor, i.e. Power7 "architected" mode */
212 .pvr_mask = 0xffffffff,
213 .pvr_value = 0x0f000003,
214 .cpu_name = "POWER7 (architected)",
215 .cpu_features = CPU_FTRS_POWER7,
216 .cpu_user_features = COMMON_USER_POWER7,
217 .cpu_user_features2 = COMMON_USER2_POWER7,
218 .mmu_features = MMU_FTRS_POWER7,
219 .icache_bsize = 128,
220 .dcache_bsize = 128,
221 .cpu_setup = __setup_cpu_power7,
222 .cpu_restore = __restore_cpu_power7,
223 .machine_check_early = __machine_check_early_realmode_p7,
224 .platform = "power7",
225 },
226 { /* 2.07-compliant processor, i.e. Power8 "architected" mode */
227 .pvr_mask = 0xffffffff,
228 .pvr_value = 0x0f000004,
229 .cpu_name = "POWER8 (architected)",
230 .cpu_features = CPU_FTRS_POWER8,
231 .cpu_user_features = COMMON_USER_POWER8,
232 .cpu_user_features2 = COMMON_USER2_POWER8,
233 .mmu_features = MMU_FTRS_POWER8,
234 .icache_bsize = 128,
235 .dcache_bsize = 128,
236 .cpu_setup = __setup_cpu_power8,
237 .cpu_restore = __restore_cpu_power8,
238 .machine_check_early = __machine_check_early_realmode_p8,
239 .platform = "power8",
240 },
241 { /* 2.07-compliant processor, HeXin C2000 processor */
242 .pvr_mask = 0xffff0000,
243 .pvr_value = 0x00660000,
244 .cpu_name = "HX-C2000",
245 .cpu_features = CPU_FTRS_POWER8,
246 .cpu_user_features = COMMON_USER_POWER8,
247 .cpu_user_features2 = COMMON_USER2_POWER8,
248 .mmu_features = MMU_FTRS_POWER8,
249 .icache_bsize = 128,
250 .dcache_bsize = 128,
251 .cpu_setup = __setup_cpu_power8,
252 .cpu_restore = __restore_cpu_power8,
253 .machine_check_early = __machine_check_early_realmode_p8,
254 .platform = "power8",
255 },
256 { /* 3.00-compliant processor, i.e. Power9 "architected" mode */
257 .pvr_mask = 0xffffffff,
258 .pvr_value = 0x0f000005,
259 .cpu_name = "POWER9 (architected)",
260 .cpu_features = CPU_FTRS_POWER9,
261 .cpu_user_features = COMMON_USER_POWER9,
262 .cpu_user_features2 = COMMON_USER2_POWER9,
263 .mmu_features = MMU_FTRS_POWER9,
264 .icache_bsize = 128,
265 .dcache_bsize = 128,
266 .cpu_setup = __setup_cpu_power9,
267 .cpu_restore = __restore_cpu_power9,
268 .platform = "power9",
269 },
270 { /* 3.1-compliant processor, i.e. Power10 "architected" mode */
271 .pvr_mask = 0xffffffff,
272 .pvr_value = 0x0f000006,
273 .cpu_name = "POWER10 (architected)",
274 .cpu_features = CPU_FTRS_POWER10,
275 .cpu_user_features = COMMON_USER_POWER10,
276 .cpu_user_features2 = COMMON_USER2_POWER10,
277 .mmu_features = MMU_FTRS_POWER10,
278 .icache_bsize = 128,
279 .dcache_bsize = 128,
280 .cpu_setup = __setup_cpu_power10,
281 .cpu_restore = __restore_cpu_power10,
282 .platform = "power10",
283 },
284 { /* Power7 */
285 .pvr_mask = 0xffff0000,
286 .pvr_value = 0x003f0000,
287 .cpu_name = "POWER7 (raw)",
288 .cpu_features = CPU_FTRS_POWER7,
289 .cpu_user_features = COMMON_USER_POWER7,
290 .cpu_user_features2 = COMMON_USER2_POWER7,
291 .mmu_features = MMU_FTRS_POWER7,
292 .icache_bsize = 128,
293 .dcache_bsize = 128,
294 .num_pmcs = 6,
295 .pmc_type = PPC_PMC_IBM,
296 .cpu_setup = __setup_cpu_power7,
297 .cpu_restore = __restore_cpu_power7,
298 .machine_check_early = __machine_check_early_realmode_p7,
299 .platform = "power7",
300 },
301 { /* Power7+ */
302 .pvr_mask = 0xffff0000,
303 .pvr_value = 0x004A0000,
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,
309 .icache_bsize = 128,
310 .dcache_bsize = 128,
311 .num_pmcs = 6,
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+",
317 },
318 { /* Power8E */
319 .pvr_mask = 0xffff0000,
320 .pvr_value = 0x004b0000,
321 .cpu_name = "POWER8E (raw)",
322 .cpu_features = CPU_FTRS_POWER8E,
323 .cpu_user_features = COMMON_USER_POWER8,
324 .cpu_user_features2 = COMMON_USER2_POWER8,
325 .mmu_features = MMU_FTRS_POWER8,
326 .icache_bsize = 128,
327 .dcache_bsize = 128,
328 .num_pmcs = 6,
329 .pmc_type = PPC_PMC_IBM,
330 .cpu_setup = __setup_cpu_power8,
331 .cpu_restore = __restore_cpu_power8,
332 .machine_check_early = __machine_check_early_realmode_p8,
333 .platform = "power8",
334 },
335 { /* Power8NVL */
336 .pvr_mask = 0xffff0000,
337 .pvr_value = 0x004c0000,
338 .cpu_name = "POWER8NVL (raw)",
339 .cpu_features = CPU_FTRS_POWER8,
340 .cpu_user_features = COMMON_USER_POWER8,
341 .cpu_user_features2 = COMMON_USER2_POWER8,
342 .mmu_features = MMU_FTRS_POWER8,
343 .icache_bsize = 128,
344 .dcache_bsize = 128,
345 .num_pmcs = 6,
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",
351 },
352 { /* Power8 */
353 .pvr_mask = 0xffff0000,
354 .pvr_value = 0x004d0000,
355 .cpu_name = "POWER8 (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,
360 .icache_bsize = 128,
361 .dcache_bsize = 128,
362 .num_pmcs = 6,
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",
368 },
369 { /* Power9 DD2.0 */
370 .pvr_mask = 0xffffefff,
371 .pvr_value = 0x004e0200,
372 .cpu_name = "POWER9 (raw)",
373 .cpu_features = CPU_FTRS_POWER9_DD2_0,
374 .cpu_user_features = COMMON_USER_POWER9,
375 .cpu_user_features2 = COMMON_USER2_POWER9,
376 .mmu_features = MMU_FTRS_POWER9,
377 .icache_bsize = 128,
378 .dcache_bsize = 128,
379 .num_pmcs = 6,
380 .pmc_type = PPC_PMC_IBM,
381 .cpu_setup = __setup_cpu_power9,
382 .cpu_restore = __restore_cpu_power9,
383 .machine_check_early = __machine_check_early_realmode_p9,
384 .platform = "power9",
385 },
386 { /* Power9 DD 2.1 */
387 .pvr_mask = 0xffffefff,
388 .pvr_value = 0x004e0201,
389 .cpu_name = "POWER9 (raw)",
390 .cpu_features = CPU_FTRS_POWER9_DD2_1,
391 .cpu_user_features = COMMON_USER_POWER9,
392 .cpu_user_features2 = COMMON_USER2_POWER9,
393 .mmu_features = MMU_FTRS_POWER9,
394 .icache_bsize = 128,
395 .dcache_bsize = 128,
396 .num_pmcs = 6,
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",
402 },
403 { /* Power9 DD2.2 */
404 .pvr_mask = 0xffffefff,
405 .pvr_value = 0x004e0202,
406 .cpu_name = "POWER9 (raw)",
407 .cpu_features = CPU_FTRS_POWER9_DD2_2,
408 .cpu_user_features = COMMON_USER_POWER9,
409 .cpu_user_features2 = COMMON_USER2_POWER9,
410 .mmu_features = MMU_FTRS_POWER9,
411 .icache_bsize = 128,
412 .dcache_bsize = 128,
413 .num_pmcs = 6,
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",
419 },
420 { /* Power9 DD2.3 or later */
421 .pvr_mask = 0xffff0000,
422 .pvr_value = 0x004e0000,
423 .cpu_name = "POWER9 (raw)",
424 .cpu_features = CPU_FTRS_POWER9_DD2_3,
425 .cpu_user_features = COMMON_USER_POWER9,
426 .cpu_user_features2 = COMMON_USER2_POWER9,
427 .mmu_features = MMU_FTRS_POWER9,
428 .icache_bsize = 128,
429 .dcache_bsize = 128,
430 .num_pmcs = 6,
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",
436 },
437 { /* Power10 */
438 .pvr_mask = 0xffff0000,
439 .pvr_value = 0x00800000,
440 .cpu_name = "POWER10 (raw)",
441 .cpu_features = CPU_FTRS_POWER10,
442 .cpu_user_features = COMMON_USER_POWER10,
443 .cpu_user_features2 = COMMON_USER2_POWER10,
444 .mmu_features = MMU_FTRS_POWER10,
445 .icache_bsize = 128,
446 .dcache_bsize = 128,
447 .num_pmcs = 6,
448 .pmc_type = PPC_PMC_IBM,
449 .cpu_setup = __setup_cpu_power10,
450 .cpu_restore = __restore_cpu_power10,
451 .machine_check_early = __machine_check_early_realmode_p10,
452 .platform = "power10",
453 },
454 { /* Cell Broadband Engine */
455 .pvr_mask = 0xffff0000,
456 .pvr_value = 0x00700000,
457 .cpu_name = "Cell Broadband Engine",
458 .cpu_features = CPU_FTRS_CELL,
459 .cpu_user_features = COMMON_USER_PPC64 | PPC_FEATURE_CELL |
460 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_SMT,
461 .mmu_features = MMU_FTRS_CELL,
462 .icache_bsize = 128,
463 .dcache_bsize = 128,
464 .num_pmcs = 4,
465 .pmc_type = PPC_PMC_IBM,
466 .platform = "ppc-cell-be",
467 },
468 { /* PA Semi PA6T */
469 .pvr_mask = 0x7fff0000,
470 .pvr_value = 0x00900000,
471 .cpu_name = "PA6T",
472 .cpu_features = CPU_FTRS_PA6T,
473 .cpu_user_features = COMMON_USER_PA6T,
474 .mmu_features = MMU_FTRS_PA6T,
475 .icache_bsize = 64,
476 .dcache_bsize = 64,
477 .num_pmcs = 6,
478 .pmc_type = PPC_PMC_PA6T,
479 .cpu_setup = __setup_cpu_pa6t,
480 .cpu_restore = __restore_cpu_pa6t,
481 .platform = "pa6t",
482 },
483 { /* default match */
484 .pvr_mask = 0x00000000,
485 .pvr_value = 0x00000000,
486 .cpu_name = "POWER5 (compatible)",
487 .cpu_features = CPU_FTRS_COMPATIBLE,
488 .cpu_user_features = COMMON_USER_PPC64,
489 .mmu_features = MMU_FTRS_POWER,
490 .icache_bsize = 128,
491 .dcache_bsize = 128,
492 .num_pmcs = 6,
493 .pmc_type = PPC_PMC_IBM,
494 .platform = "power5",
495 }
496};