1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  *  Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org)
4  */
5 
6 #define COMMON_USER_BOOKE	(PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU | \
7 				 PPC_FEATURE_BOOKE)
8 
9 static struct cpu_spec cpu_specs[] __initdata = {
10 	{
11 		.pvr_mask		= 0xf0000fff,
12 		.pvr_value		= 0x40000850,
13 		.cpu_name		= "440GR Rev. A",
14 		.cpu_features		= CPU_FTRS_44X,
15 		.cpu_user_features	= COMMON_USER_BOOKE,
16 		.mmu_features		= MMU_FTR_TYPE_44x,
17 		.icache_bsize		= 32,
18 		.dcache_bsize		= 32,
19 		.machine_check		= machine_check_4xx,
20 		.platform		= "ppc440",
21 	},
22 	{ /* Use logical PVR for 440EP (logical pvr = pvr | 0x8) */
23 		.pvr_mask		= 0xf0000fff,
24 		.pvr_value		= 0x40000858,
25 		.cpu_name		= "440EP Rev. A",
26 		.cpu_features		= CPU_FTRS_44X,
27 		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
28 		.mmu_features		= MMU_FTR_TYPE_44x,
29 		.icache_bsize		= 32,
30 		.dcache_bsize		= 32,
31 		.cpu_setup		= __setup_cpu_440ep,
32 		.machine_check		= machine_check_4xx,
33 		.platform		= "ppc440",
34 	},
35 	{
36 		.pvr_mask		= 0xf0000fff,
37 		.pvr_value		= 0x400008d3,
38 		.cpu_name		= "440GR Rev. B",
39 		.cpu_features		= CPU_FTRS_44X,
40 		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
41 		.mmu_features		= MMU_FTR_TYPE_44x,
42 		.icache_bsize		= 32,
43 		.dcache_bsize		= 32,
44 		.machine_check		= machine_check_4xx,
45 		.platform		= "ppc440",
46 	},
47 	{ /* Matches both physical and logical PVR for 440EP (logical pvr = pvr | 0x8) */
48 		.pvr_mask		= 0xf0000ff7,
49 		.pvr_value		= 0x400008d4,
50 		.cpu_name		= "440EP Rev. C",
51 		.cpu_features		= CPU_FTRS_44X,
52 		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
53 		.mmu_features		= MMU_FTR_TYPE_44x,
54 		.icache_bsize		= 32,
55 		.dcache_bsize		= 32,
56 		.cpu_setup		= __setup_cpu_440ep,
57 		.machine_check		= machine_check_4xx,
58 		.platform		= "ppc440",
59 	},
60 	{ /* Use logical PVR for 440EP (logical pvr = pvr | 0x8) */
61 		.pvr_mask		= 0xf0000fff,
62 		.pvr_value		= 0x400008db,
63 		.cpu_name		= "440EP Rev. B",
64 		.cpu_features		= CPU_FTRS_44X,
65 		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
66 		.mmu_features		= MMU_FTR_TYPE_44x,
67 		.icache_bsize		= 32,
68 		.dcache_bsize		= 32,
69 		.cpu_setup		= __setup_cpu_440ep,
70 		.machine_check		= machine_check_4xx,
71 		.platform		= "ppc440",
72 	},
73 	{ /* 440GRX */
74 		.pvr_mask		= 0xf0000ffb,
75 		.pvr_value		= 0x200008D0,
76 		.cpu_name		= "440GRX",
77 		.cpu_features		= CPU_FTRS_44X,
78 		.cpu_user_features	= COMMON_USER_BOOKE,
79 		.mmu_features		= MMU_FTR_TYPE_44x,
80 		.icache_bsize		= 32,
81 		.dcache_bsize		= 32,
82 		.cpu_setup		= __setup_cpu_440grx,
83 		.machine_check		= machine_check_440A,
84 		.platform		= "ppc440",
85 	},
86 	{ /* Use logical PVR for 440EPx (logical pvr = pvr | 0x8) */
87 		.pvr_mask		= 0xf0000ffb,
88 		.pvr_value		= 0x200008D8,
89 		.cpu_name		= "440EPX",
90 		.cpu_features		= CPU_FTRS_44X,
91 		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
92 		.mmu_features		= MMU_FTR_TYPE_44x,
93 		.icache_bsize		= 32,
94 		.dcache_bsize		= 32,
95 		.cpu_setup		= __setup_cpu_440epx,
96 		.machine_check		= machine_check_440A,
97 		.platform		= "ppc440",
98 	},
99 	{	/* 440GP Rev. B */
100 		.pvr_mask		= 0xf0000fff,
101 		.pvr_value		= 0x40000440,
102 		.cpu_name		= "440GP Rev. B",
103 		.cpu_features		= CPU_FTRS_44X,
104 		.cpu_user_features	= COMMON_USER_BOOKE,
105 		.mmu_features		= MMU_FTR_TYPE_44x,
106 		.icache_bsize		= 32,
107 		.dcache_bsize		= 32,
108 		.machine_check		= machine_check_4xx,
109 		.platform		= "ppc440gp",
110 	},
111 	{	/* 440GP Rev. C */
112 		.pvr_mask		= 0xf0000fff,
113 		.pvr_value		= 0x40000481,
114 		.cpu_name		= "440GP Rev. C",
115 		.cpu_features		= CPU_FTRS_44X,
116 		.cpu_user_features	= COMMON_USER_BOOKE,
117 		.mmu_features		= MMU_FTR_TYPE_44x,
118 		.icache_bsize		= 32,
119 		.dcache_bsize		= 32,
120 		.machine_check		= machine_check_4xx,
121 		.platform		= "ppc440gp",
122 	},
123 	{ /* 440GX Rev. A */
124 		.pvr_mask		= 0xf0000fff,
125 		.pvr_value		= 0x50000850,
126 		.cpu_name		= "440GX Rev. A",
127 		.cpu_features		= CPU_FTRS_44X,
128 		.cpu_user_features	= COMMON_USER_BOOKE,
129 		.mmu_features		= MMU_FTR_TYPE_44x,
130 		.icache_bsize		= 32,
131 		.dcache_bsize		= 32,
132 		.cpu_setup		= __setup_cpu_440gx,
133 		.machine_check		= machine_check_440A,
134 		.platform		= "ppc440",
135 	},
136 	{ /* 440GX Rev. B */
137 		.pvr_mask		= 0xf0000fff,
138 		.pvr_value		= 0x50000851,
139 		.cpu_name		= "440GX Rev. B",
140 		.cpu_features		= CPU_FTRS_44X,
141 		.cpu_user_features	= COMMON_USER_BOOKE,
142 		.mmu_features		= MMU_FTR_TYPE_44x,
143 		.icache_bsize		= 32,
144 		.dcache_bsize		= 32,
145 		.cpu_setup		= __setup_cpu_440gx,
146 		.machine_check		= machine_check_440A,
147 		.platform		= "ppc440",
148 	},
149 	{ /* 440GX Rev. C */
150 		.pvr_mask		= 0xf0000fff,
151 		.pvr_value		= 0x50000892,
152 		.cpu_name		= "440GX Rev. C",
153 		.cpu_features		= CPU_FTRS_44X,
154 		.cpu_user_features	= COMMON_USER_BOOKE,
155 		.mmu_features		= MMU_FTR_TYPE_44x,
156 		.icache_bsize		= 32,
157 		.dcache_bsize		= 32,
158 		.cpu_setup		= __setup_cpu_440gx,
159 		.machine_check		= machine_check_440A,
160 		.platform		= "ppc440",
161 	},
162 	{ /* 440GX Rev. F */
163 		.pvr_mask		= 0xf0000fff,
164 		.pvr_value		= 0x50000894,
165 		.cpu_name		= "440GX Rev. F",
166 		.cpu_features		= CPU_FTRS_44X,
167 		.cpu_user_features	= COMMON_USER_BOOKE,
168 		.mmu_features		= MMU_FTR_TYPE_44x,
169 		.icache_bsize		= 32,
170 		.dcache_bsize		= 32,
171 		.cpu_setup		= __setup_cpu_440gx,
172 		.machine_check		= machine_check_440A,
173 		.platform		= "ppc440",
174 	},
175 	{ /* 440SP Rev. A */
176 		.pvr_mask		= 0xfff00fff,
177 		.pvr_value		= 0x53200891,
178 		.cpu_name		= "440SP Rev. A",
179 		.cpu_features		= CPU_FTRS_44X,
180 		.cpu_user_features	= COMMON_USER_BOOKE,
181 		.mmu_features		= MMU_FTR_TYPE_44x,
182 		.icache_bsize		= 32,
183 		.dcache_bsize		= 32,
184 		.machine_check		= machine_check_4xx,
185 		.platform		= "ppc440",
186 	},
187 	{ /* 440SPe Rev. A */
188 		.pvr_mask               = 0xfff00fff,
189 		.pvr_value              = 0x53400890,
190 		.cpu_name               = "440SPe Rev. A",
191 		.cpu_features		= CPU_FTRS_44X,
192 		.cpu_user_features      = COMMON_USER_BOOKE,
193 		.mmu_features		= MMU_FTR_TYPE_44x,
194 		.icache_bsize           = 32,
195 		.dcache_bsize           = 32,
196 		.cpu_setup		= __setup_cpu_440spe,
197 		.machine_check		= machine_check_440A,
198 		.platform               = "ppc440",
199 	},
200 	{ /* 440SPe Rev. B */
201 		.pvr_mask		= 0xfff00fff,
202 		.pvr_value		= 0x53400891,
203 		.cpu_name		= "440SPe Rev. B",
204 		.cpu_features		= CPU_FTRS_44X,
205 		.cpu_user_features	= COMMON_USER_BOOKE,
206 		.mmu_features		= MMU_FTR_TYPE_44x,
207 		.icache_bsize		= 32,
208 		.dcache_bsize		= 32,
209 		.cpu_setup		= __setup_cpu_440spe,
210 		.machine_check		= machine_check_440A,
211 		.platform		= "ppc440",
212 	},
213 	{ /* 460EX */
214 		.pvr_mask		= 0xffff0006,
215 		.pvr_value		= 0x13020002,
216 		.cpu_name		= "460EX",
217 		.cpu_features		= CPU_FTRS_440x6,
218 		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
219 		.mmu_features		= MMU_FTR_TYPE_44x,
220 		.icache_bsize		= 32,
221 		.dcache_bsize		= 32,
222 		.cpu_setup		= __setup_cpu_460ex,
223 		.machine_check		= machine_check_440A,
224 		.platform		= "ppc440",
225 	},
226 	{ /* 460EX Rev B */
227 		.pvr_mask		= 0xffff0007,
228 		.pvr_value		= 0x13020004,
229 		.cpu_name		= "460EX Rev. B",
230 		.cpu_features		= CPU_FTRS_440x6,
231 		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
232 		.mmu_features		= MMU_FTR_TYPE_44x,
233 		.icache_bsize		= 32,
234 		.dcache_bsize		= 32,
235 		.cpu_setup		= __setup_cpu_460ex,
236 		.machine_check		= machine_check_440A,
237 		.platform		= "ppc440",
238 	},
239 	{ /* 460GT */
240 		.pvr_mask		= 0xffff0006,
241 		.pvr_value		= 0x13020000,
242 		.cpu_name		= "460GT",
243 		.cpu_features		= CPU_FTRS_440x6,
244 		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
245 		.mmu_features		= MMU_FTR_TYPE_44x,
246 		.icache_bsize		= 32,
247 		.dcache_bsize		= 32,
248 		.cpu_setup		= __setup_cpu_460gt,
249 		.machine_check		= machine_check_440A,
250 		.platform		= "ppc440",
251 	},
252 	{ /* 460GT Rev B */
253 		.pvr_mask		= 0xffff0007,
254 		.pvr_value		= 0x13020005,
255 		.cpu_name		= "460GT Rev. B",
256 		.cpu_features		= CPU_FTRS_440x6,
257 		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
258 		.mmu_features		= MMU_FTR_TYPE_44x,
259 		.icache_bsize		= 32,
260 		.dcache_bsize		= 32,
261 		.cpu_setup		= __setup_cpu_460gt,
262 		.machine_check		= machine_check_440A,
263 		.platform		= "ppc440",
264 	},
265 	{ /* 460SX */
266 		.pvr_mask		= 0xffffff00,
267 		.pvr_value		= 0x13541800,
268 		.cpu_name		= "460SX",
269 		.cpu_features		= CPU_FTRS_44X,
270 		.cpu_user_features	= COMMON_USER_BOOKE,
271 		.mmu_features		= MMU_FTR_TYPE_44x,
272 		.icache_bsize		= 32,
273 		.dcache_bsize		= 32,
274 		.cpu_setup		= __setup_cpu_460sx,
275 		.machine_check		= machine_check_440A,
276 		.platform		= "ppc440",
277 	},
278 	{ /* 464 in APM821xx */
279 		.pvr_mask		= 0xfffffff0,
280 		.pvr_value		= 0x12C41C80,
281 		.cpu_name		= "APM821XX",
282 		.cpu_features		= CPU_FTRS_44X,
283 		.cpu_user_features	= COMMON_USER_BOOKE |
284 			PPC_FEATURE_HAS_FPU,
285 		.mmu_features		= MMU_FTR_TYPE_44x,
286 		.icache_bsize		= 32,
287 		.dcache_bsize		= 32,
288 		.cpu_setup		= __setup_cpu_apm821xx,
289 		.machine_check		= machine_check_440A,
290 		.platform		= "ppc440",
291 	},
292 	{	/* default match */
293 		.pvr_mask		= 0x00000000,
294 		.pvr_value		= 0x00000000,
295 		.cpu_name		= "(generic 44x PPC)",
296 		.cpu_features		= CPU_FTRS_44X,
297 		.cpu_user_features	= COMMON_USER_BOOKE,
298 		.mmu_features		= MMU_FTR_TYPE_44x,
299 		.icache_bsize		= 32,
300 		.dcache_bsize		= 32,
301 		.machine_check		= machine_check_4xx,
302 		.platform		= "ppc440",
303 	}
304 };
305