cputable.c 31 KB
Newer Older
Linus Torvalds's avatar
Linus Torvalds committed
1 2 3
/*
 *  Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org)
 *
4 5 6
 *  Modifications for ppc64:
 *      Copyright (C) 2003 Dave Engebretsen <engebret@us.ibm.com>
 *
Linus Torvalds's avatar
Linus Torvalds committed
7 8 9 10 11 12 13 14 15 16 17
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU General Public License
 *  as published by the Free Software Foundation; either version
 *  2 of the License, or (at your option) any later version.
 */

#include <linux/config.h>
#include <linux/string.h>
#include <linux/sched.h>
#include <linux/threads.h>
#include <linux/init.h>
18 19 20
#include <linux/module.h>

#include <asm/oprofile_impl.h>
Linus Torvalds's avatar
Linus Torvalds committed
21 22
#include <asm/cputable.h>

23
struct cpu_spec* cur_cpu_spec = NULL;
24
EXPORT_SYMBOL(cur_cpu_spec);
Linus Torvalds's avatar
Linus Torvalds committed
25

26 27 28 29 30 31 32
/* NOTE:
 * Unlike ppc32, ppc64 will only call this once for the boot CPU, it's
 * the responsibility of the appropriate CPU save/restore functions to
 * eventually copy these settings over. Those save/restore aren't yet
 * part of the cputable though. That has to be fixed for both ppc32
 * and ppc64
 */
33
#ifdef CONFIG_PPC32
34 35 36 37 38 39 40 41
extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec);
extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec);
extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec);
extern void __setup_cpu_750cx(unsigned long offset, struct cpu_spec* spec);
extern void __setup_cpu_750fx(unsigned long offset, struct cpu_spec* spec);
extern void __setup_cpu_7400(unsigned long offset, struct cpu_spec* spec);
extern void __setup_cpu_7410(unsigned long offset, struct cpu_spec* spec);
extern void __setup_cpu_745x(unsigned long offset, struct cpu_spec* spec);
42
#endif /* CONFIG_PPC32 */
43
extern void __setup_cpu_ppc970(unsigned long offset, struct cpu_spec* spec);
Linus Torvalds's avatar
Linus Torvalds committed
44 45 46 47

/* This table only contains "desktop" CPUs, it need to be filled with embedded
 * ones as well...
 */
48 49 50
#define COMMON_USER		(PPC_FEATURE_32 | PPC_FEATURE_HAS_FPU | \
				 PPC_FEATURE_HAS_MMU)
#define COMMON_USER_PPC64	(COMMON_USER | PPC_FEATURE_64)
51
#define COMMON_USER_POWER4	(COMMON_USER_PPC64 | PPC_FEATURE_POWER4)
52 53 54 55
#define COMMON_USER_POWER5	(COMMON_USER_PPC64 | PPC_FEATURE_POWER5 |\
				 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP)
#define COMMON_USER_POWER5_PLUS	(COMMON_USER_PPC64 | PPC_FEATURE_POWER5_PLUS|\
				 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP)
56
#define COMMON_USER_POWER6	(COMMON_USER_PPC64 | PPC_FEATURE_ARCH_2_05 |\
57 58
				 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP | \
				 PPC_FEATURE_TRUE_LE)
59 60
#define COMMON_USER_BOOKE	(PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU | \
				 PPC_FEATURE_BOOKE)
Linus Torvalds's avatar
Linus Torvalds committed
61 62 63 64 65

/* We only set the spe features if the kernel was compiled with
 * spe support
 */
#ifdef CONFIG_SPE
66
#define PPC_FEATURE_SPE_COMP	PPC_FEATURE_HAS_SPE
Linus Torvalds's avatar
Linus Torvalds committed
67
#else
68
#define PPC_FEATURE_SPE_COMP	0
Linus Torvalds's avatar
Linus Torvalds committed
69 70 71
#endif

struct cpu_spec	cpu_specs[] = {
72 73 74 75 76 77
#ifdef CONFIG_PPC64
	{	/* Power3 */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00400000,
		.cpu_name		= "POWER3 (630)",
		.cpu_features		= CPU_FTRS_POWER3,
78
		.cpu_user_features	= COMMON_USER_PPC64|PPC_FEATURE_PPC_LE,
79 80 81 82
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.num_pmcs		= 8,
		.oprofile_cpu_type	= "ppc64/power3",
83
		.oprofile_type		= PPC_OPROFILE_RS64,
84
		.platform		= "power3",
85 86 87 88 89 90
	},
	{	/* Power3+ */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00410000,
		.cpu_name		= "POWER3 (630+)",
		.cpu_features		= CPU_FTRS_POWER3,
91
		.cpu_user_features	= COMMON_USER_PPC64|PPC_FEATURE_PPC_LE,
92 93 94 95
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.num_pmcs		= 8,
		.oprofile_cpu_type	= "ppc64/power3",
96
		.oprofile_type		= PPC_OPROFILE_RS64,
97
		.platform		= "power3",
98 99 100 101 102 103 104 105 106 107 108
	},
	{	/* Northstar */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00330000,
		.cpu_name		= "RS64-II (northstar)",
		.cpu_features		= CPU_FTRS_RS64,
		.cpu_user_features	= COMMON_USER_PPC64,
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.num_pmcs		= 8,
		.oprofile_cpu_type	= "ppc64/rs64",
109
		.oprofile_type		= PPC_OPROFILE_RS64,
110
		.platform		= "rs64",
111 112 113 114 115 116 117 118 119 120 121
	},
	{	/* Pulsar */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00340000,
		.cpu_name		= "RS64-III (pulsar)",
		.cpu_features		= CPU_FTRS_RS64,
		.cpu_user_features	= COMMON_USER_PPC64,
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.num_pmcs		= 8,
		.oprofile_cpu_type	= "ppc64/rs64",
122
		.oprofile_type		= PPC_OPROFILE_RS64,
123
		.platform		= "rs64",
124 125 126 127 128 129 130 131 132 133 134
	},
	{	/* I-star */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00360000,
		.cpu_name		= "RS64-III (icestar)",
		.cpu_features		= CPU_FTRS_RS64,
		.cpu_user_features	= COMMON_USER_PPC64,
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.num_pmcs		= 8,
		.oprofile_cpu_type	= "ppc64/rs64",
135
		.oprofile_type		= PPC_OPROFILE_RS64,
136
		.platform		= "rs64",
137 138 139 140 141 142 143 144 145 146 147
	},
	{	/* S-star */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00370000,
		.cpu_name		= "RS64-IV (sstar)",
		.cpu_features		= CPU_FTRS_RS64,
		.cpu_user_features	= COMMON_USER_PPC64,
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.num_pmcs		= 8,
		.oprofile_cpu_type	= "ppc64/rs64",
148
		.oprofile_type		= PPC_OPROFILE_RS64,
149
		.platform		= "rs64",
150 151 152 153 154 155
	},
	{	/* Power4 */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00350000,
		.cpu_name		= "POWER4 (gp)",
		.cpu_features		= CPU_FTRS_POWER4,
156
		.cpu_user_features	= COMMON_USER_POWER4,
157 158 159 160
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.num_pmcs		= 8,
		.oprofile_cpu_type	= "ppc64/power4",
161
		.oprofile_type		= PPC_OPROFILE_POWER4,
162
		.platform		= "power4",
163 164 165 166 167 168
	},
	{	/* Power4+ */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00380000,
		.cpu_name		= "POWER4+ (gq)",
		.cpu_features		= CPU_FTRS_POWER4,
169
		.cpu_user_features	= COMMON_USER_POWER4,
170 171 172 173
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.num_pmcs		= 8,
		.oprofile_cpu_type	= "ppc64/power4",
174
		.oprofile_type		= PPC_OPROFILE_POWER4,
175
		.platform		= "power4",
176 177 178 179 180 181
	},
	{	/* PPC970 */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00390000,
		.cpu_name		= "PPC970",
		.cpu_features		= CPU_FTRS_PPC970,
182
		.cpu_user_features	= COMMON_USER_POWER4 |
183 184 185 186 187 188
			PPC_FEATURE_HAS_ALTIVEC_COMP,
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.num_pmcs		= 8,
		.cpu_setup		= __setup_cpu_ppc970,
		.oprofile_cpu_type	= "ppc64/970",
189
		.oprofile_type		= PPC_OPROFILE_POWER4,
190
		.platform		= "ppc970",
191 192 193 194 195 196
	},
	{	/* PPC970FX */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x003c0000,
		.cpu_name		= "PPC970FX",
		.cpu_features		= CPU_FTRS_PPC970,
197
		.cpu_user_features	= COMMON_USER_POWER4 |
198 199 200 201 202 203
			PPC_FEATURE_HAS_ALTIVEC_COMP,
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.num_pmcs		= 8,
		.cpu_setup		= __setup_cpu_ppc970,
		.oprofile_cpu_type	= "ppc64/970",
204
		.oprofile_type		= PPC_OPROFILE_POWER4,
205
		.platform		= "ppc970",
206 207 208 209 210 211
	},
	{	/* PPC970MP */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00440000,
		.cpu_name		= "PPC970MP",
		.cpu_features		= CPU_FTRS_PPC970,
212
		.cpu_user_features	= COMMON_USER_POWER4 |
213 214 215
			PPC_FEATURE_HAS_ALTIVEC_COMP,
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
216
		.num_pmcs		= 8,
217 218
		.cpu_setup		= __setup_cpu_ppc970,
		.oprofile_cpu_type	= "ppc64/970",
219
		.oprofile_type		= PPC_OPROFILE_POWER4,
220
		.platform		= "ppc970",
221
	},
222
	{	/* Power5 GR */
223 224 225 226
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x003a0000,
		.cpu_name		= "POWER5 (gr)",
		.cpu_features		= CPU_FTRS_POWER5,
227
		.cpu_user_features	= COMMON_USER_POWER5,
228 229 230 231
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.num_pmcs		= 6,
		.oprofile_cpu_type	= "ppc64/power5",
232
		.oprofile_type		= PPC_OPROFILE_POWER4,
233 234 235 236 237
		/* SIHV / SIPR bits are implemented on POWER4+ (GQ)
		 * and above but only works on POWER5 and above
		 */
		.oprofile_mmcra_sihv	= MMCRA_SIHV,
		.oprofile_mmcra_sipr	= MMCRA_SIPR,
238
		.platform		= "power5",
239
	},
240
	{	/* Power5 GS */
241 242
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x003b0000,
243
		.cpu_name		= "POWER5+ (gs)",
244
		.cpu_features		= CPU_FTRS_POWER5,
245
		.cpu_user_features	= COMMON_USER_POWER5_PLUS,
246 247 248
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.num_pmcs		= 6,
249
		.oprofile_cpu_type	= "ppc64/power5+",
250
		.oprofile_type		= PPC_OPROFILE_POWER4,
251 252
		.oprofile_mmcra_sihv	= MMCRA_SIHV,
		.oprofile_mmcra_sipr	= MMCRA_SIPR,
253
		.platform		= "power5+",
254
	},
255 256 257 258 259 260 261 262
	{	/* Power6 */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x003e0000,
		.cpu_name		= "POWER6",
		.cpu_features		= CPU_FTRS_POWER6,
		.cpu_user_features	= COMMON_USER_POWER6,
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
263
		.num_pmcs		= 8,
264 265
		.oprofile_cpu_type	= "ppc64/power6",
		.oprofile_type		= PPC_OPROFILE_POWER4,
266 267 268 269
 		.oprofile_mmcra_sihv	= POWER6_MMCRA_SIHV,
 		.oprofile_mmcra_sipr	= POWER6_MMCRA_SIPR,
 		.oprofile_mmcra_clear	= POWER6_MMCRA_THRM |
 			POWER6_MMCRA_OTHER,
270 271
		.platform		= "power6",
	},
272
	{	/* Cell Broadband Engine */
273 274 275 276 277
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00700000,
		.cpu_name		= "Cell Broadband Engine",
		.cpu_features		= CPU_FTRS_CELL,
		.cpu_user_features	= COMMON_USER_PPC64 |
278 279
			PPC_FEATURE_CELL | PPC_FEATURE_HAS_ALTIVEC_COMP |
			PPC_FEATURE_SMT,
280 281
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
282
		.platform		= "ppc-cell-be",
283 284 285 286 287 288 289 290 291 292
	},
	{	/* default match */
		.pvr_mask		= 0x00000000,
		.pvr_value		= 0x00000000,
		.cpu_name		= "POWER4 (compatible)",
		.cpu_features		= CPU_FTRS_COMPATIBLE,
		.cpu_user_features	= COMMON_USER_PPC64,
		.icache_bsize		= 128,
		.dcache_bsize		= 128,
		.num_pmcs		= 6,
293
		.platform		= "power4",
294 295 296
	}
#endif	/* CONFIG_PPC64 */
#ifdef CONFIG_PPC32
Linus Torvalds's avatar
Linus Torvalds committed
297
#if CLASSIC_PPC
298
	{	/* 601 */
Linus Torvalds's avatar
Linus Torvalds committed
299 300 301
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00010000,
		.cpu_name		= "601",
302
		.cpu_features		= CPU_FTRS_PPC601,
303
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_601_INSTR |
304
			PPC_FEATURE_UNIFIED_CACHE | PPC_FEATURE_NO_TB,
Linus Torvalds's avatar
Linus Torvalds committed
305 306
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
307
		.platform		= "ppc601",
Linus Torvalds's avatar
Linus Torvalds committed
308 309 310 311 312
	},
	{	/* 603 */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00030000,
		.cpu_name		= "603",
313
		.cpu_features		= CPU_FTRS_603,
314
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
315 316
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
317 318
		.cpu_setup		= __setup_cpu_603,
		.platform		= "ppc603",
Linus Torvalds's avatar
Linus Torvalds committed
319 320 321 322 323
	},
	{	/* 603e */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00060000,
		.cpu_name		= "603e",
324
		.cpu_features		= CPU_FTRS_603,
325
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
326 327
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
328 329
		.cpu_setup		= __setup_cpu_603,
		.platform		= "ppc603",
Linus Torvalds's avatar
Linus Torvalds committed
330 331 332 333 334
	},
	{	/* 603ev */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00070000,
		.cpu_name		= "603ev",
335
		.cpu_features		= CPU_FTRS_603,
336
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
337 338
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
339 340
		.cpu_setup		= __setup_cpu_603,
		.platform		= "ppc603",
Linus Torvalds's avatar
Linus Torvalds committed
341 342 343 344 345
	},
	{	/* 604 */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00040000,
		.cpu_name		= "604",
346
		.cpu_features		= CPU_FTRS_604,
347
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
348 349 350
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 2,
351 352
		.cpu_setup		= __setup_cpu_604,
		.platform		= "ppc604",
Linus Torvalds's avatar
Linus Torvalds committed
353 354 355 356 357
	},
	{	/* 604e */
		.pvr_mask		= 0xfffff000,
		.pvr_value		= 0x00090000,
		.cpu_name		= "604e",
358
		.cpu_features		= CPU_FTRS_604,
359
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
360 361 362
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
363 364
		.cpu_setup		= __setup_cpu_604,
		.platform		= "ppc604",
Linus Torvalds's avatar
Linus Torvalds committed
365 366 367 368 369
	},
	{	/* 604r */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00090000,
		.cpu_name		= "604r",
370
		.cpu_features		= CPU_FTRS_604,
371
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
372 373 374
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
375 376
		.cpu_setup		= __setup_cpu_604,
		.platform		= "ppc604",
Linus Torvalds's avatar
Linus Torvalds committed
377 378 379 380 381
	},
	{	/* 604ev */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x000a0000,
		.cpu_name		= "604ev",
382
		.cpu_features		= CPU_FTRS_604,
383
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
384 385 386
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
387 388
		.cpu_setup		= __setup_cpu_604,
		.platform		= "ppc604",
Linus Torvalds's avatar
Linus Torvalds committed
389 390 391 392 393
	},
	{	/* 740/750 (0x4202, don't support TAU ?) */
		.pvr_mask		= 0xffffffff,
		.pvr_value		= 0x00084202,
		.cpu_name		= "740/750",
394
		.cpu_features		= CPU_FTRS_740_NOTAU,
395
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
396 397 398
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
399 400
		.cpu_setup		= __setup_cpu_750,
		.platform		= "ppc750",
Linus Torvalds's avatar
Linus Torvalds committed
401 402 403 404 405
	},
	{	/* 750CX (80100 and 8010x?) */
		.pvr_mask		= 0xfffffff0,
		.pvr_value		= 0x00080100,
		.cpu_name		= "750CX",
406
		.cpu_features		= CPU_FTRS_750,
407
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
408 409 410
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
411 412
		.cpu_setup		= __setup_cpu_750cx,
		.platform		= "ppc750",
Linus Torvalds's avatar
Linus Torvalds committed
413 414 415 416 417
	},
	{	/* 750CX (82201 and 82202) */
		.pvr_mask		= 0xfffffff0,
		.pvr_value		= 0x00082200,
		.cpu_name		= "750CX",
418
		.cpu_features		= CPU_FTRS_750,
419
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
420 421 422
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
423 424
		.cpu_setup		= __setup_cpu_750cx,
		.platform		= "ppc750",
Linus Torvalds's avatar
Linus Torvalds committed
425 426 427 428 429
	},
	{	/* 750CXe (82214) */
		.pvr_mask		= 0xfffffff0,
		.pvr_value		= 0x00082210,
		.cpu_name		= "750CXe",
430
		.cpu_features		= CPU_FTRS_750,
431
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
432 433 434
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
435 436
		.cpu_setup		= __setup_cpu_750cx,
		.platform		= "ppc750",
Linus Torvalds's avatar
Linus Torvalds committed
437
	},
438 439 440 441
	{	/* 750CXe "Gekko" (83214) */
		.pvr_mask		= 0xffffffff,
		.pvr_value		= 0x00083214,
		.cpu_name		= "750CXe",
442
		.cpu_features		= CPU_FTRS_750,
443
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
444 445 446
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
447 448
		.cpu_setup		= __setup_cpu_750cx,
		.platform		= "ppc750",
449
	},
450 451 452 453
	{	/* 745/755 */
		.pvr_mask		= 0xfffff000,
		.pvr_value		= 0x00083000,
		.cpu_name		= "745/755",
454
		.cpu_features		= CPU_FTRS_750,
455
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
456 457 458
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
459 460
		.cpu_setup		= __setup_cpu_750,
		.platform		= "ppc750",
461
	},
Linus Torvalds's avatar
Linus Torvalds committed
462 463 464 465
	{	/* 750FX rev 1.x */
		.pvr_mask		= 0xffffff00,
		.pvr_value		= 0x70000100,
		.cpu_name		= "750FX",
466
		.cpu_features		= CPU_FTRS_750FX1,
467
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
468 469 470
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
471 472
		.cpu_setup		= __setup_cpu_750,
		.platform		= "ppc750",
Linus Torvalds's avatar
Linus Torvalds committed
473 474 475 476 477
	},
	{	/* 750FX rev 2.0 must disable HID0[DPM] */
		.pvr_mask		= 0xffffffff,
		.pvr_value		= 0x70000200,
		.cpu_name		= "750FX",
478
		.cpu_features		= CPU_FTRS_750FX2,
479
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
480 481 482
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
483 484
		.cpu_setup		= __setup_cpu_750,
		.platform		= "ppc750",
Linus Torvalds's avatar
Linus Torvalds committed
485 486 487 488 489
	},
	{	/* 750FX (All revs except 2.0) */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x70000000,
		.cpu_name		= "750FX",
490
		.cpu_features		= CPU_FTRS_750FX,
491
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
492 493 494
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
495 496
		.cpu_setup		= __setup_cpu_750fx,
		.platform		= "ppc750",
Linus Torvalds's avatar
Linus Torvalds committed
497 498 499 500 501
	},
	{	/* 750GX */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x70020000,
		.cpu_name		= "750GX",
502
		.cpu_features		= CPU_FTRS_750GX,
503
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
504 505 506
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
507 508
		.cpu_setup		= __setup_cpu_750fx,
		.platform		= "ppc750",
Linus Torvalds's avatar
Linus Torvalds committed
509 510 511 512 513
	},
	{	/* 740/750 (L2CR bit need fixup for 740) */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00080000,
		.cpu_name		= "740/750",
514
		.cpu_features		= CPU_FTRS_740,
515
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
516 517 518
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
519 520
		.cpu_setup		= __setup_cpu_750,
		.platform		= "ppc750",
Linus Torvalds's avatar
Linus Torvalds committed
521 522 523 524 525
	},
	{	/* 7400 rev 1.1 ? (no TAU) */
		.pvr_mask		= 0xffffffff,
		.pvr_value		= 0x000c1101,
		.cpu_name		= "7400 (1.1)",
526
		.cpu_features		= CPU_FTRS_7400_NOTAU,
527 528
		.cpu_user_features	= COMMON_USER |
			PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
529 530 531
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
532 533
		.cpu_setup		= __setup_cpu_7400,
		.platform		= "ppc7400",
Linus Torvalds's avatar
Linus Torvalds committed
534 535 536 537 538
	},
	{	/* 7400 */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x000c0000,
		.cpu_name		= "7400",
539
		.cpu_features		= CPU_FTRS_7400,
540 541
		.cpu_user_features	= COMMON_USER |
			PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
542 543 544
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
545 546
		.cpu_setup		= __setup_cpu_7400,
		.platform		= "ppc7400",
Linus Torvalds's avatar
Linus Torvalds committed
547 548 549 550 551
	},
	{	/* 7410 */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x800c0000,
		.cpu_name		= "7410",
552
		.cpu_features		= CPU_FTRS_7400,
553 554
		.cpu_user_features	= COMMON_USER |
			PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
555 556 557
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
558 559
		.cpu_setup		= __setup_cpu_7410,
		.platform		= "ppc7400",
Linus Torvalds's avatar
Linus Torvalds committed
560 561 562 563 564
	},
	{	/* 7450 2.0 - no doze/nap */
		.pvr_mask		= 0xffffffff,
		.pvr_value		= 0x80000200,
		.cpu_name		= "7450",
565
		.cpu_features		= CPU_FTRS_7450_20,
566 567
		.cpu_user_features	= COMMON_USER |
			PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
568 569 570
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 6,
571 572
		.cpu_setup		= __setup_cpu_745x,
		.oprofile_cpu_type      = "ppc/7450",
573
		.oprofile_type		= PPC_OPROFILE_G4,
574
		.platform		= "ppc7450",
Linus Torvalds's avatar
Linus Torvalds committed
575 576 577 578 579
	},
	{	/* 7450 2.1 */
		.pvr_mask		= 0xffffffff,
		.pvr_value		= 0x80000201,
		.cpu_name		= "7450",
580
		.cpu_features		= CPU_FTRS_7450_21,
581 582
		.cpu_user_features	= COMMON_USER |
			PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
583 584 585
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 6,
586 587
		.cpu_setup		= __setup_cpu_745x,
		.oprofile_cpu_type      = "ppc/7450",
588
		.oprofile_type		= PPC_OPROFILE_G4,
589
		.platform		= "ppc7450",
Linus Torvalds's avatar
Linus Torvalds committed
590 591 592 593 594
	},
	{	/* 7450 2.3 and newer */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x80000000,
		.cpu_name		= "7450",
595
		.cpu_features		= CPU_FTRS_7450_23,
596 597
		.cpu_user_features	= COMMON_USER |
			PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
598 599 600
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 6,
601 602
		.cpu_setup		= __setup_cpu_745x,
		.oprofile_cpu_type      = "ppc/7450",
603
		.oprofile_type		= PPC_OPROFILE_G4,
604
		.platform		= "ppc7450",
Linus Torvalds's avatar
Linus Torvalds committed
605 606 607 608 609
	},
	{	/* 7455 rev 1.x */
		.pvr_mask		= 0xffffff00,
		.pvr_value		= 0x80010100,
		.cpu_name		= "7455",
610
		.cpu_features		= CPU_FTRS_7455_1,
611 612
		.cpu_user_features	= COMMON_USER |
			PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
613 614 615
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 6,
616 617
		.cpu_setup		= __setup_cpu_745x,
		.oprofile_cpu_type      = "ppc/7450",
618
		.oprofile_type		= PPC_OPROFILE_G4,
619
		.platform		= "ppc7450",
Linus Torvalds's avatar
Linus Torvalds committed
620 621 622 623 624
	},
	{	/* 7455 rev 2.0 */
		.pvr_mask		= 0xffffffff,
		.pvr_value		= 0x80010200,
		.cpu_name		= "7455",
625
		.cpu_features		= CPU_FTRS_7455_20,
626 627
		.cpu_user_features	= COMMON_USER |
			PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
628 629 630
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 6,
631 632
		.cpu_setup		= __setup_cpu_745x,
		.oprofile_cpu_type      = "ppc/7450",
633
		.oprofile_type		= PPC_OPROFILE_G4,
634
		.platform		= "ppc7450",
Linus Torvalds's avatar
Linus Torvalds committed
635 636 637 638 639
	},
	{	/* 7455 others */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x80010000,
		.cpu_name		= "7455",
640
		.cpu_features		= CPU_FTRS_7455,
641 642
		.cpu_user_features	= COMMON_USER |
			PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
643 644 645
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 6,
646 647
		.cpu_setup		= __setup_cpu_745x,
		.oprofile_cpu_type      = "ppc/7450",
648
		.oprofile_type		= PPC_OPROFILE_G4,
649
		.platform		= "ppc7450",
Linus Torvalds's avatar
Linus Torvalds committed
650 651 652 653 654
	},
	{	/* 7447/7457 Rev 1.0 */
		.pvr_mask		= 0xffffffff,
		.pvr_value		= 0x80020100,
		.cpu_name		= "7447/7457",
655
		.cpu_features		= CPU_FTRS_7447_10,
656 657
		.cpu_user_features	= COMMON_USER |
			PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
658 659 660
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 6,
661 662
		.cpu_setup		= __setup_cpu_745x,
		.oprofile_cpu_type      = "ppc/7450",
663
		.oprofile_type		= PPC_OPROFILE_G4,
664
		.platform		= "ppc7450",
Linus Torvalds's avatar
Linus Torvalds committed
665 666 667 668 669
	},
	{	/* 7447/7457 Rev 1.1 */
		.pvr_mask		= 0xffffffff,
		.pvr_value		= 0x80020101,
		.cpu_name		= "7447/7457",
670
		.cpu_features		= CPU_FTRS_7447_10,
671 672
		.cpu_user_features	= COMMON_USER |
			PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
673 674 675
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 6,
676 677
		.cpu_setup		= __setup_cpu_745x,
		.oprofile_cpu_type      = "ppc/7450",
678
		.oprofile_type		= PPC_OPROFILE_G4,
679
		.platform		= "ppc7450",
Linus Torvalds's avatar
Linus Torvalds committed
680 681 682 683 684
	},
	{	/* 7447/7457 Rev 1.2 and later */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x80020000,
		.cpu_name		= "7447/7457",
685
		.cpu_features		= CPU_FTRS_7447,
686
		.cpu_user_features	= COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
687 688 689
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 6,
690 691
		.cpu_setup		= __setup_cpu_745x,
		.oprofile_cpu_type      = "ppc/7450",
692
		.oprofile_type		= PPC_OPROFILE_G4,
693
		.platform		= "ppc7450",
Linus Torvalds's avatar
Linus Torvalds committed
694 695 696 697 698
	},
	{	/* 7447A */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x80030000,
		.cpu_name		= "7447A",
699
		.cpu_features		= CPU_FTRS_7447A,
700 701
		.cpu_user_features	= COMMON_USER |
			PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
702 703 704
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 6,
705 706
		.cpu_setup		= __setup_cpu_745x,
		.oprofile_cpu_type      = "ppc/7450",
707
		.oprofile_type		= PPC_OPROFILE_G4,
708
		.platform		= "ppc7450",
709 710 711 712 713
	},
	{	/* 7448 */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x80040000,
		.cpu_name		= "7448",
714
		.cpu_features		= CPU_FTRS_7447A,
715 716
		.cpu_user_features	= COMMON_USER |
			PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Linus Torvalds's avatar
Linus Torvalds committed
717 718 719
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 6,
720 721
		.cpu_setup		= __setup_cpu_745x,
		.oprofile_cpu_type      = "ppc/7450",
722
		.oprofile_type		= PPC_OPROFILE_G4,
723
		.platform		= "ppc7450",
Linus Torvalds's avatar
Linus Torvalds committed
724 725 726 727 728
	},
	{	/* 82xx (8240, 8245, 8260 are all 603e cores) */
		.pvr_mask		= 0x7fff0000,
		.pvr_value		= 0x00810000,
		.cpu_name		= "82xx",
729
		.cpu_features		= CPU_FTRS_82XX,
730
		.cpu_user_features	= COMMON_USER,
Linus Torvalds's avatar
Linus Torvalds committed
731 732
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
733 734
		.cpu_setup		= __setup_cpu_603,
		.platform		= "ppc603",
Linus Torvalds's avatar
Linus Torvalds committed
735 736 737 738 739
	},
	{	/* All G2_LE (603e core, plus some) have the same pvr */
		.pvr_mask		= 0x7fff0000,
		.pvr_value		= 0x00820000,
		.cpu_name		= "G2_LE",
740
		.cpu_features		= CPU_FTRS_G2_LE,
741
		.cpu_user_features	= COMMON_USER,
Linus Torvalds's avatar
Linus Torvalds committed
742 743
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
744 745
		.cpu_setup		= __setup_cpu_603,
		.platform		= "ppc603",
Linus Torvalds's avatar
Linus Torvalds committed
746 747 748 749 750
	},
	{	/* e300 (a 603e core, plus some) on 83xx */
		.pvr_mask		= 0x7fff0000,
		.pvr_value		= 0x00830000,
		.cpu_name		= "e300",
751
		.cpu_features		= CPU_FTRS_E300,
752
		.cpu_user_features	= COMMON_USER,
Linus Torvalds's avatar
Linus Torvalds committed
753 754
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
755 756
		.cpu_setup		= __setup_cpu_603,
		.platform		= "ppc603",
Linus Torvalds's avatar
Linus Torvalds committed
757 758 759 760 761
	},
	{	/* default match, we assume split I/D cache & TB (non-601)... */
		.pvr_mask		= 0x00000000,
		.pvr_value		= 0x00000000,
		.cpu_name		= "(generic PPC)",
762
		.cpu_features		= CPU_FTRS_CLASSIC32,
763
		.cpu_user_features	= COMMON_USER,
Linus Torvalds's avatar
Linus Torvalds committed
764 765
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
766
		.platform		= "ppc603",
Linus Torvalds's avatar
Linus Torvalds committed
767 768 769 770 771 772 773 774 775
	},
#endif /* CLASSIC_PPC */
#ifdef CONFIG_8xx
	{	/* 8xx */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00500000,
		.cpu_name		= "8xx",
		/* CPU_FTR_MAYBE_CAN_DOZE is possible,
		 * if the 8xx code is there.... */
776
		.cpu_features		= CPU_FTRS_8XX,
Linus Torvalds's avatar
Linus Torvalds committed
777 778 779
		.cpu_user_features	= PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
		.icache_bsize		= 16,
		.dcache_bsize		= 16,
780
		.platform		= "ppc823",
Linus Torvalds's avatar
Linus Torvalds committed
781 782 783 784 785 786 787
	},
#endif /* CONFIG_8xx */
#ifdef CONFIG_40x
	{	/* 403GC */
		.pvr_mask		= 0xffffff00,
		.pvr_value		= 0x00200200,
		.cpu_name		= "403GC",
788
		.cpu_features		= CPU_FTRS_40X,
Linus Torvalds's avatar
Linus Torvalds committed
789 790 791
		.cpu_user_features	= PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
		.icache_bsize		= 16,
		.dcache_bsize		= 16,
792
		.platform		= "ppc403",
Linus Torvalds's avatar
Linus Torvalds committed
793 794 795 796 797
	},
	{	/* 403GCX */
		.pvr_mask		= 0xffffff00,
		.pvr_value		= 0x00201400,
		.cpu_name		= "403GCX",
798
		.cpu_features		= CPU_FTRS_40X,
799 800
		.cpu_user_features	= PPC_FEATURE_32 |
		 	PPC_FEATURE_HAS_MMU | PPC_FEATURE_NO_TB,
Linus Torvalds's avatar
Linus Torvalds committed
801 802
		.icache_bsize		= 16,
		.dcache_bsize		= 16,
803
		.platform		= "ppc403",
Linus Torvalds's avatar
Linus Torvalds committed
804 805 806 807 808
	},
	{	/* 403G ?? */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x00200000,
		.cpu_name		= "403G ??",
809
		.cpu_features		= CPU_FTRS_40X,
Linus Torvalds's avatar
Linus Torvalds committed
810 811 812
		.cpu_user_features	= PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
		.icache_bsize		= 16,
		.dcache_bsize		= 16,
813
		.platform		= "ppc403",
Linus Torvalds's avatar
Linus Torvalds committed
814 815 816 817 818
	},
	{	/* 405GP */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x40110000,
		.cpu_name		= "405GP",
819
		.cpu_features		= CPU_FTRS_40X,
Linus Torvalds's avatar
Linus Torvalds committed
820 821 822 823
		.cpu_user_features	= PPC_FEATURE_32 |
			PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
824
		.platform		= "ppc405",
Linus Torvalds's avatar
Linus Torvalds committed
825 826 827 828 829
	},
	{	/* STB 03xxx */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x40130000,
		.cpu_name		= "STB03xxx",
830
		.cpu_features		= CPU_FTRS_40X,
Linus Torvalds's avatar
Linus Torvalds committed
831 832 833 834
		.cpu_user_features	= PPC_FEATURE_32 |
			PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
835
		.platform		= "ppc405",
Linus Torvalds's avatar
Linus Torvalds committed
836 837 838 839 840
	},
	{	/* STB 04xxx */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x41810000,
		.cpu_name		= "STB04xxx",
841
		.cpu_features		= CPU_FTRS_40X,
Linus Torvalds's avatar
Linus Torvalds committed
842 843 844 845
		.cpu_user_features	= PPC_FEATURE_32 |
			PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
846
		.platform		= "ppc405",
Linus Torvalds's avatar
Linus Torvalds committed
847 848 849 850 851
	},
	{	/* NP405L */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x41610000,
		.cpu_name		= "NP405L",
852
		.cpu_features		= CPU_FTRS_40X,
Linus Torvalds's avatar
Linus Torvalds committed
853 854 855 856
		.cpu_user_features	= PPC_FEATURE_32 |
			PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
857
		.platform		= "ppc405",
Linus Torvalds's avatar
Linus Torvalds committed
858 859 860 861 862
	},
	{	/* NP4GS3 */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x40B10000,
		.cpu_name		= "NP4GS3",
863
		.cpu_features		= CPU_FTRS_40X,
Linus Torvalds's avatar
Linus Torvalds committed
864 865 866 867
		.cpu_user_features	= PPC_FEATURE_32 |
			PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
868
		.platform		= "ppc405",
Linus Torvalds's avatar
Linus Torvalds committed
869 870 871 872 873
	},
	{   /* NP405H */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x41410000,
		.cpu_name		= "NP405H",
874
		.cpu_features		= CPU_FTRS_40X,
Linus Torvalds's avatar
Linus Torvalds committed
875 876 877 878
		.cpu_user_features	= PPC_FEATURE_32 |
			PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
879
		.platform		= "ppc405",
Linus Torvalds's avatar
Linus Torvalds committed
880 881 882 883 884
	},
	{	/* 405GPr */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x50910000,
		.cpu_name		= "405GPr",
885
		.cpu_features		= CPU_FTRS_40X,
Linus Torvalds's avatar
Linus Torvalds committed
886 887 888 889
		.cpu_user_features	= PPC_FEATURE_32 |
			PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
890
		.platform		= "ppc405",
Linus Torvalds's avatar
Linus Torvalds committed
891 892 893 894 895
	},
	{   /* STBx25xx */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x51510000,
		.cpu_name		= "STBx25xx",
896
		.cpu_features		= CPU_FTRS_40X,
Linus Torvalds's avatar
Linus Torvalds committed
897 898 899 900
		.cpu_user_features	= PPC_FEATURE_32 |
			PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
901
		.platform		= "ppc405",
Linus Torvalds's avatar
Linus Torvalds committed
902 903 904 905 906
	},
	{	/* 405LP */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x41F10000,
		.cpu_name		= "405LP",
907
		.cpu_features		= CPU_FTRS_40X,
Linus Torvalds's avatar
Linus Torvalds committed
908 909 910
		.cpu_user_features	= PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
911
		.platform		= "ppc405",
Linus Torvalds's avatar
Linus Torvalds committed
912 913
	},
	{	/* Xilinx Virtex-II Pro  */
914
		.pvr_mask		= 0xfffff000,
Linus Torvalds's avatar
Linus Torvalds committed
915 916
		.pvr_value		= 0x20010000,
		.cpu_name		= "Virtex-II Pro",
917
		.cpu_features		= CPU_FTRS_40X,
Linus Torvalds's avatar
Linus Torvalds committed
918 919 920 921
		.cpu_user_features	= PPC_FEATURE_32 |
			PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
922
		.platform		= "ppc405",
Linus Torvalds's avatar
Linus Torvalds committed
923
	},
924 925 926 927 928 929 930 931 932 933
	{	/* Xilinx Virtex-4 FX */
		.pvr_mask		= 0xfffff000,
		.pvr_value		= 0x20011000,
		.cpu_name		= "Virtex-4 FX",
		.cpu_features		= CPU_FTRS_40X,
		.cpu_user_features	= PPC_FEATURE_32 |
			PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
	},
934 935 936 937
	{	/* 405EP */
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x51210000,
		.cpu_name		= "405EP",
938
		.cpu_features		= CPU_FTRS_40X,
939 940 941 942
		.cpu_user_features	= PPC_FEATURE_32 |
			PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
943
		.platform		= "ppc405",
944
	},
Linus Torvalds's avatar
Linus Torvalds committed
945 946 947

#endif /* CONFIG_40x */
#ifdef CONFIG_44x
948 949 950 951
	{
		.pvr_mask		= 0xf0000fff,
		.pvr_value		= 0x40000850,
		.cpu_name		= "440EP Rev. A",
952
		.cpu_features		= CPU_FTRS_44X,
953
		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
954 955
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
956
		.platform		= "ppc440",
957 958 959 960 961
	},
	{
		.pvr_mask		= 0xf0000fff,
		.pvr_value		= 0x400008d3,
		.cpu_name		= "440EP Rev. B",
962
		.cpu_features		= CPU_FTRS_44X,
963
		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
964 965
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
966
		.platform		= "ppc440",
967
	},
968
	{	/* 440GP Rev. B */
Linus Torvalds's avatar
Linus Torvalds committed
969 970 971
		.pvr_mask		= 0xf0000fff,
		.pvr_value		= 0x40000440,
		.cpu_name		= "440GP Rev. B",
972
		.cpu_features		= CPU_FTRS_44X,
973
		.cpu_user_features	= COMMON_USER_BOOKE,
Linus Torvalds's avatar
Linus Torvalds committed
974 975
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
976
		.platform		= "ppc440gp",
Linus Torvalds's avatar
Linus Torvalds committed
977
	},
978
	{	/* 440GP Rev. C */
Linus Torvalds's avatar
Linus Torvalds committed
979 980 981
		.pvr_mask		= 0xf0000fff,
		.pvr_value		= 0x40000481,
		.cpu_name		= "440GP Rev. C",
982
		.cpu_features		= CPU_FTRS_44X,
983
		.cpu_user_features	= COMMON_USER_BOOKE,
Linus Torvalds's avatar
Linus Torvalds committed
984 985
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
986
		.platform		= "ppc440gp",
Linus Torvalds's avatar
Linus Torvalds committed
987 988 989 990 991
	},
	{ /* 440GX Rev. A */
		.pvr_mask		= 0xf0000fff,
		.pvr_value		= 0x50000850,
		.cpu_name		= "440GX Rev. A",
992
		.cpu_features		= CPU_FTRS_44X,
993
		.cpu_user_features	= COMMON_USER_BOOKE,
Linus Torvalds's avatar
Linus Torvalds committed
994 995
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
996
		.platform		= "ppc440",
Linus Torvalds's avatar
Linus Torvalds committed
997 998 999 1000 1001
	},
	{ /* 440GX Rev. B */
		.pvr_mask		= 0xf0000fff,
		.pvr_value		= 0x50000851,
		.cpu_name		= "440GX Rev. B",
1002
		.cpu_features		= CPU_FTRS_44X,
1003
		.cpu_user_features	= COMMON_USER_BOOKE,
Linus Torvalds's avatar
Linus Torvalds committed
1004 1005
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
1006
		.platform		= "ppc440",
Linus Torvalds's avatar
Linus Torvalds committed
1007 1008 1009 1010 1011
	},
	{ /* 440GX Rev. C */
		.pvr_mask		= 0xf0000fff,
		.pvr_value		= 0x50000892,
		.cpu_name		= "440GX Rev. C",
1012
		.cpu_features		= CPU_FTRS_44X,
1013
		.cpu_user_features	= COMMON_USER_BOOKE,
Linus Torvalds's avatar
Linus Torvalds committed
1014 1015
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
1016
		.platform		= "ppc440",
Linus Torvalds's avatar
Linus Torvalds committed
1017
	},
1018 1019 1020 1021
	{ /* 440GX Rev. F */
		.pvr_mask		= 0xf0000fff,
		.pvr_value		= 0x50000894,
		.cpu_name		= "440GX Rev. F",
1022
		.cpu_features		= CPU_FTRS_44X,
1023
		.cpu_user_features	= COMMON_USER_BOOKE,
1024 1025
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
1026
		.platform		= "ppc440",
1027
	},
1028 1029 1030 1031
	{ /* 440SP Rev. A */
		.pvr_mask		= 0xff000fff,
		.pvr_value		= 0x53000891,
		.cpu_name		= "440SP Rev. A",
1032
		.cpu_features		= CPU_FTRS_44X,
1033
		.cpu_user_features	= COMMON_USER_BOOKE,
1034 1035
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
1036
		.platform		= "ppc440",
1037
	},
1038 1039 1040 1041 1042 1043
	{ /* 440SPe Rev. A */
		.pvr_mask		= 0xff000fff,
		.pvr_value		= 0x53000890,
		.cpu_name		= "440SPe Rev. A",
		.cpu_features		= CPU_FTR_SPLIT_ID_CACHE |
			CPU_FTR_USE_TB,
1044
		.cpu_user_features	= COMMON_USER_BOOKE,
1045 1046
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
1047
		.platform		= "ppc440",
1048
	},
Linus Torvalds's avatar
Linus Torvalds committed
1049
#endif /* CONFIG_44x */
1050
#ifdef CONFIG_FSL_BOOKE
1051
	{	/* e200z5 */
1052 1053 1054 1055
		.pvr_mask		= 0xfff00000,
		.pvr_value		= 0x81000000,
		.cpu_name		= "e200z5",
		/* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
1056
		.cpu_features		= CPU_FTRS_E200,
1057 1058
		.cpu_user_features	= COMMON_USER_BOOKE |
			PPC_FEATURE_HAS_EFP_SINGLE |
1059 1060
			PPC_FEATURE_UNIFIED_CACHE,
		.dcache_bsize		= 32,
1061
		.platform		= "ppc5554",
1062
	},
1063
	{	/* e200z6 */
1064 1065 1066 1067
		.pvr_mask		= 0xfff00000,
		.pvr_value		= 0x81100000,
		.cpu_name		= "e200z6",
		/* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
1068
		.cpu_features		= CPU_FTRS_E200,
1069 1070
		.cpu_user_features	= COMMON_USER_BOOKE |
			PPC_FEATURE_SPE_COMP |
1071 1072 1073
			PPC_FEATURE_HAS_EFP_SINGLE |
			PPC_FEATURE_UNIFIED_CACHE,
		.dcache_bsize		= 32,
1074
		.platform		= "ppc5554",
1075
	},
1076
	{	/* e500 */
Linus Torvalds's avatar
Linus Torvalds committed
1077 1078 1079 1080
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x80200000,
		.cpu_name		= "e500",
		/* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
1081
		.cpu_features		= CPU_FTRS_E500,
1082 1083
		.cpu_user_features	= COMMON_USER_BOOKE |
			PPC_FEATURE_SPE_COMP |
Linus Torvalds's avatar
Linus Torvalds committed
1084 1085 1086 1087
			PPC_FEATURE_HAS_EFP_SINGLE,
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
1088
		.oprofile_cpu_type	= "ppc/e500",
1089
		.oprofile_type		= PPC_OPROFILE_BOOKE,
1090
		.platform		= "ppc8540",
Linus Torvalds's avatar
Linus Torvalds committed
1091
	},
1092
	{	/* e500v2 */
1093 1094 1095 1096
		.pvr_mask		= 0xffff0000,
		.pvr_value		= 0x80210000,
		.cpu_name		= "e500v2",
		/* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
1097
		.cpu_features		= CPU_FTRS_E500_2,
1098 1099 1100 1101
		.cpu_user_features	= COMMON_USER_BOOKE |
			PPC_FEATURE_SPE_COMP |
			PPC_FEATURE_HAS_EFP_SINGLE |
			PPC_FEATURE_HAS_EFP_DOUBLE,
1102 1103 1104
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
		.num_pmcs		= 4,
1105
		.oprofile_cpu_type	= "ppc/e500",
1106
		.oprofile_type		= PPC_OPROFILE_BOOKE,
1107
		.platform		= "ppc8548",
1108
	},
Linus Torvalds's avatar
Linus Torvalds committed
1109 1110 1111 1112 1113 1114
#endif
#if !CLASSIC_PPC
	{	/* default match */
		.pvr_mask		= 0x00000000,
		.pvr_value		= 0x00000000,
		.cpu_name		= "(generic PPC)",
1115
		.cpu_features		= CPU_FTRS_GENERIC_32,
Linus Torvalds's avatar
Linus Torvalds committed
1116 1117 1118
		.cpu_user_features	= PPC_FEATURE_32,
		.icache_bsize		= 32,
		.dcache_bsize		= 32,
1119
		.platform		= "powerpc",
Linus Torvalds's avatar
Linus Torvalds committed
1120 1121
	}
#endif /* !CLASSIC_PPC */
1122
#endif /* CONFIG_PPC32 */
Linus Torvalds's avatar
Linus Torvalds committed
1123
};