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