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