blob: 1fb80baebc8763379f8ee286211bfc8f5125de8e [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
Linus Torvalds1da177e2005-04-16 15:20:36 -07002 * Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org)
3 *
Stephen Rothwell49209602005-10-12 15:55:09 +10004 * Modifications for ppc64:
5 * Copyright (C) 2003 Dave Engebretsen <engebret@us.ibm.com>
6 *
Linus Torvalds1da177e2005-04-16 15:20:36 -07007 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version
10 * 2 of the License, or (at your option) any later version.
11 */
12
13#include <linux/config.h>
14#include <linux/string.h>
15#include <linux/sched.h>
16#include <linux/threads.h>
17#include <linux/init.h>
Kumar Gala400d2212005-09-27 15:13:12 -050018#include <linux/module.h>
19
20#include <asm/oprofile_impl.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070021#include <asm/cputable.h>
22
Kumar Gala400d2212005-09-27 15:13:12 -050023struct cpu_spec* cur_cpu_spec = NULL;
Stephen Rothwell49209602005-10-12 15:55:09 +100024#ifdef CONFIG_PPC64
25EXPORT_SYMBOL(cur_cpu_spec);
26#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -070027
Stephen Rothwell49209602005-10-12 15:55:09 +100028/* NOTE:
29 * Unlike ppc32, ppc64 will only call this once for the boot CPU, it's
30 * the responsibility of the appropriate CPU save/restore functions to
31 * eventually copy these settings over. Those save/restore aren't yet
32 * part of the cputable though. That has to be fixed for both ppc32
33 * and ppc64
34 */
35#ifdef CONFIG_PPC64
36extern void __setup_cpu_power3(unsigned long offset, struct cpu_spec* spec);
37extern void __setup_cpu_power4(unsigned long offset, struct cpu_spec* spec);
38extern void __setup_cpu_be(unsigned long offset, struct cpu_spec* spec);
39#else
Kumar Gala400d2212005-09-27 15:13:12 -050040extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec);
41extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec);
42extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec);
43extern void __setup_cpu_750cx(unsigned long offset, struct cpu_spec* spec);
44extern void __setup_cpu_750fx(unsigned long offset, struct cpu_spec* spec);
45extern void __setup_cpu_7400(unsigned long offset, struct cpu_spec* spec);
46extern void __setup_cpu_7410(unsigned long offset, struct cpu_spec* spec);
47extern void __setup_cpu_745x(unsigned long offset, struct cpu_spec* spec);
Stephen Rothwell49209602005-10-12 15:55:09 +100048#endif /* CONFIG_PPC32 */
Kumar Gala400d2212005-09-27 15:13:12 -050049extern void __setup_cpu_ppc970(unsigned long offset, struct cpu_spec* spec);
Linus Torvalds1da177e2005-04-16 15:20:36 -070050
Linus Torvalds1da177e2005-04-16 15:20:36 -070051/* This table only contains "desktop" CPUs, it need to be filled with embedded
52 * ones as well...
53 */
Stephen Rothwell49209602005-10-12 15:55:09 +100054#define COMMON_USER (PPC_FEATURE_32 | PPC_FEATURE_HAS_FPU | \
55 PPC_FEATURE_HAS_MMU)
56#define COMMON_USER_PPC64 (COMMON_USER | PPC_FEATURE_64)
57
Linus Torvalds1da177e2005-04-16 15:20:36 -070058
Linus Torvalds1da177e2005-04-16 15:20:36 -070059/* We only set the spe features if the kernel was compiled with
60 * spe support
61 */
62#ifdef CONFIG_SPE
Stephen Rothwell49209602005-10-12 15:55:09 +100063#define PPC_FEATURE_SPE_COMP PPC_FEATURE_HAS_SPE
Linus Torvalds1da177e2005-04-16 15:20:36 -070064#else
Stephen Rothwell49209602005-10-12 15:55:09 +100065#define PPC_FEATURE_SPE_COMP 0
Linus Torvalds1da177e2005-04-16 15:20:36 -070066#endif
67
Linus Torvalds1da177e2005-04-16 15:20:36 -070068struct cpu_spec cpu_specs[] = {
Stephen Rothwell49209602005-10-12 15:55:09 +100069#ifdef CONFIG_PPC64
70 { /* Power3 */
71 .pvr_mask = 0xffff0000,
72 .pvr_value = 0x00400000,
73 .cpu_name = "POWER3 (630)",
74 .cpu_features = CPU_FTRS_POWER3,
75 .cpu_user_features = COMMON_USER_PPC64,
76 .icache_bsize = 128,
77 .dcache_bsize = 128,
78 .num_pmcs = 8,
79 .cpu_setup = __setup_cpu_power3,
80#ifdef CONFIG_OPROFILE
81 .oprofile_cpu_type = "ppc64/power3",
82 .oprofile_model = &op_model_rs64,
83#endif
84 },
85 { /* Power3+ */
86 .pvr_mask = 0xffff0000,
87 .pvr_value = 0x00410000,
88 .cpu_name = "POWER3 (630+)",
89 .cpu_features = CPU_FTRS_POWER3,
90 .cpu_user_features = COMMON_USER_PPC64,
91 .icache_bsize = 128,
92 .dcache_bsize = 128,
93 .num_pmcs = 8,
94 .cpu_setup = __setup_cpu_power3,
95#ifdef CONFIG_OPROFILE
96 .oprofile_cpu_type = "ppc64/power3",
97 .oprofile_model = &op_model_rs64,
98#endif
99 },
100 { /* Northstar */
101 .pvr_mask = 0xffff0000,
102 .pvr_value = 0x00330000,
103 .cpu_name = "RS64-II (northstar)",
104 .cpu_features = CPU_FTRS_RS64,
105 .cpu_user_features = COMMON_USER_PPC64,
106 .icache_bsize = 128,
107 .dcache_bsize = 128,
108 .num_pmcs = 8,
109 .cpu_setup = __setup_cpu_power3,
110#ifdef CONFIG_OPROFILE
111 .oprofile_cpu_type = "ppc64/rs64",
112 .oprofile_model = &op_model_rs64,
113#endif
114 },
115 { /* Pulsar */
116 .pvr_mask = 0xffff0000,
117 .pvr_value = 0x00340000,
118 .cpu_name = "RS64-III (pulsar)",
119 .cpu_features = CPU_FTRS_RS64,
120 .cpu_user_features = COMMON_USER_PPC64,
121 .icache_bsize = 128,
122 .dcache_bsize = 128,
123 .num_pmcs = 8,
124 .cpu_setup = __setup_cpu_power3,
125#ifdef CONFIG_OPROFILE
126 .oprofile_cpu_type = "ppc64/rs64",
127 .oprofile_model = &op_model_rs64,
128#endif
129 },
130 { /* I-star */
131 .pvr_mask = 0xffff0000,
132 .pvr_value = 0x00360000,
133 .cpu_name = "RS64-III (icestar)",
134 .cpu_features = CPU_FTRS_RS64,
135 .cpu_user_features = COMMON_USER_PPC64,
136 .icache_bsize = 128,
137 .dcache_bsize = 128,
138 .num_pmcs = 8,
139 .cpu_setup = __setup_cpu_power3,
140#ifdef CONFIG_OPROFILE
141 .oprofile_cpu_type = "ppc64/rs64",
142 .oprofile_model = &op_model_rs64,
143#endif
144 },
145 { /* S-star */
146 .pvr_mask = 0xffff0000,
147 .pvr_value = 0x00370000,
148 .cpu_name = "RS64-IV (sstar)",
149 .cpu_features = CPU_FTRS_RS64,
150 .cpu_user_features = COMMON_USER_PPC64,
151 .icache_bsize = 128,
152 .dcache_bsize = 128,
153 .num_pmcs = 8,
154 .cpu_setup = __setup_cpu_power3,
155#ifdef CONFIG_OPROFILE
156 .oprofile_cpu_type = "ppc64/rs64",
157 .oprofile_model = &op_model_rs64,
158#endif
159 },
160 { /* Power4 */
161 .pvr_mask = 0xffff0000,
162 .pvr_value = 0x00350000,
163 .cpu_name = "POWER4 (gp)",
164 .cpu_features = CPU_FTRS_POWER4,
165 .cpu_user_features = COMMON_USER_PPC64,
166 .icache_bsize = 128,
167 .dcache_bsize = 128,
168 .num_pmcs = 8,
169 .cpu_setup = __setup_cpu_power4,
170#ifdef CONFIG_OPROFILE
171 .oprofile_cpu_type = "ppc64/power4",
172 .oprofile_model = &op_model_rs64,
173#endif
174 },
175 { /* Power4+ */
176 .pvr_mask = 0xffff0000,
177 .pvr_value = 0x00380000,
178 .cpu_name = "POWER4+ (gq)",
179 .cpu_features = CPU_FTRS_POWER4,
180 .cpu_user_features = COMMON_USER_PPC64,
181 .icache_bsize = 128,
182 .dcache_bsize = 128,
183 .num_pmcs = 8,
184 .cpu_setup = __setup_cpu_power4,
185#ifdef CONFIG_OPROFILE
186 .oprofile_cpu_type = "ppc64/power4",
187 .oprofile_model = &op_model_power4,
188#endif
189 },
190 { /* PPC970 */
191 .pvr_mask = 0xffff0000,
192 .pvr_value = 0x00390000,
193 .cpu_name = "PPC970",
194 .cpu_features = CPU_FTRS_PPC970,
195 .cpu_user_features = COMMON_USER_PPC64 |
196 PPC_FEATURE_HAS_ALTIVEC_COMP,
197 .icache_bsize = 128,
198 .dcache_bsize = 128,
199 .num_pmcs = 8,
200 .cpu_setup = __setup_cpu_ppc970,
201#ifdef CONFIG_OPROFILE
202 .oprofile_cpu_type = "ppc64/970",
203 .oprofile_model = &op_model_power4,
204#endif
205 },
206#endif /* CONFIG_PPC64 */
207#if defined(CONFIG_PPC64) || defined(CONFIG_POWER4)
208 { /* PPC970FX */
209 .pvr_mask = 0xffff0000,
210 .pvr_value = 0x003c0000,
211 .cpu_name = "PPC970FX",
212#ifdef CONFIG_PPC32
213 .cpu_features = CPU_FTRS_970_32,
214#else
215 .cpu_features = CPU_FTRS_PPC970,
216#endif
217 .cpu_user_features = COMMON_USER_PPC64 |
218 PPC_FEATURE_HAS_ALTIVEC_COMP,
219 .icache_bsize = 128,
220 .dcache_bsize = 128,
221 .num_pmcs = 8,
222 .cpu_setup = __setup_cpu_ppc970,
223#ifdef CONFIG_OPROFILE
224 .oprofile_cpu_type = "ppc64/970",
225 .oprofile_model = &op_model_power4,
226#endif
227 },
228#endif /* defined(CONFIG_PPC64) || defined(CONFIG_POWER4) */
229#ifdef CONFIG_PPC64
230 { /* PPC970MP */
231 .pvr_mask = 0xffff0000,
232 .pvr_value = 0x00440000,
233 .cpu_name = "PPC970MP",
234 .cpu_features = CPU_FTRS_PPC970,
235 .cpu_user_features = COMMON_USER_PPC64 |
236 PPC_FEATURE_HAS_ALTIVEC_COMP,
237 .icache_bsize = 128,
238 .dcache_bsize = 128,
239 .cpu_setup = __setup_cpu_ppc970,
240#ifdef CONFIG_OPROFILE
241 .oprofile_cpu_type = "ppc64/970",
242 .oprofile_model = &op_model_power4,
243#endif
244 },
245 { /* Power5 */
246 .pvr_mask = 0xffff0000,
247 .pvr_value = 0x003a0000,
248 .cpu_name = "POWER5 (gr)",
249 .cpu_features = CPU_FTRS_POWER5,
250 .cpu_user_features = COMMON_USER_PPC64,
251 .icache_bsize = 128,
252 .dcache_bsize = 128,
253 .num_pmcs = 6,
254 .cpu_setup = __setup_cpu_power4,
255#ifdef CONFIG_OPROFILE
256 .oprofile_cpu_type = "ppc64/power5",
257 .oprofile_model = &op_model_power4,
258#endif
259 },
260 { /* Power5 */
261 .pvr_mask = 0xffff0000,
262 .pvr_value = 0x003b0000,
263 .cpu_name = "POWER5 (gs)",
264 .cpu_features = CPU_FTRS_POWER5,
265 .cpu_user_features = COMMON_USER_PPC64,
266 .icache_bsize = 128,
267 .dcache_bsize = 128,
268 .num_pmcs = 6,
269 .cpu_setup = __setup_cpu_power4,
270#ifdef CONFIG_OPROFILE
271 .oprofile_cpu_type = "ppc64/power5",
272 .oprofile_model = &op_model_power4,
273#endif
274 },
275 { /* BE DD1.x */
276 .pvr_mask = 0xffff0000,
277 .pvr_value = 0x00700000,
278 .cpu_name = "Cell Broadband Engine",
279 .cpu_features = CPU_FTRS_CELL,
280 .cpu_user_features = COMMON_USER_PPC64 |
281 PPC_FEATURE_HAS_ALTIVEC_COMP,
282 .icache_bsize = 128,
283 .dcache_bsize = 128,
284 .cpu_setup = __setup_cpu_be,
285 },
286 { /* default match */
287 .pvr_mask = 0x00000000,
288 .pvr_value = 0x00000000,
289 .cpu_name = "POWER4 (compatible)",
290 .cpu_features = CPU_FTRS_COMPATIBLE,
291 .cpu_user_features = COMMON_USER_PPC64,
292 .icache_bsize = 128,
293 .dcache_bsize = 128,
294 .num_pmcs = 6,
295 .cpu_setup = __setup_cpu_power4,
296 }
297#endif /* CONFIG_PPC64 */
298#ifdef CONFIG_PPC32
Linus Torvalds1da177e2005-04-16 15:20:36 -0700299#if CLASSIC_PPC
Stephen Rothwell49209602005-10-12 15:55:09 +1000300 { /* 601 */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700301 .pvr_mask = 0xffff0000,
302 .pvr_value = 0x00010000,
303 .cpu_name = "601",
Kumar Gala10b35d92005-09-23 14:08:58 -0500304 .cpu_features = CPU_FTRS_PPC601,
Stephen Rothwell49209602005-10-12 15:55:09 +1000305 .cpu_user_features = COMMON_USER | PPC_FEATURE_601_INSTR |
Paul Mackerras98599012005-10-22 16:51:34 +1000306 PPC_FEATURE_UNIFIED_CACHE | PPC_FEATURE_NO_TB,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700307 .icache_bsize = 32,
308 .dcache_bsize = 32,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700309 },
310 { /* 603 */
311 .pvr_mask = 0xffff0000,
312 .pvr_value = 0x00030000,
313 .cpu_name = "603",
Kumar Gala10b35d92005-09-23 14:08:58 -0500314 .cpu_features = CPU_FTRS_603,
Stephen Rothwell49209602005-10-12 15:55:09 +1000315 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700316 .icache_bsize = 32,
317 .dcache_bsize = 32,
318 .cpu_setup = __setup_cpu_603
319 },
320 { /* 603e */
321 .pvr_mask = 0xffff0000,
322 .pvr_value = 0x00060000,
323 .cpu_name = "603e",
Kumar Gala10b35d92005-09-23 14:08:58 -0500324 .cpu_features = CPU_FTRS_603,
Stephen Rothwell49209602005-10-12 15:55:09 +1000325 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700326 .icache_bsize = 32,
327 .dcache_bsize = 32,
328 .cpu_setup = __setup_cpu_603
329 },
330 { /* 603ev */
331 .pvr_mask = 0xffff0000,
332 .pvr_value = 0x00070000,
333 .cpu_name = "603ev",
Kumar Gala10b35d92005-09-23 14:08:58 -0500334 .cpu_features = CPU_FTRS_603,
Stephen Rothwell49209602005-10-12 15:55:09 +1000335 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700336 .icache_bsize = 32,
337 .dcache_bsize = 32,
338 .cpu_setup = __setup_cpu_603
339 },
340 { /* 604 */
341 .pvr_mask = 0xffff0000,
342 .pvr_value = 0x00040000,
343 .cpu_name = "604",
Kumar Gala10b35d92005-09-23 14:08:58 -0500344 .cpu_features = CPU_FTRS_604,
Stephen Rothwell49209602005-10-12 15:55:09 +1000345 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700346 .icache_bsize = 32,
347 .dcache_bsize = 32,
348 .num_pmcs = 2,
349 .cpu_setup = __setup_cpu_604
350 },
351 { /* 604e */
352 .pvr_mask = 0xfffff000,
353 .pvr_value = 0x00090000,
354 .cpu_name = "604e",
Kumar Gala10b35d92005-09-23 14:08:58 -0500355 .cpu_features = CPU_FTRS_604,
Stephen Rothwell49209602005-10-12 15:55:09 +1000356 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700357 .icache_bsize = 32,
358 .dcache_bsize = 32,
359 .num_pmcs = 4,
360 .cpu_setup = __setup_cpu_604
361 },
362 { /* 604r */
363 .pvr_mask = 0xffff0000,
364 .pvr_value = 0x00090000,
365 .cpu_name = "604r",
Kumar Gala10b35d92005-09-23 14:08:58 -0500366 .cpu_features = CPU_FTRS_604,
Stephen Rothwell49209602005-10-12 15:55:09 +1000367 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700368 .icache_bsize = 32,
369 .dcache_bsize = 32,
370 .num_pmcs = 4,
371 .cpu_setup = __setup_cpu_604
372 },
373 { /* 604ev */
374 .pvr_mask = 0xffff0000,
375 .pvr_value = 0x000a0000,
376 .cpu_name = "604ev",
Kumar Gala10b35d92005-09-23 14:08:58 -0500377 .cpu_features = CPU_FTRS_604,
Stephen Rothwell49209602005-10-12 15:55:09 +1000378 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700379 .icache_bsize = 32,
380 .dcache_bsize = 32,
381 .num_pmcs = 4,
382 .cpu_setup = __setup_cpu_604
383 },
384 { /* 740/750 (0x4202, don't support TAU ?) */
385 .pvr_mask = 0xffffffff,
386 .pvr_value = 0x00084202,
387 .cpu_name = "740/750",
Kumar Gala10b35d92005-09-23 14:08:58 -0500388 .cpu_features = CPU_FTRS_740_NOTAU,
Stephen Rothwell49209602005-10-12 15:55:09 +1000389 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700390 .icache_bsize = 32,
391 .dcache_bsize = 32,
392 .num_pmcs = 4,
393 .cpu_setup = __setup_cpu_750
394 },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700395 { /* 750CX (80100 and 8010x?) */
396 .pvr_mask = 0xfffffff0,
397 .pvr_value = 0x00080100,
398 .cpu_name = "750CX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500399 .cpu_features = CPU_FTRS_750,
Stephen Rothwell49209602005-10-12 15:55:09 +1000400 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700401 .icache_bsize = 32,
402 .dcache_bsize = 32,
403 .num_pmcs = 4,
404 .cpu_setup = __setup_cpu_750cx
405 },
406 { /* 750CX (82201 and 82202) */
407 .pvr_mask = 0xfffffff0,
408 .pvr_value = 0x00082200,
409 .cpu_name = "750CX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500410 .cpu_features = CPU_FTRS_750,
Stephen Rothwell49209602005-10-12 15:55:09 +1000411 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700412 .icache_bsize = 32,
413 .dcache_bsize = 32,
414 .num_pmcs = 4,
415 .cpu_setup = __setup_cpu_750cx
416 },
417 { /* 750CXe (82214) */
418 .pvr_mask = 0xfffffff0,
419 .pvr_value = 0x00082210,
420 .cpu_name = "750CXe",
Kumar Gala10b35d92005-09-23 14:08:58 -0500421 .cpu_features = CPU_FTRS_750,
Stephen Rothwell49209602005-10-12 15:55:09 +1000422 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700423 .icache_bsize = 32,
424 .dcache_bsize = 32,
425 .num_pmcs = 4,
426 .cpu_setup = __setup_cpu_750cx
427 },
Arthur Othieno7c316252005-09-03 15:55:52 -0700428 { /* 750CXe "Gekko" (83214) */
429 .pvr_mask = 0xffffffff,
430 .pvr_value = 0x00083214,
431 .cpu_name = "750CXe",
Kumar Gala10b35d92005-09-23 14:08:58 -0500432 .cpu_features = CPU_FTRS_750,
Stephen Rothwell49209602005-10-12 15:55:09 +1000433 .cpu_user_features = COMMON_USER,
Arthur Othieno7c316252005-09-03 15:55:52 -0700434 .icache_bsize = 32,
435 .dcache_bsize = 32,
436 .num_pmcs = 4,
437 .cpu_setup = __setup_cpu_750cx
438 },
Arthur Othienoac1ff042005-09-03 15:55:51 -0700439 { /* 745/755 */
440 .pvr_mask = 0xfffff000,
441 .pvr_value = 0x00083000,
442 .cpu_name = "745/755",
Kumar Gala10b35d92005-09-23 14:08:58 -0500443 .cpu_features = CPU_FTRS_750,
Stephen Rothwell49209602005-10-12 15:55:09 +1000444 .cpu_user_features = COMMON_USER,
Arthur Othienoac1ff042005-09-03 15:55:51 -0700445 .icache_bsize = 32,
446 .dcache_bsize = 32,
447 .num_pmcs = 4,
448 .cpu_setup = __setup_cpu_750
449 },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700450 { /* 750FX rev 1.x */
451 .pvr_mask = 0xffffff00,
452 .pvr_value = 0x70000100,
453 .cpu_name = "750FX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500454 .cpu_features = CPU_FTRS_750FX1,
Stephen Rothwell49209602005-10-12 15:55:09 +1000455 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700456 .icache_bsize = 32,
457 .dcache_bsize = 32,
458 .num_pmcs = 4,
459 .cpu_setup = __setup_cpu_750
460 },
461 { /* 750FX rev 2.0 must disable HID0[DPM] */
462 .pvr_mask = 0xffffffff,
463 .pvr_value = 0x70000200,
464 .cpu_name = "750FX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500465 .cpu_features = CPU_FTRS_750FX2,
Stephen Rothwell49209602005-10-12 15:55:09 +1000466 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700467 .icache_bsize = 32,
468 .dcache_bsize = 32,
469 .num_pmcs = 4,
470 .cpu_setup = __setup_cpu_750
471 },
472 { /* 750FX (All revs except 2.0) */
473 .pvr_mask = 0xffff0000,
474 .pvr_value = 0x70000000,
475 .cpu_name = "750FX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500476 .cpu_features = CPU_FTRS_750FX,
Stephen Rothwell49209602005-10-12 15:55:09 +1000477 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700478 .icache_bsize = 32,
479 .dcache_bsize = 32,
480 .num_pmcs = 4,
481 .cpu_setup = __setup_cpu_750fx
482 },
483 { /* 750GX */
484 .pvr_mask = 0xffff0000,
485 .pvr_value = 0x70020000,
486 .cpu_name = "750GX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500487 .cpu_features = CPU_FTRS_750GX,
Stephen Rothwell49209602005-10-12 15:55:09 +1000488 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700489 .icache_bsize = 32,
490 .dcache_bsize = 32,
491 .num_pmcs = 4,
492 .cpu_setup = __setup_cpu_750fx
493 },
494 { /* 740/750 (L2CR bit need fixup for 740) */
495 .pvr_mask = 0xffff0000,
496 .pvr_value = 0x00080000,
497 .cpu_name = "740/750",
Kumar Gala10b35d92005-09-23 14:08:58 -0500498 .cpu_features = CPU_FTRS_740,
Stephen Rothwell49209602005-10-12 15:55:09 +1000499 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700500 .icache_bsize = 32,
501 .dcache_bsize = 32,
502 .num_pmcs = 4,
503 .cpu_setup = __setup_cpu_750
504 },
505 { /* 7400 rev 1.1 ? (no TAU) */
506 .pvr_mask = 0xffffffff,
507 .pvr_value = 0x000c1101,
508 .cpu_name = "7400 (1.1)",
Kumar Gala10b35d92005-09-23 14:08:58 -0500509 .cpu_features = CPU_FTRS_7400_NOTAU,
Stephen Rothwell49209602005-10-12 15:55:09 +1000510 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700511 .icache_bsize = 32,
512 .dcache_bsize = 32,
513 .num_pmcs = 4,
514 .cpu_setup = __setup_cpu_7400
515 },
516 { /* 7400 */
517 .pvr_mask = 0xffff0000,
518 .pvr_value = 0x000c0000,
519 .cpu_name = "7400",
Kumar Gala10b35d92005-09-23 14:08:58 -0500520 .cpu_features = CPU_FTRS_7400,
Stephen Rothwell49209602005-10-12 15:55:09 +1000521 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700522 .icache_bsize = 32,
523 .dcache_bsize = 32,
524 .num_pmcs = 4,
525 .cpu_setup = __setup_cpu_7400
526 },
527 { /* 7410 */
528 .pvr_mask = 0xffff0000,
529 .pvr_value = 0x800c0000,
530 .cpu_name = "7410",
Kumar Gala10b35d92005-09-23 14:08:58 -0500531 .cpu_features = CPU_FTRS_7400,
Stephen Rothwell49209602005-10-12 15:55:09 +1000532 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700533 .icache_bsize = 32,
534 .dcache_bsize = 32,
535 .num_pmcs = 4,
536 .cpu_setup = __setup_cpu_7410
537 },
538 { /* 7450 2.0 - no doze/nap */
539 .pvr_mask = 0xffffffff,
540 .pvr_value = 0x80000200,
541 .cpu_name = "7450",
Kumar Gala10b35d92005-09-23 14:08:58 -0500542 .cpu_features = CPU_FTRS_7450_20,
Stephen Rothwell49209602005-10-12 15:55:09 +1000543 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700544 .icache_bsize = 32,
545 .dcache_bsize = 32,
546 .num_pmcs = 6,
547 .cpu_setup = __setup_cpu_745x
548 },
549 { /* 7450 2.1 */
550 .pvr_mask = 0xffffffff,
551 .pvr_value = 0x80000201,
552 .cpu_name = "7450",
Kumar Gala10b35d92005-09-23 14:08:58 -0500553 .cpu_features = CPU_FTRS_7450_21,
Stephen Rothwell49209602005-10-12 15:55:09 +1000554 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700555 .icache_bsize = 32,
556 .dcache_bsize = 32,
557 .num_pmcs = 6,
558 .cpu_setup = __setup_cpu_745x
559 },
560 { /* 7450 2.3 and newer */
561 .pvr_mask = 0xffff0000,
562 .pvr_value = 0x80000000,
563 .cpu_name = "7450",
Kumar Gala10b35d92005-09-23 14:08:58 -0500564 .cpu_features = CPU_FTRS_7450_23,
Stephen Rothwell49209602005-10-12 15:55:09 +1000565 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700566 .icache_bsize = 32,
567 .dcache_bsize = 32,
568 .num_pmcs = 6,
569 .cpu_setup = __setup_cpu_745x
570 },
571 { /* 7455 rev 1.x */
572 .pvr_mask = 0xffffff00,
573 .pvr_value = 0x80010100,
574 .cpu_name = "7455",
Kumar Gala10b35d92005-09-23 14:08:58 -0500575 .cpu_features = CPU_FTRS_7455_1,
Stephen Rothwell49209602005-10-12 15:55:09 +1000576 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700577 .icache_bsize = 32,
578 .dcache_bsize = 32,
579 .num_pmcs = 6,
580 .cpu_setup = __setup_cpu_745x
581 },
582 { /* 7455 rev 2.0 */
583 .pvr_mask = 0xffffffff,
584 .pvr_value = 0x80010200,
585 .cpu_name = "7455",
Kumar Gala10b35d92005-09-23 14:08:58 -0500586 .cpu_features = CPU_FTRS_7455_20,
Stephen Rothwell49209602005-10-12 15:55:09 +1000587 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700588 .icache_bsize = 32,
589 .dcache_bsize = 32,
590 .num_pmcs = 6,
591 .cpu_setup = __setup_cpu_745x
592 },
593 { /* 7455 others */
594 .pvr_mask = 0xffff0000,
595 .pvr_value = 0x80010000,
596 .cpu_name = "7455",
Kumar Gala10b35d92005-09-23 14:08:58 -0500597 .cpu_features = CPU_FTRS_7455,
Stephen Rothwell49209602005-10-12 15:55:09 +1000598 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700599 .icache_bsize = 32,
600 .dcache_bsize = 32,
601 .num_pmcs = 6,
602 .cpu_setup = __setup_cpu_745x
603 },
604 { /* 7447/7457 Rev 1.0 */
605 .pvr_mask = 0xffffffff,
606 .pvr_value = 0x80020100,
607 .cpu_name = "7447/7457",
Kumar Gala10b35d92005-09-23 14:08:58 -0500608 .cpu_features = CPU_FTRS_7447_10,
Stephen Rothwell49209602005-10-12 15:55:09 +1000609 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700610 .icache_bsize = 32,
611 .dcache_bsize = 32,
612 .num_pmcs = 6,
613 .cpu_setup = __setup_cpu_745x
614 },
615 { /* 7447/7457 Rev 1.1 */
616 .pvr_mask = 0xffffffff,
617 .pvr_value = 0x80020101,
618 .cpu_name = "7447/7457",
Kumar Gala10b35d92005-09-23 14:08:58 -0500619 .cpu_features = CPU_FTRS_7447_10,
Stephen Rothwell49209602005-10-12 15:55:09 +1000620 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700621 .icache_bsize = 32,
622 .dcache_bsize = 32,
623 .num_pmcs = 6,
624 .cpu_setup = __setup_cpu_745x
625 },
626 { /* 7447/7457 Rev 1.2 and later */
627 .pvr_mask = 0xffff0000,
628 .pvr_value = 0x80020000,
629 .cpu_name = "7447/7457",
Kumar Gala10b35d92005-09-23 14:08:58 -0500630 .cpu_features = CPU_FTRS_7447,
Stephen Rothwell49209602005-10-12 15:55:09 +1000631 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700632 .icache_bsize = 32,
633 .dcache_bsize = 32,
634 .num_pmcs = 6,
635 .cpu_setup = __setup_cpu_745x
636 },
637 { /* 7447A */
638 .pvr_mask = 0xffff0000,
639 .pvr_value = 0x80030000,
640 .cpu_name = "7447A",
Kumar Gala10b35d92005-09-23 14:08:58 -0500641 .cpu_features = CPU_FTRS_7447A,
Stephen Rothwell49209602005-10-12 15:55:09 +1000642 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700643 .icache_bsize = 32,
644 .dcache_bsize = 32,
645 .num_pmcs = 6,
646 .cpu_setup = __setup_cpu_745x
647 },
Kumar Galabbde6302005-09-03 15:55:55 -0700648 { /* 7448 */
649 .pvr_mask = 0xffff0000,
650 .pvr_value = 0x80040000,
651 .cpu_name = "7448",
Kumar Gala10b35d92005-09-23 14:08:58 -0500652 .cpu_features = CPU_FTRS_7447A,
Stephen Rothwell49209602005-10-12 15:55:09 +1000653 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
Kumar Galabbde6302005-09-03 15:55:55 -0700654 .icache_bsize = 32,
655 .dcache_bsize = 32,
656 .num_pmcs = 6,
657 .cpu_setup = __setup_cpu_745x
658 },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700659 { /* 82xx (8240, 8245, 8260 are all 603e cores) */
660 .pvr_mask = 0x7fff0000,
661 .pvr_value = 0x00810000,
662 .cpu_name = "82xx",
Kumar Gala10b35d92005-09-23 14:08:58 -0500663 .cpu_features = CPU_FTRS_82XX,
Stephen Rothwell49209602005-10-12 15:55:09 +1000664 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700665 .icache_bsize = 32,
666 .dcache_bsize = 32,
667 .cpu_setup = __setup_cpu_603
668 },
669 { /* All G2_LE (603e core, plus some) have the same pvr */
670 .pvr_mask = 0x7fff0000,
671 .pvr_value = 0x00820000,
672 .cpu_name = "G2_LE",
Kumar Gala10b35d92005-09-23 14:08:58 -0500673 .cpu_features = CPU_FTRS_G2_LE,
Stephen Rothwell49209602005-10-12 15:55:09 +1000674 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700675 .icache_bsize = 32,
676 .dcache_bsize = 32,
677 .cpu_setup = __setup_cpu_603
678 },
679 { /* e300 (a 603e core, plus some) on 83xx */
680 .pvr_mask = 0x7fff0000,
681 .pvr_value = 0x00830000,
682 .cpu_name = "e300",
Kumar Gala10b35d92005-09-23 14:08:58 -0500683 .cpu_features = CPU_FTRS_E300,
Stephen Rothwell49209602005-10-12 15:55:09 +1000684 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700685 .icache_bsize = 32,
686 .dcache_bsize = 32,
687 .cpu_setup = __setup_cpu_603
688 },
689 { /* default match, we assume split I/D cache & TB (non-601)... */
690 .pvr_mask = 0x00000000,
691 .pvr_value = 0x00000000,
692 .cpu_name = "(generic PPC)",
Kumar Gala10b35d92005-09-23 14:08:58 -0500693 .cpu_features = CPU_FTRS_CLASSIC32,
Stephen Rothwell49209602005-10-12 15:55:09 +1000694 .cpu_user_features = COMMON_USER,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700695 .icache_bsize = 32,
696 .dcache_bsize = 32,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700697 },
698#endif /* CLASSIC_PPC */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700699#ifdef CONFIG_8xx
700 { /* 8xx */
701 .pvr_mask = 0xffff0000,
702 .pvr_value = 0x00500000,
703 .cpu_name = "8xx",
704 /* CPU_FTR_MAYBE_CAN_DOZE is possible,
705 * if the 8xx code is there.... */
Kumar Gala10b35d92005-09-23 14:08:58 -0500706 .cpu_features = CPU_FTRS_8XX,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700707 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
708 .icache_bsize = 16,
709 .dcache_bsize = 16,
710 },
711#endif /* CONFIG_8xx */
712#ifdef CONFIG_40x
713 { /* 403GC */
714 .pvr_mask = 0xffffff00,
715 .pvr_value = 0x00200200,
716 .cpu_name = "403GC",
Kumar Gala10b35d92005-09-23 14:08:58 -0500717 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700718 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
719 .icache_bsize = 16,
720 .dcache_bsize = 16,
721 },
722 { /* 403GCX */
723 .pvr_mask = 0xffffff00,
724 .pvr_value = 0x00201400,
725 .cpu_name = "403GCX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500726 .cpu_features = CPU_FTRS_40X,
Paul Mackerras98599012005-10-22 16:51:34 +1000727 .cpu_user_features = PPC_FEATURE_32 |
728 PPC_FEATURE_HAS_MMU | PPC_FEATURE_NO_TB,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700729 .icache_bsize = 16,
730 .dcache_bsize = 16,
731 },
732 { /* 403G ?? */
733 .pvr_mask = 0xffff0000,
734 .pvr_value = 0x00200000,
735 .cpu_name = "403G ??",
Kumar Gala10b35d92005-09-23 14:08:58 -0500736 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700737 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
738 .icache_bsize = 16,
739 .dcache_bsize = 16,
740 },
741 { /* 405GP */
742 .pvr_mask = 0xffff0000,
743 .pvr_value = 0x40110000,
744 .cpu_name = "405GP",
Kumar Gala10b35d92005-09-23 14:08:58 -0500745 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700746 .cpu_user_features = PPC_FEATURE_32 |
747 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
748 .icache_bsize = 32,
749 .dcache_bsize = 32,
750 },
751 { /* STB 03xxx */
752 .pvr_mask = 0xffff0000,
753 .pvr_value = 0x40130000,
754 .cpu_name = "STB03xxx",
Kumar Gala10b35d92005-09-23 14:08:58 -0500755 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700756 .cpu_user_features = PPC_FEATURE_32 |
757 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
758 .icache_bsize = 32,
759 .dcache_bsize = 32,
760 },
761 { /* STB 04xxx */
762 .pvr_mask = 0xffff0000,
763 .pvr_value = 0x41810000,
764 .cpu_name = "STB04xxx",
Kumar Gala10b35d92005-09-23 14:08:58 -0500765 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700766 .cpu_user_features = PPC_FEATURE_32 |
767 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
768 .icache_bsize = 32,
769 .dcache_bsize = 32,
770 },
771 { /* NP405L */
772 .pvr_mask = 0xffff0000,
773 .pvr_value = 0x41610000,
774 .cpu_name = "NP405L",
Kumar Gala10b35d92005-09-23 14:08:58 -0500775 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700776 .cpu_user_features = PPC_FEATURE_32 |
777 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
778 .icache_bsize = 32,
779 .dcache_bsize = 32,
780 },
781 { /* NP4GS3 */
782 .pvr_mask = 0xffff0000,
783 .pvr_value = 0x40B10000,
784 .cpu_name = "NP4GS3",
Kumar Gala10b35d92005-09-23 14:08:58 -0500785 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700786 .cpu_user_features = PPC_FEATURE_32 |
787 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
788 .icache_bsize = 32,
789 .dcache_bsize = 32,
790 },
791 { /* NP405H */
792 .pvr_mask = 0xffff0000,
793 .pvr_value = 0x41410000,
794 .cpu_name = "NP405H",
Kumar Gala10b35d92005-09-23 14:08:58 -0500795 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700796 .cpu_user_features = PPC_FEATURE_32 |
797 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
798 .icache_bsize = 32,
799 .dcache_bsize = 32,
800 },
801 { /* 405GPr */
802 .pvr_mask = 0xffff0000,
803 .pvr_value = 0x50910000,
804 .cpu_name = "405GPr",
Kumar Gala10b35d92005-09-23 14:08:58 -0500805 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700806 .cpu_user_features = PPC_FEATURE_32 |
807 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
808 .icache_bsize = 32,
809 .dcache_bsize = 32,
810 },
811 { /* STBx25xx */
812 .pvr_mask = 0xffff0000,
813 .pvr_value = 0x51510000,
814 .cpu_name = "STBx25xx",
Kumar Gala10b35d92005-09-23 14:08:58 -0500815 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700816 .cpu_user_features = PPC_FEATURE_32 |
817 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
818 .icache_bsize = 32,
819 .dcache_bsize = 32,
820 },
821 { /* 405LP */
822 .pvr_mask = 0xffff0000,
823 .pvr_value = 0x41F10000,
824 .cpu_name = "405LP",
Kumar Gala10b35d92005-09-23 14:08:58 -0500825 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700826 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
827 .icache_bsize = 32,
828 .dcache_bsize = 32,
829 },
830 { /* Xilinx Virtex-II Pro */
831 .pvr_mask = 0xffff0000,
832 .pvr_value = 0x20010000,
833 .cpu_name = "Virtex-II Pro",
Kumar Gala10b35d92005-09-23 14:08:58 -0500834 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700835 .cpu_user_features = PPC_FEATURE_32 |
836 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
837 .icache_bsize = 32,
838 .dcache_bsize = 32,
839 },
Eugene Suroveginad95d602005-06-07 13:22:09 -0700840 { /* 405EP */
841 .pvr_mask = 0xffff0000,
842 .pvr_value = 0x51210000,
843 .cpu_name = "405EP",
Kumar Gala10b35d92005-09-23 14:08:58 -0500844 .cpu_features = CPU_FTRS_40X,
Eugene Suroveginad95d602005-06-07 13:22:09 -0700845 .cpu_user_features = PPC_FEATURE_32 |
846 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
847 .icache_bsize = 32,
848 .dcache_bsize = 32,
849 },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700850
851#endif /* CONFIG_40x */
852#ifdef CONFIG_44x
Matt Porterc9cf73a2005-07-31 22:34:52 -0700853 {
854 .pvr_mask = 0xf0000fff,
855 .pvr_value = 0x40000850,
856 .cpu_name = "440EP Rev. A",
Kumar Gala10b35d92005-09-23 14:08:58 -0500857 .cpu_features = CPU_FTRS_44X,
Stephen Rothwell49209602005-10-12 15:55:09 +1000858 .cpu_user_features = COMMON_USER, /* 440EP has an FPU */
Matt Porterc9cf73a2005-07-31 22:34:52 -0700859 .icache_bsize = 32,
860 .dcache_bsize = 32,
861 },
862 {
863 .pvr_mask = 0xf0000fff,
864 .pvr_value = 0x400008d3,
865 .cpu_name = "440EP Rev. B",
Kumar Gala10b35d92005-09-23 14:08:58 -0500866 .cpu_features = CPU_FTRS_44X,
Stephen Rothwell49209602005-10-12 15:55:09 +1000867 .cpu_user_features = COMMON_USER, /* 440EP has an FPU */
Matt Porterc9cf73a2005-07-31 22:34:52 -0700868 .icache_bsize = 32,
869 .dcache_bsize = 32,
870 },
Stephen Rothwell49209602005-10-12 15:55:09 +1000871 { /* 440GP Rev. B */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700872 .pvr_mask = 0xf0000fff,
873 .pvr_value = 0x40000440,
874 .cpu_name = "440GP Rev. B",
Kumar Gala10b35d92005-09-23 14:08:58 -0500875 .cpu_features = CPU_FTRS_44X,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700876 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
877 .icache_bsize = 32,
878 .dcache_bsize = 32,
879 },
Stephen Rothwell49209602005-10-12 15:55:09 +1000880 { /* 440GP Rev. C */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700881 .pvr_mask = 0xf0000fff,
882 .pvr_value = 0x40000481,
883 .cpu_name = "440GP Rev. C",
Kumar Gala10b35d92005-09-23 14:08:58 -0500884 .cpu_features = CPU_FTRS_44X,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700885 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
886 .icache_bsize = 32,
887 .dcache_bsize = 32,
888 },
889 { /* 440GX Rev. A */
890 .pvr_mask = 0xf0000fff,
891 .pvr_value = 0x50000850,
892 .cpu_name = "440GX Rev. A",
Kumar Gala10b35d92005-09-23 14:08:58 -0500893 .cpu_features = CPU_FTRS_44X,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700894 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
895 .icache_bsize = 32,
896 .dcache_bsize = 32,
897 },
898 { /* 440GX Rev. B */
899 .pvr_mask = 0xf0000fff,
900 .pvr_value = 0x50000851,
901 .cpu_name = "440GX Rev. B",
Kumar Gala10b35d92005-09-23 14:08:58 -0500902 .cpu_features = CPU_FTRS_44X,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700903 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
904 .icache_bsize = 32,
905 .dcache_bsize = 32,
906 },
907 { /* 440GX Rev. C */
908 .pvr_mask = 0xf0000fff,
909 .pvr_value = 0x50000892,
910 .cpu_name = "440GX Rev. C",
Kumar Gala10b35d92005-09-23 14:08:58 -0500911 .cpu_features = CPU_FTRS_44X,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700912 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
913 .icache_bsize = 32,
914 .dcache_bsize = 32,
915 },
Eugene Surovegin9149fb32005-09-03 15:55:40 -0700916 { /* 440GX Rev. F */
917 .pvr_mask = 0xf0000fff,
918 .pvr_value = 0x50000894,
919 .cpu_name = "440GX Rev. F",
Kumar Gala10b35d92005-09-23 14:08:58 -0500920 .cpu_features = CPU_FTRS_44X,
Eugene Surovegin9149fb32005-09-03 15:55:40 -0700921 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
922 .icache_bsize = 32,
923 .dcache_bsize = 32,
924 },
Matt Porter656de7e2005-09-03 15:55:42 -0700925 { /* 440SP Rev. A */
926 .pvr_mask = 0xff000fff,
927 .pvr_value = 0x53000891,
928 .cpu_name = "440SP Rev. A",
Kumar Gala10b35d92005-09-23 14:08:58 -0500929 .cpu_features = CPU_FTRS_44X,
Matt Porter656de7e2005-09-03 15:55:42 -0700930 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
931 .icache_bsize = 32,
932 .dcache_bsize = 32,
933 },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700934#endif /* CONFIG_44x */
Kumar Gala33d9e9b2005-06-25 14:54:37 -0700935#ifdef CONFIG_FSL_BOOKE
Stephen Rothwell49209602005-10-12 15:55:09 +1000936 { /* e200z5 */
Kumar Gala33d9e9b2005-06-25 14:54:37 -0700937 .pvr_mask = 0xfff00000,
938 .pvr_value = 0x81000000,
939 .cpu_name = "e200z5",
940 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
Kumar Gala10b35d92005-09-23 14:08:58 -0500941 .cpu_features = CPU_FTRS_E200,
Kumar Gala33d9e9b2005-06-25 14:54:37 -0700942 .cpu_user_features = PPC_FEATURE_32 |
943 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_EFP_SINGLE |
944 PPC_FEATURE_UNIFIED_CACHE,
945 .dcache_bsize = 32,
946 },
Stephen Rothwell49209602005-10-12 15:55:09 +1000947 { /* e200z6 */
Kumar Gala33d9e9b2005-06-25 14:54:37 -0700948 .pvr_mask = 0xfff00000,
949 .pvr_value = 0x81100000,
950 .cpu_name = "e200z6",
951 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
Kumar Gala10b35d92005-09-23 14:08:58 -0500952 .cpu_features = CPU_FTRS_E200,
Kumar Gala33d9e9b2005-06-25 14:54:37 -0700953 .cpu_user_features = PPC_FEATURE_32 |
954 PPC_FEATURE_HAS_MMU | PPC_FEATURE_SPE_COMP |
955 PPC_FEATURE_HAS_EFP_SINGLE |
956 PPC_FEATURE_UNIFIED_CACHE,
957 .dcache_bsize = 32,
958 },
Stephen Rothwell49209602005-10-12 15:55:09 +1000959 { /* e500 */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700960 .pvr_mask = 0xffff0000,
961 .pvr_value = 0x80200000,
962 .cpu_name = "e500",
963 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
Kumar Gala10b35d92005-09-23 14:08:58 -0500964 .cpu_features = CPU_FTRS_E500,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700965 .cpu_user_features = PPC_FEATURE_32 |
966 PPC_FEATURE_HAS_MMU | PPC_FEATURE_SPE_COMP |
967 PPC_FEATURE_HAS_EFP_SINGLE,
968 .icache_bsize = 32,
969 .dcache_bsize = 32,
970 .num_pmcs = 4,
971 },
Stephen Rothwell49209602005-10-12 15:55:09 +1000972 { /* e500v2 */
Kumar Gala5b37b702005-06-21 17:15:18 -0700973 .pvr_mask = 0xffff0000,
974 .pvr_value = 0x80210000,
975 .cpu_name = "e500v2",
976 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
Kumar Gala10b35d92005-09-23 14:08:58 -0500977 .cpu_features = CPU_FTRS_E500_2,
Kumar Gala5b37b702005-06-21 17:15:18 -0700978 .cpu_user_features = PPC_FEATURE_32 |
979 PPC_FEATURE_HAS_MMU | PPC_FEATURE_SPE_COMP |
980 PPC_FEATURE_HAS_EFP_SINGLE | PPC_FEATURE_HAS_EFP_DOUBLE,
981 .icache_bsize = 32,
982 .dcache_bsize = 32,
983 .num_pmcs = 4,
984 },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700985#endif
986#if !CLASSIC_PPC
987 { /* default match */
988 .pvr_mask = 0x00000000,
989 .pvr_value = 0x00000000,
990 .cpu_name = "(generic PPC)",
Kumar Gala10b35d92005-09-23 14:08:58 -0500991 .cpu_features = CPU_FTRS_GENERIC_32,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700992 .cpu_user_features = PPC_FEATURE_32,
993 .icache_bsize = 32,
994 .dcache_bsize = 32,
995 }
996#endif /* !CLASSIC_PPC */
Stephen Rothwell49209602005-10-12 15:55:09 +1000997#endif /* CONFIG_PPC32 */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700998};