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