2 * Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org)
4 * Modifications for ppc64:
5 * Copyright (C) 2003 Dave Engebretsen <engebret@us.ibm.com>
7 * 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.
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>
18 #include <linux/module.h>
20 #include <asm/oprofile_impl.h>
21 #include <asm/cputable.h>
23 struct cpu_spec* cur_cpu_spec = NULL;
24 EXPORT_SYMBOL(cur_cpu_spec);
27 * Unlike ppc32, ppc64 will only call this once for the boot CPU, it's
28 * the responsibility of the appropriate CPU save/restore functions to
29 * eventually copy these settings over. Those save/restore aren't yet
30 * part of the cputable though. That has to be fixed for both ppc32
34 extern void __setup_cpu_power3(unsigned long offset, struct cpu_spec* spec);
35 extern void __setup_cpu_power4(unsigned long offset, struct cpu_spec* spec);
36 extern void __setup_cpu_be(unsigned long offset, struct cpu_spec* spec);
38 extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec);
39 extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec);
40 extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec);
41 extern void __setup_cpu_750cx(unsigned long offset, struct cpu_spec* spec);
42 extern void __setup_cpu_750fx(unsigned long offset, struct cpu_spec* spec);
43 extern void __setup_cpu_7400(unsigned long offset, struct cpu_spec* spec);
44 extern void __setup_cpu_7410(unsigned long offset, struct cpu_spec* spec);
45 extern void __setup_cpu_745x(unsigned long offset, struct cpu_spec* spec);
46 #endif /* CONFIG_PPC32 */
47 extern void __setup_cpu_ppc970(unsigned long offset, struct cpu_spec* spec);
49 /* This table only contains "desktop" CPUs, it need to be filled with embedded
52 #define COMMON_USER (PPC_FEATURE_32 | PPC_FEATURE_HAS_FPU | \
54 #define COMMON_USER_PPC64 (COMMON_USER | PPC_FEATURE_64)
55 #define COMMON_USER_POWER4 (COMMON_USER_PPC64 | PPC_FEATURE_POWER4)
56 #define COMMON_USER_POWER5 (COMMON_USER_PPC64 | PPC_FEATURE_POWER5)
57 #define COMMON_USER_POWER5_PLUS (COMMON_USER_PPC64 | PPC_FEATURE_POWER5_PLUS)
60 /* We only set the spe features if the kernel was compiled with
64 #define PPC_FEATURE_SPE_COMP PPC_FEATURE_HAS_SPE
66 #define PPC_FEATURE_SPE_COMP 0
69 struct cpu_spec cpu_specs[] = {
72 .pvr_mask = 0xffff0000,
73 .pvr_value = 0x00400000,
74 .cpu_name = "POWER3 (630)",
75 .cpu_features = CPU_FTRS_POWER3,
76 .cpu_user_features = COMMON_USER_PPC64,
80 .cpu_setup = __setup_cpu_power3,
81 .oprofile_cpu_type = "ppc64/power3",
82 .oprofile_type = RS64,
85 .pvr_mask = 0xffff0000,
86 .pvr_value = 0x00410000,
87 .cpu_name = "POWER3 (630+)",
88 .cpu_features = CPU_FTRS_POWER3,
89 .cpu_user_features = COMMON_USER_PPC64,
93 .cpu_setup = __setup_cpu_power3,
94 .oprofile_cpu_type = "ppc64/power3",
95 .oprofile_type = RS64,
98 .pvr_mask = 0xffff0000,
99 .pvr_value = 0x00330000,
100 .cpu_name = "RS64-II (northstar)",
101 .cpu_features = CPU_FTRS_RS64,
102 .cpu_user_features = COMMON_USER_PPC64,
106 .cpu_setup = __setup_cpu_power3,
107 .oprofile_cpu_type = "ppc64/rs64",
108 .oprofile_type = RS64,
111 .pvr_mask = 0xffff0000,
112 .pvr_value = 0x00340000,
113 .cpu_name = "RS64-III (pulsar)",
114 .cpu_features = CPU_FTRS_RS64,
115 .cpu_user_features = COMMON_USER_PPC64,
119 .cpu_setup = __setup_cpu_power3,
120 .oprofile_cpu_type = "ppc64/rs64",
121 .oprofile_type = RS64,
124 .pvr_mask = 0xffff0000,
125 .pvr_value = 0x00360000,
126 .cpu_name = "RS64-III (icestar)",
127 .cpu_features = CPU_FTRS_RS64,
128 .cpu_user_features = COMMON_USER_PPC64,
132 .cpu_setup = __setup_cpu_power3,
133 .oprofile_cpu_type = "ppc64/rs64",
134 .oprofile_type = RS64,
137 .pvr_mask = 0xffff0000,
138 .pvr_value = 0x00370000,
139 .cpu_name = "RS64-IV (sstar)",
140 .cpu_features = CPU_FTRS_RS64,
141 .cpu_user_features = COMMON_USER_PPC64,
145 .cpu_setup = __setup_cpu_power3,
146 .oprofile_cpu_type = "ppc64/rs64",
147 .oprofile_type = RS64,
150 .pvr_mask = 0xffff0000,
151 .pvr_value = 0x00350000,
152 .cpu_name = "POWER4 (gp)",
153 .cpu_features = CPU_FTRS_POWER4,
154 .cpu_user_features = COMMON_USER_POWER4,
158 .cpu_setup = __setup_cpu_power4,
159 .oprofile_cpu_type = "ppc64/power4",
160 .oprofile_type = POWER4,
163 .pvr_mask = 0xffff0000,
164 .pvr_value = 0x00380000,
165 .cpu_name = "POWER4+ (gq)",
166 .cpu_features = CPU_FTRS_POWER4,
167 .cpu_user_features = COMMON_USER_POWER4,
171 .cpu_setup = __setup_cpu_power4,
172 .oprofile_cpu_type = "ppc64/power4",
173 .oprofile_type = POWER4,
176 .pvr_mask = 0xffff0000,
177 .pvr_value = 0x00390000,
178 .cpu_name = "PPC970",
179 .cpu_features = CPU_FTRS_PPC970,
180 .cpu_user_features = COMMON_USER_POWER4 |
181 PPC_FEATURE_HAS_ALTIVEC_COMP,
185 .cpu_setup = __setup_cpu_ppc970,
186 .oprofile_cpu_type = "ppc64/970",
187 .oprofile_type = POWER4,
189 #endif /* CONFIG_PPC64 */
190 #if defined(CONFIG_PPC64) || defined(CONFIG_POWER4)
192 .pvr_mask = 0xffff0000,
193 .pvr_value = 0x003c0000,
194 .cpu_name = "PPC970FX",
196 .cpu_features = CPU_FTRS_970_32,
198 .cpu_features = CPU_FTRS_PPC970,
200 .cpu_user_features = COMMON_USER_POWER4 |
201 PPC_FEATURE_HAS_ALTIVEC_COMP,
205 .cpu_setup = __setup_cpu_ppc970,
206 .oprofile_cpu_type = "ppc64/970",
207 .oprofile_type = POWER4,
209 #endif /* defined(CONFIG_PPC64) || defined(CONFIG_POWER4) */
212 .pvr_mask = 0xffff0000,
213 .pvr_value = 0x00440000,
214 .cpu_name = "PPC970MP",
215 .cpu_features = CPU_FTRS_PPC970,
216 .cpu_user_features = COMMON_USER_POWER4 |
217 PPC_FEATURE_HAS_ALTIVEC_COMP,
220 .cpu_setup = __setup_cpu_ppc970,
221 .oprofile_cpu_type = "ppc64/970",
222 .oprofile_type = POWER4,
225 .pvr_mask = 0xffff0000,
226 .pvr_value = 0x003a0000,
227 .cpu_name = "POWER5 (gr)",
228 .cpu_features = CPU_FTRS_POWER5,
229 .cpu_user_features = COMMON_USER_POWER5,
233 .cpu_setup = __setup_cpu_power4,
234 .oprofile_cpu_type = "ppc64/power5",
235 .oprofile_type = POWER4,
238 .pvr_mask = 0xffff0000,
239 .pvr_value = 0x003b0000,
240 .cpu_name = "POWER5+ (gs)",
241 .cpu_features = CPU_FTRS_POWER5,
242 .cpu_user_features = COMMON_USER_POWER5_PLUS,
246 .cpu_setup = __setup_cpu_power4,
247 .oprofile_cpu_type = "ppc64/power5+",
248 .oprofile_type = POWER4,
250 { /* Cell Broadband Engine */
251 .pvr_mask = 0xffff0000,
252 .pvr_value = 0x00700000,
253 .cpu_name = "Cell Broadband Engine",
254 .cpu_features = CPU_FTRS_CELL,
255 .cpu_user_features = COMMON_USER_PPC64 |
256 PPC_FEATURE_CELL | PPC_FEATURE_HAS_ALTIVEC_COMP,
259 .cpu_setup = __setup_cpu_be,
261 { /* default match */
262 .pvr_mask = 0x00000000,
263 .pvr_value = 0x00000000,
264 .cpu_name = "POWER4 (compatible)",
265 .cpu_features = CPU_FTRS_COMPATIBLE,
266 .cpu_user_features = COMMON_USER_PPC64,
270 .cpu_setup = __setup_cpu_power4,
272 #endif /* CONFIG_PPC64 */
276 .pvr_mask = 0xffff0000,
277 .pvr_value = 0x00010000,
279 .cpu_features = CPU_FTRS_PPC601,
280 .cpu_user_features = COMMON_USER | PPC_FEATURE_601_INSTR |
281 PPC_FEATURE_UNIFIED_CACHE | PPC_FEATURE_NO_TB,
286 .pvr_mask = 0xffff0000,
287 .pvr_value = 0x00030000,
289 .cpu_features = CPU_FTRS_603,
290 .cpu_user_features = COMMON_USER,
293 .cpu_setup = __setup_cpu_603
296 .pvr_mask = 0xffff0000,
297 .pvr_value = 0x00060000,
299 .cpu_features = CPU_FTRS_603,
300 .cpu_user_features = COMMON_USER,
303 .cpu_setup = __setup_cpu_603
306 .pvr_mask = 0xffff0000,
307 .pvr_value = 0x00070000,
309 .cpu_features = CPU_FTRS_603,
310 .cpu_user_features = COMMON_USER,
313 .cpu_setup = __setup_cpu_603
316 .pvr_mask = 0xffff0000,
317 .pvr_value = 0x00040000,
319 .cpu_features = CPU_FTRS_604,
320 .cpu_user_features = COMMON_USER,
324 .cpu_setup = __setup_cpu_604
327 .pvr_mask = 0xfffff000,
328 .pvr_value = 0x00090000,
330 .cpu_features = CPU_FTRS_604,
331 .cpu_user_features = COMMON_USER,
335 .cpu_setup = __setup_cpu_604
338 .pvr_mask = 0xffff0000,
339 .pvr_value = 0x00090000,
341 .cpu_features = CPU_FTRS_604,
342 .cpu_user_features = COMMON_USER,
346 .cpu_setup = __setup_cpu_604
349 .pvr_mask = 0xffff0000,
350 .pvr_value = 0x000a0000,
352 .cpu_features = CPU_FTRS_604,
353 .cpu_user_features = COMMON_USER,
357 .cpu_setup = __setup_cpu_604
359 { /* 740/750 (0x4202, don't support TAU ?) */
360 .pvr_mask = 0xffffffff,
361 .pvr_value = 0x00084202,
362 .cpu_name = "740/750",
363 .cpu_features = CPU_FTRS_740_NOTAU,
364 .cpu_user_features = COMMON_USER,
368 .cpu_setup = __setup_cpu_750
370 { /* 750CX (80100 and 8010x?) */
371 .pvr_mask = 0xfffffff0,
372 .pvr_value = 0x00080100,
374 .cpu_features = CPU_FTRS_750,
375 .cpu_user_features = COMMON_USER,
379 .cpu_setup = __setup_cpu_750cx
381 { /* 750CX (82201 and 82202) */
382 .pvr_mask = 0xfffffff0,
383 .pvr_value = 0x00082200,
385 .cpu_features = CPU_FTRS_750,
386 .cpu_user_features = COMMON_USER,
390 .cpu_setup = __setup_cpu_750cx
392 { /* 750CXe (82214) */
393 .pvr_mask = 0xfffffff0,
394 .pvr_value = 0x00082210,
395 .cpu_name = "750CXe",
396 .cpu_features = CPU_FTRS_750,
397 .cpu_user_features = COMMON_USER,
401 .cpu_setup = __setup_cpu_750cx
403 { /* 750CXe "Gekko" (83214) */
404 .pvr_mask = 0xffffffff,
405 .pvr_value = 0x00083214,
406 .cpu_name = "750CXe",
407 .cpu_features = CPU_FTRS_750,
408 .cpu_user_features = COMMON_USER,
412 .cpu_setup = __setup_cpu_750cx
415 .pvr_mask = 0xfffff000,
416 .pvr_value = 0x00083000,
417 .cpu_name = "745/755",
418 .cpu_features = CPU_FTRS_750,
419 .cpu_user_features = COMMON_USER,
423 .cpu_setup = __setup_cpu_750
425 { /* 750FX rev 1.x */
426 .pvr_mask = 0xffffff00,
427 .pvr_value = 0x70000100,
429 .cpu_features = CPU_FTRS_750FX1,
430 .cpu_user_features = COMMON_USER,
434 .cpu_setup = __setup_cpu_750
436 { /* 750FX rev 2.0 must disable HID0[DPM] */
437 .pvr_mask = 0xffffffff,
438 .pvr_value = 0x70000200,
440 .cpu_features = CPU_FTRS_750FX2,
441 .cpu_user_features = COMMON_USER,
445 .cpu_setup = __setup_cpu_750
447 { /* 750FX (All revs except 2.0) */
448 .pvr_mask = 0xffff0000,
449 .pvr_value = 0x70000000,
451 .cpu_features = CPU_FTRS_750FX,
452 .cpu_user_features = COMMON_USER,
456 .cpu_setup = __setup_cpu_750fx
459 .pvr_mask = 0xffff0000,
460 .pvr_value = 0x70020000,
462 .cpu_features = CPU_FTRS_750GX,
463 .cpu_user_features = COMMON_USER,
467 .cpu_setup = __setup_cpu_750fx
469 { /* 740/750 (L2CR bit need fixup for 740) */
470 .pvr_mask = 0xffff0000,
471 .pvr_value = 0x00080000,
472 .cpu_name = "740/750",
473 .cpu_features = CPU_FTRS_740,
474 .cpu_user_features = COMMON_USER,
478 .cpu_setup = __setup_cpu_750
480 { /* 7400 rev 1.1 ? (no TAU) */
481 .pvr_mask = 0xffffffff,
482 .pvr_value = 0x000c1101,
483 .cpu_name = "7400 (1.1)",
484 .cpu_features = CPU_FTRS_7400_NOTAU,
485 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
489 .cpu_setup = __setup_cpu_7400
492 .pvr_mask = 0xffff0000,
493 .pvr_value = 0x000c0000,
495 .cpu_features = CPU_FTRS_7400,
496 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
500 .cpu_setup = __setup_cpu_7400
503 .pvr_mask = 0xffff0000,
504 .pvr_value = 0x800c0000,
506 .cpu_features = CPU_FTRS_7400,
507 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
511 .cpu_setup = __setup_cpu_7410
513 { /* 7450 2.0 - no doze/nap */
514 .pvr_mask = 0xffffffff,
515 .pvr_value = 0x80000200,
517 .cpu_features = CPU_FTRS_7450_20,
518 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
522 .cpu_setup = __setup_cpu_745x,
523 .oprofile_cpu_type = "ppc/7450",
527 .pvr_mask = 0xffffffff,
528 .pvr_value = 0x80000201,
530 .cpu_features = CPU_FTRS_7450_21,
531 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
535 .cpu_setup = __setup_cpu_745x,
536 .oprofile_cpu_type = "ppc/7450",
539 { /* 7450 2.3 and newer */
540 .pvr_mask = 0xffff0000,
541 .pvr_value = 0x80000000,
543 .cpu_features = CPU_FTRS_7450_23,
544 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
548 .cpu_setup = __setup_cpu_745x,
549 .oprofile_cpu_type = "ppc/7450",
553 .pvr_mask = 0xffffff00,
554 .pvr_value = 0x80010100,
556 .cpu_features = CPU_FTRS_7455_1,
557 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
561 .cpu_setup = __setup_cpu_745x,
562 .oprofile_cpu_type = "ppc/7450",
566 .pvr_mask = 0xffffffff,
567 .pvr_value = 0x80010200,
569 .cpu_features = CPU_FTRS_7455_20,
570 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
574 .cpu_setup = __setup_cpu_745x,
575 .oprofile_cpu_type = "ppc/7450",
579 .pvr_mask = 0xffff0000,
580 .pvr_value = 0x80010000,
582 .cpu_features = CPU_FTRS_7455,
583 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
587 .cpu_setup = __setup_cpu_745x,
588 .oprofile_cpu_type = "ppc/7450",
591 { /* 7447/7457 Rev 1.0 */
592 .pvr_mask = 0xffffffff,
593 .pvr_value = 0x80020100,
594 .cpu_name = "7447/7457",
595 .cpu_features = CPU_FTRS_7447_10,
596 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
600 .cpu_setup = __setup_cpu_745x,
601 .oprofile_cpu_type = "ppc/7450",
604 { /* 7447/7457 Rev 1.1 */
605 .pvr_mask = 0xffffffff,
606 .pvr_value = 0x80020101,
607 .cpu_name = "7447/7457",
608 .cpu_features = CPU_FTRS_7447_10,
609 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
613 .cpu_setup = __setup_cpu_745x,
614 .oprofile_cpu_type = "ppc/7450",
617 { /* 7447/7457 Rev 1.2 and later */
618 .pvr_mask = 0xffff0000,
619 .pvr_value = 0x80020000,
620 .cpu_name = "7447/7457",
621 .cpu_features = CPU_FTRS_7447,
622 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
626 .cpu_setup = __setup_cpu_745x,
627 .oprofile_cpu_type = "ppc/7450",
631 .pvr_mask = 0xffff0000,
632 .pvr_value = 0x80030000,
634 .cpu_features = CPU_FTRS_7447A,
635 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
639 .cpu_setup = __setup_cpu_745x,
640 .oprofile_cpu_type = "ppc/7450",
644 .pvr_mask = 0xffff0000,
645 .pvr_value = 0x80040000,
647 .cpu_features = CPU_FTRS_7447A,
648 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
652 .cpu_setup = __setup_cpu_745x,
653 .oprofile_cpu_type = "ppc/7450",
656 { /* 82xx (8240, 8245, 8260 are all 603e cores) */
657 .pvr_mask = 0x7fff0000,
658 .pvr_value = 0x00810000,
660 .cpu_features = CPU_FTRS_82XX,
661 .cpu_user_features = COMMON_USER,
664 .cpu_setup = __setup_cpu_603
666 { /* All G2_LE (603e core, plus some) have the same pvr */
667 .pvr_mask = 0x7fff0000,
668 .pvr_value = 0x00820000,
670 .cpu_features = CPU_FTRS_G2_LE,
671 .cpu_user_features = COMMON_USER,
674 .cpu_setup = __setup_cpu_603
676 { /* e300 (a 603e core, plus some) on 83xx */
677 .pvr_mask = 0x7fff0000,
678 .pvr_value = 0x00830000,
680 .cpu_features = CPU_FTRS_E300,
681 .cpu_user_features = COMMON_USER,
684 .cpu_setup = __setup_cpu_603
686 { /* default match, we assume split I/D cache & TB (non-601)... */
687 .pvr_mask = 0x00000000,
688 .pvr_value = 0x00000000,
689 .cpu_name = "(generic PPC)",
690 .cpu_features = CPU_FTRS_CLASSIC32,
691 .cpu_user_features = COMMON_USER,
695 #endif /* CLASSIC_PPC */
698 .pvr_mask = 0xffff0000,
699 .pvr_value = 0x00500000,
701 /* CPU_FTR_MAYBE_CAN_DOZE is possible,
702 * if the 8xx code is there.... */
703 .cpu_features = CPU_FTRS_8XX,
704 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
708 #endif /* CONFIG_8xx */
711 .pvr_mask = 0xffffff00,
712 .pvr_value = 0x00200200,
714 .cpu_features = CPU_FTRS_40X,
715 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
720 .pvr_mask = 0xffffff00,
721 .pvr_value = 0x00201400,
722 .cpu_name = "403GCX",
723 .cpu_features = CPU_FTRS_40X,
724 .cpu_user_features = PPC_FEATURE_32 |
725 PPC_FEATURE_HAS_MMU | PPC_FEATURE_NO_TB,
730 .pvr_mask = 0xffff0000,
731 .pvr_value = 0x00200000,
732 .cpu_name = "403G ??",
733 .cpu_features = CPU_FTRS_40X,
734 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
739 .pvr_mask = 0xffff0000,
740 .pvr_value = 0x40110000,
742 .cpu_features = CPU_FTRS_40X,
743 .cpu_user_features = PPC_FEATURE_32 |
744 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
749 .pvr_mask = 0xffff0000,
750 .pvr_value = 0x40130000,
751 .cpu_name = "STB03xxx",
752 .cpu_features = CPU_FTRS_40X,
753 .cpu_user_features = PPC_FEATURE_32 |
754 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
759 .pvr_mask = 0xffff0000,
760 .pvr_value = 0x41810000,
761 .cpu_name = "STB04xxx",
762 .cpu_features = CPU_FTRS_40X,
763 .cpu_user_features = PPC_FEATURE_32 |
764 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
769 .pvr_mask = 0xffff0000,
770 .pvr_value = 0x41610000,
771 .cpu_name = "NP405L",
772 .cpu_features = CPU_FTRS_40X,
773 .cpu_user_features = PPC_FEATURE_32 |
774 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
779 .pvr_mask = 0xffff0000,
780 .pvr_value = 0x40B10000,
781 .cpu_name = "NP4GS3",
782 .cpu_features = CPU_FTRS_40X,
783 .cpu_user_features = PPC_FEATURE_32 |
784 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
789 .pvr_mask = 0xffff0000,
790 .pvr_value = 0x41410000,
791 .cpu_name = "NP405H",
792 .cpu_features = CPU_FTRS_40X,
793 .cpu_user_features = PPC_FEATURE_32 |
794 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
799 .pvr_mask = 0xffff0000,
800 .pvr_value = 0x50910000,
801 .cpu_name = "405GPr",
802 .cpu_features = CPU_FTRS_40X,
803 .cpu_user_features = PPC_FEATURE_32 |
804 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
809 .pvr_mask = 0xffff0000,
810 .pvr_value = 0x51510000,
811 .cpu_name = "STBx25xx",
812 .cpu_features = CPU_FTRS_40X,
813 .cpu_user_features = PPC_FEATURE_32 |
814 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
819 .pvr_mask = 0xffff0000,
820 .pvr_value = 0x41F10000,
822 .cpu_features = CPU_FTRS_40X,
823 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
827 { /* Xilinx Virtex-II Pro */
828 .pvr_mask = 0xffff0000,
829 .pvr_value = 0x20010000,
830 .cpu_name = "Virtex-II Pro",
831 .cpu_features = CPU_FTRS_40X,
832 .cpu_user_features = PPC_FEATURE_32 |
833 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
838 .pvr_mask = 0xffff0000,
839 .pvr_value = 0x51210000,
841 .cpu_features = CPU_FTRS_40X,
842 .cpu_user_features = PPC_FEATURE_32 |
843 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
848 #endif /* CONFIG_40x */
851 .pvr_mask = 0xf0000fff,
852 .pvr_value = 0x40000850,
853 .cpu_name = "440EP Rev. A",
854 .cpu_features = CPU_FTRS_44X,
855 .cpu_user_features = COMMON_USER, /* 440EP has an FPU */
860 .pvr_mask = 0xf0000fff,
861 .pvr_value = 0x400008d3,
862 .cpu_name = "440EP Rev. B",
863 .cpu_features = CPU_FTRS_44X,
864 .cpu_user_features = COMMON_USER, /* 440EP has an FPU */
869 .pvr_mask = 0xf0000fff,
870 .pvr_value = 0x40000440,
871 .cpu_name = "440GP Rev. B",
872 .cpu_features = CPU_FTRS_44X,
873 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
878 .pvr_mask = 0xf0000fff,
879 .pvr_value = 0x40000481,
880 .cpu_name = "440GP Rev. C",
881 .cpu_features = CPU_FTRS_44X,
882 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
887 .pvr_mask = 0xf0000fff,
888 .pvr_value = 0x50000850,
889 .cpu_name = "440GX Rev. A",
890 .cpu_features = CPU_FTRS_44X,
891 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
896 .pvr_mask = 0xf0000fff,
897 .pvr_value = 0x50000851,
898 .cpu_name = "440GX Rev. B",
899 .cpu_features = CPU_FTRS_44X,
900 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
905 .pvr_mask = 0xf0000fff,
906 .pvr_value = 0x50000892,
907 .cpu_name = "440GX Rev. C",
908 .cpu_features = CPU_FTRS_44X,
909 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
914 .pvr_mask = 0xf0000fff,
915 .pvr_value = 0x50000894,
916 .cpu_name = "440GX Rev. F",
917 .cpu_features = CPU_FTRS_44X,
918 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
923 .pvr_mask = 0xff000fff,
924 .pvr_value = 0x53000891,
925 .cpu_name = "440SP Rev. A",
926 .cpu_features = CPU_FTRS_44X,
927 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
931 { /* 440SPe Rev. A */
932 .pvr_mask = 0xff000fff,
933 .pvr_value = 0x53000890,
934 .cpu_name = "440SPe Rev. A",
935 .cpu_features = CPU_FTR_SPLIT_ID_CACHE |
937 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
941 #endif /* CONFIG_44x */
942 #ifdef CONFIG_FSL_BOOKE
944 .pvr_mask = 0xfff00000,
945 .pvr_value = 0x81000000,
946 .cpu_name = "e200z5",
947 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
948 .cpu_features = CPU_FTRS_E200,
949 .cpu_user_features = PPC_FEATURE_32 |
950 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_EFP_SINGLE |
951 PPC_FEATURE_UNIFIED_CACHE,
955 .pvr_mask = 0xfff00000,
956 .pvr_value = 0x81100000,
957 .cpu_name = "e200z6",
958 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
959 .cpu_features = CPU_FTRS_E200,
960 .cpu_user_features = PPC_FEATURE_32 |
961 PPC_FEATURE_HAS_MMU | PPC_FEATURE_SPE_COMP |
962 PPC_FEATURE_HAS_EFP_SINGLE |
963 PPC_FEATURE_UNIFIED_CACHE,
967 .pvr_mask = 0xffff0000,
968 .pvr_value = 0x80200000,
970 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
971 .cpu_features = CPU_FTRS_E500,
972 .cpu_user_features = PPC_FEATURE_32 |
973 PPC_FEATURE_HAS_MMU | PPC_FEATURE_SPE_COMP |
974 PPC_FEATURE_HAS_EFP_SINGLE,
978 .oprofile_cpu_type = "ppc/e500",
979 .oprofile_type = BOOKE,
982 .pvr_mask = 0xffff0000,
983 .pvr_value = 0x80210000,
984 .cpu_name = "e500v2",
985 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
986 .cpu_features = CPU_FTRS_E500_2,
987 .cpu_user_features = PPC_FEATURE_32 |
988 PPC_FEATURE_HAS_MMU | PPC_FEATURE_SPE_COMP |
989 PPC_FEATURE_HAS_EFP_SINGLE | PPC_FEATURE_HAS_EFP_DOUBLE,
993 .oprofile_cpu_type = "ppc/e500",
994 .oprofile_type = BOOKE,
998 { /* default match */
999 .pvr_mask = 0x00000000,
1000 .pvr_value = 0x00000000,
1001 .cpu_name = "(generic PPC)",
1002 .cpu_features = CPU_FTRS_GENERIC_32,
1003 .cpu_user_features = PPC_FEATURE_32,
1007 #endif /* !CLASSIC_PPC */
1008 #endif /* CONFIG_PPC32 */