Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394...
[deliverable/linux.git] / arch / powerpc / kernel / cputable.c
CommitLineData
1da177e4 1/*
1da177e4
LT
2 * Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org)
3 *
4920960f
SR
4 * Modifications for ppc64:
5 * Copyright (C) 2003 Dave Engebretsen <engebret@us.ibm.com>
6 *
1da177e4
LT
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
1da177e4
LT
13#include <linux/string.h>
14#include <linux/sched.h>
15#include <linux/threads.h>
16#include <linux/init.h>
400d2212
KG
17#include <linux/module.h>
18
19#include <asm/oprofile_impl.h>
1da177e4 20#include <asm/cputable.h>
42c4aaad 21#include <asm/prom.h> /* for PTRRELOC on ARCH=ppc */
1da177e4 22
400d2212 23struct cpu_spec* cur_cpu_spec = NULL;
4920960f 24EXPORT_SYMBOL(cur_cpu_spec);
1da177e4 25
9115d134
NL
26/* The platform string corresponding to the real PVR */
27const char *powerpc_base_platform;
28
4920960f
SR
29/* NOTE:
30 * Unlike ppc32, ppc64 will only call this once for the boot CPU, it's
31 * the responsibility of the appropriate CPU save/restore functions to
32 * eventually copy these settings over. Those save/restore aren't yet
33 * part of the cputable though. That has to be fixed for both ppc32
34 * and ppc64
35 */
b26f100d 36#ifdef CONFIG_PPC32
8112753b
VB
37extern void __setup_cpu_440ep(unsigned long offset, struct cpu_spec* spec);
38extern void __setup_cpu_440epx(unsigned long offset, struct cpu_spec* spec);
47c0bd1a 39extern void __setup_cpu_440gx(unsigned long offset, struct cpu_spec* spec);
340ffd26 40extern void __setup_cpu_440grx(unsigned long offset, struct cpu_spec* spec);
47c0bd1a 41extern void __setup_cpu_440spe(unsigned long offset, struct cpu_spec* spec);
464076a4 42extern void __setup_cpu_460ex(unsigned long offset, struct cpu_spec* spec);
939e622c 43extern void __setup_cpu_460gt(unsigned long offset, struct cpu_spec* spec);
400d2212
KG
44extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec);
45extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec);
46extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec);
47extern void __setup_cpu_750cx(unsigned long offset, struct cpu_spec* spec);
48extern void __setup_cpu_750fx(unsigned long offset, struct cpu_spec* spec);
49extern void __setup_cpu_7400(unsigned long offset, struct cpu_spec* spec);
50extern void __setup_cpu_7410(unsigned long offset, struct cpu_spec* spec);
51extern void __setup_cpu_745x(unsigned long offset, struct cpu_spec* spec);
4920960f 52#endif /* CONFIG_PPC32 */
f39b7a55 53#ifdef CONFIG_PPC64
400d2212 54extern void __setup_cpu_ppc970(unsigned long offset, struct cpu_spec* spec);
5b43d20a 55extern void __setup_cpu_ppc970MP(unsigned long offset, struct cpu_spec* spec);
1199919b 56extern void __setup_cpu_pa6t(unsigned long offset, struct cpu_spec* spec);
40d244d6 57extern void __restore_cpu_pa6t(void);
f39b7a55 58extern void __restore_cpu_ppc970(void);
e952e6c4
MN
59extern void __setup_cpu_power7(unsigned long offset, struct cpu_spec* spec);
60extern void __restore_cpu_power7(void);
f39b7a55 61#endif /* CONFIG_PPC64 */
1da177e4 62
1da177e4
LT
63/* This table only contains "desktop" CPUs, it need to be filled with embedded
64 * ones as well...
65 */
4920960f
SR
66#define COMMON_USER (PPC_FEATURE_32 | PPC_FEATURE_HAS_FPU | \
67 PPC_FEATURE_HAS_MMU)
68#define COMMON_USER_PPC64 (COMMON_USER | PPC_FEATURE_64)
a7ddc5e8 69#define COMMON_USER_POWER4 (COMMON_USER_PPC64 | PPC_FEATURE_POWER4)
aa5cb021
BH
70#define COMMON_USER_POWER5 (COMMON_USER_PPC64 | PPC_FEATURE_POWER5 |\
71 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP)
72#define COMMON_USER_POWER5_PLUS (COMMON_USER_PPC64 | PPC_FEATURE_POWER5_PLUS|\
73 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP)
03054d51 74#define COMMON_USER_POWER6 (COMMON_USER_PPC64 | PPC_FEATURE_ARCH_2_05 |\
fab5db97 75 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP | \
0f473314
NL
76 PPC_FEATURE_TRUE_LE | \
77 PPC_FEATURE_PSERIES_PERFMON_COMPAT)
e952e6c4
MN
78#define COMMON_USER_POWER7 (COMMON_USER_PPC64 | PPC_FEATURE_ARCH_2_06 |\
79 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP | \
0f473314
NL
80 PPC_FEATURE_TRUE_LE | \
81 PPC_FEATURE_PSERIES_PERFMON_COMPAT)
b3ebd1d8
OJ
82#define COMMON_USER_PA6T (COMMON_USER_PPC64 | PPC_FEATURE_PA6T |\
83 PPC_FEATURE_TRUE_LE | \
84 PPC_FEATURE_HAS_ALTIVEC_COMP)
80f15dc7
PM
85#define COMMON_USER_BOOKE (PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU | \
86 PPC_FEATURE_BOOKE)
1da177e4 87
87a72f9e 88static struct cpu_spec __initdata cpu_specs[] = {
4920960f
SR
89#ifdef CONFIG_PPC64
90 { /* Power3 */
91 .pvr_mask = 0xffff0000,
92 .pvr_value = 0x00400000,
93 .cpu_name = "POWER3 (630)",
94 .cpu_features = CPU_FTRS_POWER3,
fab5db97 95 .cpu_user_features = COMMON_USER_PPC64|PPC_FEATURE_PPC_LE,
4920960f
SR
96 .icache_bsize = 128,
97 .dcache_bsize = 128,
98 .num_pmcs = 8,
1bd2e5ae 99 .pmc_type = PPC_PMC_IBM,
4920960f 100 .oprofile_cpu_type = "ppc64/power3",
7a45fb19 101 .oprofile_type = PPC_OPROFILE_RS64,
47c0bd1a 102 .machine_check = machine_check_generic,
80f15dc7 103 .platform = "power3",
4920960f
SR
104 },
105 { /* Power3+ */
106 .pvr_mask = 0xffff0000,
107 .pvr_value = 0x00410000,
108 .cpu_name = "POWER3 (630+)",
109 .cpu_features = CPU_FTRS_POWER3,
fab5db97 110 .cpu_user_features = COMMON_USER_PPC64|PPC_FEATURE_PPC_LE,
4920960f
SR
111 .icache_bsize = 128,
112 .dcache_bsize = 128,
113 .num_pmcs = 8,
1bd2e5ae 114 .pmc_type = PPC_PMC_IBM,
4920960f 115 .oprofile_cpu_type = "ppc64/power3",
7a45fb19 116 .oprofile_type = PPC_OPROFILE_RS64,
47c0bd1a 117 .machine_check = machine_check_generic,
80f15dc7 118 .platform = "power3",
4920960f
SR
119 },
120 { /* Northstar */
121 .pvr_mask = 0xffff0000,
122 .pvr_value = 0x00330000,
123 .cpu_name = "RS64-II (northstar)",
124 .cpu_features = CPU_FTRS_RS64,
125 .cpu_user_features = COMMON_USER_PPC64,
126 .icache_bsize = 128,
127 .dcache_bsize = 128,
128 .num_pmcs = 8,
1bd2e5ae 129 .pmc_type = PPC_PMC_IBM,
4920960f 130 .oprofile_cpu_type = "ppc64/rs64",
7a45fb19 131 .oprofile_type = PPC_OPROFILE_RS64,
47c0bd1a 132 .machine_check = machine_check_generic,
80f15dc7 133 .platform = "rs64",
4920960f
SR
134 },
135 { /* Pulsar */
136 .pvr_mask = 0xffff0000,
137 .pvr_value = 0x00340000,
138 .cpu_name = "RS64-III (pulsar)",
139 .cpu_features = CPU_FTRS_RS64,
140 .cpu_user_features = COMMON_USER_PPC64,
141 .icache_bsize = 128,
142 .dcache_bsize = 128,
143 .num_pmcs = 8,
1bd2e5ae 144 .pmc_type = PPC_PMC_IBM,
4920960f 145 .oprofile_cpu_type = "ppc64/rs64",
7a45fb19 146 .oprofile_type = PPC_OPROFILE_RS64,
47c0bd1a 147 .machine_check = machine_check_generic,
80f15dc7 148 .platform = "rs64",
4920960f
SR
149 },
150 { /* I-star */
151 .pvr_mask = 0xffff0000,
152 .pvr_value = 0x00360000,
153 .cpu_name = "RS64-III (icestar)",
154 .cpu_features = CPU_FTRS_RS64,
155 .cpu_user_features = COMMON_USER_PPC64,
156 .icache_bsize = 128,
157 .dcache_bsize = 128,
158 .num_pmcs = 8,
1bd2e5ae 159 .pmc_type = PPC_PMC_IBM,
4920960f 160 .oprofile_cpu_type = "ppc64/rs64",
7a45fb19 161 .oprofile_type = PPC_OPROFILE_RS64,
47c0bd1a 162 .machine_check = machine_check_generic,
80f15dc7 163 .platform = "rs64",
4920960f
SR
164 },
165 { /* S-star */
166 .pvr_mask = 0xffff0000,
167 .pvr_value = 0x00370000,
168 .cpu_name = "RS64-IV (sstar)",
169 .cpu_features = CPU_FTRS_RS64,
170 .cpu_user_features = COMMON_USER_PPC64,
171 .icache_bsize = 128,
172 .dcache_bsize = 128,
173 .num_pmcs = 8,
1bd2e5ae 174 .pmc_type = PPC_PMC_IBM,
4920960f 175 .oprofile_cpu_type = "ppc64/rs64",
7a45fb19 176 .oprofile_type = PPC_OPROFILE_RS64,
47c0bd1a 177 .machine_check = machine_check_generic,
80f15dc7 178 .platform = "rs64",
4920960f
SR
179 },
180 { /* Power4 */
181 .pvr_mask = 0xffff0000,
182 .pvr_value = 0x00350000,
183 .cpu_name = "POWER4 (gp)",
184 .cpu_features = CPU_FTRS_POWER4,
a7ddc5e8 185 .cpu_user_features = COMMON_USER_POWER4,
4920960f
SR
186 .icache_bsize = 128,
187 .dcache_bsize = 128,
188 .num_pmcs = 8,
1bd2e5ae 189 .pmc_type = PPC_PMC_IBM,
4920960f 190 .oprofile_cpu_type = "ppc64/power4",
7a45fb19 191 .oprofile_type = PPC_OPROFILE_POWER4,
47c0bd1a 192 .machine_check = machine_check_generic,
80f15dc7 193 .platform = "power4",
4920960f
SR
194 },
195 { /* Power4+ */
196 .pvr_mask = 0xffff0000,
197 .pvr_value = 0x00380000,
198 .cpu_name = "POWER4+ (gq)",
199 .cpu_features = CPU_FTRS_POWER4,
a7ddc5e8 200 .cpu_user_features = COMMON_USER_POWER4,
4920960f
SR
201 .icache_bsize = 128,
202 .dcache_bsize = 128,
203 .num_pmcs = 8,
1bd2e5ae 204 .pmc_type = PPC_PMC_IBM,
4920960f 205 .oprofile_cpu_type = "ppc64/power4",
7a45fb19 206 .oprofile_type = PPC_OPROFILE_POWER4,
47c0bd1a 207 .machine_check = machine_check_generic,
80f15dc7 208 .platform = "power4",
4920960f
SR
209 },
210 { /* PPC970 */
211 .pvr_mask = 0xffff0000,
212 .pvr_value = 0x00390000,
213 .cpu_name = "PPC970",
214 .cpu_features = CPU_FTRS_PPC970,
a7ddc5e8 215 .cpu_user_features = COMMON_USER_POWER4 |
4920960f
SR
216 PPC_FEATURE_HAS_ALTIVEC_COMP,
217 .icache_bsize = 128,
218 .dcache_bsize = 128,
219 .num_pmcs = 8,
1bd2e5ae 220 .pmc_type = PPC_PMC_IBM,
4920960f 221 .cpu_setup = __setup_cpu_ppc970,
f39b7a55 222 .cpu_restore = __restore_cpu_ppc970,
4920960f 223 .oprofile_cpu_type = "ppc64/970",
7a45fb19 224 .oprofile_type = PPC_OPROFILE_POWER4,
47c0bd1a 225 .machine_check = machine_check_generic,
80f15dc7 226 .platform = "ppc970",
4920960f 227 },
4920960f
SR
228 { /* PPC970FX */
229 .pvr_mask = 0xffff0000,
230 .pvr_value = 0x003c0000,
231 .cpu_name = "PPC970FX",
4920960f 232 .cpu_features = CPU_FTRS_PPC970,
a7ddc5e8 233 .cpu_user_features = COMMON_USER_POWER4 |
4920960f
SR
234 PPC_FEATURE_HAS_ALTIVEC_COMP,
235 .icache_bsize = 128,
236 .dcache_bsize = 128,
237 .num_pmcs = 8,
1bd2e5ae 238 .pmc_type = PPC_PMC_IBM,
4920960f 239 .cpu_setup = __setup_cpu_ppc970,
f39b7a55 240 .cpu_restore = __restore_cpu_ppc970,
4920960f 241 .oprofile_cpu_type = "ppc64/970",
7a45fb19 242 .oprofile_type = PPC_OPROFILE_POWER4,
47c0bd1a 243 .machine_check = machine_check_generic,
80f15dc7 244 .platform = "ppc970",
3546e811
OJ
245 },
246 { /* PPC970MP DD1.0 - no DEEPNAP, use regular 970 init */
247 .pvr_mask = 0xffffffff,
248 .pvr_value = 0x00440100,
249 .cpu_name = "PPC970MP",
250 .cpu_features = CPU_FTRS_PPC970,
251 .cpu_user_features = COMMON_USER_POWER4 |
252 PPC_FEATURE_HAS_ALTIVEC_COMP,
253 .icache_bsize = 128,
254 .dcache_bsize = 128,
255 .num_pmcs = 8,
2fae4985 256 .pmc_type = PPC_PMC_IBM,
3546e811
OJ
257 .cpu_setup = __setup_cpu_ppc970,
258 .cpu_restore = __restore_cpu_ppc970,
259 .oprofile_cpu_type = "ppc64/970MP",
260 .oprofile_type = PPC_OPROFILE_POWER4,
47c0bd1a 261 .machine_check = machine_check_generic,
3546e811 262 .platform = "ppc970",
4920960f 263 },
4920960f
SR
264 { /* PPC970MP */
265 .pvr_mask = 0xffff0000,
266 .pvr_value = 0x00440000,
267 .cpu_name = "PPC970MP",
268 .cpu_features = CPU_FTRS_PPC970,
a7ddc5e8 269 .cpu_user_features = COMMON_USER_POWER4 |
4920960f
SR
270 PPC_FEATURE_HAS_ALTIVEC_COMP,
271 .icache_bsize = 128,
272 .dcache_bsize = 128,
87af41be 273 .num_pmcs = 8,
2fae4985 274 .pmc_type = PPC_PMC_IBM,
5b43d20a 275 .cpu_setup = __setup_cpu_ppc970MP,
f39b7a55 276 .cpu_restore = __restore_cpu_ppc970,
fecb352f 277 .oprofile_cpu_type = "ppc64/970MP",
7a45fb19 278 .oprofile_type = PPC_OPROFILE_POWER4,
47c0bd1a 279 .machine_check = machine_check_generic,
80f15dc7 280 .platform = "ppc970",
4920960f 281 },
362ff7b2
JM
282 { /* PPC970GX */
283 .pvr_mask = 0xffff0000,
284 .pvr_value = 0x00450000,
285 .cpu_name = "PPC970GX",
286 .cpu_features = CPU_FTRS_PPC970,
287 .cpu_user_features = COMMON_USER_POWER4 |
288 PPC_FEATURE_HAS_ALTIVEC_COMP,
289 .icache_bsize = 128,
290 .dcache_bsize = 128,
291 .num_pmcs = 8,
1bd2e5ae 292 .pmc_type = PPC_PMC_IBM,
362ff7b2
JM
293 .cpu_setup = __setup_cpu_ppc970,
294 .oprofile_cpu_type = "ppc64/970",
295 .oprofile_type = PPC_OPROFILE_POWER4,
47c0bd1a 296 .machine_check = machine_check_generic,
362ff7b2
JM
297 .platform = "ppc970",
298 },
3c726f8d 299 { /* Power5 GR */
4920960f
SR
300 .pvr_mask = 0xffff0000,
301 .pvr_value = 0x003a0000,
302 .cpu_name = "POWER5 (gr)",
303 .cpu_features = CPU_FTRS_POWER5,
a7ddc5e8 304 .cpu_user_features = COMMON_USER_POWER5,
4920960f
SR
305 .icache_bsize = 128,
306 .dcache_bsize = 128,
307 .num_pmcs = 6,
1bd2e5ae 308 .pmc_type = PPC_PMC_IBM,
4920960f 309 .oprofile_cpu_type = "ppc64/power5",
7a45fb19 310 .oprofile_type = PPC_OPROFILE_POWER4,
e78dbc80
MN
311 /* SIHV / SIPR bits are implemented on POWER4+ (GQ)
312 * and above but only works on POWER5 and above
313 */
314 .oprofile_mmcra_sihv = MMCRA_SIHV,
315 .oprofile_mmcra_sipr = MMCRA_SIPR,
47c0bd1a 316 .machine_check = machine_check_generic,
80f15dc7 317 .platform = "power5",
4920960f 318 },
31a12cec
MW
319 { /* Power5++ */
320 .pvr_mask = 0xffffff00,
321 .pvr_value = 0x003b0300,
322 .cpu_name = "POWER5+ (gs)",
323 .cpu_features = CPU_FTRS_POWER5,
324 .cpu_user_features = COMMON_USER_POWER5_PLUS,
325 .icache_bsize = 128,
326 .dcache_bsize = 128,
327 .num_pmcs = 6,
328 .oprofile_cpu_type = "ppc64/power5++",
329 .oprofile_type = PPC_OPROFILE_POWER4,
330 .oprofile_mmcra_sihv = MMCRA_SIHV,
331 .oprofile_mmcra_sipr = MMCRA_SIPR,
47c0bd1a 332 .machine_check = machine_check_generic,
31a12cec
MW
333 .platform = "power5+",
334 },
3c726f8d 335 { /* Power5 GS */
4920960f
SR
336 .pvr_mask = 0xffff0000,
337 .pvr_value = 0x003b0000,
834608f7 338 .cpu_name = "POWER5+ (gs)",
4920960f 339 .cpu_features = CPU_FTRS_POWER5,
a7ddc5e8 340 .cpu_user_features = COMMON_USER_POWER5_PLUS,
4920960f
SR
341 .icache_bsize = 128,
342 .dcache_bsize = 128,
343 .num_pmcs = 6,
1bd2e5ae 344 .pmc_type = PPC_PMC_IBM,
834608f7 345 .oprofile_cpu_type = "ppc64/power5+",
7a45fb19 346 .oprofile_type = PPC_OPROFILE_POWER4,
e78dbc80
MN
347 .oprofile_mmcra_sihv = MMCRA_SIHV,
348 .oprofile_mmcra_sipr = MMCRA_SIPR,
47c0bd1a 349 .machine_check = machine_check_generic,
80f15dc7 350 .platform = "power5+",
4920960f 351 },
974a76f5
PM
352 { /* POWER6 in P5+ mode; 2.04-compliant processor */
353 .pvr_mask = 0xffffffff,
354 .pvr_value = 0x0f000001,
355 .cpu_name = "POWER5+",
356 .cpu_features = CPU_FTRS_POWER5,
357 .cpu_user_features = COMMON_USER_POWER5_PLUS,
358 .icache_bsize = 128,
359 .dcache_bsize = 128,
47c0bd1a 360 .machine_check = machine_check_generic,
79e25bac 361 .oprofile_cpu_type = "ppc64/compat-power5+",
974a76f5
PM
362 .platform = "power5+",
363 },
03054d51
AB
364 { /* Power6 */
365 .pvr_mask = 0xffff0000,
366 .pvr_value = 0x003e0000,
974a76f5
PM
367 .cpu_name = "POWER6 (raw)",
368 .cpu_features = CPU_FTRS_POWER6,
369 .cpu_user_features = COMMON_USER_POWER6 |
370 PPC_FEATURE_POWER6_EXT,
371 .icache_bsize = 128,
372 .dcache_bsize = 128,
373 .num_pmcs = 6,
2fae4985 374 .pmc_type = PPC_PMC_IBM,
974a76f5
PM
375 .oprofile_cpu_type = "ppc64/power6",
376 .oprofile_type = PPC_OPROFILE_POWER4,
377 .oprofile_mmcra_sihv = POWER6_MMCRA_SIHV,
378 .oprofile_mmcra_sipr = POWER6_MMCRA_SIPR,
379 .oprofile_mmcra_clear = POWER6_MMCRA_THRM |
380 POWER6_MMCRA_OTHER,
47c0bd1a 381 .machine_check = machine_check_generic,
974a76f5
PM
382 .platform = "power6x",
383 },
384 { /* 2.05-compliant processor, i.e. Power6 "architected" mode */
385 .pvr_mask = 0xffffffff,
386 .pvr_value = 0x0f000002,
387 .cpu_name = "POWER6 (architected)",
03054d51
AB
388 .cpu_features = CPU_FTRS_POWER6,
389 .cpu_user_features = COMMON_USER_POWER6,
390 .icache_bsize = 128,
391 .dcache_bsize = 128,
47c0bd1a 392 .machine_check = machine_check_generic,
79e25bac 393 .oprofile_cpu_type = "ppc64/compat-power6",
03054d51
AB
394 .platform = "power6",
395 },
635f5a63
JS
396 { /* 2.06-compliant processor, i.e. Power7 "architected" mode */
397 .pvr_mask = 0xffffffff,
398 .pvr_value = 0x0f000003,
399 .cpu_name = "POWER7 (architected)",
400 .cpu_features = CPU_FTRS_POWER7,
401 .cpu_user_features = COMMON_USER_POWER7,
402 .icache_bsize = 128,
403 .dcache_bsize = 128,
404 .machine_check = machine_check_generic,
79e25bac 405 .oprofile_cpu_type = "ppc64/compat-power7",
635f5a63
JS
406 .platform = "power7",
407 },
e952e6c4
MN
408 { /* Power7 */
409 .pvr_mask = 0xffff0000,
410 .pvr_value = 0x003f0000,
635f5a63 411 .cpu_name = "POWER7 (raw)",
e952e6c4
MN
412 .cpu_features = CPU_FTRS_POWER7,
413 .cpu_user_features = COMMON_USER_POWER7,
414 .icache_bsize = 128,
415 .dcache_bsize = 128,
416 .num_pmcs = 6,
417 .pmc_type = PPC_PMC_IBM,
418 .cpu_setup = __setup_cpu_power7,
419 .cpu_restore = __restore_cpu_power7,
420 .oprofile_cpu_type = "ppc64/power7",
421 .oprofile_type = PPC_OPROFILE_POWER4,
422 .oprofile_mmcra_sihv = POWER6_MMCRA_SIHV,
423 .oprofile_mmcra_sipr = POWER6_MMCRA_SIPR,
424 .oprofile_mmcra_clear = POWER6_MMCRA_THRM |
425 POWER6_MMCRA_OTHER,
426 .platform = "power7",
427 },
c902be71 428 { /* Cell Broadband Engine */
4920960f
SR
429 .pvr_mask = 0xffff0000,
430 .pvr_value = 0x00700000,
431 .cpu_name = "Cell Broadband Engine",
432 .cpu_features = CPU_FTRS_CELL,
433 .cpu_user_features = COMMON_USER_PPC64 |
aa5cb021
BH
434 PPC_FEATURE_CELL | PPC_FEATURE_HAS_ALTIVEC_COMP |
435 PPC_FEATURE_SMT,
4920960f
SR
436 .icache_bsize = 128,
437 .dcache_bsize = 128,
18f2190d 438 .num_pmcs = 4,
1bd2e5ae 439 .pmc_type = PPC_PMC_IBM,
18f2190d
MJ
440 .oprofile_cpu_type = "ppc64/cell-be",
441 .oprofile_type = PPC_OPROFILE_CELL,
47c0bd1a 442 .machine_check = machine_check_generic,
80f15dc7 443 .platform = "ppc-cell-be",
4920960f 444 },
b3ebd1d8
OJ
445 { /* PA Semi PA6T */
446 .pvr_mask = 0x7fff0000,
447 .pvr_value = 0x00900000,
448 .cpu_name = "PA6T",
449 .cpu_features = CPU_FTRS_PA6T,
450 .cpu_user_features = COMMON_USER_PA6T,
451 .icache_bsize = 64,
452 .dcache_bsize = 64,
453 .num_pmcs = 6,
1bd2e5ae 454 .pmc_type = PPC_PMC_PA6T,
1199919b
OJ
455 .cpu_setup = __setup_cpu_pa6t,
456 .cpu_restore = __restore_cpu_pa6t,
25fc530e
OJ
457 .oprofile_cpu_type = "ppc64/pa6t",
458 .oprofile_type = PPC_OPROFILE_PA6T,
47c0bd1a 459 .machine_check = machine_check_generic,
b3ebd1d8
OJ
460 .platform = "pa6t",
461 },
4920960f
SR
462 { /* default match */
463 .pvr_mask = 0x00000000,
464 .pvr_value = 0x00000000,
465 .cpu_name = "POWER4 (compatible)",
466 .cpu_features = CPU_FTRS_COMPATIBLE,
467 .cpu_user_features = COMMON_USER_PPC64,
468 .icache_bsize = 128,
469 .dcache_bsize = 128,
470 .num_pmcs = 6,
1bd2e5ae 471 .pmc_type = PPC_PMC_IBM,
47c0bd1a 472 .machine_check = machine_check_generic,
80f15dc7 473 .platform = "power4",
4920960f
SR
474 }
475#endif /* CONFIG_PPC64 */
476#ifdef CONFIG_PPC32
1da177e4 477#if CLASSIC_PPC
4920960f 478 { /* 601 */
1da177e4
LT
479 .pvr_mask = 0xffff0000,
480 .pvr_value = 0x00010000,
481 .cpu_name = "601",
10b35d99 482 .cpu_features = CPU_FTRS_PPC601,
4920960f 483 .cpu_user_features = COMMON_USER | PPC_FEATURE_601_INSTR |
d8e998c5 484 PPC_FEATURE_UNIFIED_CACHE | PPC_FEATURE_NO_TB,
1da177e4
LT
485 .icache_bsize = 32,
486 .dcache_bsize = 32,
47c0bd1a 487 .machine_check = machine_check_generic,
80f15dc7 488 .platform = "ppc601",
1da177e4
LT
489 },
490 { /* 603 */
491 .pvr_mask = 0xffff0000,
492 .pvr_value = 0x00030000,
493 .cpu_name = "603",
10b35d99 494 .cpu_features = CPU_FTRS_603,
fab5db97 495 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1da177e4
LT
496 .icache_bsize = 32,
497 .dcache_bsize = 32,
80f15dc7 498 .cpu_setup = __setup_cpu_603,
47c0bd1a 499 .machine_check = machine_check_generic,
80f15dc7 500 .platform = "ppc603",
1da177e4
LT
501 },
502 { /* 603e */
503 .pvr_mask = 0xffff0000,
504 .pvr_value = 0x00060000,
505 .cpu_name = "603e",
10b35d99 506 .cpu_features = CPU_FTRS_603,
fab5db97 507 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1da177e4
LT
508 .icache_bsize = 32,
509 .dcache_bsize = 32,
80f15dc7 510 .cpu_setup = __setup_cpu_603,
47c0bd1a 511 .machine_check = machine_check_generic,
80f15dc7 512 .platform = "ppc603",
1da177e4
LT
513 },
514 { /* 603ev */
515 .pvr_mask = 0xffff0000,
516 .pvr_value = 0x00070000,
517 .cpu_name = "603ev",
10b35d99 518 .cpu_features = CPU_FTRS_603,
fab5db97 519 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1da177e4
LT
520 .icache_bsize = 32,
521 .dcache_bsize = 32,
80f15dc7 522 .cpu_setup = __setup_cpu_603,
47c0bd1a 523 .machine_check = machine_check_generic,
80f15dc7 524 .platform = "ppc603",
1da177e4
LT
525 },
526 { /* 604 */
527 .pvr_mask = 0xffff0000,
528 .pvr_value = 0x00040000,
529 .cpu_name = "604",
10b35d99 530 .cpu_features = CPU_FTRS_604,
fab5db97 531 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1da177e4
LT
532 .icache_bsize = 32,
533 .dcache_bsize = 32,
534 .num_pmcs = 2,
80f15dc7 535 .cpu_setup = __setup_cpu_604,
47c0bd1a 536 .machine_check = machine_check_generic,
80f15dc7 537 .platform = "ppc604",
1da177e4
LT
538 },
539 { /* 604e */
540 .pvr_mask = 0xfffff000,
541 .pvr_value = 0x00090000,
542 .cpu_name = "604e",
10b35d99 543 .cpu_features = CPU_FTRS_604,
fab5db97 544 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1da177e4
LT
545 .icache_bsize = 32,
546 .dcache_bsize = 32,
547 .num_pmcs = 4,
80f15dc7 548 .cpu_setup = __setup_cpu_604,
47c0bd1a 549 .machine_check = machine_check_generic,
80f15dc7 550 .platform = "ppc604",
1da177e4
LT
551 },
552 { /* 604r */
553 .pvr_mask = 0xffff0000,
554 .pvr_value = 0x00090000,
555 .cpu_name = "604r",
10b35d99 556 .cpu_features = CPU_FTRS_604,
fab5db97 557 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1da177e4
LT
558 .icache_bsize = 32,
559 .dcache_bsize = 32,
560 .num_pmcs = 4,
80f15dc7 561 .cpu_setup = __setup_cpu_604,
47c0bd1a 562 .machine_check = machine_check_generic,
80f15dc7 563 .platform = "ppc604",
1da177e4
LT
564 },
565 { /* 604ev */
566 .pvr_mask = 0xffff0000,
567 .pvr_value = 0x000a0000,
568 .cpu_name = "604ev",
10b35d99 569 .cpu_features = CPU_FTRS_604,
fab5db97 570 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1da177e4
LT
571 .icache_bsize = 32,
572 .dcache_bsize = 32,
573 .num_pmcs = 4,
80f15dc7 574 .cpu_setup = __setup_cpu_604,
47c0bd1a 575 .machine_check = machine_check_generic,
80f15dc7 576 .platform = "ppc604",
1da177e4
LT
577 },
578 { /* 740/750 (0x4202, don't support TAU ?) */
579 .pvr_mask = 0xffffffff,
580 .pvr_value = 0x00084202,
581 .cpu_name = "740/750",
10b35d99 582 .cpu_features = CPU_FTRS_740_NOTAU,
fab5db97 583 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1da177e4
LT
584 .icache_bsize = 32,
585 .dcache_bsize = 32,
586 .num_pmcs = 4,
80f15dc7 587 .cpu_setup = __setup_cpu_750,
47c0bd1a 588 .machine_check = machine_check_generic,
80f15dc7 589 .platform = "ppc750",
1da177e4 590 },
1da177e4
LT
591 { /* 750CX (80100 and 8010x?) */
592 .pvr_mask = 0xfffffff0,
593 .pvr_value = 0x00080100,
594 .cpu_name = "750CX",
10b35d99 595 .cpu_features = CPU_FTRS_750,
fab5db97 596 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1da177e4
LT
597 .icache_bsize = 32,
598 .dcache_bsize = 32,
599 .num_pmcs = 4,
80f15dc7 600 .cpu_setup = __setup_cpu_750cx,
47c0bd1a 601 .machine_check = machine_check_generic,
80f15dc7 602 .platform = "ppc750",
1da177e4
LT
603 },
604 { /* 750CX (82201 and 82202) */
605 .pvr_mask = 0xfffffff0,
606 .pvr_value = 0x00082200,
607 .cpu_name = "750CX",
10b35d99 608 .cpu_features = CPU_FTRS_750,
fab5db97 609 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1da177e4
LT
610 .icache_bsize = 32,
611 .dcache_bsize = 32,
612 .num_pmcs = 4,
b950bdd0 613 .pmc_type = PPC_PMC_IBM,
80f15dc7 614 .cpu_setup = __setup_cpu_750cx,
47c0bd1a 615 .machine_check = machine_check_generic,
80f15dc7 616 .platform = "ppc750",
1da177e4
LT
617 },
618 { /* 750CXe (82214) */
619 .pvr_mask = 0xfffffff0,
620 .pvr_value = 0x00082210,
621 .cpu_name = "750CXe",
10b35d99 622 .cpu_features = CPU_FTRS_750,
fab5db97 623 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1da177e4
LT
624 .icache_bsize = 32,
625 .dcache_bsize = 32,
626 .num_pmcs = 4,
b950bdd0 627 .pmc_type = PPC_PMC_IBM,
80f15dc7 628 .cpu_setup = __setup_cpu_750cx,
47c0bd1a 629 .machine_check = machine_check_generic,
80f15dc7 630 .platform = "ppc750",
1da177e4 631 },
7c31625a
AO
632 { /* 750CXe "Gekko" (83214) */
633 .pvr_mask = 0xffffffff,
634 .pvr_value = 0x00083214,
635 .cpu_name = "750CXe",
10b35d99 636 .cpu_features = CPU_FTRS_750,
fab5db97 637 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
7c31625a
AO
638 .icache_bsize = 32,
639 .dcache_bsize = 32,
640 .num_pmcs = 4,
b950bdd0 641 .pmc_type = PPC_PMC_IBM,
80f15dc7 642 .cpu_setup = __setup_cpu_750cx,
47c0bd1a 643 .machine_check = machine_check_generic,
80f15dc7 644 .platform = "ppc750",
7c31625a 645 },
cfbff8a3
JM
646 { /* 750CL */
647 .pvr_mask = 0xfffff0f0,
648 .pvr_value = 0x00087010,
649 .cpu_name = "750CL",
a14c4508 650 .cpu_features = CPU_FTRS_750CL,
cfbff8a3
JM
651 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
652 .icache_bsize = 32,
653 .dcache_bsize = 32,
654 .num_pmcs = 4,
b950bdd0 655 .pmc_type = PPC_PMC_IBM,
a14c4508 656 .cpu_setup = __setup_cpu_750,
47c0bd1a 657 .machine_check = machine_check_generic,
cfbff8a3
JM
658 .platform = "ppc750",
659 },
ac1ff047
AO
660 { /* 745/755 */
661 .pvr_mask = 0xfffff000,
662 .pvr_value = 0x00083000,
663 .cpu_name = "745/755",
10b35d99 664 .cpu_features = CPU_FTRS_750,
fab5db97 665 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
ac1ff047
AO
666 .icache_bsize = 32,
667 .dcache_bsize = 32,
668 .num_pmcs = 4,
b950bdd0 669 .pmc_type = PPC_PMC_IBM,
80f15dc7 670 .cpu_setup = __setup_cpu_750,
47c0bd1a 671 .machine_check = machine_check_generic,
80f15dc7 672 .platform = "ppc750",
ac1ff047 673 },
1da177e4
LT
674 { /* 750FX rev 1.x */
675 .pvr_mask = 0xffffff00,
676 .pvr_value = 0x70000100,
677 .cpu_name = "750FX",
10b35d99 678 .cpu_features = CPU_FTRS_750FX1,
fab5db97 679 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1da177e4
LT
680 .icache_bsize = 32,
681 .dcache_bsize = 32,
682 .num_pmcs = 4,
b950bdd0 683 .pmc_type = PPC_PMC_IBM,
80f15dc7 684 .cpu_setup = __setup_cpu_750,
47c0bd1a 685 .machine_check = machine_check_generic,
80f15dc7 686 .platform = "ppc750",
1da177e4
LT
687 },
688 { /* 750FX rev 2.0 must disable HID0[DPM] */
689 .pvr_mask = 0xffffffff,
690 .pvr_value = 0x70000200,
691 .cpu_name = "750FX",
10b35d99 692 .cpu_features = CPU_FTRS_750FX2,
fab5db97 693 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1da177e4
LT
694 .icache_bsize = 32,
695 .dcache_bsize = 32,
696 .num_pmcs = 4,
b950bdd0 697 .pmc_type = PPC_PMC_IBM,
80f15dc7 698 .cpu_setup = __setup_cpu_750,
47c0bd1a 699 .machine_check = machine_check_generic,
80f15dc7 700 .platform = "ppc750",
1da177e4
LT
701 },
702 { /* 750FX (All revs except 2.0) */
703 .pvr_mask = 0xffff0000,
704 .pvr_value = 0x70000000,
705 .cpu_name = "750FX",
10b35d99 706 .cpu_features = CPU_FTRS_750FX,
fab5db97 707 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1da177e4
LT
708 .icache_bsize = 32,
709 .dcache_bsize = 32,
710 .num_pmcs = 4,
b950bdd0 711 .pmc_type = PPC_PMC_IBM,
80f15dc7 712 .cpu_setup = __setup_cpu_750fx,
47c0bd1a 713 .machine_check = machine_check_generic,
80f15dc7 714 .platform = "ppc750",
1da177e4
LT
715 },
716 { /* 750GX */
717 .pvr_mask = 0xffff0000,
718 .pvr_value = 0x70020000,
719 .cpu_name = "750GX",
10b35d99 720 .cpu_features = CPU_FTRS_750GX,
fab5db97 721 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1da177e4
LT
722 .icache_bsize = 32,
723 .dcache_bsize = 32,
724 .num_pmcs = 4,
b950bdd0 725 .pmc_type = PPC_PMC_IBM,
80f15dc7 726 .cpu_setup = __setup_cpu_750fx,
47c0bd1a 727 .machine_check = machine_check_generic,
80f15dc7 728 .platform = "ppc750",
1da177e4
LT
729 },
730 { /* 740/750 (L2CR bit need fixup for 740) */
731 .pvr_mask = 0xffff0000,
732 .pvr_value = 0x00080000,
733 .cpu_name = "740/750",
10b35d99 734 .cpu_features = CPU_FTRS_740,
fab5db97 735 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1da177e4
LT
736 .icache_bsize = 32,
737 .dcache_bsize = 32,
738 .num_pmcs = 4,
b950bdd0 739 .pmc_type = PPC_PMC_IBM,
80f15dc7 740 .cpu_setup = __setup_cpu_750,
47c0bd1a 741 .machine_check = machine_check_generic,
80f15dc7 742 .platform = "ppc750",
1da177e4
LT
743 },
744 { /* 7400 rev 1.1 ? (no TAU) */
745 .pvr_mask = 0xffffffff,
746 .pvr_value = 0x000c1101,
747 .cpu_name = "7400 (1.1)",
10b35d99 748 .cpu_features = CPU_FTRS_7400_NOTAU,
fab5db97
PM
749 .cpu_user_features = COMMON_USER |
750 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
1da177e4
LT
751 .icache_bsize = 32,
752 .dcache_bsize = 32,
753 .num_pmcs = 4,
b950bdd0 754 .pmc_type = PPC_PMC_G4,
80f15dc7 755 .cpu_setup = __setup_cpu_7400,
47c0bd1a 756 .machine_check = machine_check_generic,
80f15dc7 757 .platform = "ppc7400",
1da177e4
LT
758 },
759 { /* 7400 */
760 .pvr_mask = 0xffff0000,
761 .pvr_value = 0x000c0000,
762 .cpu_name = "7400",
10b35d99 763 .cpu_features = CPU_FTRS_7400,
fab5db97
PM
764 .cpu_user_features = COMMON_USER |
765 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
1da177e4
LT
766 .icache_bsize = 32,
767 .dcache_bsize = 32,
768 .num_pmcs = 4,
b950bdd0 769 .pmc_type = PPC_PMC_G4,
80f15dc7 770 .cpu_setup = __setup_cpu_7400,
47c0bd1a 771 .machine_check = machine_check_generic,
80f15dc7 772 .platform = "ppc7400",
1da177e4
LT
773 },
774 { /* 7410 */
775 .pvr_mask = 0xffff0000,
776 .pvr_value = 0x800c0000,
777 .cpu_name = "7410",
10b35d99 778 .cpu_features = CPU_FTRS_7400,
fab5db97
PM
779 .cpu_user_features = COMMON_USER |
780 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
1da177e4
LT
781 .icache_bsize = 32,
782 .dcache_bsize = 32,
783 .num_pmcs = 4,
b950bdd0 784 .pmc_type = PPC_PMC_G4,
80f15dc7 785 .cpu_setup = __setup_cpu_7410,
47c0bd1a 786 .machine_check = machine_check_generic,
80f15dc7 787 .platform = "ppc7400",
1da177e4
LT
788 },
789 { /* 7450 2.0 - no doze/nap */
790 .pvr_mask = 0xffffffff,
791 .pvr_value = 0x80000200,
792 .cpu_name = "7450",
10b35d99 793 .cpu_features = CPU_FTRS_7450_20,
fab5db97
PM
794 .cpu_user_features = COMMON_USER |
795 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
1da177e4
LT
796 .icache_bsize = 32,
797 .dcache_bsize = 32,
798 .num_pmcs = 6,
b950bdd0 799 .pmc_type = PPC_PMC_G4,
555d97ac 800 .cpu_setup = __setup_cpu_745x,
555d97ac 801 .oprofile_cpu_type = "ppc/7450",
7a45fb19 802 .oprofile_type = PPC_OPROFILE_G4,
47c0bd1a 803 .machine_check = machine_check_generic,
80f15dc7 804 .platform = "ppc7450",
1da177e4
LT
805 },
806 { /* 7450 2.1 */
807 .pvr_mask = 0xffffffff,
808 .pvr_value = 0x80000201,
809 .cpu_name = "7450",
10b35d99 810 .cpu_features = CPU_FTRS_7450_21,
fab5db97
PM
811 .cpu_user_features = COMMON_USER |
812 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
1da177e4
LT
813 .icache_bsize = 32,
814 .dcache_bsize = 32,
815 .num_pmcs = 6,
b950bdd0 816 .pmc_type = PPC_PMC_G4,
555d97ac 817 .cpu_setup = __setup_cpu_745x,
555d97ac 818 .oprofile_cpu_type = "ppc/7450",
7a45fb19 819 .oprofile_type = PPC_OPROFILE_G4,
47c0bd1a 820 .machine_check = machine_check_generic,
80f15dc7 821 .platform = "ppc7450",
1da177e4
LT
822 },
823 { /* 7450 2.3 and newer */
824 .pvr_mask = 0xffff0000,
825 .pvr_value = 0x80000000,
826 .cpu_name = "7450",
10b35d99 827 .cpu_features = CPU_FTRS_7450_23,
fab5db97
PM
828 .cpu_user_features = COMMON_USER |
829 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
1da177e4
LT
830 .icache_bsize = 32,
831 .dcache_bsize = 32,
832 .num_pmcs = 6,
b950bdd0 833 .pmc_type = PPC_PMC_G4,
555d97ac 834 .cpu_setup = __setup_cpu_745x,
555d97ac 835 .oprofile_cpu_type = "ppc/7450",
7a45fb19 836 .oprofile_type = PPC_OPROFILE_G4,
47c0bd1a 837 .machine_check = machine_check_generic,
80f15dc7 838 .platform = "ppc7450",
1da177e4
LT
839 },
840 { /* 7455 rev 1.x */
841 .pvr_mask = 0xffffff00,
842 .pvr_value = 0x80010100,
843 .cpu_name = "7455",
10b35d99 844 .cpu_features = CPU_FTRS_7455_1,
fab5db97
PM
845 .cpu_user_features = COMMON_USER |
846 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
1da177e4
LT
847 .icache_bsize = 32,
848 .dcache_bsize = 32,
849 .num_pmcs = 6,
b950bdd0 850 .pmc_type = PPC_PMC_G4,
555d97ac 851 .cpu_setup = __setup_cpu_745x,
555d97ac 852 .oprofile_cpu_type = "ppc/7450",
7a45fb19 853 .oprofile_type = PPC_OPROFILE_G4,
47c0bd1a 854 .machine_check = machine_check_generic,
80f15dc7 855 .platform = "ppc7450",
1da177e4
LT
856 },
857 { /* 7455 rev 2.0 */
858 .pvr_mask = 0xffffffff,
859 .pvr_value = 0x80010200,
860 .cpu_name = "7455",
10b35d99 861 .cpu_features = CPU_FTRS_7455_20,
fab5db97
PM
862 .cpu_user_features = COMMON_USER |
863 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
1da177e4
LT
864 .icache_bsize = 32,
865 .dcache_bsize = 32,
866 .num_pmcs = 6,
b950bdd0 867 .pmc_type = PPC_PMC_G4,
555d97ac 868 .cpu_setup = __setup_cpu_745x,
555d97ac 869 .oprofile_cpu_type = "ppc/7450",
7a45fb19 870 .oprofile_type = PPC_OPROFILE_G4,
47c0bd1a 871 .machine_check = machine_check_generic,
80f15dc7 872 .platform = "ppc7450",
1da177e4
LT
873 },
874 { /* 7455 others */
875 .pvr_mask = 0xffff0000,
876 .pvr_value = 0x80010000,
877 .cpu_name = "7455",
10b35d99 878 .cpu_features = CPU_FTRS_7455,
fab5db97
PM
879 .cpu_user_features = COMMON_USER |
880 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
1da177e4
LT
881 .icache_bsize = 32,
882 .dcache_bsize = 32,
883 .num_pmcs = 6,
b950bdd0 884 .pmc_type = PPC_PMC_G4,
555d97ac 885 .cpu_setup = __setup_cpu_745x,
555d97ac 886 .oprofile_cpu_type = "ppc/7450",
7a45fb19 887 .oprofile_type = PPC_OPROFILE_G4,
47c0bd1a 888 .machine_check = machine_check_generic,
80f15dc7 889 .platform = "ppc7450",
1da177e4
LT
890 },
891 { /* 7447/7457 Rev 1.0 */
892 .pvr_mask = 0xffffffff,
893 .pvr_value = 0x80020100,
894 .cpu_name = "7447/7457",
10b35d99 895 .cpu_features = CPU_FTRS_7447_10,
fab5db97
PM
896 .cpu_user_features = COMMON_USER |
897 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
1da177e4
LT
898 .icache_bsize = 32,
899 .dcache_bsize = 32,
900 .num_pmcs = 6,
b950bdd0 901 .pmc_type = PPC_PMC_G4,
555d97ac 902 .cpu_setup = __setup_cpu_745x,
555d97ac 903 .oprofile_cpu_type = "ppc/7450",
7a45fb19 904 .oprofile_type = PPC_OPROFILE_G4,
47c0bd1a 905 .machine_check = machine_check_generic,
80f15dc7 906 .platform = "ppc7450",
1da177e4
LT
907 },
908 { /* 7447/7457 Rev 1.1 */
909 .pvr_mask = 0xffffffff,
910 .pvr_value = 0x80020101,
911 .cpu_name = "7447/7457",
10b35d99 912 .cpu_features = CPU_FTRS_7447_10,
fab5db97
PM
913 .cpu_user_features = COMMON_USER |
914 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
1da177e4
LT
915 .icache_bsize = 32,
916 .dcache_bsize = 32,
917 .num_pmcs = 6,
b950bdd0 918 .pmc_type = PPC_PMC_G4,
555d97ac 919 .cpu_setup = __setup_cpu_745x,
555d97ac 920 .oprofile_cpu_type = "ppc/7450",
7a45fb19 921 .oprofile_type = PPC_OPROFILE_G4,
47c0bd1a 922 .machine_check = machine_check_generic,
80f15dc7 923 .platform = "ppc7450",
1da177e4
LT
924 },
925 { /* 7447/7457 Rev 1.2 and later */
926 .pvr_mask = 0xffff0000,
927 .pvr_value = 0x80020000,
928 .cpu_name = "7447/7457",
10b35d99 929 .cpu_features = CPU_FTRS_7447,
fab5db97 930 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
1da177e4
LT
931 .icache_bsize = 32,
932 .dcache_bsize = 32,
933 .num_pmcs = 6,
b950bdd0 934 .pmc_type = PPC_PMC_G4,
555d97ac 935 .cpu_setup = __setup_cpu_745x,
555d97ac 936 .oprofile_cpu_type = "ppc/7450",
7a45fb19 937 .oprofile_type = PPC_OPROFILE_G4,
47c0bd1a 938 .machine_check = machine_check_generic,
80f15dc7 939 .platform = "ppc7450",
1da177e4
LT
940 },
941 { /* 7447A */
942 .pvr_mask = 0xffff0000,
943 .pvr_value = 0x80030000,
944 .cpu_name = "7447A",
10b35d99 945 .cpu_features = CPU_FTRS_7447A,
fab5db97
PM
946 .cpu_user_features = COMMON_USER |
947 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
bbde630b
KG
948 .icache_bsize = 32,
949 .dcache_bsize = 32,
950 .num_pmcs = 6,
b950bdd0 951 .pmc_type = PPC_PMC_G4,
555d97ac 952 .cpu_setup = __setup_cpu_745x,
555d97ac 953 .oprofile_cpu_type = "ppc/7450",
7a45fb19 954 .oprofile_type = PPC_OPROFILE_G4,
47c0bd1a 955 .machine_check = machine_check_generic,
80f15dc7 956 .platform = "ppc7450",
bbde630b
KG
957 },
958 { /* 7448 */
959 .pvr_mask = 0xffff0000,
960 .pvr_value = 0x80040000,
961 .cpu_name = "7448",
3d372548 962 .cpu_features = CPU_FTRS_7448,
fab5db97
PM
963 .cpu_user_features = COMMON_USER |
964 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
1da177e4
LT
965 .icache_bsize = 32,
966 .dcache_bsize = 32,
967 .num_pmcs = 6,
b950bdd0 968 .pmc_type = PPC_PMC_G4,
555d97ac 969 .cpu_setup = __setup_cpu_745x,
555d97ac 970 .oprofile_cpu_type = "ppc/7450",
7a45fb19 971 .oprofile_type = PPC_OPROFILE_G4,
47c0bd1a 972 .machine_check = machine_check_generic,
80f15dc7 973 .platform = "ppc7450",
1da177e4
LT
974 },
975 { /* 82xx (8240, 8245, 8260 are all 603e cores) */
976 .pvr_mask = 0x7fff0000,
977 .pvr_value = 0x00810000,
978 .cpu_name = "82xx",
10b35d99 979 .cpu_features = CPU_FTRS_82XX,
4920960f 980 .cpu_user_features = COMMON_USER,
1da177e4
LT
981 .icache_bsize = 32,
982 .dcache_bsize = 32,
80f15dc7 983 .cpu_setup = __setup_cpu_603,
47c0bd1a 984 .machine_check = machine_check_generic,
80f15dc7 985 .platform = "ppc603",
1da177e4
LT
986 },
987 { /* All G2_LE (603e core, plus some) have the same pvr */
988 .pvr_mask = 0x7fff0000,
989 .pvr_value = 0x00820000,
990 .cpu_name = "G2_LE",
10b35d99 991 .cpu_features = CPU_FTRS_G2_LE,
4920960f 992 .cpu_user_features = COMMON_USER,
1da177e4
LT
993 .icache_bsize = 32,
994 .dcache_bsize = 32,
80f15dc7 995 .cpu_setup = __setup_cpu_603,
47c0bd1a 996 .machine_check = machine_check_generic,
80f15dc7 997 .platform = "ppc603",
1da177e4 998 },
6c4a2501 999 { /* e300c1 (a 603e core, plus some) on 83xx */
1da177e4
LT
1000 .pvr_mask = 0x7fff0000,
1001 .pvr_value = 0x00830000,
6c4a2501 1002 .cpu_name = "e300c1",
10b35d99 1003 .cpu_features = CPU_FTRS_E300,
4920960f 1004 .cpu_user_features = COMMON_USER,
1da177e4
LT
1005 .icache_bsize = 32,
1006 .dcache_bsize = 32,
80f15dc7 1007 .cpu_setup = __setup_cpu_603,
47c0bd1a 1008 .machine_check = machine_check_generic,
80f15dc7 1009 .platform = "ppc603",
1da177e4 1010 },
6c4a2501
KP
1011 { /* e300c2 (an e300c1 core, plus some, minus FPU) on 83xx */
1012 .pvr_mask = 0x7fff0000,
1013 .pvr_value = 0x00840000,
1014 .cpu_name = "e300c2",
aa42c69c 1015 .cpu_features = CPU_FTRS_E300C2,
6c4a2501
KP
1016 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
1017 .icache_bsize = 32,
1018 .dcache_bsize = 32,
1019 .cpu_setup = __setup_cpu_603,
47c0bd1a 1020 .machine_check = machine_check_generic,
6c4a2501
KP
1021 .platform = "ppc603",
1022 },
a58d5244 1023 { /* e300c3 (e300c1, plus one IU, half cache size) on 83xx */
57933f8f
SW
1024 .pvr_mask = 0x7fff0000,
1025 .pvr_value = 0x00850000,
1026 .cpu_name = "e300c3",
1027 .cpu_features = CPU_FTRS_E300,
1028 .cpu_user_features = COMMON_USER,
1029 .icache_bsize = 32,
1030 .dcache_bsize = 32,
1031 .cpu_setup = __setup_cpu_603,
1347a2c1
AF
1032 .num_pmcs = 4,
1033 .oprofile_cpu_type = "ppc/e300",
1034 .oprofile_type = PPC_OPROFILE_FSL_EMB,
57933f8f
SW
1035 .platform = "ppc603",
1036 },
a58d5244
LY
1037 { /* e300c4 (e300c1, plus one IU) */
1038 .pvr_mask = 0x7fff0000,
1039 .pvr_value = 0x00860000,
1040 .cpu_name = "e300c4",
1041 .cpu_features = CPU_FTRS_E300,
1042 .cpu_user_features = COMMON_USER,
1043 .icache_bsize = 32,
1044 .dcache_bsize = 32,
1045 .cpu_setup = __setup_cpu_603,
47c0bd1a 1046 .machine_check = machine_check_generic,
1347a2c1
AF
1047 .num_pmcs = 4,
1048 .oprofile_cpu_type = "ppc/e300",
1049 .oprofile_type = PPC_OPROFILE_FSL_EMB,
a58d5244
LY
1050 .platform = "ppc603",
1051 },
1da177e4
LT
1052 { /* default match, we assume split I/D cache & TB (non-601)... */
1053 .pvr_mask = 0x00000000,
1054 .pvr_value = 0x00000000,
1055 .cpu_name = "(generic PPC)",
10b35d99 1056 .cpu_features = CPU_FTRS_CLASSIC32,
4920960f 1057 .cpu_user_features = COMMON_USER,
1da177e4
LT
1058 .icache_bsize = 32,
1059 .dcache_bsize = 32,
47c0bd1a 1060 .machine_check = machine_check_generic,
80f15dc7 1061 .platform = "ppc603",
1da177e4
LT
1062 },
1063#endif /* CLASSIC_PPC */
1da177e4
LT
1064#ifdef CONFIG_8xx
1065 { /* 8xx */
1066 .pvr_mask = 0xffff0000,
1067 .pvr_value = 0x00500000,
1068 .cpu_name = "8xx",
1069 /* CPU_FTR_MAYBE_CAN_DOZE is possible,
1070 * if the 8xx code is there.... */
10b35d99 1071 .cpu_features = CPU_FTRS_8XX,
1da177e4
LT
1072 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
1073 .icache_bsize = 16,
1074 .dcache_bsize = 16,
80f15dc7 1075 .platform = "ppc823",
1da177e4
LT
1076 },
1077#endif /* CONFIG_8xx */
1078#ifdef CONFIG_40x
1079 { /* 403GC */
1080 .pvr_mask = 0xffffff00,
1081 .pvr_value = 0x00200200,
1082 .cpu_name = "403GC",
10b35d99 1083 .cpu_features = CPU_FTRS_40X,
1da177e4
LT
1084 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
1085 .icache_bsize = 16,
1086 .dcache_bsize = 16,
47c0bd1a 1087 .machine_check = machine_check_4xx,
80f15dc7 1088 .platform = "ppc403",
1da177e4
LT
1089 },
1090 { /* 403GCX */
1091 .pvr_mask = 0xffffff00,
1092 .pvr_value = 0x00201400,
1093 .cpu_name = "403GCX",
10b35d99 1094 .cpu_features = CPU_FTRS_40X,
d8e998c5
BH
1095 .cpu_user_features = PPC_FEATURE_32 |
1096 PPC_FEATURE_HAS_MMU | PPC_FEATURE_NO_TB,
1da177e4
LT
1097 .icache_bsize = 16,
1098 .dcache_bsize = 16,
47c0bd1a 1099 .machine_check = machine_check_4xx,
80f15dc7 1100 .platform = "ppc403",
1da177e4
LT
1101 },
1102 { /* 403G ?? */
1103 .pvr_mask = 0xffff0000,
1104 .pvr_value = 0x00200000,
1105 .cpu_name = "403G ??",
10b35d99 1106 .cpu_features = CPU_FTRS_40X,
1da177e4
LT
1107 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
1108 .icache_bsize = 16,
1109 .dcache_bsize = 16,
47c0bd1a 1110 .machine_check = machine_check_4xx,
80f15dc7 1111 .platform = "ppc403",
1da177e4
LT
1112 },
1113 { /* 405GP */
1114 .pvr_mask = 0xffff0000,
1115 .pvr_value = 0x40110000,
1116 .cpu_name = "405GP",
10b35d99 1117 .cpu_features = CPU_FTRS_40X,
1da177e4
LT
1118 .cpu_user_features = PPC_FEATURE_32 |
1119 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1120 .icache_bsize = 32,
1121 .dcache_bsize = 32,
47c0bd1a 1122 .machine_check = machine_check_4xx,
80f15dc7 1123 .platform = "ppc405",
1da177e4
LT
1124 },
1125 { /* STB 03xxx */
1126 .pvr_mask = 0xffff0000,
1127 .pvr_value = 0x40130000,
1128 .cpu_name = "STB03xxx",
10b35d99 1129 .cpu_features = CPU_FTRS_40X,
1da177e4
LT
1130 .cpu_user_features = PPC_FEATURE_32 |
1131 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1132 .icache_bsize = 32,
1133 .dcache_bsize = 32,
47c0bd1a 1134 .machine_check = machine_check_4xx,
80f15dc7 1135 .platform = "ppc405",
1da177e4
LT
1136 },
1137 { /* STB 04xxx */
1138 .pvr_mask = 0xffff0000,
1139 .pvr_value = 0x41810000,
1140 .cpu_name = "STB04xxx",
10b35d99 1141 .cpu_features = CPU_FTRS_40X,
1da177e4
LT
1142 .cpu_user_features = PPC_FEATURE_32 |
1143 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1144 .icache_bsize = 32,
1145 .dcache_bsize = 32,
47c0bd1a 1146 .machine_check = machine_check_4xx,
80f15dc7 1147 .platform = "ppc405",
1da177e4
LT
1148 },
1149 { /* NP405L */
1150 .pvr_mask = 0xffff0000,
1151 .pvr_value = 0x41610000,
1152 .cpu_name = "NP405L",
10b35d99 1153 .cpu_features = CPU_FTRS_40X,
1da177e4
LT
1154 .cpu_user_features = PPC_FEATURE_32 |
1155 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1156 .icache_bsize = 32,
1157 .dcache_bsize = 32,
47c0bd1a 1158 .machine_check = machine_check_4xx,
80f15dc7 1159 .platform = "ppc405",
1da177e4
LT
1160 },
1161 { /* NP4GS3 */
1162 .pvr_mask = 0xffff0000,
1163 .pvr_value = 0x40B10000,
1164 .cpu_name = "NP4GS3",
10b35d99 1165 .cpu_features = CPU_FTRS_40X,
1da177e4
LT
1166 .cpu_user_features = PPC_FEATURE_32 |
1167 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1168 .icache_bsize = 32,
1169 .dcache_bsize = 32,
47c0bd1a 1170 .machine_check = machine_check_4xx,
80f15dc7 1171 .platform = "ppc405",
1da177e4
LT
1172 },
1173 { /* NP405H */
1174 .pvr_mask = 0xffff0000,
1175 .pvr_value = 0x41410000,
1176 .cpu_name = "NP405H",
10b35d99 1177 .cpu_features = CPU_FTRS_40X,
1da177e4
LT
1178 .cpu_user_features = PPC_FEATURE_32 |
1179 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1180 .icache_bsize = 32,
1181 .dcache_bsize = 32,
47c0bd1a 1182 .machine_check = machine_check_4xx,
80f15dc7 1183 .platform = "ppc405",
1da177e4
LT
1184 },
1185 { /* 405GPr */
1186 .pvr_mask = 0xffff0000,
1187 .pvr_value = 0x50910000,
1188 .cpu_name = "405GPr",
10b35d99 1189 .cpu_features = CPU_FTRS_40X,
1da177e4
LT
1190 .cpu_user_features = PPC_FEATURE_32 |
1191 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1192 .icache_bsize = 32,
1193 .dcache_bsize = 32,
47c0bd1a 1194 .machine_check = machine_check_4xx,
80f15dc7 1195 .platform = "ppc405",
1da177e4
LT
1196 },
1197 { /* STBx25xx */
1198 .pvr_mask = 0xffff0000,
1199 .pvr_value = 0x51510000,
1200 .cpu_name = "STBx25xx",
10b35d99 1201 .cpu_features = CPU_FTRS_40X,
1da177e4
LT
1202 .cpu_user_features = PPC_FEATURE_32 |
1203 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1204 .icache_bsize = 32,
1205 .dcache_bsize = 32,
47c0bd1a 1206 .machine_check = machine_check_4xx,
80f15dc7 1207 .platform = "ppc405",
1da177e4
LT
1208 },
1209 { /* 405LP */
1210 .pvr_mask = 0xffff0000,
1211 .pvr_value = 0x41F10000,
1212 .cpu_name = "405LP",
10b35d99 1213 .cpu_features = CPU_FTRS_40X,
1da177e4
LT
1214 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
1215 .icache_bsize = 32,
1216 .dcache_bsize = 32,
47c0bd1a 1217 .machine_check = machine_check_4xx,
80f15dc7 1218 .platform = "ppc405",
1da177e4
LT
1219 },
1220 { /* Xilinx Virtex-II Pro */
72646c7f 1221 .pvr_mask = 0xfffff000,
1da177e4
LT
1222 .pvr_value = 0x20010000,
1223 .cpu_name = "Virtex-II Pro",
10b35d99 1224 .cpu_features = CPU_FTRS_40X,
1da177e4
LT
1225 .cpu_user_features = PPC_FEATURE_32 |
1226 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1227 .icache_bsize = 32,
1228 .dcache_bsize = 32,
47c0bd1a 1229 .machine_check = machine_check_4xx,
80f15dc7 1230 .platform = "ppc405",
1da177e4 1231 },
72646c7f
GL
1232 { /* Xilinx Virtex-4 FX */
1233 .pvr_mask = 0xfffff000,
1234 .pvr_value = 0x20011000,
1235 .cpu_name = "Virtex-4 FX",
1236 .cpu_features = CPU_FTRS_40X,
1237 .cpu_user_features = PPC_FEATURE_32 |
1238 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1239 .icache_bsize = 32,
1240 .dcache_bsize = 32,
47c0bd1a 1241 .machine_check = machine_check_4xx,
838fdb4d 1242 .platform = "ppc405",
72646c7f 1243 },
ad95d609
ES
1244 { /* 405EP */
1245 .pvr_mask = 0xffff0000,
1246 .pvr_value = 0x51210000,
1247 .cpu_name = "405EP",
10b35d99 1248 .cpu_features = CPU_FTRS_40X,
5d8476c8
SR
1249 .cpu_user_features = PPC_FEATURE_32 |
1250 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1251 .icache_bsize = 32,
1252 .dcache_bsize = 32,
47c0bd1a 1253 .machine_check = machine_check_4xx,
5d8476c8
SR
1254 .platform = "ppc405",
1255 },
1256 { /* 405EX */
b676d84e
SR
1257 .pvr_mask = 0xffff0004,
1258 .pvr_value = 0x12910004,
5d8476c8
SR
1259 .cpu_name = "405EX",
1260 .cpu_features = CPU_FTRS_40X,
ad95d609
ES
1261 .cpu_user_features = PPC_FEATURE_32 |
1262 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1263 .icache_bsize = 32,
1264 .dcache_bsize = 32,
47c0bd1a 1265 .machine_check = machine_check_4xx,
80f15dc7 1266 .platform = "ppc405",
ad95d609 1267 },
b676d84e
SR
1268 { /* 405EXr */
1269 .pvr_mask = 0xffff0004,
1270 .pvr_value = 0x12910000,
1271 .cpu_name = "405EXr",
1272 .cpu_features = CPU_FTRS_40X,
1273 .cpu_user_features = PPC_FEATURE_32 |
1274 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1275 .icache_bsize = 32,
1276 .dcache_bsize = 32,
1277 .machine_check = machine_check_4xx,
1278 .platform = "ppc405",
1279 },
df8f71fa
JB
1280 {
1281 /* 405EZ */
1282 .pvr_mask = 0xffff0000,
1283 .pvr_value = 0x41510000,
1284 .cpu_name = "405EZ",
1285 .cpu_features = CPU_FTRS_40X,
1286 .cpu_user_features = PPC_FEATURE_32 |
1287 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1288 .icache_bsize = 32,
1289 .dcache_bsize = 32,
1290 .machine_check = machine_check_4xx,
1291 .platform = "ppc405",
1292 },
76bc080e
BH
1293 { /* default match */
1294 .pvr_mask = 0x00000000,
1295 .pvr_value = 0x00000000,
1296 .cpu_name = "(generic 40x PPC)",
1297 .cpu_features = CPU_FTRS_40X,
1298 .cpu_user_features = PPC_FEATURE_32 |
1299 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1300 .icache_bsize = 32,
1301 .dcache_bsize = 32,
1302 .machine_check = machine_check_4xx,
1303 .platform = "ppc405",
1304 }
1da177e4
LT
1305
1306#endif /* CONFIG_40x */
1307#ifdef CONFIG_44x
c9cf73ae
MP
1308 {
1309 .pvr_mask = 0xf0000fff,
1310 .pvr_value = 0x40000850,
d1dfc35d
VB
1311 .cpu_name = "440GR Rev. A",
1312 .cpu_features = CPU_FTRS_44X,
1313 .cpu_user_features = COMMON_USER_BOOKE,
1314 .icache_bsize = 32,
1315 .dcache_bsize = 32,
47c0bd1a 1316 .machine_check = machine_check_4xx,
d1dfc35d
VB
1317 .platform = "ppc440",
1318 },
1319 { /* Use logical PVR for 440EP (logical pvr = pvr | 0x8) */
1320 .pvr_mask = 0xf0000fff,
1321 .pvr_value = 0x40000858,
c9cf73ae 1322 .cpu_name = "440EP Rev. A",
10b35d99 1323 .cpu_features = CPU_FTRS_44X,
80f15dc7 1324 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
c9cf73ae
MP
1325 .icache_bsize = 32,
1326 .dcache_bsize = 32,
8112753b 1327 .cpu_setup = __setup_cpu_440ep,
47c0bd1a 1328 .machine_check = machine_check_4xx,
80f15dc7 1329 .platform = "ppc440",
c9cf73ae
MP
1330 },
1331 {
1332 .pvr_mask = 0xf0000fff,
1333 .pvr_value = 0x400008d3,
d1dfc35d 1334 .cpu_name = "440GR Rev. B",
10b35d99 1335 .cpu_features = CPU_FTRS_44X,
80f15dc7 1336 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
c9cf73ae
MP
1337 .icache_bsize = 32,
1338 .dcache_bsize = 32,
47c0bd1a 1339 .machine_check = machine_check_4xx,
80f15dc7 1340 .platform = "ppc440",
c9cf73ae 1341 },
3f8fc3e0
SM
1342 { /* Matches both physical and logical PVR for 440EP (logical pvr = pvr | 0x8) */
1343 .pvr_mask = 0xf0000ff7,
1344 .pvr_value = 0x400008d4,
1345 .cpu_name = "440EP Rev. C",
1346 .cpu_features = CPU_FTRS_44X,
1347 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1348 .icache_bsize = 32,
1349 .dcache_bsize = 32,
1350 .cpu_setup = __setup_cpu_440ep,
1351 .machine_check = machine_check_4xx,
1352 .platform = "ppc440",
1353 },
d1dfc35d
VB
1354 { /* Use logical PVR for 440EP (logical pvr = pvr | 0x8) */
1355 .pvr_mask = 0xf0000fff,
1356 .pvr_value = 0x400008db,
1357 .cpu_name = "440EP Rev. B",
15fc993e
VB
1358 .cpu_features = CPU_FTRS_44X,
1359 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1360 .icache_bsize = 32,
1361 .dcache_bsize = 32,
d1dfc35d 1362 .cpu_setup = __setup_cpu_440ep,
47c0bd1a 1363 .machine_check = machine_check_4xx,
8112753b 1364 .platform = "ppc440",
15fc993e
VB
1365 },
1366 { /* 440GRX */
1367 .pvr_mask = 0xf0000ffb,
d1dfc35d 1368 .pvr_value = 0x200008D0,
15fc993e
VB
1369 .cpu_name = "440GRX",
1370 .cpu_features = CPU_FTRS_44X,
1371 .cpu_user_features = COMMON_USER_BOOKE,
1372 .icache_bsize = 32,
1373 .dcache_bsize = 32,
340ffd26 1374 .cpu_setup = __setup_cpu_440grx,
b2be3b15 1375 .machine_check = machine_check_440A,
340ffd26 1376 .platform = "ppc440",
15fc993e 1377 },
d1dfc35d
VB
1378 { /* Use logical PVR for 440EPx (logical pvr = pvr | 0x8) */
1379 .pvr_mask = 0xf0000ffb,
1380 .pvr_value = 0x200008D8,
1381 .cpu_name = "440EPX",
1382 .cpu_features = CPU_FTRS_44X,
1383 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1384 .icache_bsize = 32,
1385 .dcache_bsize = 32,
1386 .cpu_setup = __setup_cpu_440epx,
47c0bd1a 1387 .machine_check = machine_check_440A,
d1dfc35d
VB
1388 .platform = "ppc440",
1389 },
4920960f 1390 { /* 440GP Rev. B */
1da177e4
LT
1391 .pvr_mask = 0xf0000fff,
1392 .pvr_value = 0x40000440,
1393 .cpu_name = "440GP Rev. B",
10b35d99 1394 .cpu_features = CPU_FTRS_44X,
80f15dc7 1395 .cpu_user_features = COMMON_USER_BOOKE,
1da177e4
LT
1396 .icache_bsize = 32,
1397 .dcache_bsize = 32,
47c0bd1a 1398 .machine_check = machine_check_4xx,
80f15dc7 1399 .platform = "ppc440gp",
1da177e4 1400 },
4920960f 1401 { /* 440GP Rev. C */
1da177e4
LT
1402 .pvr_mask = 0xf0000fff,
1403 .pvr_value = 0x40000481,
1404 .cpu_name = "440GP Rev. C",
10b35d99 1405 .cpu_features = CPU_FTRS_44X,
80f15dc7 1406 .cpu_user_features = COMMON_USER_BOOKE,
1da177e4
LT
1407 .icache_bsize = 32,
1408 .dcache_bsize = 32,
47c0bd1a 1409 .machine_check = machine_check_4xx,
80f15dc7 1410 .platform = "ppc440gp",
1da177e4
LT
1411 },
1412 { /* 440GX Rev. A */
1413 .pvr_mask = 0xf0000fff,
1414 .pvr_value = 0x50000850,
1415 .cpu_name = "440GX Rev. A",
10b35d99 1416 .cpu_features = CPU_FTRS_44X,
80f15dc7 1417 .cpu_user_features = COMMON_USER_BOOKE,
1da177e4
LT
1418 .icache_bsize = 32,
1419 .dcache_bsize = 32,
47c0bd1a
BH
1420 .cpu_setup = __setup_cpu_440gx,
1421 .machine_check = machine_check_440A,
80f15dc7 1422 .platform = "ppc440",
1da177e4
LT
1423 },
1424 { /* 440GX Rev. B */
1425 .pvr_mask = 0xf0000fff,
1426 .pvr_value = 0x50000851,
1427 .cpu_name = "440GX Rev. B",
10b35d99 1428 .cpu_features = CPU_FTRS_44X,
80f15dc7 1429 .cpu_user_features = COMMON_USER_BOOKE,
1da177e4
LT
1430 .icache_bsize = 32,
1431 .dcache_bsize = 32,
47c0bd1a
BH
1432 .cpu_setup = __setup_cpu_440gx,
1433 .machine_check = machine_check_440A,
80f15dc7 1434 .platform = "ppc440",
1da177e4
LT
1435 },
1436 { /* 440GX Rev. C */
1437 .pvr_mask = 0xf0000fff,
1438 .pvr_value = 0x50000892,
1439 .cpu_name = "440GX Rev. C",
10b35d99 1440 .cpu_features = CPU_FTRS_44X,
80f15dc7 1441 .cpu_user_features = COMMON_USER_BOOKE,
1da177e4
LT
1442 .icache_bsize = 32,
1443 .dcache_bsize = 32,
47c0bd1a
BH
1444 .cpu_setup = __setup_cpu_440gx,
1445 .machine_check = machine_check_440A,
80f15dc7 1446 .platform = "ppc440",
1da177e4 1447 },
9149fb3b
ES
1448 { /* 440GX Rev. F */
1449 .pvr_mask = 0xf0000fff,
1450 .pvr_value = 0x50000894,
1451 .cpu_name = "440GX Rev. F",
10b35d99 1452 .cpu_features = CPU_FTRS_44X,
80f15dc7 1453 .cpu_user_features = COMMON_USER_BOOKE,
9149fb3b
ES
1454 .icache_bsize = 32,
1455 .dcache_bsize = 32,
47c0bd1a
BH
1456 .cpu_setup = __setup_cpu_440gx,
1457 .machine_check = machine_check_440A,
80f15dc7 1458 .platform = "ppc440",
9149fb3b 1459 },
656de7e4 1460 { /* 440SP Rev. A */
333e6154
RD
1461 .pvr_mask = 0xfff00fff,
1462 .pvr_value = 0x53200891,
656de7e4 1463 .cpu_name = "440SP Rev. A",
10b35d99 1464 .cpu_features = CPU_FTRS_44X,
80f15dc7 1465 .cpu_user_features = COMMON_USER_BOOKE,
656de7e4
MP
1466 .icache_bsize = 32,
1467 .dcache_bsize = 32,
47c0bd1a 1468 .machine_check = machine_check_4xx,
80f15dc7 1469 .platform = "ppc440",
656de7e4 1470 },
b0f7b8bc 1471 { /* 440SPe Rev. A */
333e6154
RD
1472 .pvr_mask = 0xfff00fff,
1473 .pvr_value = 0x53400890,
1474 .cpu_name = "440SPe Rev. A",
1475 .cpu_features = CPU_FTRS_44X,
1476 .cpu_user_features = COMMON_USER_BOOKE,
1477 .icache_bsize = 32,
1478 .dcache_bsize = 32,
47c0bd1a
BH
1479 .cpu_setup = __setup_cpu_440spe,
1480 .machine_check = machine_check_440A,
333e6154
RD
1481 .platform = "ppc440",
1482 },
1483 { /* 440SPe Rev. B */
1484 .pvr_mask = 0xfff00fff,
1485 .pvr_value = 0x53400891,
1486 .cpu_name = "440SPe Rev. B",
a147c585 1487 .cpu_features = CPU_FTRS_44X,
80f15dc7 1488 .cpu_user_features = COMMON_USER_BOOKE,
b0f7b8bc
RD
1489 .icache_bsize = 32,
1490 .dcache_bsize = 32,
47c0bd1a
BH
1491 .cpu_setup = __setup_cpu_440spe,
1492 .machine_check = machine_check_440A,
80f15dc7 1493 .platform = "ppc440",
b0f7b8bc 1494 },
23e7237e
JL
1495 { /* 440 in Xilinx Virtex-5 FXT */
1496 .pvr_mask = 0xfffffff0,
1497 .pvr_value = 0x7ff21910,
1498 .cpu_name = "440 in Virtex-5 FXT",
1499 .cpu_features = CPU_FTRS_44X,
1500 .cpu_user_features = COMMON_USER_BOOKE,
1501 .icache_bsize = 32,
1502 .dcache_bsize = 32,
1503 .platform = "ppc440",
1504 },
464076a4
SR
1505 { /* 460EX */
1506 .pvr_mask = 0xffff0002,
1507 .pvr_value = 0x13020002,
1508 .cpu_name = "460EX",
1509 .cpu_features = CPU_FTRS_44X,
1510 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1511 .icache_bsize = 32,
1512 .dcache_bsize = 32,
1513 .cpu_setup = __setup_cpu_460ex,
1514 .machine_check = machine_check_440A,
1515 .platform = "ppc440",
1516 },
1517 { /* 460GT */
1518 .pvr_mask = 0xffff0002,
1519 .pvr_value = 0x13020000,
1520 .cpu_name = "460GT",
1521 .cpu_features = CPU_FTRS_44X,
939e622c 1522 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
464076a4
SR
1523 .icache_bsize = 32,
1524 .dcache_bsize = 32,
939e622c 1525 .cpu_setup = __setup_cpu_460gt,
464076a4
SR
1526 .machine_check = machine_check_440A,
1527 .platform = "ppc440",
1528 },
76bc080e
BH
1529 { /* default match */
1530 .pvr_mask = 0x00000000,
1531 .pvr_value = 0x00000000,
1532 .cpu_name = "(generic 44x PPC)",
1533 .cpu_features = CPU_FTRS_44X,
1534 .cpu_user_features = COMMON_USER_BOOKE,
1535 .icache_bsize = 32,
1536 .dcache_bsize = 32,
1537 .machine_check = machine_check_4xx,
1538 .platform = "ppc440",
1539 }
1da177e4 1540#endif /* CONFIG_44x */
e3e414bc 1541#ifdef CONFIG_E200
4920960f 1542 { /* e200z5 */
33d9e9b5
KG
1543 .pvr_mask = 0xfff00000,
1544 .pvr_value = 0x81000000,
1545 .cpu_name = "e200z5",
1546 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
10b35d99 1547 .cpu_features = CPU_FTRS_E200,
80f15dc7
PM
1548 .cpu_user_features = COMMON_USER_BOOKE |
1549 PPC_FEATURE_HAS_EFP_SINGLE |
33d9e9b5
KG
1550 PPC_FEATURE_UNIFIED_CACHE,
1551 .dcache_bsize = 32,
47c0bd1a 1552 .machine_check = machine_check_e200,
80f15dc7 1553 .platform = "ppc5554",
33d9e9b5 1554 },
4920960f 1555 { /* e200z6 */
33d9e9b5
KG
1556 .pvr_mask = 0xfff00000,
1557 .pvr_value = 0x81100000,
1558 .cpu_name = "e200z6",
1559 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
10b35d99 1560 .cpu_features = CPU_FTRS_E200,
80f15dc7 1561 .cpu_user_features = COMMON_USER_BOOKE |
5e14d21e
KG
1562 PPC_FEATURE_HAS_SPE_COMP |
1563 PPC_FEATURE_HAS_EFP_SINGLE_COMP |
33d9e9b5
KG
1564 PPC_FEATURE_UNIFIED_CACHE,
1565 .dcache_bsize = 32,
47c0bd1a 1566 .machine_check = machine_check_e200,
80f15dc7 1567 .platform = "ppc5554",
33d9e9b5 1568 },
76bc080e
BH
1569 { /* default match */
1570 .pvr_mask = 0x00000000,
1571 .pvr_value = 0x00000000,
1572 .cpu_name = "(generic E200 PPC)",
1573 .cpu_features = CPU_FTRS_E200,
1574 .cpu_user_features = COMMON_USER_BOOKE |
1575 PPC_FEATURE_HAS_EFP_SINGLE |
1576 PPC_FEATURE_UNIFIED_CACHE,
1577 .dcache_bsize = 32,
1578 .machine_check = machine_check_e200,
1579 .platform = "ppc5554",
516c8be3 1580 }
76bc080e
BH
1581#endif /* CONFIG_E200 */
1582#ifdef CONFIG_E500
4920960f 1583 { /* e500 */
1da177e4
LT
1584 .pvr_mask = 0xffff0000,
1585 .pvr_value = 0x80200000,
1586 .cpu_name = "e500",
10b35d99 1587 .cpu_features = CPU_FTRS_E500,
80f15dc7 1588 .cpu_user_features = COMMON_USER_BOOKE |
5e14d21e
KG
1589 PPC_FEATURE_HAS_SPE_COMP |
1590 PPC_FEATURE_HAS_EFP_SINGLE_COMP,
1da177e4
LT
1591 .icache_bsize = 32,
1592 .dcache_bsize = 32,
1593 .num_pmcs = 4,
555d97ac 1594 .oprofile_cpu_type = "ppc/e500",
39aef685 1595 .oprofile_type = PPC_OPROFILE_FSL_EMB,
47c0bd1a 1596 .machine_check = machine_check_e500,
80f15dc7 1597 .platform = "ppc8540",
1da177e4 1598 },
4920960f 1599 { /* e500v2 */
5b37b700
KG
1600 .pvr_mask = 0xffff0000,
1601 .pvr_value = 0x80210000,
1602 .cpu_name = "e500v2",
10b35d99 1603 .cpu_features = CPU_FTRS_E500_2,
80f15dc7 1604 .cpu_user_features = COMMON_USER_BOOKE |
5e14d21e
KG
1605 PPC_FEATURE_HAS_SPE_COMP |
1606 PPC_FEATURE_HAS_EFP_SINGLE_COMP |
1607 PPC_FEATURE_HAS_EFP_DOUBLE_COMP,
5b37b700
KG
1608 .icache_bsize = 32,
1609 .dcache_bsize = 32,
1610 .num_pmcs = 4,
555d97ac 1611 .oprofile_cpu_type = "ppc/e500",
39aef685 1612 .oprofile_type = PPC_OPROFILE_FSL_EMB,
47c0bd1a 1613 .machine_check = machine_check_e500,
80f15dc7 1614 .platform = "ppc8548",
5b37b700 1615 },
3dfa8773
KG
1616 { /* e500mc */
1617 .pvr_mask = 0xffff0000,
1618 .pvr_value = 0x80230000,
1619 .cpu_name = "e500mc",
3dfa8773
KG
1620 .cpu_features = CPU_FTRS_E500MC,
1621 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1622 .icache_bsize = 64,
1623 .dcache_bsize = 64,
1624 .num_pmcs = 4,
1625 .oprofile_cpu_type = "ppc/e500", /* xxx - galak, e500mc? */
1626 .oprofile_type = PPC_OPROFILE_FSL_EMB,
1627 .machine_check = machine_check_e500,
1628 .platform = "ppce500mc",
1629 },
1da177e4
LT
1630 { /* default match */
1631 .pvr_mask = 0x00000000,
1632 .pvr_value = 0x00000000,
76bc080e
BH
1633 .cpu_name = "(generic E500 PPC)",
1634 .cpu_features = CPU_FTRS_E500,
1635 .cpu_user_features = COMMON_USER_BOOKE |
1636 PPC_FEATURE_HAS_SPE_COMP |
1637 PPC_FEATURE_HAS_EFP_SINGLE_COMP,
1da177e4
LT
1638 .icache_bsize = 32,
1639 .dcache_bsize = 32,
76bc080e 1640 .machine_check = machine_check_e500,
80f15dc7 1641 .platform = "powerpc",
516c8be3 1642 }
76bc080e 1643#endif /* CONFIG_E500 */
4920960f 1644#endif /* CONFIG_PPC32 */
1da177e4 1645};
42c4aaad 1646
87a72f9e
PM
1647static struct cpu_spec the_cpu_spec;
1648
1649struct cpu_spec * __init identify_cpu(unsigned long offset, unsigned int pvr)
42c4aaad
BH
1650{
1651 struct cpu_spec *s = cpu_specs;
87a72f9e 1652 struct cpu_spec *t = &the_cpu_spec;
42c4aaad
BH
1653 int i;
1654
1655 s = PTRRELOC(s);
87a72f9e 1656 t = PTRRELOC(t);
42c4aaad 1657
42c4aaad
BH
1658 for (i = 0; i < ARRAY_SIZE(cpu_specs); i++,s++)
1659 if ((pvr & s->pvr_mask) == s->pvr_value) {
87a72f9e
PM
1660 /*
1661 * If we are overriding a previous value derived
1662 * from the real PVR with a new value obtained
1663 * using a logical PVR value, don't modify the
1664 * performance monitor fields.
1665 */
1666 if (t->num_pmcs && !s->num_pmcs) {
1667 t->cpu_name = s->cpu_name;
1668 t->cpu_features = s->cpu_features;
1669 t->cpu_user_features = s->cpu_user_features;
1670 t->icache_bsize = s->icache_bsize;
1671 t->dcache_bsize = s->dcache_bsize;
1672 t->cpu_setup = s->cpu_setup;
1673 t->cpu_restore = s->cpu_restore;
1674 t->platform = s->platform;
79e25bac
TS
1675 /*
1676 * If we have passed through this logic once
1677 * before and have pulled the default case
1678 * because the real PVR was not found inside
1679 * cpu_specs[], then we are possibly running in
1680 * compatibility mode. In that case, let the
1681 * oprofiler know which set of compatibility
1682 * counters to pull from by making sure the
1683 * oprofile_cpu_type string is set to that of
1684 * compatibility mode. If the oprofile_cpu_type
1685 * already has a value, then we are possibly
1686 * overriding a real PVR with a logical one, and,
1687 * in that case, keep the current value for
1688 * oprofile_cpu_type.
1689 */
1690 if (t->oprofile_cpu_type == NULL)
1691 t->oprofile_cpu_type = s->oprofile_cpu_type;
87a72f9e
PM
1692 } else
1693 *t = *s;
1694 *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec;
9115d134
NL
1695
1696 /*
1697 * Set the base platform string once; assumes
1698 * we're called with real pvr first.
1699 */
fc532f81
NL
1700 if (*PTRRELOC(&powerpc_base_platform) == NULL)
1701 *PTRRELOC(&powerpc_base_platform) = t->platform;
9115d134 1702
84e3ad5b 1703#if defined(CONFIG_PPC64) || defined(CONFIG_BOOKE)
464076a4 1704 /* ppc64 and booke expect identify_cpu to also call
84e3ad5b
VB
1705 * setup_cpu for that processor. I will consolidate
1706 * that at a later time, for now, just use #ifdef.
42c4aaad 1707 * we also don't need to PTRRELOC the function pointer
84e3ad5b
VB
1708 * on ppc64 and booke as we are running at 0 in real
1709 * mode on ppc64 and reloc_offset is always 0 on booke.
42c4aaad
BH
1710 */
1711 if (s->cpu_setup) {
1712 s->cpu_setup(offset, s);
1713 }
84e3ad5b 1714#endif /* CONFIG_PPC64 || CONFIG_BOOKE */
42c4aaad
BH
1715 return s;
1716 }
1717 BUG();
1718 return NULL;
1719}
This page took 0.405447 seconds and 5 git commands to generate.