214f3b088edfcc62c0ce9709afb8192898629490
[safe/jmp/linux-2.6] / arch / powerpc / kernel / cputable.c
1 /*
2  *  Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org)
3  *
4  *  Modifications for ppc64:
5  *      Copyright (C) 2003 Dave Engebretsen <engebret@us.ibm.com>
6  *
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.
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>
18 #include <linux/module.h>
19
20 #include <asm/oprofile_impl.h>
21 #include <asm/cputable.h>
22
23 struct cpu_spec* cur_cpu_spec = NULL;
24 #ifdef CONFIG_PPC64
25 EXPORT_SYMBOL(cur_cpu_spec);
26 #endif
27
28 /* 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
36 extern void __setup_cpu_power3(unsigned long offset, struct cpu_spec* spec);
37 extern void __setup_cpu_power4(unsigned long offset, struct cpu_spec* spec);
38 extern void __setup_cpu_be(unsigned long offset, struct cpu_spec* spec);
39 #else
40 extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec);
41 extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec);
42 extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec);
43 extern void __setup_cpu_750cx(unsigned long offset, struct cpu_spec* spec);
44 extern void __setup_cpu_750fx(unsigned long offset, struct cpu_spec* spec);
45 extern void __setup_cpu_7400(unsigned long offset, struct cpu_spec* spec);
46 extern void __setup_cpu_7410(unsigned long offset, struct cpu_spec* spec);
47 extern void __setup_cpu_745x(unsigned long offset, struct cpu_spec* spec);
48 #endif /* CONFIG_PPC32 */
49 extern void __setup_cpu_ppc970(unsigned long offset, struct cpu_spec* spec);
50
51 /* This table only contains "desktop" CPUs, it need to be filled with embedded
52  * ones as well...
53  */
54 #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
58
59 /* We only set the spe features if the kernel was compiled with
60  * spe support
61  */
62 #ifdef CONFIG_SPE
63 #define PPC_FEATURE_SPE_COMP    PPC_FEATURE_HAS_SPE
64 #else
65 #define PPC_FEATURE_SPE_COMP    0
66 #endif
67
68 struct cpu_spec cpu_specs[] = {
69 #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
299 #if CLASSIC_PPC
300         {       /* 601 */
301                 .pvr_mask               = 0xffff0000,
302                 .pvr_value              = 0x00010000,
303                 .cpu_name               = "601",
304                 .cpu_features           = CPU_FTRS_PPC601,
305                 .cpu_user_features      = COMMON_USER | PPC_FEATURE_601_INSTR |
306                         PPC_FEATURE_UNIFIED_CACHE,
307                 .icache_bsize           = 32,
308                 .dcache_bsize           = 32,
309         },
310         {       /* 603 */
311                 .pvr_mask               = 0xffff0000,
312                 .pvr_value              = 0x00030000,
313                 .cpu_name               = "603",
314                 .cpu_features           = CPU_FTRS_603,
315                 .cpu_user_features      = COMMON_USER,
316                 .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",
324                 .cpu_features           = CPU_FTRS_603,
325                 .cpu_user_features      = COMMON_USER,
326                 .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",
334                 .cpu_features           = CPU_FTRS_603,
335                 .cpu_user_features      = COMMON_USER,
336                 .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",
344                 .cpu_features           = CPU_FTRS_604,
345                 .cpu_user_features      = COMMON_USER,
346                 .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",
355                 .cpu_features           = CPU_FTRS_604,
356                 .cpu_user_features      = COMMON_USER,
357                 .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",
366                 .cpu_features           = CPU_FTRS_604,
367                 .cpu_user_features      = COMMON_USER,
368                 .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",
377                 .cpu_features           = CPU_FTRS_604,
378                 .cpu_user_features      = COMMON_USER,
379                 .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",
388                 .cpu_features           = CPU_FTRS_740_NOTAU,
389                 .cpu_user_features      = COMMON_USER,
390                 .icache_bsize           = 32,
391                 .dcache_bsize           = 32,
392                 .num_pmcs               = 4,
393                 .cpu_setup              = __setup_cpu_750
394         },
395         {       /* 750CX (80100 and 8010x?) */
396                 .pvr_mask               = 0xfffffff0,
397                 .pvr_value              = 0x00080100,
398                 .cpu_name               = "750CX",
399                 .cpu_features           = CPU_FTRS_750,
400                 .cpu_user_features      = COMMON_USER,
401                 .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",
410                 .cpu_features           = CPU_FTRS_750,
411                 .cpu_user_features      = COMMON_USER,
412                 .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",
421                 .cpu_features           = CPU_FTRS_750,
422                 .cpu_user_features      = COMMON_USER,
423                 .icache_bsize           = 32,
424                 .dcache_bsize           = 32,
425                 .num_pmcs               = 4,
426                 .cpu_setup              = __setup_cpu_750cx
427         },
428         {       /* 750CXe "Gekko" (83214) */
429                 .pvr_mask               = 0xffffffff,
430                 .pvr_value              = 0x00083214,
431                 .cpu_name               = "750CXe",
432                 .cpu_features           = CPU_FTRS_750,
433                 .cpu_user_features      = COMMON_USER,
434                 .icache_bsize           = 32,
435                 .dcache_bsize           = 32,
436                 .num_pmcs               = 4,
437                 .cpu_setup              = __setup_cpu_750cx
438         },
439         {       /* 745/755 */
440                 .pvr_mask               = 0xfffff000,
441                 .pvr_value              = 0x00083000,
442                 .cpu_name               = "745/755",
443                 .cpu_features           = CPU_FTRS_750,
444                 .cpu_user_features      = COMMON_USER,
445                 .icache_bsize           = 32,
446                 .dcache_bsize           = 32,
447                 .num_pmcs               = 4,
448                 .cpu_setup              = __setup_cpu_750
449         },
450         {       /* 750FX rev 1.x */
451                 .pvr_mask               = 0xffffff00,
452                 .pvr_value              = 0x70000100,
453                 .cpu_name               = "750FX",
454                 .cpu_features           = CPU_FTRS_750FX1,
455                 .cpu_user_features      = COMMON_USER,
456                 .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",
465                 .cpu_features           = CPU_FTRS_750FX2,
466                 .cpu_user_features      = COMMON_USER,
467                 .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",
476                 .cpu_features           = CPU_FTRS_750FX,
477                 .cpu_user_features      = COMMON_USER,
478                 .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",
487                 .cpu_features           = CPU_FTRS_750GX,
488                 .cpu_user_features      = COMMON_USER,
489                 .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",
498                 .cpu_features           = CPU_FTRS_740,
499                 .cpu_user_features      = COMMON_USER,
500                 .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)",
509                 .cpu_features           = CPU_FTRS_7400_NOTAU,
510                 .cpu_user_features      = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
511                 .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",
520                 .cpu_features           = CPU_FTRS_7400,
521                 .cpu_user_features      = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
522                 .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",
531                 .cpu_features           = CPU_FTRS_7400,
532                 .cpu_user_features      = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
533                 .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",
542                 .cpu_features           = CPU_FTRS_7450_20,
543                 .cpu_user_features      = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
544                 .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",
553                 .cpu_features           = CPU_FTRS_7450_21,
554                 .cpu_user_features      = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
555                 .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",
564                 .cpu_features           = CPU_FTRS_7450_23,
565                 .cpu_user_features      = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
566                 .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",
575                 .cpu_features           = CPU_FTRS_7455_1,
576                 .cpu_user_features      = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
577                 .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",
586                 .cpu_features           = CPU_FTRS_7455_20,
587                 .cpu_user_features      = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
588                 .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",
597                 .cpu_features           = CPU_FTRS_7455,
598                 .cpu_user_features      = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
599                 .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",
608                 .cpu_features           = CPU_FTRS_7447_10,
609                 .cpu_user_features      = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
610                 .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",
619                 .cpu_features           = CPU_FTRS_7447_10,
620                 .cpu_user_features      = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
621                 .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",
630                 .cpu_features           = CPU_FTRS_7447,
631                 .cpu_user_features      = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
632                 .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",
641                 .cpu_features           = CPU_FTRS_7447A,
642                 .cpu_user_features      = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
643                 .icache_bsize           = 32,
644                 .dcache_bsize           = 32,
645                 .num_pmcs               = 6,
646                 .cpu_setup              = __setup_cpu_745x
647         },
648         {       /* 7448 */
649                 .pvr_mask               = 0xffff0000,
650                 .pvr_value              = 0x80040000,
651                 .cpu_name               = "7448",
652                 .cpu_features           = CPU_FTRS_7447A,
653                 .cpu_user_features      = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP,
654                 .icache_bsize           = 32,
655                 .dcache_bsize           = 32,
656                 .num_pmcs               = 6,
657                 .cpu_setup              = __setup_cpu_745x
658         },
659         {       /* 82xx (8240, 8245, 8260 are all 603e cores) */
660                 .pvr_mask               = 0x7fff0000,
661                 .pvr_value              = 0x00810000,
662                 .cpu_name               = "82xx",
663                 .cpu_features           = CPU_FTRS_82XX,
664                 .cpu_user_features      = COMMON_USER,
665                 .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",
673                 .cpu_features           = CPU_FTRS_G2_LE,
674                 .cpu_user_features      = COMMON_USER,
675                 .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",
683                 .cpu_features           = CPU_FTRS_E300,
684                 .cpu_user_features      = COMMON_USER,
685                 .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)",
693                 .cpu_features           = CPU_FTRS_CLASSIC32,
694                 .cpu_user_features      = COMMON_USER,
695                 .icache_bsize           = 32,
696                 .dcache_bsize           = 32,
697         },
698 #endif /* CLASSIC_PPC */
699 #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.... */
706                 .cpu_features           = CPU_FTRS_8XX,
707                 .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",
717                 .cpu_features           = CPU_FTRS_40X,
718                 .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",
726                 .cpu_features           = CPU_FTRS_40X,
727                 .cpu_user_features      = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
728                 .icache_bsize           = 16,
729                 .dcache_bsize           = 16,
730         },
731         {       /* 403G ?? */
732                 .pvr_mask               = 0xffff0000,
733                 .pvr_value              = 0x00200000,
734                 .cpu_name               = "403G ??",
735                 .cpu_features           = CPU_FTRS_40X,
736                 .cpu_user_features      = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
737                 .icache_bsize           = 16,
738                 .dcache_bsize           = 16,
739         },
740         {       /* 405GP */
741                 .pvr_mask               = 0xffff0000,
742                 .pvr_value              = 0x40110000,
743                 .cpu_name               = "405GP",
744                 .cpu_features           = CPU_FTRS_40X,
745                 .cpu_user_features      = PPC_FEATURE_32 |
746                         PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
747                 .icache_bsize           = 32,
748                 .dcache_bsize           = 32,
749         },
750         {       /* STB 03xxx */
751                 .pvr_mask               = 0xffff0000,
752                 .pvr_value              = 0x40130000,
753                 .cpu_name               = "STB03xxx",
754                 .cpu_features           = CPU_FTRS_40X,
755                 .cpu_user_features      = PPC_FEATURE_32 |
756                         PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
757                 .icache_bsize           = 32,
758                 .dcache_bsize           = 32,
759         },
760         {       /* STB 04xxx */
761                 .pvr_mask               = 0xffff0000,
762                 .pvr_value              = 0x41810000,
763                 .cpu_name               = "STB04xxx",
764                 .cpu_features           = CPU_FTRS_40X,
765                 .cpu_user_features      = PPC_FEATURE_32 |
766                         PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
767                 .icache_bsize           = 32,
768                 .dcache_bsize           = 32,
769         },
770         {       /* NP405L */
771                 .pvr_mask               = 0xffff0000,
772                 .pvr_value              = 0x41610000,
773                 .cpu_name               = "NP405L",
774                 .cpu_features           = CPU_FTRS_40X,
775                 .cpu_user_features      = PPC_FEATURE_32 |
776                         PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
777                 .icache_bsize           = 32,
778                 .dcache_bsize           = 32,
779         },
780         {       /* NP4GS3 */
781                 .pvr_mask               = 0xffff0000,
782                 .pvr_value              = 0x40B10000,
783                 .cpu_name               = "NP4GS3",
784                 .cpu_features           = CPU_FTRS_40X,
785                 .cpu_user_features      = PPC_FEATURE_32 |
786                         PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
787                 .icache_bsize           = 32,
788                 .dcache_bsize           = 32,
789         },
790         {   /* NP405H */
791                 .pvr_mask               = 0xffff0000,
792                 .pvr_value              = 0x41410000,
793                 .cpu_name               = "NP405H",
794                 .cpu_features           = CPU_FTRS_40X,
795                 .cpu_user_features      = PPC_FEATURE_32 |
796                         PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
797                 .icache_bsize           = 32,
798                 .dcache_bsize           = 32,
799         },
800         {       /* 405GPr */
801                 .pvr_mask               = 0xffff0000,
802                 .pvr_value              = 0x50910000,
803                 .cpu_name               = "405GPr",
804                 .cpu_features           = CPU_FTRS_40X,
805                 .cpu_user_features      = PPC_FEATURE_32 |
806                         PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
807                 .icache_bsize           = 32,
808                 .dcache_bsize           = 32,
809         },
810         {   /* STBx25xx */
811                 .pvr_mask               = 0xffff0000,
812                 .pvr_value              = 0x51510000,
813                 .cpu_name               = "STBx25xx",
814                 .cpu_features           = CPU_FTRS_40X,
815                 .cpu_user_features      = PPC_FEATURE_32 |
816                         PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
817                 .icache_bsize           = 32,
818                 .dcache_bsize           = 32,
819         },
820         {       /* 405LP */
821                 .pvr_mask               = 0xffff0000,
822                 .pvr_value              = 0x41F10000,
823                 .cpu_name               = "405LP",
824                 .cpu_features           = CPU_FTRS_40X,
825                 .cpu_user_features      = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
826                 .icache_bsize           = 32,
827                 .dcache_bsize           = 32,
828         },
829         {       /* Xilinx Virtex-II Pro  */
830                 .pvr_mask               = 0xffff0000,
831                 .pvr_value              = 0x20010000,
832                 .cpu_name               = "Virtex-II Pro",
833                 .cpu_features           = CPU_FTRS_40X,
834                 .cpu_user_features      = PPC_FEATURE_32 |
835                         PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
836                 .icache_bsize           = 32,
837                 .dcache_bsize           = 32,
838         },
839         {       /* 405EP */
840                 .pvr_mask               = 0xffff0000,
841                 .pvr_value              = 0x51210000,
842                 .cpu_name               = "405EP",
843                 .cpu_features           = CPU_FTRS_40X,
844                 .cpu_user_features      = PPC_FEATURE_32 |
845                         PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
846                 .icache_bsize           = 32,
847                 .dcache_bsize           = 32,
848         },
849
850 #endif /* CONFIG_40x */
851 #ifdef CONFIG_44x
852         {
853                 .pvr_mask               = 0xf0000fff,
854                 .pvr_value              = 0x40000850,
855                 .cpu_name               = "440EP Rev. A",
856                 .cpu_features           = CPU_FTRS_44X,
857                 .cpu_user_features      = COMMON_USER, /* 440EP has an FPU */
858                 .icache_bsize           = 32,
859                 .dcache_bsize           = 32,
860         },
861         {
862                 .pvr_mask               = 0xf0000fff,
863                 .pvr_value              = 0x400008d3,
864                 .cpu_name               = "440EP Rev. B",
865                 .cpu_features           = CPU_FTRS_44X,
866                 .cpu_user_features      = COMMON_USER, /* 440EP has an FPU */
867                 .icache_bsize           = 32,
868                 .dcache_bsize           = 32,
869         },
870         {       /* 440GP Rev. B */
871                 .pvr_mask               = 0xf0000fff,
872                 .pvr_value              = 0x40000440,
873                 .cpu_name               = "440GP Rev. B",
874                 .cpu_features           = CPU_FTRS_44X,
875                 .cpu_user_features      = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
876                 .icache_bsize           = 32,
877                 .dcache_bsize           = 32,
878         },
879         {       /* 440GP Rev. C */
880                 .pvr_mask               = 0xf0000fff,
881                 .pvr_value              = 0x40000481,
882                 .cpu_name               = "440GP Rev. C",
883                 .cpu_features           = CPU_FTRS_44X,
884                 .cpu_user_features      = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
885                 .icache_bsize           = 32,
886                 .dcache_bsize           = 32,
887         },
888         { /* 440GX Rev. A */
889                 .pvr_mask               = 0xf0000fff,
890                 .pvr_value              = 0x50000850,
891                 .cpu_name               = "440GX Rev. A",
892                 .cpu_features           = CPU_FTRS_44X,
893                 .cpu_user_features      = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
894                 .icache_bsize           = 32,
895                 .dcache_bsize           = 32,
896         },
897         { /* 440GX Rev. B */
898                 .pvr_mask               = 0xf0000fff,
899                 .pvr_value              = 0x50000851,
900                 .cpu_name               = "440GX Rev. B",
901                 .cpu_features           = CPU_FTRS_44X,
902                 .cpu_user_features      = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
903                 .icache_bsize           = 32,
904                 .dcache_bsize           = 32,
905         },
906         { /* 440GX Rev. C */
907                 .pvr_mask               = 0xf0000fff,
908                 .pvr_value              = 0x50000892,
909                 .cpu_name               = "440GX Rev. C",
910                 .cpu_features           = CPU_FTRS_44X,
911                 .cpu_user_features      = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
912                 .icache_bsize           = 32,
913                 .dcache_bsize           = 32,
914         },
915         { /* 440GX Rev. F */
916                 .pvr_mask               = 0xf0000fff,
917                 .pvr_value              = 0x50000894,
918                 .cpu_name               = "440GX Rev. F",
919                 .cpu_features           = CPU_FTRS_44X,
920                 .cpu_user_features      = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
921                 .icache_bsize           = 32,
922                 .dcache_bsize           = 32,
923         },
924         { /* 440SP Rev. A */
925                 .pvr_mask               = 0xff000fff,
926                 .pvr_value              = 0x53000891,
927                 .cpu_name               = "440SP Rev. A",
928                 .cpu_features           = CPU_FTRS_44X,
929                 .cpu_user_features      = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
930                 .icache_bsize           = 32,
931                 .dcache_bsize           = 32,
932         },
933 #endif /* CONFIG_44x */
934 #ifdef CONFIG_FSL_BOOKE
935         {       /* e200z5 */
936                 .pvr_mask               = 0xfff00000,
937                 .pvr_value              = 0x81000000,
938                 .cpu_name               = "e200z5",
939                 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
940                 .cpu_features           = CPU_FTRS_E200,
941                 .cpu_user_features      = PPC_FEATURE_32 |
942                         PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_EFP_SINGLE |
943                         PPC_FEATURE_UNIFIED_CACHE,
944                 .dcache_bsize           = 32,
945         },
946         {       /* e200z6 */
947                 .pvr_mask               = 0xfff00000,
948                 .pvr_value              = 0x81100000,
949                 .cpu_name               = "e200z6",
950                 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
951                 .cpu_features           = CPU_FTRS_E200,
952                 .cpu_user_features      = PPC_FEATURE_32 |
953                         PPC_FEATURE_HAS_MMU | PPC_FEATURE_SPE_COMP |
954                         PPC_FEATURE_HAS_EFP_SINGLE |
955                         PPC_FEATURE_UNIFIED_CACHE,
956                 .dcache_bsize           = 32,
957         },
958         {       /* e500 */
959                 .pvr_mask               = 0xffff0000,
960                 .pvr_value              = 0x80200000,
961                 .cpu_name               = "e500",
962                 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
963                 .cpu_features           = CPU_FTRS_E500,
964                 .cpu_user_features      = PPC_FEATURE_32 |
965                         PPC_FEATURE_HAS_MMU | PPC_FEATURE_SPE_COMP |
966                         PPC_FEATURE_HAS_EFP_SINGLE,
967                 .icache_bsize           = 32,
968                 .dcache_bsize           = 32,
969                 .num_pmcs               = 4,
970         },
971         {       /* e500v2 */
972                 .pvr_mask               = 0xffff0000,
973                 .pvr_value              = 0x80210000,
974                 .cpu_name               = "e500v2",
975                 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
976                 .cpu_features           = CPU_FTRS_E500_2,
977                 .cpu_user_features      = PPC_FEATURE_32 |
978                         PPC_FEATURE_HAS_MMU | PPC_FEATURE_SPE_COMP |
979                         PPC_FEATURE_HAS_EFP_SINGLE | PPC_FEATURE_HAS_EFP_DOUBLE,
980                 .icache_bsize           = 32,
981                 .dcache_bsize           = 32,
982                 .num_pmcs               = 4,
983         },
984 #endif
985 #if !CLASSIC_PPC
986         {       /* default match */
987                 .pvr_mask               = 0x00000000,
988                 .pvr_value              = 0x00000000,
989                 .cpu_name               = "(generic PPC)",
990                 .cpu_features           = CPU_FTRS_GENERIC_32,
991                 .cpu_user_features      = PPC_FEATURE_32,
992                 .icache_bsize           = 32,
993                 .dcache_bsize           = 32,
994         }
995 #endif /* !CLASSIC_PPC */
996 #endif /* CONFIG_PPC32 */
997 };