blob: cc39139233d7c89a1bfeb5c1ef7e8171c723271f [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
Linus Torvalds1da177e2005-04-16 15:20:36 -07002 * Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org)
3 *
Stephen Rothwell49209602005-10-12 15:55:09 +10004 * Modifications for ppc64:
5 * Copyright (C) 2003 Dave Engebretsen <engebret@us.ibm.com>
6 *
Linus Torvalds1da177e2005-04-16 15:20:36 -07007 * 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
Linus Torvalds1da177e2005-04-16 15:20:36 -070013#include <linux/string.h>
14#include <linux/sched.h>
15#include <linux/threads.h>
16#include <linux/init.h>
Paul Gortmaker4b16f8e2011-07-22 18:24:23 -040017#include <linux/export.h>
Kumar Gala400d2212005-09-27 15:13:12 -050018
19#include <asm/oprofile_impl.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070020#include <asm/cputable.h>
Benjamin Herrenschmidt42c4aaa2006-10-24 16:42:40 +100021#include <asm/prom.h> /* for PTRRELOC on ARCH=ppc */
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +000022#include <asm/mmu.h>
David Howellsae3a1972012-03-28 18:30:02 +010023#include <asm/setup.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070024
Kumar Gala400d2212005-09-27 15:13:12 -050025struct cpu_spec* cur_cpu_spec = NULL;
Stephen Rothwell49209602005-10-12 15:55:09 +100026EXPORT_SYMBOL(cur_cpu_spec);
Linus Torvalds1da177e2005-04-16 15:20:36 -070027
Nathan Lynch9115d132008-07-16 09:58:51 +100028/* The platform string corresponding to the real PVR */
29const char *powerpc_base_platform;
30
Stephen Rothwell49209602005-10-12 15:55:09 +100031/* 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 */
Geoff Levandb26f1002006-05-19 14:24:18 +100038#ifdef CONFIG_PPC32
Kumar Gala105c31d2009-01-08 08:31:20 -060039extern 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);
Valentine Barshak81127532007-09-22 00:46:57 +100043extern void __setup_cpu_440ep(unsigned long offset, struct cpu_spec* spec);
44extern void __setup_cpu_440epx(unsigned long offset, struct cpu_spec* spec);
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +110045extern void __setup_cpu_440gx(unsigned long offset, struct cpu_spec* spec);
Valentine Barshak340ffd22007-09-22 00:50:09 +100046extern void __setup_cpu_440grx(unsigned long offset, struct cpu_spec* spec);
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +110047extern void __setup_cpu_440spe(unsigned long offset, struct cpu_spec* spec);
Grant Likely640d17d2008-12-04 05:39:55 +000048extern void __setup_cpu_440x5(unsigned long offset, struct cpu_spec* spec);
Stefan Roese464076a2008-02-24 08:07:41 +110049extern void __setup_cpu_460ex(unsigned long offset, struct cpu_spec* spec);
Josh Boyer939e6222008-06-11 07:52:40 -040050extern void __setup_cpu_460gt(unsigned long offset, struct cpu_spec* spec);
Madhulika Madishetty6c712092009-02-05 13:31:36 +000051extern void __setup_cpu_460sx(unsigned long offset, struct cpu_spec *spec);
Tirumala Marri6edc3232010-09-13 13:26:11 +000052extern void __setup_cpu_apm821xx(unsigned long offset, struct cpu_spec *spec);
Kumar Gala400d2212005-09-27 15:13:12 -050053extern 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);
Stephen Rothwell49209602005-10-12 15:55:09 +100061#endif /* CONFIG_PPC32 */
Olof Johanssonf39b7a52006-08-11 00:07:08 -050062#ifdef CONFIG_PPC64
Kumar Gala400d2212005-09-27 15:13:12 -050063extern void __setup_cpu_ppc970(unsigned long offset, struct cpu_spec* spec);
Olof Johansson5b43d202006-10-04 23:41:41 -050064extern void __setup_cpu_ppc970MP(unsigned long offset, struct cpu_spec* spec);
Olof Johansson11999192007-02-04 16:36:51 -060065extern void __setup_cpu_pa6t(unsigned long offset, struct cpu_spec* spec);
Benjamin Herrenschmidt76b4eda2011-04-14 22:32:01 +000066extern void __setup_cpu_a2(unsigned long offset, struct cpu_spec* spec);
Stephen Rothwell40d244d2007-02-12 22:10:48 +110067extern void __restore_cpu_pa6t(void);
Olof Johanssonf39b7a52006-08-11 00:07:08 -050068extern void __restore_cpu_ppc970(void);
Michael Neulinge952e6c2008-06-18 10:47:26 +100069extern void __setup_cpu_power7(unsigned long offset, struct cpu_spec* spec);
70extern void __restore_cpu_power7(void);
Michael Neulingaec937b2012-10-30 19:34:14 +000071extern void __setup_cpu_power8(unsigned long offset, struct cpu_spec* spec);
72extern void __restore_cpu_power8(void);
Benjamin Herrenschmidt76b4eda2011-04-14 22:32:01 +000073extern void __restore_cpu_a2(void);
Olof Johanssonf39b7a52006-08-11 00:07:08 -050074#endif /* CONFIG_PPC64 */
Kumar Gala4490c062010-10-08 08:32:11 -050075#if defined(CONFIG_E500)
76extern void __setup_cpu_e5500(unsigned long offset, struct cpu_spec* spec);
Kumar Galacd66cc22012-09-07 15:57:17 -050077extern void __setup_cpu_e6500(unsigned long offset, struct cpu_spec* spec);
Kumar Gala4490c062010-10-08 08:32:11 -050078extern void __restore_cpu_e5500(void);
Kumar Galacd66cc22012-09-07 15:57:17 -050079extern void __restore_cpu_e6500(void);
Kumar Gala4490c062010-10-08 08:32:11 -050080#endif /* CONFIG_E500 */
Linus Torvalds1da177e2005-04-16 15:20:36 -070081
Linus Torvalds1da177e2005-04-16 15:20:36 -070082/* This table only contains "desktop" CPUs, it need to be filled with embedded
83 * ones as well...
84 */
Stephen Rothwell49209602005-10-12 15:55:09 +100085#define COMMON_USER (PPC_FEATURE_32 | PPC_FEATURE_HAS_FPU | \
86 PPC_FEATURE_HAS_MMU)
87#define COMMON_USER_PPC64 (COMMON_USER | PPC_FEATURE_64)
Paul Mackerrasa7ddc5e2005-11-10 14:29:18 +110088#define COMMON_USER_POWER4 (COMMON_USER_PPC64 | PPC_FEATURE_POWER4)
Benjamin Herrenschmidtaa5cb0212006-03-01 15:07:07 +110089#define COMMON_USER_POWER5 (COMMON_USER_PPC64 | PPC_FEATURE_POWER5 |\
90 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP)
91#define COMMON_USER_POWER5_PLUS (COMMON_USER_PPC64 | PPC_FEATURE_POWER5_PLUS|\
92 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP)
Anton Blanchard03054d52006-04-29 09:51:06 +100093#define COMMON_USER_POWER6 (COMMON_USER_PPC64 | PPC_FEATURE_ARCH_2_05 |\
Paul Mackerrasfab5db92006-06-07 16:14:40 +100094 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP | \
Nathan Lynch0f473312008-07-10 01:06:57 +100095 PPC_FEATURE_TRUE_LE | \
96 PPC_FEATURE_PSERIES_PERFMON_COMPAT)
Michael Neulinge952e6c2008-06-18 10:47:26 +100097#define COMMON_USER_POWER7 (COMMON_USER_PPC64 | PPC_FEATURE_ARCH_2_06 |\
98 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP | \
Nathan Lynch0f473312008-07-10 01:06:57 +100099 PPC_FEATURE_TRUE_LE | \
100 PPC_FEATURE_PSERIES_PERFMON_COMPAT)
Michael Neuling71e18492012-10-30 19:34:15 +0000101#define COMMON_USER_POWER8 (COMMON_USER_PPC64 | PPC_FEATURE_ARCH_2_06 |\
102 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP | \
103 PPC_FEATURE_TRUE_LE | \
104 PPC_FEATURE_PSERIES_PERFMON_COMPAT)
Olof Johanssonb3ebd1d2006-09-06 14:35:57 -0500105#define COMMON_USER_PA6T (COMMON_USER_PPC64 | PPC_FEATURE_PA6T |\
106 PPC_FEATURE_TRUE_LE | \
107 PPC_FEATURE_HAS_ALTIVEC_COMP)
Kumar Galaf45c4482009-08-18 19:08:30 +0000108#ifdef CONFIG_PPC_BOOK3E_64
109#define COMMON_USER_BOOKE (COMMON_USER_PPC64 | PPC_FEATURE_BOOKE)
110#else
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100111#define COMMON_USER_BOOKE (PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU | \
112 PPC_FEATURE_BOOKE)
Kumar Galaf45c4482009-08-18 19:08:30 +0000113#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -0700114
Paul Mackerras87a72f92007-10-04 14:18:01 +1000115static struct cpu_spec __initdata cpu_specs[] = {
Benjamin Herrenschmidt2d27cfd2009-07-23 23:15:59 +0000116#ifdef CONFIG_PPC_BOOK3S_64
Stephen Rothwell49209602005-10-12 15:55:09 +1000117 { /* Power3 */
118 .pvr_mask = 0xffff0000,
119 .pvr_value = 0x00400000,
120 .cpu_name = "POWER3 (630)",
121 .cpu_features = CPU_FTRS_POWER3,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000122 .cpu_user_features = COMMON_USER_PPC64|PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000123 .mmu_features = MMU_FTR_HPTE_TABLE,
Stephen Rothwell49209602005-10-12 15:55:09 +1000124 .icache_bsize = 128,
125 .dcache_bsize = 128,
126 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600127 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000128 .oprofile_cpu_type = "ppc64/power3",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000129 .oprofile_type = PPC_OPROFILE_RS64,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100130 .platform = "power3",
Stephen Rothwell49209602005-10-12 15:55:09 +1000131 },
132 { /* Power3+ */
133 .pvr_mask = 0xffff0000,
134 .pvr_value = 0x00410000,
135 .cpu_name = "POWER3 (630+)",
136 .cpu_features = CPU_FTRS_POWER3,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000137 .cpu_user_features = COMMON_USER_PPC64|PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000138 .mmu_features = MMU_FTR_HPTE_TABLE,
Stephen Rothwell49209602005-10-12 15:55:09 +1000139 .icache_bsize = 128,
140 .dcache_bsize = 128,
141 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600142 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000143 .oprofile_cpu_type = "ppc64/power3",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000144 .oprofile_type = PPC_OPROFILE_RS64,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100145 .platform = "power3",
Stephen Rothwell49209602005-10-12 15:55:09 +1000146 },
147 { /* Northstar */
148 .pvr_mask = 0xffff0000,
149 .pvr_value = 0x00330000,
150 .cpu_name = "RS64-II (northstar)",
151 .cpu_features = CPU_FTRS_RS64,
152 .cpu_user_features = COMMON_USER_PPC64,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000153 .mmu_features = MMU_FTR_HPTE_TABLE,
Stephen Rothwell49209602005-10-12 15:55:09 +1000154 .icache_bsize = 128,
155 .dcache_bsize = 128,
156 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600157 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000158 .oprofile_cpu_type = "ppc64/rs64",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000159 .oprofile_type = PPC_OPROFILE_RS64,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100160 .platform = "rs64",
Stephen Rothwell49209602005-10-12 15:55:09 +1000161 },
162 { /* Pulsar */
163 .pvr_mask = 0xffff0000,
164 .pvr_value = 0x00340000,
165 .cpu_name = "RS64-III (pulsar)",
166 .cpu_features = CPU_FTRS_RS64,
167 .cpu_user_features = COMMON_USER_PPC64,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000168 .mmu_features = MMU_FTR_HPTE_TABLE,
Stephen Rothwell49209602005-10-12 15:55:09 +1000169 .icache_bsize = 128,
170 .dcache_bsize = 128,
171 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600172 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000173 .oprofile_cpu_type = "ppc64/rs64",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000174 .oprofile_type = PPC_OPROFILE_RS64,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100175 .platform = "rs64",
Stephen Rothwell49209602005-10-12 15:55:09 +1000176 },
177 { /* I-star */
178 .pvr_mask = 0xffff0000,
179 .pvr_value = 0x00360000,
180 .cpu_name = "RS64-III (icestar)",
181 .cpu_features = CPU_FTRS_RS64,
182 .cpu_user_features = COMMON_USER_PPC64,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000183 .mmu_features = MMU_FTR_HPTE_TABLE,
Stephen Rothwell49209602005-10-12 15:55:09 +1000184 .icache_bsize = 128,
185 .dcache_bsize = 128,
186 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600187 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000188 .oprofile_cpu_type = "ppc64/rs64",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000189 .oprofile_type = PPC_OPROFILE_RS64,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100190 .platform = "rs64",
Stephen Rothwell49209602005-10-12 15:55:09 +1000191 },
192 { /* S-star */
193 .pvr_mask = 0xffff0000,
194 .pvr_value = 0x00370000,
195 .cpu_name = "RS64-IV (sstar)",
196 .cpu_features = CPU_FTRS_RS64,
197 .cpu_user_features = COMMON_USER_PPC64,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000198 .mmu_features = MMU_FTR_HPTE_TABLE,
Stephen Rothwell49209602005-10-12 15:55:09 +1000199 .icache_bsize = 128,
200 .dcache_bsize = 128,
201 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600202 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000203 .oprofile_cpu_type = "ppc64/rs64",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000204 .oprofile_type = PPC_OPROFILE_RS64,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100205 .platform = "rs64",
Stephen Rothwell49209602005-10-12 15:55:09 +1000206 },
207 { /* Power4 */
208 .pvr_mask = 0xffff0000,
209 .pvr_value = 0x00350000,
210 .cpu_name = "POWER4 (gp)",
211 .cpu_features = CPU_FTRS_POWER4,
Paul Mackerrasa7ddc5e2005-11-10 14:29:18 +1100212 .cpu_user_features = COMMON_USER_POWER4,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000213 .mmu_features = MMU_FTRS_POWER4,
Stephen Rothwell49209602005-10-12 15:55:09 +1000214 .icache_bsize = 128,
215 .dcache_bsize = 128,
216 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600217 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000218 .oprofile_cpu_type = "ppc64/power4",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000219 .oprofile_type = PPC_OPROFILE_POWER4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100220 .platform = "power4",
Stephen Rothwell49209602005-10-12 15:55:09 +1000221 },
222 { /* Power4+ */
223 .pvr_mask = 0xffff0000,
224 .pvr_value = 0x00380000,
225 .cpu_name = "POWER4+ (gq)",
226 .cpu_features = CPU_FTRS_POWER4,
Paul Mackerrasa7ddc5e2005-11-10 14:29:18 +1100227 .cpu_user_features = COMMON_USER_POWER4,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000228 .mmu_features = MMU_FTRS_POWER4,
Stephen Rothwell49209602005-10-12 15:55:09 +1000229 .icache_bsize = 128,
230 .dcache_bsize = 128,
231 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600232 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000233 .oprofile_cpu_type = "ppc64/power4",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000234 .oprofile_type = PPC_OPROFILE_POWER4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100235 .platform = "power4",
Stephen Rothwell49209602005-10-12 15:55:09 +1000236 },
237 { /* PPC970 */
238 .pvr_mask = 0xffff0000,
239 .pvr_value = 0x00390000,
240 .cpu_name = "PPC970",
241 .cpu_features = CPU_FTRS_PPC970,
Paul Mackerrasa7ddc5e2005-11-10 14:29:18 +1100242 .cpu_user_features = COMMON_USER_POWER4 |
Stephen Rothwell49209602005-10-12 15:55:09 +1000243 PPC_FEATURE_HAS_ALTIVEC_COMP,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000244 .mmu_features = MMU_FTRS_PPC970,
Stephen Rothwell49209602005-10-12 15:55:09 +1000245 .icache_bsize = 128,
246 .dcache_bsize = 128,
247 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600248 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000249 .cpu_setup = __setup_cpu_ppc970,
Olof Johanssonf39b7a52006-08-11 00:07:08 -0500250 .cpu_restore = __restore_cpu_ppc970,
Stephen Rothwell49209602005-10-12 15:55:09 +1000251 .oprofile_cpu_type = "ppc64/970",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000252 .oprofile_type = PPC_OPROFILE_POWER4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100253 .platform = "ppc970",
Stephen Rothwell49209602005-10-12 15:55:09 +1000254 },
Stephen Rothwell49209602005-10-12 15:55:09 +1000255 { /* PPC970FX */
256 .pvr_mask = 0xffff0000,
257 .pvr_value = 0x003c0000,
258 .cpu_name = "PPC970FX",
Stephen Rothwell49209602005-10-12 15:55:09 +1000259 .cpu_features = CPU_FTRS_PPC970,
Paul Mackerrasa7ddc5e2005-11-10 14:29:18 +1100260 .cpu_user_features = COMMON_USER_POWER4 |
Stephen Rothwell49209602005-10-12 15:55:09 +1000261 PPC_FEATURE_HAS_ALTIVEC_COMP,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000262 .mmu_features = MMU_FTRS_PPC970,
Stephen Rothwell49209602005-10-12 15:55:09 +1000263 .icache_bsize = 128,
264 .dcache_bsize = 128,
265 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600266 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000267 .cpu_setup = __setup_cpu_ppc970,
Olof Johanssonf39b7a52006-08-11 00:07:08 -0500268 .cpu_restore = __restore_cpu_ppc970,
Stephen Rothwell49209602005-10-12 15:55:09 +1000269 .oprofile_cpu_type = "ppc64/970",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000270 .oprofile_type = PPC_OPROFILE_POWER4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100271 .platform = "ppc970",
Stephen Rothwell49209602005-10-12 15:55:09 +1000272 },
Olof Johansson3546e812007-02-26 00:35:14 -0600273 { /* PPC970MP DD1.0 - no DEEPNAP, use regular 970 init */
274 .pvr_mask = 0xffffffff,
275 .pvr_value = 0x00440100,
276 .cpu_name = "PPC970MP",
277 .cpu_features = CPU_FTRS_PPC970,
278 .cpu_user_features = COMMON_USER_POWER4 |
279 PPC_FEATURE_HAS_ALTIVEC_COMP,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000280 .mmu_features = MMU_FTR_HPTE_TABLE,
Olof Johansson3546e812007-02-26 00:35:14 -0600281 .icache_bsize = 128,
282 .dcache_bsize = 128,
283 .num_pmcs = 8,
Anton Blanchard2fae4982007-05-19 15:22:41 +1000284 .pmc_type = PPC_PMC_IBM,
Olof Johansson3546e812007-02-26 00:35:14 -0600285 .cpu_setup = __setup_cpu_ppc970,
286 .cpu_restore = __restore_cpu_ppc970,
287 .oprofile_cpu_type = "ppc64/970MP",
288 .oprofile_type = PPC_OPROFILE_POWER4,
289 .platform = "ppc970",
290 },
Stephen Rothwell49209602005-10-12 15:55:09 +1000291 { /* PPC970MP */
292 .pvr_mask = 0xffff0000,
293 .pvr_value = 0x00440000,
294 .cpu_name = "PPC970MP",
295 .cpu_features = CPU_FTRS_PPC970,
Paul Mackerrasa7ddc5e2005-11-10 14:29:18 +1100296 .cpu_user_features = COMMON_USER_POWER4 |
Stephen Rothwell49209602005-10-12 15:55:09 +1000297 PPC_FEATURE_HAS_ALTIVEC_COMP,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000298 .mmu_features = MMU_FTRS_PPC970,
Stephen Rothwell49209602005-10-12 15:55:09 +1000299 .icache_bsize = 128,
300 .dcache_bsize = 128,
Anton Blanchard87af41b2006-05-05 05:44:26 +1000301 .num_pmcs = 8,
Anton Blanchard2fae4982007-05-19 15:22:41 +1000302 .pmc_type = PPC_PMC_IBM,
Olof Johansson5b43d202006-10-04 23:41:41 -0500303 .cpu_setup = __setup_cpu_ppc970MP,
Olof Johanssonf39b7a52006-08-11 00:07:08 -0500304 .cpu_restore = __restore_cpu_ppc970,
Mike Wolffecb3522006-11-21 14:41:54 -0600305 .oprofile_cpu_type = "ppc64/970MP",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000306 .oprofile_type = PPC_OPROFILE_POWER4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100307 .platform = "ppc970",
Stephen Rothwell49209602005-10-12 15:55:09 +1000308 },
Jake Moilanen362ff7b2006-10-18 10:47:22 -0500309 { /* PPC970GX */
310 .pvr_mask = 0xffff0000,
311 .pvr_value = 0x00450000,
312 .cpu_name = "PPC970GX",
313 .cpu_features = CPU_FTRS_PPC970,
314 .cpu_user_features = COMMON_USER_POWER4 |
315 PPC_FEATURE_HAS_ALTIVEC_COMP,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000316 .mmu_features = MMU_FTRS_PPC970,
Jake Moilanen362ff7b2006-10-18 10:47:22 -0500317 .icache_bsize = 128,
318 .dcache_bsize = 128,
319 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600320 .pmc_type = PPC_PMC_IBM,
Jake Moilanen362ff7b2006-10-18 10:47:22 -0500321 .cpu_setup = __setup_cpu_ppc970,
322 .oprofile_cpu_type = "ppc64/970",
323 .oprofile_type = PPC_OPROFILE_POWER4,
324 .platform = "ppc970",
325 },
Benjamin Herrenschmidt3c726f82005-11-07 11:06:55 +1100326 { /* Power5 GR */
Stephen Rothwell49209602005-10-12 15:55:09 +1000327 .pvr_mask = 0xffff0000,
328 .pvr_value = 0x003a0000,
329 .cpu_name = "POWER5 (gr)",
330 .cpu_features = CPU_FTRS_POWER5,
Paul Mackerrasa7ddc5e2005-11-10 14:29:18 +1100331 .cpu_user_features = COMMON_USER_POWER5,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000332 .mmu_features = MMU_FTRS_POWER5,
Stephen Rothwell49209602005-10-12 15:55:09 +1000333 .icache_bsize = 128,
334 .dcache_bsize = 128,
335 .num_pmcs = 6,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600336 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000337 .oprofile_cpu_type = "ppc64/power5",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000338 .oprofile_type = PPC_OPROFILE_POWER4,
Michael Neulinge78dbc82006-06-08 14:42:34 +1000339 /* SIHV / SIPR bits are implemented on POWER4+ (GQ)
340 * and above but only works on POWER5 and above
341 */
342 .oprofile_mmcra_sihv = MMCRA_SIHV,
343 .oprofile_mmcra_sipr = MMCRA_SIPR,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100344 .platform = "power5",
Stephen Rothwell49209602005-10-12 15:55:09 +1000345 },
Mike Wolf31a12ce2007-07-10 13:13:47 -0500346 { /* Power5++ */
347 .pvr_mask = 0xffffff00,
348 .pvr_value = 0x003b0300,
349 .cpu_name = "POWER5+ (gs)",
350 .cpu_features = CPU_FTRS_POWER5,
351 .cpu_user_features = COMMON_USER_POWER5_PLUS,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000352 .mmu_features = MMU_FTRS_POWER5,
Mike Wolf31a12ce2007-07-10 13:13:47 -0500353 .icache_bsize = 128,
354 .dcache_bsize = 128,
355 .num_pmcs = 6,
356 .oprofile_cpu_type = "ppc64/power5++",
357 .oprofile_type = PPC_OPROFILE_POWER4,
358 .oprofile_mmcra_sihv = MMCRA_SIHV,
359 .oprofile_mmcra_sipr = MMCRA_SIPR,
360 .platform = "power5+",
361 },
Benjamin Herrenschmidt3c726f82005-11-07 11:06:55 +1100362 { /* Power5 GS */
Stephen Rothwell49209602005-10-12 15:55:09 +1000363 .pvr_mask = 0xffff0000,
364 .pvr_value = 0x003b0000,
Anton Blanchard834608f2006-01-09 15:42:30 +1100365 .cpu_name = "POWER5+ (gs)",
Stephen Rothwell49209602005-10-12 15:55:09 +1000366 .cpu_features = CPU_FTRS_POWER5,
Paul Mackerrasa7ddc5e2005-11-10 14:29:18 +1100367 .cpu_user_features = COMMON_USER_POWER5_PLUS,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000368 .mmu_features = MMU_FTRS_POWER5,
Stephen Rothwell49209602005-10-12 15:55:09 +1000369 .icache_bsize = 128,
370 .dcache_bsize = 128,
371 .num_pmcs = 6,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600372 .pmc_type = PPC_PMC_IBM,
Anton Blanchard834608f2006-01-09 15:42:30 +1100373 .oprofile_cpu_type = "ppc64/power5+",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000374 .oprofile_type = PPC_OPROFILE_POWER4,
Michael Neulinge78dbc82006-06-08 14:42:34 +1000375 .oprofile_mmcra_sihv = MMCRA_SIHV,
376 .oprofile_mmcra_sipr = MMCRA_SIPR,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100377 .platform = "power5+",
Stephen Rothwell49209602005-10-12 15:55:09 +1000378 },
Paul Mackerras974a76f2006-11-10 20:38:53 +1100379 { /* POWER6 in P5+ mode; 2.04-compliant processor */
380 .pvr_mask = 0xffffffff,
381 .pvr_value = 0x0f000001,
382 .cpu_name = "POWER5+",
383 .cpu_features = CPU_FTRS_POWER5,
384 .cpu_user_features = COMMON_USER_POWER5_PLUS,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000385 .mmu_features = MMU_FTRS_POWER5,
Paul Mackerras974a76f2006-11-10 20:38:53 +1100386 .icache_bsize = 128,
387 .dcache_bsize = 128,
Michael Wolf79af6c42009-04-27 06:17:54 +0000388 .oprofile_cpu_type = "ppc64/ibm-compat-v1",
389 .oprofile_type = PPC_OPROFILE_POWER4,
Paul Mackerras974a76f2006-11-10 20:38:53 +1100390 .platform = "power5+",
391 },
Anton Blanchard03054d52006-04-29 09:51:06 +1000392 { /* Power6 */
393 .pvr_mask = 0xffff0000,
394 .pvr_value = 0x003e0000,
Paul Mackerras974a76f2006-11-10 20:38:53 +1100395 .cpu_name = "POWER6 (raw)",
396 .cpu_features = CPU_FTRS_POWER6,
397 .cpu_user_features = COMMON_USER_POWER6 |
398 PPC_FEATURE_POWER6_EXT,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000399 .mmu_features = MMU_FTRS_POWER6,
Paul Mackerras974a76f2006-11-10 20:38:53 +1100400 .icache_bsize = 128,
401 .dcache_bsize = 128,
402 .num_pmcs = 6,
Anton Blanchard2fae4982007-05-19 15:22:41 +1000403 .pmc_type = PPC_PMC_IBM,
Paul Mackerras974a76f2006-11-10 20:38:53 +1100404 .oprofile_cpu_type = "ppc64/power6",
405 .oprofile_type = PPC_OPROFILE_POWER4,
406 .oprofile_mmcra_sihv = POWER6_MMCRA_SIHV,
407 .oprofile_mmcra_sipr = POWER6_MMCRA_SIPR,
408 .oprofile_mmcra_clear = POWER6_MMCRA_THRM |
409 POWER6_MMCRA_OTHER,
410 .platform = "power6x",
411 },
412 { /* 2.05-compliant processor, i.e. Power6 "architected" mode */
413 .pvr_mask = 0xffffffff,
414 .pvr_value = 0x0f000002,
415 .cpu_name = "POWER6 (architected)",
Anton Blanchard03054d52006-04-29 09:51:06 +1000416 .cpu_features = CPU_FTRS_POWER6,
417 .cpu_user_features = COMMON_USER_POWER6,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000418 .mmu_features = MMU_FTRS_POWER6,
Anton Blanchard03054d52006-04-29 09:51:06 +1000419 .icache_bsize = 128,
420 .dcache_bsize = 128,
Michael Wolf79af6c42009-04-27 06:17:54 +0000421 .oprofile_cpu_type = "ppc64/ibm-compat-v1",
422 .oprofile_type = PPC_OPROFILE_POWER4,
Anton Blanchard03054d52006-04-29 09:51:06 +1000423 .platform = "power6",
424 },
Joel Schopp635f5a62008-06-19 06:18:21 +1000425 { /* 2.06-compliant processor, i.e. Power7 "architected" mode */
426 .pvr_mask = 0xffffffff,
427 .pvr_value = 0x0f000003,
428 .cpu_name = "POWER7 (architected)",
429 .cpu_features = CPU_FTRS_POWER7,
430 .cpu_user_features = COMMON_USER_POWER7,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000431 .mmu_features = MMU_FTRS_POWER7,
Joel Schopp635f5a62008-06-19 06:18:21 +1000432 .icache_bsize = 128,
433 .dcache_bsize = 128,
Michael Wolf79af6c42009-04-27 06:17:54 +0000434 .oprofile_type = PPC_OPROFILE_POWER4,
435 .oprofile_cpu_type = "ppc64/ibm-compat-v1",
Benjamin Herrenschmidt24cc67d2011-01-20 18:50:55 +1100436 .cpu_setup = __setup_cpu_power7,
437 .cpu_restore = __restore_cpu_power7,
Joel Schopp635f5a62008-06-19 06:18:21 +1000438 .platform = "power7",
439 },
Michael Neulingc674e702012-11-08 20:26:42 +0000440 { /* 2.07-compliant processor, i.e. Power8 "architected" mode */
441 .pvr_mask = 0xffffffff,
442 .pvr_value = 0x0f000004,
443 .cpu_name = "POWER8 (architected)",
444 .cpu_features = CPU_FTRS_POWER8,
445 .cpu_user_features = COMMON_USER_POWER8,
446 .mmu_features = MMU_FTRS_POWER8,
447 .icache_bsize = 128,
448 .dcache_bsize = 128,
449 .oprofile_type = PPC_OPROFILE_POWER4,
450 .oprofile_cpu_type = "ppc64/ibm-compat-v1",
451 .cpu_setup = __setup_cpu_power8,
452 .cpu_restore = __restore_cpu_power8,
453 .platform = "power8",
454 },
Michael Neulinge952e6c2008-06-18 10:47:26 +1000455 { /* Power7 */
456 .pvr_mask = 0xffff0000,
457 .pvr_value = 0x003f0000,
Joel Schopp635f5a62008-06-19 06:18:21 +1000458 .cpu_name = "POWER7 (raw)",
Michael Neulinge952e6c2008-06-18 10:47:26 +1000459 .cpu_features = CPU_FTRS_POWER7,
460 .cpu_user_features = COMMON_USER_POWER7,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000461 .mmu_features = MMU_FTRS_POWER7,
Michael Neulinge952e6c2008-06-18 10:47:26 +1000462 .icache_bsize = 128,
463 .dcache_bsize = 128,
464 .num_pmcs = 6,
465 .pmc_type = PPC_PMC_IBM,
Michael Neulinge952e6c2008-06-18 10:47:26 +1000466 .oprofile_cpu_type = "ppc64/power7",
467 .oprofile_type = PPC_OPROFILE_POWER4,
Benjamin Herrenschmidt24cc67d2011-01-20 18:50:55 +1100468 .cpu_setup = __setup_cpu_power7,
469 .cpu_restore = __restore_cpu_power7,
Michael Neulinge952e6c2008-06-18 10:47:26 +1000470 .platform = "power7",
471 },
Michael Neuling6f08cb32010-11-17 18:52:44 +0000472 { /* Power7+ */
473 .pvr_mask = 0xffff0000,
474 .pvr_value = 0x004A0000,
475 .cpu_name = "POWER7+ (raw)",
476 .cpu_features = CPU_FTRS_POWER7,
477 .cpu_user_features = COMMON_USER_POWER7,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000478 .mmu_features = MMU_FTRS_POWER7,
Michael Neuling6f08cb32010-11-17 18:52:44 +0000479 .icache_bsize = 128,
480 .dcache_bsize = 128,
481 .num_pmcs = 6,
482 .pmc_type = PPC_PMC_IBM,
483 .oprofile_cpu_type = "ppc64/power7",
484 .oprofile_type = PPC_OPROFILE_POWER4,
Benjamin Herrenschmidt24cc67d2011-01-20 18:50:55 +1100485 .cpu_setup = __setup_cpu_power7,
486 .cpu_restore = __restore_cpu_power7,
Michael Neuling6f08cb32010-11-17 18:52:44 +0000487 .platform = "power7+",
488 },
Michael Neuling71e18492012-10-30 19:34:15 +0000489 { /* Power8 */
490 .pvr_mask = 0xffff0000,
491 .pvr_value = 0x004b0000,
492 .cpu_name = "POWER8 (raw)",
493 .cpu_features = CPU_FTRS_POWER8,
494 .cpu_user_features = COMMON_USER_POWER8,
495 .mmu_features = MMU_FTRS_POWER8,
496 .icache_bsize = 128,
497 .dcache_bsize = 128,
498 .num_pmcs = 6,
499 .pmc_type = PPC_PMC_IBM,
500 .oprofile_cpu_type = "ppc64/power8",
501 .oprofile_type = PPC_OPROFILE_POWER4,
502 .cpu_setup = __setup_cpu_power8,
503 .cpu_restore = __restore_cpu_power8,
504 .platform = "power8",
505 },
Arnd Bergmannc902be72006-01-04 19:55:53 +0000506 { /* Cell Broadband Engine */
Stephen Rothwell49209602005-10-12 15:55:09 +1000507 .pvr_mask = 0xffff0000,
508 .pvr_value = 0x00700000,
509 .cpu_name = "Cell Broadband Engine",
510 .cpu_features = CPU_FTRS_CELL,
511 .cpu_user_features = COMMON_USER_PPC64 |
Benjamin Herrenschmidtaa5cb0212006-03-01 15:07:07 +1100512 PPC_FEATURE_CELL | PPC_FEATURE_HAS_ALTIVEC_COMP |
513 PPC_FEATURE_SMT,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000514 .mmu_features = MMU_FTRS_CELL,
Stephen Rothwell49209602005-10-12 15:55:09 +1000515 .icache_bsize = 128,
516 .dcache_bsize = 128,
Maynard Johnson18f21902006-11-20 18:45:16 +0100517 .num_pmcs = 4,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600518 .pmc_type = PPC_PMC_IBM,
Maynard Johnson18f21902006-11-20 18:45:16 +0100519 .oprofile_cpu_type = "ppc64/cell-be",
520 .oprofile_type = PPC_OPROFILE_CELL,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100521 .platform = "ppc-cell-be",
Stephen Rothwell49209602005-10-12 15:55:09 +1000522 },
Olof Johanssonb3ebd1d2006-09-06 14:35:57 -0500523 { /* PA Semi PA6T */
524 .pvr_mask = 0x7fff0000,
525 .pvr_value = 0x00900000,
526 .cpu_name = "PA6T",
527 .cpu_features = CPU_FTRS_PA6T,
528 .cpu_user_features = COMMON_USER_PA6T,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000529 .mmu_features = MMU_FTRS_PA6T,
Olof Johanssonb3ebd1d2006-09-06 14:35:57 -0500530 .icache_bsize = 64,
531 .dcache_bsize = 64,
532 .num_pmcs = 6,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600533 .pmc_type = PPC_PMC_PA6T,
Olof Johansson11999192007-02-04 16:36:51 -0600534 .cpu_setup = __setup_cpu_pa6t,
535 .cpu_restore = __restore_cpu_pa6t,
Olof Johansson25fc5302007-04-18 16:38:21 +1000536 .oprofile_cpu_type = "ppc64/pa6t",
537 .oprofile_type = PPC_OPROFILE_PA6T,
Olof Johanssonb3ebd1d2006-09-06 14:35:57 -0500538 .platform = "pa6t",
539 },
Stephen Rothwell49209602005-10-12 15:55:09 +1000540 { /* default match */
541 .pvr_mask = 0x00000000,
542 .pvr_value = 0x00000000,
543 .cpu_name = "POWER4 (compatible)",
544 .cpu_features = CPU_FTRS_COMPATIBLE,
545 .cpu_user_features = COMMON_USER_PPC64,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000546 .mmu_features = MMU_FTRS_DEFAULT_HPTE_ARCH_V2,
Stephen Rothwell49209602005-10-12 15:55:09 +1000547 .icache_bsize = 128,
548 .dcache_bsize = 128,
549 .num_pmcs = 6,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600550 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100551 .platform = "power4",
Stephen Rothwell49209602005-10-12 15:55:09 +1000552 }
Benjamin Herrenschmidt2d27cfd2009-07-23 23:15:59 +0000553#endif /* CONFIG_PPC_BOOK3S_64 */
Benjamin Herrenschmidt2d27cfd2009-07-23 23:15:59 +0000554
Stephen Rothwell49209602005-10-12 15:55:09 +1000555#ifdef CONFIG_PPC32
Linus Torvalds1da177e2005-04-16 15:20:36 -0700556#if CLASSIC_PPC
Stephen Rothwell49209602005-10-12 15:55:09 +1000557 { /* 601 */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700558 .pvr_mask = 0xffff0000,
559 .pvr_value = 0x00010000,
560 .cpu_name = "601",
Kumar Gala10b35d92005-09-23 14:08:58 -0500561 .cpu_features = CPU_FTRS_PPC601,
Stephen Rothwell49209602005-10-12 15:55:09 +1000562 .cpu_user_features = COMMON_USER | PPC_FEATURE_601_INSTR |
Paul Mackerras98599012005-10-22 16:51:34 +1000563 PPC_FEATURE_UNIFIED_CACHE | PPC_FEATURE_NO_TB,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000564 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700565 .icache_bsize = 32,
566 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100567 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100568 .platform = "ppc601",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700569 },
570 { /* 603 */
571 .pvr_mask = 0xffff0000,
572 .pvr_value = 0x00030000,
573 .cpu_name = "603",
Kumar Gala10b35d92005-09-23 14:08:58 -0500574 .cpu_features = CPU_FTRS_603,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000575 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000576 .mmu_features = 0,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700577 .icache_bsize = 32,
578 .dcache_bsize = 32,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100579 .cpu_setup = __setup_cpu_603,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100580 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100581 .platform = "ppc603",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700582 },
583 { /* 603e */
584 .pvr_mask = 0xffff0000,
585 .pvr_value = 0x00060000,
586 .cpu_name = "603e",
Kumar Gala10b35d92005-09-23 14:08:58 -0500587 .cpu_features = CPU_FTRS_603,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000588 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000589 .mmu_features = 0,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700590 .icache_bsize = 32,
591 .dcache_bsize = 32,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100592 .cpu_setup = __setup_cpu_603,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100593 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100594 .platform = "ppc603",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700595 },
596 { /* 603ev */
597 .pvr_mask = 0xffff0000,
598 .pvr_value = 0x00070000,
599 .cpu_name = "603ev",
Kumar Gala10b35d92005-09-23 14:08:58 -0500600 .cpu_features = CPU_FTRS_603,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000601 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000602 .mmu_features = 0,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700603 .icache_bsize = 32,
604 .dcache_bsize = 32,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100605 .cpu_setup = __setup_cpu_603,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100606 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100607 .platform = "ppc603",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700608 },
609 { /* 604 */
610 .pvr_mask = 0xffff0000,
611 .pvr_value = 0x00040000,
612 .cpu_name = "604",
Kumar Gala10b35d92005-09-23 14:08:58 -0500613 .cpu_features = CPU_FTRS_604,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000614 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000615 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700616 .icache_bsize = 32,
617 .dcache_bsize = 32,
618 .num_pmcs = 2,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100619 .cpu_setup = __setup_cpu_604,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100620 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100621 .platform = "ppc604",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700622 },
623 { /* 604e */
624 .pvr_mask = 0xfffff000,
625 .pvr_value = 0x00090000,
626 .cpu_name = "604e",
Kumar Gala10b35d92005-09-23 14:08:58 -0500627 .cpu_features = CPU_FTRS_604,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000628 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000629 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700630 .icache_bsize = 32,
631 .dcache_bsize = 32,
632 .num_pmcs = 4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100633 .cpu_setup = __setup_cpu_604,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100634 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100635 .platform = "ppc604",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700636 },
637 { /* 604r */
638 .pvr_mask = 0xffff0000,
639 .pvr_value = 0x00090000,
640 .cpu_name = "604r",
Kumar Gala10b35d92005-09-23 14:08:58 -0500641 .cpu_features = CPU_FTRS_604,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000642 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000643 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700644 .icache_bsize = 32,
645 .dcache_bsize = 32,
646 .num_pmcs = 4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100647 .cpu_setup = __setup_cpu_604,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100648 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100649 .platform = "ppc604",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700650 },
651 { /* 604ev */
652 .pvr_mask = 0xffff0000,
653 .pvr_value = 0x000a0000,
654 .cpu_name = "604ev",
Kumar Gala10b35d92005-09-23 14:08:58 -0500655 .cpu_features = CPU_FTRS_604,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000656 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000657 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700658 .icache_bsize = 32,
659 .dcache_bsize = 32,
660 .num_pmcs = 4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100661 .cpu_setup = __setup_cpu_604,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100662 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100663 .platform = "ppc604",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700664 },
665 { /* 740/750 (0x4202, don't support TAU ?) */
666 .pvr_mask = 0xffffffff,
667 .pvr_value = 0x00084202,
668 .cpu_name = "740/750",
Kumar Gala10b35d92005-09-23 14:08:58 -0500669 .cpu_features = CPU_FTRS_740_NOTAU,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000670 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000671 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700672 .icache_bsize = 32,
673 .dcache_bsize = 32,
674 .num_pmcs = 4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100675 .cpu_setup = __setup_cpu_750,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100676 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100677 .platform = "ppc750",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700678 },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700679 { /* 750CX (80100 and 8010x?) */
680 .pvr_mask = 0xfffffff0,
681 .pvr_value = 0x00080100,
682 .cpu_name = "750CX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500683 .cpu_features = CPU_FTRS_750,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000684 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000685 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700686 .icache_bsize = 32,
687 .dcache_bsize = 32,
688 .num_pmcs = 4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100689 .cpu_setup = __setup_cpu_750cx,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100690 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100691 .platform = "ppc750",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700692 },
693 { /* 750CX (82201 and 82202) */
694 .pvr_mask = 0xfffffff0,
695 .pvr_value = 0x00082200,
696 .cpu_name = "750CX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500697 .cpu_features = CPU_FTRS_750,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000698 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000699 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700700 .icache_bsize = 32,
701 .dcache_bsize = 32,
702 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000703 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100704 .cpu_setup = __setup_cpu_750cx,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100705 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100706 .platform = "ppc750",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700707 },
708 { /* 750CXe (82214) */
709 .pvr_mask = 0xfffffff0,
710 .pvr_value = 0x00082210,
711 .cpu_name = "750CXe",
Kumar Gala10b35d92005-09-23 14:08:58 -0500712 .cpu_features = CPU_FTRS_750,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000713 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000714 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700715 .icache_bsize = 32,
716 .dcache_bsize = 32,
717 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000718 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100719 .cpu_setup = __setup_cpu_750cx,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100720 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100721 .platform = "ppc750",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700722 },
Arthur Othieno7c316252005-09-03 15:55:52 -0700723 { /* 750CXe "Gekko" (83214) */
724 .pvr_mask = 0xffffffff,
725 .pvr_value = 0x00083214,
726 .cpu_name = "750CXe",
Kumar Gala10b35d92005-09-23 14:08:58 -0500727 .cpu_features = CPU_FTRS_750,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000728 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000729 .mmu_features = MMU_FTR_HPTE_TABLE,
Arthur Othieno7c316252005-09-03 15:55:52 -0700730 .icache_bsize = 32,
731 .dcache_bsize = 32,
732 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000733 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100734 .cpu_setup = __setup_cpu_750cx,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100735 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100736 .platform = "ppc750",
Arthur Othieno7c316252005-09-03 15:55:52 -0700737 },
Albert Herranz45158dc2009-12-12 06:31:46 +0000738 { /* 750CL (and "Broadway") */
739 .pvr_mask = 0xfffff0e0,
740 .pvr_value = 0x00087000,
Jake Moilanencfbff8a2006-10-03 14:29:34 -0500741 .cpu_name = "750CL",
Josh Boyera14c4502007-04-13 04:33:25 +1000742 .cpu_features = CPU_FTRS_750CL,
Jake Moilanencfbff8a2006-10-03 14:29:34 -0500743 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000744 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Jake Moilanencfbff8a2006-10-03 14:29:34 -0500745 .icache_bsize = 32,
746 .dcache_bsize = 32,
747 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000748 .pmc_type = PPC_PMC_IBM,
Josh Boyera14c4502007-04-13 04:33:25 +1000749 .cpu_setup = __setup_cpu_750,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100750 .machine_check = machine_check_generic,
Jake Moilanencfbff8a2006-10-03 14:29:34 -0500751 .platform = "ppc750",
Dragos Tatulea04f56534772009-09-16 11:58:15 +0300752 .oprofile_cpu_type = "ppc/750",
753 .oprofile_type = PPC_OPROFILE_G4,
Jake Moilanencfbff8a2006-10-03 14:29:34 -0500754 },
Arthur Othienoac1ff042005-09-03 15:55:51 -0700755 { /* 745/755 */
756 .pvr_mask = 0xfffff000,
757 .pvr_value = 0x00083000,
758 .cpu_name = "745/755",
Kumar Gala10b35d92005-09-23 14:08:58 -0500759 .cpu_features = CPU_FTRS_750,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000760 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000761 .mmu_features = MMU_FTR_HPTE_TABLE,
Arthur Othienoac1ff042005-09-03 15:55:51 -0700762 .icache_bsize = 32,
763 .dcache_bsize = 32,
764 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000765 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100766 .cpu_setup = __setup_cpu_750,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100767 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100768 .platform = "ppc750",
Arthur Othienoac1ff042005-09-03 15:55:51 -0700769 },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700770 { /* 750FX rev 1.x */
771 .pvr_mask = 0xffffff00,
772 .pvr_value = 0x70000100,
773 .cpu_name = "750FX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500774 .cpu_features = CPU_FTRS_750FX1,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000775 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000776 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700777 .icache_bsize = 32,
778 .dcache_bsize = 32,
779 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000780 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100781 .cpu_setup = __setup_cpu_750,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100782 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100783 .platform = "ppc750",
Octavian Purdila7c9583a2009-03-04 02:02:42 +0000784 .oprofile_cpu_type = "ppc/750",
785 .oprofile_type = PPC_OPROFILE_G4,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700786 },
787 { /* 750FX rev 2.0 must disable HID0[DPM] */
788 .pvr_mask = 0xffffffff,
789 .pvr_value = 0x70000200,
790 .cpu_name = "750FX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500791 .cpu_features = CPU_FTRS_750FX2,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000792 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000793 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700794 .icache_bsize = 32,
795 .dcache_bsize = 32,
796 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000797 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100798 .cpu_setup = __setup_cpu_750,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100799 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100800 .platform = "ppc750",
Octavian Purdila7c9583a2009-03-04 02:02:42 +0000801 .oprofile_cpu_type = "ppc/750",
802 .oprofile_type = PPC_OPROFILE_G4,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700803 },
804 { /* 750FX (All revs except 2.0) */
805 .pvr_mask = 0xffff0000,
806 .pvr_value = 0x70000000,
807 .cpu_name = "750FX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500808 .cpu_features = CPU_FTRS_750FX,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000809 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000810 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700811 .icache_bsize = 32,
812 .dcache_bsize = 32,
813 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000814 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100815 .cpu_setup = __setup_cpu_750fx,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100816 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100817 .platform = "ppc750",
Octavian Purdila7c9583a2009-03-04 02:02:42 +0000818 .oprofile_cpu_type = "ppc/750",
819 .oprofile_type = PPC_OPROFILE_G4,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700820 },
821 { /* 750GX */
822 .pvr_mask = 0xffff0000,
823 .pvr_value = 0x70020000,
824 .cpu_name = "750GX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500825 .cpu_features = CPU_FTRS_750GX,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000826 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000827 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700828 .icache_bsize = 32,
829 .dcache_bsize = 32,
830 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000831 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100832 .cpu_setup = __setup_cpu_750fx,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100833 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100834 .platform = "ppc750",
Octavian Purdila7c9583a2009-03-04 02:02:42 +0000835 .oprofile_cpu_type = "ppc/750",
836 .oprofile_type = PPC_OPROFILE_G4,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700837 },
838 { /* 740/750 (L2CR bit need fixup for 740) */
839 .pvr_mask = 0xffff0000,
840 .pvr_value = 0x00080000,
841 .cpu_name = "740/750",
Kumar Gala10b35d92005-09-23 14:08:58 -0500842 .cpu_features = CPU_FTRS_740,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000843 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000844 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700845 .icache_bsize = 32,
846 .dcache_bsize = 32,
847 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000848 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100849 .cpu_setup = __setup_cpu_750,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100850 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100851 .platform = "ppc750",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700852 },
853 { /* 7400 rev 1.1 ? (no TAU) */
854 .pvr_mask = 0xffffffff,
855 .pvr_value = 0x000c1101,
856 .cpu_name = "7400 (1.1)",
Kumar Gala10b35d92005-09-23 14:08:58 -0500857 .cpu_features = CPU_FTRS_7400_NOTAU,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000858 .cpu_user_features = COMMON_USER |
859 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000860 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700861 .icache_bsize = 32,
862 .dcache_bsize = 32,
863 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000864 .pmc_type = PPC_PMC_G4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100865 .cpu_setup = __setup_cpu_7400,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100866 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100867 .platform = "ppc7400",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700868 },
869 { /* 7400 */
870 .pvr_mask = 0xffff0000,
871 .pvr_value = 0x000c0000,
872 .cpu_name = "7400",
Kumar Gala10b35d92005-09-23 14:08:58 -0500873 .cpu_features = CPU_FTRS_7400,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000874 .cpu_user_features = COMMON_USER |
875 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000876 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700877 .icache_bsize = 32,
878 .dcache_bsize = 32,
879 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000880 .pmc_type = PPC_PMC_G4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100881 .cpu_setup = __setup_cpu_7400,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100882 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100883 .platform = "ppc7400",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700884 },
885 { /* 7410 */
886 .pvr_mask = 0xffff0000,
887 .pvr_value = 0x800c0000,
888 .cpu_name = "7410",
Kumar Gala10b35d92005-09-23 14:08:58 -0500889 .cpu_features = CPU_FTRS_7400,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000890 .cpu_user_features = COMMON_USER |
891 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000892 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700893 .icache_bsize = 32,
894 .dcache_bsize = 32,
895 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000896 .pmc_type = PPC_PMC_G4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100897 .cpu_setup = __setup_cpu_7410,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100898 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100899 .platform = "ppc7400",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700900 },
901 { /* 7450 2.0 - no doze/nap */
902 .pvr_mask = 0xffffffff,
903 .pvr_value = 0x80000200,
904 .cpu_name = "7450",
Kumar Gala10b35d92005-09-23 14:08:58 -0500905 .cpu_features = CPU_FTRS_7450_20,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000906 .cpu_user_features = COMMON_USER |
907 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000908 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700909 .icache_bsize = 32,
910 .dcache_bsize = 32,
911 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000912 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -0600913 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -0600914 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000915 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100916 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100917 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700918 },
919 { /* 7450 2.1 */
920 .pvr_mask = 0xffffffff,
921 .pvr_value = 0x80000201,
922 .cpu_name = "7450",
Kumar Gala10b35d92005-09-23 14:08:58 -0500923 .cpu_features = CPU_FTRS_7450_21,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000924 .cpu_user_features = COMMON_USER |
925 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000926 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700927 .icache_bsize = 32,
928 .dcache_bsize = 32,
929 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000930 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -0600931 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -0600932 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000933 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100934 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100935 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700936 },
937 { /* 7450 2.3 and newer */
938 .pvr_mask = 0xffff0000,
939 .pvr_value = 0x80000000,
940 .cpu_name = "7450",
Kumar Gala10b35d92005-09-23 14:08:58 -0500941 .cpu_features = CPU_FTRS_7450_23,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000942 .cpu_user_features = COMMON_USER |
943 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000944 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700945 .icache_bsize = 32,
946 .dcache_bsize = 32,
947 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000948 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -0600949 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -0600950 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000951 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100952 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100953 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700954 },
955 { /* 7455 rev 1.x */
956 .pvr_mask = 0xffffff00,
957 .pvr_value = 0x80010100,
958 .cpu_name = "7455",
Kumar Gala10b35d92005-09-23 14:08:58 -0500959 .cpu_features = CPU_FTRS_7455_1,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000960 .cpu_user_features = COMMON_USER |
961 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000962 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700963 .icache_bsize = 32,
964 .dcache_bsize = 32,
965 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000966 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -0600967 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -0600968 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000969 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100970 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100971 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700972 },
973 { /* 7455 rev 2.0 */
974 .pvr_mask = 0xffffffff,
975 .pvr_value = 0x80010200,
976 .cpu_name = "7455",
Kumar Gala10b35d92005-09-23 14:08:58 -0500977 .cpu_features = CPU_FTRS_7455_20,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000978 .cpu_user_features = COMMON_USER |
979 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000980 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700981 .icache_bsize = 32,
982 .dcache_bsize = 32,
983 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000984 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -0600985 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -0600986 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000987 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100988 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100989 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700990 },
991 { /* 7455 others */
992 .pvr_mask = 0xffff0000,
993 .pvr_value = 0x80010000,
994 .cpu_name = "7455",
Kumar Gala10b35d92005-09-23 14:08:58 -0500995 .cpu_features = CPU_FTRS_7455,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000996 .cpu_user_features = COMMON_USER |
997 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000998 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700999 .icache_bsize = 32,
1000 .dcache_bsize = 32,
1001 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +10001002 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -06001003 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -06001004 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +00001005 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001006 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001007 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001008 },
1009 { /* 7447/7457 Rev 1.0 */
1010 .pvr_mask = 0xffffffff,
1011 .pvr_value = 0x80020100,
1012 .cpu_name = "7447/7457",
Kumar Gala10b35d92005-09-23 14:08:58 -05001013 .cpu_features = CPU_FTRS_7447_10,
Paul Mackerrasfab5db92006-06-07 16:14:40 +10001014 .cpu_user_features = COMMON_USER |
1015 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001016 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001017 .icache_bsize = 32,
1018 .dcache_bsize = 32,
1019 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +10001020 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -06001021 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -06001022 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +00001023 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001024 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001025 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001026 },
1027 { /* 7447/7457 Rev 1.1 */
1028 .pvr_mask = 0xffffffff,
1029 .pvr_value = 0x80020101,
1030 .cpu_name = "7447/7457",
Kumar Gala10b35d92005-09-23 14:08:58 -05001031 .cpu_features = CPU_FTRS_7447_10,
Paul Mackerrasfab5db92006-06-07 16:14:40 +10001032 .cpu_user_features = COMMON_USER |
1033 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001034 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001035 .icache_bsize = 32,
1036 .dcache_bsize = 32,
1037 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +10001038 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -06001039 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -06001040 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +00001041 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001042 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001043 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001044 },
1045 { /* 7447/7457 Rev 1.2 and later */
1046 .pvr_mask = 0xffff0000,
1047 .pvr_value = 0x80020000,
1048 .cpu_name = "7447/7457",
Kumar Gala10b35d92005-09-23 14:08:58 -05001049 .cpu_features = CPU_FTRS_7447,
Paul Mackerrasfab5db92006-06-07 16:14:40 +10001050 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001051 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001052 .icache_bsize = 32,
1053 .dcache_bsize = 32,
1054 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +10001055 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -06001056 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -06001057 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +00001058 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001059 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001060 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001061 },
1062 { /* 7447A */
1063 .pvr_mask = 0xffff0000,
1064 .pvr_value = 0x80030000,
1065 .cpu_name = "7447A",
Kumar Gala10b35d92005-09-23 14:08:58 -05001066 .cpu_features = CPU_FTRS_7447A,
Paul Mackerrasfab5db92006-06-07 16:14:40 +10001067 .cpu_user_features = COMMON_USER |
1068 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001069 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001070 .icache_bsize = 32,
1071 .dcache_bsize = 32,
1072 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +10001073 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -06001074 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -06001075 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +00001076 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001077 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001078 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001079 },
Kumar Galabbde6302005-09-03 15:55:55 -07001080 { /* 7448 */
1081 .pvr_mask = 0xffff0000,
1082 .pvr_value = 0x80040000,
1083 .cpu_name = "7448",
James.Yang3d372542007-05-02 16:34:43 -05001084 .cpu_features = CPU_FTRS_7448,
Paul Mackerrasfab5db92006-06-07 16:14:40 +10001085 .cpu_user_features = COMMON_USER |
1086 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001087 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Kumar Galabbde6302005-09-03 15:55:55 -07001088 .icache_bsize = 32,
1089 .dcache_bsize = 32,
1090 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +10001091 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -06001092 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -06001093 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +00001094 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001095 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001096 .platform = "ppc7450",
Kumar Galabbde6302005-09-03 15:55:55 -07001097 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001098 { /* 82xx (8240, 8245, 8260 are all 603e cores) */
1099 .pvr_mask = 0x7fff0000,
1100 .pvr_value = 0x00810000,
1101 .cpu_name = "82xx",
Kumar Gala10b35d92005-09-23 14:08:58 -05001102 .cpu_features = CPU_FTRS_82XX,
Stephen Rothwell49209602005-10-12 15:55:09 +10001103 .cpu_user_features = COMMON_USER,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001104 .mmu_features = 0,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001105 .icache_bsize = 32,
1106 .dcache_bsize = 32,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001107 .cpu_setup = __setup_cpu_603,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001108 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001109 .platform = "ppc603",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001110 },
1111 { /* All G2_LE (603e core, plus some) have the same pvr */
1112 .pvr_mask = 0x7fff0000,
1113 .pvr_value = 0x00820000,
1114 .cpu_name = "G2_LE",
Kumar Gala10b35d92005-09-23 14:08:58 -05001115 .cpu_features = CPU_FTRS_G2_LE,
Stephen Rothwell49209602005-10-12 15:55:09 +10001116 .cpu_user_features = COMMON_USER,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001117 .mmu_features = MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001118 .icache_bsize = 32,
1119 .dcache_bsize = 32,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001120 .cpu_setup = __setup_cpu_603,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001121 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001122 .platform = "ppc603",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001123 },
Kim Phillips6c4a2502006-10-02 20:10:24 -05001124 { /* e300c1 (a 603e core, plus some) on 83xx */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001125 .pvr_mask = 0x7fff0000,
1126 .pvr_value = 0x00830000,
Kim Phillips6c4a2502006-10-02 20:10:24 -05001127 .cpu_name = "e300c1",
Kumar Gala10b35d92005-09-23 14:08:58 -05001128 .cpu_features = CPU_FTRS_E300,
Stephen Rothwell49209602005-10-12 15:55:09 +10001129 .cpu_user_features = COMMON_USER,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001130 .mmu_features = MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001131 .icache_bsize = 32,
1132 .dcache_bsize = 32,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001133 .cpu_setup = __setup_cpu_603,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001134 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001135 .platform = "ppc603",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001136 },
Kim Phillips6c4a2502006-10-02 20:10:24 -05001137 { /* e300c2 (an e300c1 core, plus some, minus FPU) on 83xx */
1138 .pvr_mask = 0x7fff0000,
1139 .pvr_value = 0x00840000,
1140 .cpu_name = "e300c2",
Kim Phillipsaa42c692006-12-08 02:43:30 -06001141 .cpu_features = CPU_FTRS_E300C2,
Kim Phillips6c4a2502006-10-02 20:10:24 -05001142 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
Kumar Gala2319f122009-03-19 03:55:41 +00001143 .mmu_features = MMU_FTR_USE_HIGH_BATS |
1144 MMU_FTR_NEED_DTLB_SW_LRU,
Kim Phillips6c4a2502006-10-02 20:10:24 -05001145 .icache_bsize = 32,
1146 .dcache_bsize = 32,
1147 .cpu_setup = __setup_cpu_603,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001148 .machine_check = machine_check_generic,
Kim Phillips6c4a2502006-10-02 20:10:24 -05001149 .platform = "ppc603",
1150 },
Li Yanga58d5242007-10-19 19:38:42 +08001151 { /* e300c3 (e300c1, plus one IU, half cache size) on 83xx */
Scott Wood57933f82006-12-01 12:57:05 -06001152 .pvr_mask = 0x7fff0000,
1153 .pvr_value = 0x00850000,
1154 .cpu_name = "e300c3",
1155 .cpu_features = CPU_FTRS_E300,
1156 .cpu_user_features = COMMON_USER,
Kumar Gala2319f122009-03-19 03:55:41 +00001157 .mmu_features = MMU_FTR_USE_HIGH_BATS |
1158 MMU_FTR_NEED_DTLB_SW_LRU,
Scott Wood57933f82006-12-01 12:57:05 -06001159 .icache_bsize = 32,
1160 .dcache_bsize = 32,
1161 .cpu_setup = __setup_cpu_603,
Andy Fleming1347a2c12008-02-04 18:28:07 -06001162 .num_pmcs = 4,
1163 .oprofile_cpu_type = "ppc/e300",
1164 .oprofile_type = PPC_OPROFILE_FSL_EMB,
Scott Wood57933f82006-12-01 12:57:05 -06001165 .platform = "ppc603",
1166 },
Li Yanga58d5242007-10-19 19:38:42 +08001167 { /* e300c4 (e300c1, plus one IU) */
1168 .pvr_mask = 0x7fff0000,
1169 .pvr_value = 0x00860000,
1170 .cpu_name = "e300c4",
1171 .cpu_features = CPU_FTRS_E300,
1172 .cpu_user_features = COMMON_USER,
Kumar Gala2319f122009-03-19 03:55:41 +00001173 .mmu_features = MMU_FTR_USE_HIGH_BATS |
1174 MMU_FTR_NEED_DTLB_SW_LRU,
Li Yanga58d5242007-10-19 19:38:42 +08001175 .icache_bsize = 32,
1176 .dcache_bsize = 32,
1177 .cpu_setup = __setup_cpu_603,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001178 .machine_check = machine_check_generic,
Andy Fleming1347a2c12008-02-04 18:28:07 -06001179 .num_pmcs = 4,
1180 .oprofile_cpu_type = "ppc/e300",
1181 .oprofile_type = PPC_OPROFILE_FSL_EMB,
Li Yanga58d5242007-10-19 19:38:42 +08001182 .platform = "ppc603",
1183 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001184 { /* default match, we assume split I/D cache & TB (non-601)... */
1185 .pvr_mask = 0x00000000,
1186 .pvr_value = 0x00000000,
1187 .cpu_name = "(generic PPC)",
Kumar Gala10b35d92005-09-23 14:08:58 -05001188 .cpu_features = CPU_FTRS_CLASSIC32,
Stephen Rothwell49209602005-10-12 15:55:09 +10001189 .cpu_user_features = COMMON_USER,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001190 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001191 .icache_bsize = 32,
1192 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001193 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001194 .platform = "ppc603",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001195 },
1196#endif /* CLASSIC_PPC */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001197#ifdef CONFIG_8xx
1198 { /* 8xx */
1199 .pvr_mask = 0xffff0000,
1200 .pvr_value = 0x00500000,
1201 .cpu_name = "8xx",
1202 /* CPU_FTR_MAYBE_CAN_DOZE is possible,
1203 * if the 8xx code is there.... */
Kumar Gala10b35d92005-09-23 14:08:58 -05001204 .cpu_features = CPU_FTRS_8XX,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001205 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001206 .mmu_features = MMU_FTR_TYPE_8xx,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001207 .icache_bsize = 16,
1208 .dcache_bsize = 16,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001209 .platform = "ppc823",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001210 },
1211#endif /* CONFIG_8xx */
1212#ifdef CONFIG_40x
1213 { /* 403GC */
1214 .pvr_mask = 0xffffff00,
1215 .pvr_value = 0x00200200,
1216 .cpu_name = "403GC",
Kumar Gala10b35d92005-09-23 14:08:58 -05001217 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001218 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001219 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001220 .icache_bsize = 16,
1221 .dcache_bsize = 16,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001222 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001223 .platform = "ppc403",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001224 },
1225 { /* 403GCX */
1226 .pvr_mask = 0xffffff00,
1227 .pvr_value = 0x00201400,
1228 .cpu_name = "403GCX",
Kumar Gala10b35d92005-09-23 14:08:58 -05001229 .cpu_features = CPU_FTRS_40X,
Paul Mackerras98599012005-10-22 16:51:34 +10001230 .cpu_user_features = PPC_FEATURE_32 |
1231 PPC_FEATURE_HAS_MMU | PPC_FEATURE_NO_TB,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001232 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001233 .icache_bsize = 16,
1234 .dcache_bsize = 16,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001235 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001236 .platform = "ppc403",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001237 },
1238 { /* 403G ?? */
1239 .pvr_mask = 0xffff0000,
1240 .pvr_value = 0x00200000,
1241 .cpu_name = "403G ??",
Kumar Gala10b35d92005-09-23 14:08:58 -05001242 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001243 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001244 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001245 .icache_bsize = 16,
1246 .dcache_bsize = 16,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001247 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001248 .platform = "ppc403",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001249 },
1250 { /* 405GP */
1251 .pvr_mask = 0xffff0000,
1252 .pvr_value = 0x40110000,
1253 .cpu_name = "405GP",
Kumar Gala10b35d92005-09-23 14:08:58 -05001254 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001255 .cpu_user_features = PPC_FEATURE_32 |
1256 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001257 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001258 .icache_bsize = 32,
1259 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001260 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001261 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001262 },
1263 { /* STB 03xxx */
1264 .pvr_mask = 0xffff0000,
1265 .pvr_value = 0x40130000,
1266 .cpu_name = "STB03xxx",
Kumar Gala10b35d92005-09-23 14:08:58 -05001267 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001268 .cpu_user_features = PPC_FEATURE_32 |
1269 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001270 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001271 .icache_bsize = 32,
1272 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001273 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001274 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001275 },
1276 { /* STB 04xxx */
1277 .pvr_mask = 0xffff0000,
1278 .pvr_value = 0x41810000,
1279 .cpu_name = "STB04xxx",
Kumar Gala10b35d92005-09-23 14:08:58 -05001280 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001281 .cpu_user_features = PPC_FEATURE_32 |
1282 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001283 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001284 .icache_bsize = 32,
1285 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001286 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001287 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001288 },
1289 { /* NP405L */
1290 .pvr_mask = 0xffff0000,
1291 .pvr_value = 0x41610000,
1292 .cpu_name = "NP405L",
Kumar Gala10b35d92005-09-23 14:08:58 -05001293 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001294 .cpu_user_features = PPC_FEATURE_32 |
1295 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001296 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001297 .icache_bsize = 32,
1298 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001299 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001300 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001301 },
1302 { /* NP4GS3 */
1303 .pvr_mask = 0xffff0000,
1304 .pvr_value = 0x40B10000,
1305 .cpu_name = "NP4GS3",
Kumar Gala10b35d92005-09-23 14:08:58 -05001306 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001307 .cpu_user_features = PPC_FEATURE_32 |
1308 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001309 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001310 .icache_bsize = 32,
1311 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001312 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001313 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001314 },
1315 { /* NP405H */
1316 .pvr_mask = 0xffff0000,
1317 .pvr_value = 0x41410000,
1318 .cpu_name = "NP405H",
Kumar Gala10b35d92005-09-23 14:08:58 -05001319 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001320 .cpu_user_features = PPC_FEATURE_32 |
1321 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001322 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001323 .icache_bsize = 32,
1324 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001325 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001326 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001327 },
1328 { /* 405GPr */
1329 .pvr_mask = 0xffff0000,
1330 .pvr_value = 0x50910000,
1331 .cpu_name = "405GPr",
Kumar Gala10b35d92005-09-23 14:08:58 -05001332 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001333 .cpu_user_features = PPC_FEATURE_32 |
1334 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001335 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001336 .icache_bsize = 32,
1337 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001338 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001339 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001340 },
1341 { /* STBx25xx */
1342 .pvr_mask = 0xffff0000,
1343 .pvr_value = 0x51510000,
1344 .cpu_name = "STBx25xx",
Kumar Gala10b35d92005-09-23 14:08:58 -05001345 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001346 .cpu_user_features = PPC_FEATURE_32 |
1347 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001348 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001349 .icache_bsize = 32,
1350 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001351 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001352 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001353 },
1354 { /* 405LP */
1355 .pvr_mask = 0xffff0000,
1356 .pvr_value = 0x41F10000,
1357 .cpu_name = "405LP",
Kumar Gala10b35d92005-09-23 14:08:58 -05001358 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001359 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001360 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001361 .icache_bsize = 32,
1362 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001363 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001364 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001365 },
1366 { /* Xilinx Virtex-II Pro */
Grant C. Likely72646c72006-01-19 01:13:20 -07001367 .pvr_mask = 0xfffff000,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001368 .pvr_value = 0x20010000,
1369 .cpu_name = "Virtex-II Pro",
Kumar Gala10b35d92005-09-23 14:08:58 -05001370 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001371 .cpu_user_features = PPC_FEATURE_32 |
1372 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001373 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001374 .icache_bsize = 32,
1375 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001376 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001377 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001378 },
Grant C. Likely72646c72006-01-19 01:13:20 -07001379 { /* Xilinx Virtex-4 FX */
1380 .pvr_mask = 0xfffff000,
1381 .pvr_value = 0x20011000,
1382 .cpu_name = "Virtex-4 FX",
1383 .cpu_features = CPU_FTRS_40X,
1384 .cpu_user_features = PPC_FEATURE_32 |
1385 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001386 .mmu_features = MMU_FTR_TYPE_40x,
Grant C. Likely72646c72006-01-19 01:13:20 -07001387 .icache_bsize = 32,
1388 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001389 .machine_check = machine_check_4xx,
Peter Bergner838fdb42006-09-14 14:18:38 -05001390 .platform = "ppc405",
Grant C. Likely72646c72006-01-19 01:13:20 -07001391 },
Eugene Suroveginad95d602005-06-07 13:22:09 -07001392 { /* 405EP */
1393 .pvr_mask = 0xffff0000,
1394 .pvr_value = 0x51210000,
1395 .cpu_name = "405EP",
Kumar Gala10b35d92005-09-23 14:08:58 -05001396 .cpu_features = CPU_FTRS_40X,
Eugene Suroveginad95d602005-06-07 13:22:09 -07001397 .cpu_user_features = PPC_FEATURE_32 |
1398 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001399 .mmu_features = MMU_FTR_TYPE_40x,
Eugene Suroveginad95d602005-06-07 13:22:09 -07001400 .icache_bsize = 32,
1401 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001402 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001403 .platform = "ppc405",
Eugene Suroveginad95d602005-06-07 13:22:09 -07001404 },
Lee Nipperff349102010-07-09 01:17:16 +00001405 { /* 405EX Rev. A/B with Security */
1406 .pvr_mask = 0xffff000f,
1407 .pvr_value = 0x12910007,
1408 .cpu_name = "405EX Rev. A/B",
Stefan Roese5d8476c2007-10-11 22:08:14 +10001409 .cpu_features = CPU_FTRS_40X,
1410 .cpu_user_features = PPC_FEATURE_32 |
1411 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001412 .mmu_features = MMU_FTR_TYPE_40x,
Stefan Roese5d8476c2007-10-11 22:08:14 +10001413 .icache_bsize = 32,
1414 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001415 .machine_check = machine_check_4xx,
Stefan Roese5d8476c2007-10-11 22:08:14 +10001416 .platform = "ppc405",
1417 },
Lee Nipperff349102010-07-09 01:17:16 +00001418 { /* 405EX Rev. C without Security */
1419 .pvr_mask = 0xffff000f,
1420 .pvr_value = 0x1291000d,
1421 .cpu_name = "405EX Rev. C",
1422 .cpu_features = CPU_FTRS_40X,
1423 .cpu_user_features = PPC_FEATURE_32 |
1424 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1425 .mmu_features = MMU_FTR_TYPE_40x,
1426 .icache_bsize = 32,
1427 .dcache_bsize = 32,
1428 .machine_check = machine_check_4xx,
1429 .platform = "ppc405",
1430 },
1431 { /* 405EX Rev. C with Security */
1432 .pvr_mask = 0xffff000f,
1433 .pvr_value = 0x1291000f,
1434 .cpu_name = "405EX Rev. C",
1435 .cpu_features = CPU_FTRS_40X,
1436 .cpu_user_features = PPC_FEATURE_32 |
1437 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1438 .mmu_features = MMU_FTR_TYPE_40x,
1439 .icache_bsize = 32,
1440 .dcache_bsize = 32,
1441 .machine_check = machine_check_4xx,
1442 .platform = "ppc405",
1443 },
1444 { /* 405EX Rev. D without Security */
1445 .pvr_mask = 0xffff000f,
1446 .pvr_value = 0x12910003,
1447 .cpu_name = "405EX Rev. D",
1448 .cpu_features = CPU_FTRS_40X,
1449 .cpu_user_features = PPC_FEATURE_32 |
1450 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1451 .mmu_features = MMU_FTR_TYPE_40x,
1452 .icache_bsize = 32,
1453 .dcache_bsize = 32,
1454 .machine_check = machine_check_4xx,
1455 .platform = "ppc405",
1456 },
1457 { /* 405EX Rev. D with Security */
1458 .pvr_mask = 0xffff000f,
1459 .pvr_value = 0x12910005,
1460 .cpu_name = "405EX Rev. D",
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 { /* 405EXr Rev. A/B without Security */
1471 .pvr_mask = 0xffff000f,
1472 .pvr_value = 0x12910001,
1473 .cpu_name = "405EXr Rev. A/B",
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 { /* 405EXr Rev. C without Security */
1484 .pvr_mask = 0xffff000f,
1485 .pvr_value = 0x12910009,
1486 .cpu_name = "405EXr Rev. C",
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 { /* 405EXr Rev. C with Security */
1497 .pvr_mask = 0xffff000f,
1498 .pvr_value = 0x1291000b,
1499 .cpu_name = "405EXr Rev. C",
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. D without Security */
1510 .pvr_mask = 0xffff000f,
Stefan Roeseb676d842008-01-15 18:09:15 +11001511 .pvr_value = 0x12910000,
Lee Nipperff349102010-07-09 01:17:16 +00001512 .cpu_name = "405EXr Rev. D",
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. D with Security */
1523 .pvr_mask = 0xffff000f,
1524 .pvr_value = 0x12910002,
1525 .cpu_name = "405EXr Rev. D",
Stefan Roeseb676d842008-01-15 18:09:15 +11001526 .cpu_features = CPU_FTRS_40X,
1527 .cpu_user_features = PPC_FEATURE_32 |
1528 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001529 .mmu_features = MMU_FTR_TYPE_40x,
Stefan Roeseb676d842008-01-15 18:09:15 +11001530 .icache_bsize = 32,
1531 .dcache_bsize = 32,
1532 .machine_check = machine_check_4xx,
1533 .platform = "ppc405",
1534 },
Josh Boyerdf8f71f2008-10-09 08:56:38 -04001535 {
1536 /* 405EZ */
1537 .pvr_mask = 0xffff0000,
1538 .pvr_value = 0x41510000,
1539 .cpu_name = "405EZ",
1540 .cpu_features = CPU_FTRS_40X,
1541 .cpu_user_features = PPC_FEATURE_32 |
1542 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001543 .mmu_features = MMU_FTR_TYPE_40x,
Josh Boyerdf8f71f2008-10-09 08:56:38 -04001544 .icache_bsize = 32,
1545 .dcache_bsize = 32,
1546 .machine_check = machine_check_4xx,
1547 .platform = "ppc405",
1548 },
Tanmay Inamdard5b9ee72011-11-28 21:01:41 +00001549 { /* APM8018X */
1550 .pvr_mask = 0xffff0000,
1551 .pvr_value = 0x7ff11432,
1552 .cpu_name = "APM8018X",
1553 .cpu_features = CPU_FTRS_40X,
1554 .cpu_user_features = PPC_FEATURE_32 |
1555 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1556 .mmu_features = MMU_FTR_TYPE_40x,
1557 .icache_bsize = 32,
1558 .dcache_bsize = 32,
1559 .machine_check = machine_check_4xx,
1560 .platform = "ppc405",
1561 },
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001562 { /* default match */
1563 .pvr_mask = 0x00000000,
1564 .pvr_value = 0x00000000,
1565 .cpu_name = "(generic 40x PPC)",
1566 .cpu_features = CPU_FTRS_40X,
1567 .cpu_user_features = PPC_FEATURE_32 |
1568 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001569 .mmu_features = MMU_FTR_TYPE_40x,
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001570 .icache_bsize = 32,
1571 .dcache_bsize = 32,
1572 .machine_check = machine_check_4xx,
1573 .platform = "ppc405",
1574 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001575
1576#endif /* CONFIG_40x */
1577#ifdef CONFIG_44x
Matt Porterc9cf73a2005-07-31 22:34:52 -07001578 {
1579 .pvr_mask = 0xf0000fff,
1580 .pvr_value = 0x40000850,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001581 .cpu_name = "440GR Rev. A",
1582 .cpu_features = CPU_FTRS_44X,
1583 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001584 .mmu_features = MMU_FTR_TYPE_44x,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001585 .icache_bsize = 32,
1586 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001587 .machine_check = machine_check_4xx,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001588 .platform = "ppc440",
1589 },
1590 { /* Use logical PVR for 440EP (logical pvr = pvr | 0x8) */
1591 .pvr_mask = 0xf0000fff,
1592 .pvr_value = 0x40000858,
Matt Porterc9cf73a2005-07-31 22:34:52 -07001593 .cpu_name = "440EP Rev. A",
Kumar Gala10b35d92005-09-23 14:08:58 -05001594 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001595 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001596 .mmu_features = MMU_FTR_TYPE_44x,
Matt Porterc9cf73a2005-07-31 22:34:52 -07001597 .icache_bsize = 32,
1598 .dcache_bsize = 32,
Valentine Barshak81127532007-09-22 00:46:57 +10001599 .cpu_setup = __setup_cpu_440ep,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001600 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001601 .platform = "ppc440",
Matt Porterc9cf73a2005-07-31 22:34:52 -07001602 },
1603 {
1604 .pvr_mask = 0xf0000fff,
1605 .pvr_value = 0x400008d3,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001606 .cpu_name = "440GR Rev. B",
1607 .cpu_features = CPU_FTRS_44X,
1608 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001609 .mmu_features = MMU_FTR_TYPE_44x,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001610 .icache_bsize = 32,
1611 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001612 .machine_check = machine_check_4xx,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001613 .platform = "ppc440",
1614 },
Sean MacLennan3f8fc3e2008-01-10 07:25:58 +11001615 { /* Matches both physical and logical PVR for 440EP (logical pvr = pvr | 0x8) */
1616 .pvr_mask = 0xf0000ff7,
1617 .pvr_value = 0x400008d4,
1618 .cpu_name = "440EP Rev. C",
1619 .cpu_features = CPU_FTRS_44X,
1620 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001621 .mmu_features = MMU_FTR_TYPE_44x,
Sean MacLennan3f8fc3e2008-01-10 07:25:58 +11001622 .icache_bsize = 32,
1623 .dcache_bsize = 32,
1624 .cpu_setup = __setup_cpu_440ep,
1625 .machine_check = machine_check_4xx,
1626 .platform = "ppc440",
1627 },
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001628 { /* Use logical PVR for 440EP (logical pvr = pvr | 0x8) */
1629 .pvr_mask = 0xf0000fff,
1630 .pvr_value = 0x400008db,
Matt Porterc9cf73a2005-07-31 22:34:52 -07001631 .cpu_name = "440EP Rev. B",
Kumar Gala10b35d92005-09-23 14:08:58 -05001632 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001633 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001634 .mmu_features = MMU_FTR_TYPE_44x,
Matt Porterc9cf73a2005-07-31 22:34:52 -07001635 .icache_bsize = 32,
1636 .dcache_bsize = 32,
Valentine Barshak81127532007-09-22 00:46:57 +10001637 .cpu_setup = __setup_cpu_440ep,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001638 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001639 .platform = "ppc440",
Matt Porterc9cf73a2005-07-31 22:34:52 -07001640 },
Valentine Barshak15fc9932007-08-29 17:40:30 +04001641 { /* 440GRX */
1642 .pvr_mask = 0xf0000ffb,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001643 .pvr_value = 0x200008D0,
Valentine Barshak15fc9932007-08-29 17:40:30 +04001644 .cpu_name = "440GRX",
1645 .cpu_features = CPU_FTRS_44X,
1646 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001647 .mmu_features = MMU_FTR_TYPE_44x,
Valentine Barshak15fc9932007-08-29 17:40:30 +04001648 .icache_bsize = 32,
1649 .dcache_bsize = 32,
Valentine Barshak340ffd22007-09-22 00:50:09 +10001650 .cpu_setup = __setup_cpu_440grx,
Valentine Barshakb2be3b12007-12-22 03:22:23 +11001651 .machine_check = machine_check_440A,
Valentine Barshak340ffd22007-09-22 00:50:09 +10001652 .platform = "ppc440",
Valentine Barshak15fc9932007-08-29 17:40:30 +04001653 },
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001654 { /* Use logical PVR for 440EPx (logical pvr = pvr | 0x8) */
1655 .pvr_mask = 0xf0000ffb,
1656 .pvr_value = 0x200008D8,
1657 .cpu_name = "440EPX",
1658 .cpu_features = CPU_FTRS_44X,
1659 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001660 .mmu_features = MMU_FTR_TYPE_44x,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001661 .icache_bsize = 32,
1662 .dcache_bsize = 32,
1663 .cpu_setup = __setup_cpu_440epx,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001664 .machine_check = machine_check_440A,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001665 .platform = "ppc440",
1666 },
Stephen Rothwell49209602005-10-12 15:55:09 +10001667 { /* 440GP Rev. B */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001668 .pvr_mask = 0xf0000fff,
1669 .pvr_value = 0x40000440,
1670 .cpu_name = "440GP Rev. B",
Kumar Gala10b35d92005-09-23 14:08:58 -05001671 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001672 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001673 .mmu_features = MMU_FTR_TYPE_44x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001674 .icache_bsize = 32,
1675 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001676 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001677 .platform = "ppc440gp",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001678 },
Stephen Rothwell49209602005-10-12 15:55:09 +10001679 { /* 440GP Rev. C */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001680 .pvr_mask = 0xf0000fff,
1681 .pvr_value = 0x40000481,
1682 .cpu_name = "440GP Rev. C",
Kumar Gala10b35d92005-09-23 14:08:58 -05001683 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001684 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001685 .mmu_features = MMU_FTR_TYPE_44x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001686 .icache_bsize = 32,
1687 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001688 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001689 .platform = "ppc440gp",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001690 },
1691 { /* 440GX Rev. A */
1692 .pvr_mask = 0xf0000fff,
1693 .pvr_value = 0x50000850,
1694 .cpu_name = "440GX Rev. A",
Kumar Gala10b35d92005-09-23 14:08:58 -05001695 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001696 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001697 .mmu_features = MMU_FTR_TYPE_44x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001698 .icache_bsize = 32,
1699 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001700 .cpu_setup = __setup_cpu_440gx,
1701 .machine_check = machine_check_440A,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001702 .platform = "ppc440",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001703 },
1704 { /* 440GX Rev. B */
1705 .pvr_mask = 0xf0000fff,
1706 .pvr_value = 0x50000851,
1707 .cpu_name = "440GX Rev. B",
Kumar Gala10b35d92005-09-23 14:08:58 -05001708 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001709 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001710 .mmu_features = MMU_FTR_TYPE_44x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001711 .icache_bsize = 32,
1712 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001713 .cpu_setup = __setup_cpu_440gx,
1714 .machine_check = machine_check_440A,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001715 .platform = "ppc440",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001716 },
1717 { /* 440GX Rev. C */
1718 .pvr_mask = 0xf0000fff,
1719 .pvr_value = 0x50000892,
1720 .cpu_name = "440GX Rev. C",
Kumar Gala10b35d92005-09-23 14:08:58 -05001721 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001722 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001723 .mmu_features = MMU_FTR_TYPE_44x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001724 .icache_bsize = 32,
1725 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001726 .cpu_setup = __setup_cpu_440gx,
1727 .machine_check = machine_check_440A,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001728 .platform = "ppc440",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001729 },
Eugene Surovegin9149fb32005-09-03 15:55:40 -07001730 { /* 440GX Rev. F */
1731 .pvr_mask = 0xf0000fff,
1732 .pvr_value = 0x50000894,
1733 .cpu_name = "440GX Rev. F",
Kumar Gala10b35d92005-09-23 14:08:58 -05001734 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001735 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001736 .mmu_features = MMU_FTR_TYPE_44x,
Eugene Surovegin9149fb32005-09-03 15:55:40 -07001737 .icache_bsize = 32,
1738 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001739 .cpu_setup = __setup_cpu_440gx,
1740 .machine_check = machine_check_440A,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001741 .platform = "ppc440",
Eugene Surovegin9149fb32005-09-03 15:55:40 -07001742 },
Matt Porter656de7e2005-09-03 15:55:42 -07001743 { /* 440SP Rev. A */
Roland Dreier333e6152007-06-16 05:36:32 +10001744 .pvr_mask = 0xfff00fff,
1745 .pvr_value = 0x53200891,
Matt Porter656de7e2005-09-03 15:55:42 -07001746 .cpu_name = "440SP Rev. A",
Kumar Gala10b35d92005-09-23 14:08:58 -05001747 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001748 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001749 .mmu_features = MMU_FTR_TYPE_44x,
Matt Porter656de7e2005-09-03 15:55:42 -07001750 .icache_bsize = 32,
1751 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001752 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001753 .platform = "ppc440",
Matt Porter656de7e2005-09-03 15:55:42 -07001754 },
Roland Dreierb0f7b8b2005-11-07 00:58:13 -08001755 { /* 440SPe Rev. A */
Roland Dreier333e6152007-06-16 05:36:32 +10001756 .pvr_mask = 0xfff00fff,
1757 .pvr_value = 0x53400890,
1758 .cpu_name = "440SPe Rev. A",
1759 .cpu_features = CPU_FTRS_44X,
1760 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001761 .mmu_features = MMU_FTR_TYPE_44x,
Roland Dreier333e6152007-06-16 05:36:32 +10001762 .icache_bsize = 32,
1763 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001764 .cpu_setup = __setup_cpu_440spe,
1765 .machine_check = machine_check_440A,
Roland Dreier333e6152007-06-16 05:36:32 +10001766 .platform = "ppc440",
1767 },
1768 { /* 440SPe Rev. B */
1769 .pvr_mask = 0xfff00fff,
1770 .pvr_value = 0x53400891,
1771 .cpu_name = "440SPe Rev. B",
Kumar Galaa147c582006-12-08 02:34:38 -06001772 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001773 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001774 .mmu_features = MMU_FTR_TYPE_44x,
Roland Dreierb0f7b8b2005-11-07 00:58:13 -08001775 .icache_bsize = 32,
1776 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001777 .cpu_setup = __setup_cpu_440spe,
1778 .machine_check = machine_check_440A,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001779 .platform = "ppc440",
Roland Dreierb0f7b8b2005-11-07 00:58:13 -08001780 },
John Linn23e72372008-07-01 09:42:07 -07001781 { /* 440 in Xilinx Virtex-5 FXT */
1782 .pvr_mask = 0xfffffff0,
1783 .pvr_value = 0x7ff21910,
1784 .cpu_name = "440 in Virtex-5 FXT",
1785 .cpu_features = CPU_FTRS_44X,
1786 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001787 .mmu_features = MMU_FTR_TYPE_44x,
John Linn23e72372008-07-01 09:42:07 -07001788 .icache_bsize = 32,
1789 .dcache_bsize = 32,
Grant Likely640d17d2008-12-04 05:39:55 +00001790 .cpu_setup = __setup_cpu_440x5,
1791 .machine_check = machine_check_440A,
John Linn23e72372008-07-01 09:42:07 -07001792 .platform = "ppc440",
1793 },
Stefan Roese464076a2008-02-24 08:07:41 +11001794 { /* 460EX */
Stefan Roese20d70342009-07-29 07:04:46 +00001795 .pvr_mask = 0xffff0006,
Stefan Roese464076a2008-02-24 08:07:41 +11001796 .pvr_value = 0x13020002,
1797 .cpu_name = "460EX",
Benjamin Herrenschmidt6d2170b2008-12-18 19:13:22 +00001798 .cpu_features = CPU_FTRS_440x6,
Stefan Roese464076a2008-02-24 08:07:41 +11001799 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001800 .mmu_features = MMU_FTR_TYPE_44x,
Stefan Roese464076a2008-02-24 08:07:41 +11001801 .icache_bsize = 32,
1802 .dcache_bsize = 32,
1803 .cpu_setup = __setup_cpu_460ex,
1804 .machine_check = machine_check_440A,
1805 .platform = "ppc440",
1806 },
Stefan Roese20d70342009-07-29 07:04:46 +00001807 { /* 460EX Rev B */
1808 .pvr_mask = 0xffff0007,
1809 .pvr_value = 0x13020004,
1810 .cpu_name = "460EX Rev. B",
1811 .cpu_features = CPU_FTRS_440x6,
1812 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1813 .mmu_features = MMU_FTR_TYPE_44x,
1814 .icache_bsize = 32,
1815 .dcache_bsize = 32,
1816 .cpu_setup = __setup_cpu_460ex,
1817 .machine_check = machine_check_440A,
1818 .platform = "ppc440",
1819 },
Stefan Roese464076a2008-02-24 08:07:41 +11001820 { /* 460GT */
Stefan Roese20d70342009-07-29 07:04:46 +00001821 .pvr_mask = 0xffff0006,
Stefan Roese464076a2008-02-24 08:07:41 +11001822 .pvr_value = 0x13020000,
1823 .cpu_name = "460GT",
Benjamin Herrenschmidt6d2170b2008-12-18 19:13:22 +00001824 .cpu_features = CPU_FTRS_440x6,
Josh Boyer939e6222008-06-11 07:52:40 -04001825 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001826 .mmu_features = MMU_FTR_TYPE_44x,
Stefan Roese464076a2008-02-24 08:07:41 +11001827 .icache_bsize = 32,
1828 .dcache_bsize = 32,
Josh Boyer939e6222008-06-11 07:52:40 -04001829 .cpu_setup = __setup_cpu_460gt,
Stefan Roese464076a2008-02-24 08:07:41 +11001830 .machine_check = machine_check_440A,
1831 .platform = "ppc440",
1832 },
Stefan Roese20d70342009-07-29 07:04:46 +00001833 { /* 460GT Rev B */
1834 .pvr_mask = 0xffff0007,
1835 .pvr_value = 0x13020005,
1836 .cpu_name = "460GT Rev. B",
1837 .cpu_features = CPU_FTRS_440x6,
1838 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1839 .mmu_features = MMU_FTR_TYPE_44x,
1840 .icache_bsize = 32,
1841 .dcache_bsize = 32,
1842 .cpu_setup = __setup_cpu_460gt,
1843 .machine_check = machine_check_440A,
1844 .platform = "ppc440",
1845 },
Madhulika Madishetty6c712092009-02-05 13:31:36 +00001846 { /* 460SX */
1847 .pvr_mask = 0xffffff00,
1848 .pvr_value = 0x13541800,
1849 .cpu_name = "460SX",
1850 .cpu_features = CPU_FTRS_44X,
1851 .cpu_user_features = COMMON_USER_BOOKE,
1852 .mmu_features = MMU_FTR_TYPE_44x,
1853 .icache_bsize = 32,
1854 .dcache_bsize = 32,
1855 .cpu_setup = __setup_cpu_460sx,
1856 .machine_check = machine_check_440A,
1857 .platform = "ppc440",
1858 },
Tirumala Marri6edc3232010-09-13 13:26:11 +00001859 { /* 464 in APM821xx */
Vinh Nguyen Huu Tuong7c801162011-12-20 02:43:34 +00001860 .pvr_mask = 0xfffffff0,
Tirumala Marri6edc3232010-09-13 13:26:11 +00001861 .pvr_value = 0x12C41C80,
1862 .cpu_name = "APM821XX",
1863 .cpu_features = CPU_FTRS_44X,
1864 .cpu_user_features = COMMON_USER_BOOKE |
1865 PPC_FEATURE_HAS_FPU,
1866 .mmu_features = MMU_FTR_TYPE_44x,
1867 .icache_bsize = 32,
1868 .dcache_bsize = 32,
1869 .cpu_setup = __setup_cpu_apm821xx,
1870 .machine_check = machine_check_440A,
1871 .platform = "ppc440",
1872 },
Dave Kleikampc48d0db2011-01-26 06:17:58 +00001873 { /* 476 DD2 core */
1874 .pvr_mask = 0xffffffff,
1875 .pvr_value = 0x11a52080,
Dave Kleikampe7f75ad2010-03-05 10:43:12 +00001876 .cpu_name = "476",
Dave Kleikampc48d0db2011-01-26 06:17:58 +00001877 .cpu_features = CPU_FTRS_47X | CPU_FTR_476_DD2,
Dave Kleikampe7f75ad2010-03-05 10:43:12 +00001878 .cpu_user_features = COMMON_USER_BOOKE |
1879 PPC_FEATURE_HAS_FPU,
1880 .mmu_features = MMU_FTR_TYPE_47x |
1881 MMU_FTR_USE_TLBIVAX_BCAST | MMU_FTR_LOCK_BCAST_INVAL,
1882 .icache_bsize = 32,
1883 .dcache_bsize = 128,
Dave Kleikampfc5e7092010-03-05 03:43:18 +00001884 .machine_check = machine_check_47x,
Dave Kleikampe7f75ad2010-03-05 10:43:12 +00001885 .platform = "ppc470",
1886 },
Tony Breedsdf777bd2011-11-30 21:39:23 +00001887 { /* 476fpe */
1888 .pvr_mask = 0xffff0000,
1889 .pvr_value = 0x7ff50000,
1890 .cpu_name = "476fpe",
1891 .cpu_features = CPU_FTRS_47X | CPU_FTR_476_DD2,
1892 .cpu_user_features = COMMON_USER_BOOKE |
1893 PPC_FEATURE_HAS_FPU,
1894 .mmu_features = MMU_FTR_TYPE_47x |
1895 MMU_FTR_USE_TLBIVAX_BCAST | MMU_FTR_LOCK_BCAST_INVAL,
1896 .icache_bsize = 32,
1897 .dcache_bsize = 128,
1898 .machine_check = machine_check_47x,
1899 .platform = "ppc470",
1900 },
Torez Smithb4e8c8d2010-03-05 10:45:54 +00001901 { /* 476 iss */
1902 .pvr_mask = 0xffff0000,
1903 .pvr_value = 0x00050000,
1904 .cpu_name = "476",
1905 .cpu_features = CPU_FTRS_47X,
1906 .cpu_user_features = COMMON_USER_BOOKE |
1907 PPC_FEATURE_HAS_FPU,
Torez Smithb4e8c8d2010-03-05 10:45:54 +00001908 .mmu_features = MMU_FTR_TYPE_47x |
1909 MMU_FTR_USE_TLBIVAX_BCAST | MMU_FTR_LOCK_BCAST_INVAL,
1910 .icache_bsize = 32,
1911 .dcache_bsize = 128,
1912 .machine_check = machine_check_47x,
1913 .platform = "ppc470",
1914 },
Dave Kleikampc48d0db2011-01-26 06:17:58 +00001915 { /* 476 others */
1916 .pvr_mask = 0xffff0000,
1917 .pvr_value = 0x11a50000,
1918 .cpu_name = "476",
1919 .cpu_features = CPU_FTRS_47X,
1920 .cpu_user_features = COMMON_USER_BOOKE |
1921 PPC_FEATURE_HAS_FPU,
1922 .mmu_features = MMU_FTR_TYPE_47x |
1923 MMU_FTR_USE_TLBIVAX_BCAST | MMU_FTR_LOCK_BCAST_INVAL,
1924 .icache_bsize = 32,
1925 .dcache_bsize = 128,
1926 .machine_check = machine_check_47x,
1927 .platform = "ppc470",
1928 },
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001929 { /* default match */
1930 .pvr_mask = 0x00000000,
1931 .pvr_value = 0x00000000,
1932 .cpu_name = "(generic 44x PPC)",
1933 .cpu_features = CPU_FTRS_44X,
1934 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001935 .mmu_features = MMU_FTR_TYPE_44x,
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001936 .icache_bsize = 32,
1937 .dcache_bsize = 32,
1938 .machine_check = machine_check_4xx,
1939 .platform = "ppc440",
1940 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001941#endif /* CONFIG_44x */
Josh Boyere3e414b2007-12-24 08:44:47 -06001942#ifdef CONFIG_E200
Stephen Rothwell49209602005-10-12 15:55:09 +10001943 { /* e200z5 */
Kumar Gala33d9e9b2005-06-25 14:54:37 -07001944 .pvr_mask = 0xfff00000,
1945 .pvr_value = 0x81000000,
1946 .cpu_name = "e200z5",
1947 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
Kumar Gala10b35d92005-09-23 14:08:58 -05001948 .cpu_features = CPU_FTRS_E200,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001949 .cpu_user_features = COMMON_USER_BOOKE |
1950 PPC_FEATURE_HAS_EFP_SINGLE |
Kumar Gala33d9e9b2005-06-25 14:54:37 -07001951 PPC_FEATURE_UNIFIED_CACHE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001952 .mmu_features = MMU_FTR_TYPE_FSL_E,
Kumar Gala33d9e9b2005-06-25 14:54:37 -07001953 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001954 .machine_check = machine_check_e200,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001955 .platform = "ppc5554",
Kumar Gala33d9e9b2005-06-25 14:54:37 -07001956 },
Stephen Rothwell49209602005-10-12 15:55:09 +10001957 { /* e200z6 */
Kumar Gala33d9e9b2005-06-25 14:54:37 -07001958 .pvr_mask = 0xfff00000,
1959 .pvr_value = 0x81100000,
1960 .cpu_name = "e200z6",
1961 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
Kumar Gala10b35d92005-09-23 14:08:58 -05001962 .cpu_features = CPU_FTRS_E200,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001963 .cpu_user_features = COMMON_USER_BOOKE |
Kumar Gala5e14d212007-09-13 01:44:20 -05001964 PPC_FEATURE_HAS_SPE_COMP |
1965 PPC_FEATURE_HAS_EFP_SINGLE_COMP |
Kumar Gala33d9e9b2005-06-25 14:54:37 -07001966 PPC_FEATURE_UNIFIED_CACHE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001967 .mmu_features = MMU_FTR_TYPE_FSL_E,
Kumar Gala33d9e9b2005-06-25 14:54:37 -07001968 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001969 .machine_check = machine_check_e200,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001970 .platform = "ppc5554",
Kumar Gala33d9e9b2005-06-25 14:54:37 -07001971 },
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001972 { /* default match */
1973 .pvr_mask = 0x00000000,
1974 .pvr_value = 0x00000000,
1975 .cpu_name = "(generic E200 PPC)",
1976 .cpu_features = CPU_FTRS_E200,
1977 .cpu_user_features = COMMON_USER_BOOKE |
1978 PPC_FEATURE_HAS_EFP_SINGLE |
1979 PPC_FEATURE_UNIFIED_CACHE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001980 .mmu_features = MMU_FTR_TYPE_FSL_E,
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001981 .dcache_bsize = 32,
Kumar Gala105c31d2009-01-08 08:31:20 -06001982 .cpu_setup = __setup_cpu_e200,
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001983 .machine_check = machine_check_e200,
1984 .platform = "ppc5554",
Paul Mackerras516c8be2008-05-12 14:20:35 +10001985 }
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001986#endif /* CONFIG_E200 */
Kumar Gala4490c062010-10-08 08:32:11 -05001987#endif /* CONFIG_PPC32 */
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001988#ifdef CONFIG_E500
Kumar Gala4490c062010-10-08 08:32:11 -05001989#ifdef CONFIG_PPC32
Stephen Rothwell49209602005-10-12 15:55:09 +10001990 { /* e500 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001991 .pvr_mask = 0xffff0000,
1992 .pvr_value = 0x80200000,
1993 .cpu_name = "e500",
Kumar Gala10b35d92005-09-23 14:08:58 -05001994 .cpu_features = CPU_FTRS_E500,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001995 .cpu_user_features = COMMON_USER_BOOKE |
Kumar Gala5e14d212007-09-13 01:44:20 -05001996 PPC_FEATURE_HAS_SPE_COMP |
1997 PPC_FEATURE_HAS_EFP_SINGLE_COMP,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001998 .mmu_features = MMU_FTR_TYPE_FSL_E,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001999 .icache_bsize = 32,
2000 .dcache_bsize = 32,
2001 .num_pmcs = 4,
Andy Fleming555d97a2005-12-15 20:02:04 -06002002 .oprofile_cpu_type = "ppc/e500",
Andy Fleming39aef682008-02-04 18:27:55 -06002003 .oprofile_type = PPC_OPROFILE_FSL_EMB,
Kumar Gala105c31d2009-01-08 08:31:20 -06002004 .cpu_setup = __setup_cpu_e500v1,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11002005 .machine_check = machine_check_e500,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11002006 .platform = "ppc8540",
Linus Torvalds1da177e2005-04-16 15:20:36 -07002007 },
Stephen Rothwell49209602005-10-12 15:55:09 +10002008 { /* e500v2 */
Kumar Gala5b37b702005-06-21 17:15:18 -07002009 .pvr_mask = 0xffff0000,
2010 .pvr_value = 0x80210000,
2011 .cpu_name = "e500v2",
Kumar Gala10b35d92005-09-23 14:08:58 -05002012 .cpu_features = CPU_FTRS_E500_2,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11002013 .cpu_user_features = COMMON_USER_BOOKE |
Kumar Gala5e14d212007-09-13 01:44:20 -05002014 PPC_FEATURE_HAS_SPE_COMP |
2015 PPC_FEATURE_HAS_EFP_SINGLE_COMP |
2016 PPC_FEATURE_HAS_EFP_DOUBLE_COMP,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00002017 .mmu_features = MMU_FTR_TYPE_FSL_E | MMU_FTR_BIG_PHYS,
Kumar Gala5b37b702005-06-21 17:15:18 -07002018 .icache_bsize = 32,
2019 .dcache_bsize = 32,
2020 .num_pmcs = 4,
Andy Fleming555d97a2005-12-15 20:02:04 -06002021 .oprofile_cpu_type = "ppc/e500",
Andy Fleming39aef682008-02-04 18:27:55 -06002022 .oprofile_type = PPC_OPROFILE_FSL_EMB,
Kumar Gala105c31d2009-01-08 08:31:20 -06002023 .cpu_setup = __setup_cpu_e500v2,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11002024 .machine_check = machine_check_e500,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11002025 .platform = "ppc8548",
Kumar Gala5b37b702005-06-21 17:15:18 -07002026 },
Kumar Gala3dfa8772008-06-16 09:41:32 -05002027 { /* e500mc */
2028 .pvr_mask = 0xffff0000,
2029 .pvr_value = 0x80230000,
2030 .cpu_name = "e500mc",
Kumar Gala3dfa8772008-06-16 09:41:32 -05002031 .cpu_features = CPU_FTRS_E500MC,
2032 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Kumar Galac3071952009-02-10 22:26:06 -06002033 .mmu_features = MMU_FTR_TYPE_FSL_E | MMU_FTR_BIG_PHYS |
Kumar Gala323d23a2009-04-23 08:51:22 -05002034 MMU_FTR_USE_TLBILX,
Kumar Gala3dfa8772008-06-16 09:41:32 -05002035 .icache_bsize = 64,
2036 .dcache_bsize = 64,
2037 .num_pmcs = 4,
Scott Wooda11106542010-02-25 18:09:45 -06002038 .oprofile_cpu_type = "ppc/e500mc",
Kumar Gala3dfa8772008-06-16 09:41:32 -05002039 .oprofile_type = PPC_OPROFILE_FSL_EMB,
Kumar Gala105c31d2009-01-08 08:31:20 -06002040 .cpu_setup = __setup_cpu_e500mc,
Scott Woodfe04b112010-04-08 00:38:22 -05002041 .machine_check = machine_check_e500mc,
Kumar Gala3dfa8772008-06-16 09:41:32 -05002042 .platform = "ppce500mc",
2043 },
Kumar Gala4490c062010-10-08 08:32:11 -05002044#endif /* CONFIG_PPC32 */
2045 { /* e5500 */
2046 .pvr_mask = 0xffff0000,
2047 .pvr_value = 0x80240000,
2048 .cpu_name = "e5500",
Kumar Gala11ed0db2011-04-06 00:11:06 -05002049 .cpu_features = CPU_FTRS_E5500,
Kumar Galafb9be232011-06-02 11:26:13 -05002050 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Kumar Gala4490c062010-10-08 08:32:11 -05002051 .mmu_features = MMU_FTR_TYPE_FSL_E | MMU_FTR_BIG_PHYS |
2052 MMU_FTR_USE_TLBILX,
2053 .icache_bsize = 64,
2054 .dcache_bsize = 64,
2055 .num_pmcs = 4,
2056 .oprofile_cpu_type = "ppc/e500mc",
2057 .oprofile_type = PPC_OPROFILE_FSL_EMB,
2058 .cpu_setup = __setup_cpu_e5500,
Varun Sethi2c71b0c2012-07-09 18:28:21 +05302059#ifndef CONFIG_PPC32
Kumar Gala4490c062010-10-08 08:32:11 -05002060 .cpu_restore = __restore_cpu_e5500,
Varun Sethi2c71b0c2012-07-09 18:28:21 +05302061#endif
Kumar Gala4490c062010-10-08 08:32:11 -05002062 .machine_check = machine_check_e500mc,
2063 .platform = "ppce5500",
2064 },
Kumar Gala10241842011-11-06 11:51:07 -06002065 { /* e6500 */
2066 .pvr_mask = 0xffff0000,
2067 .pvr_value = 0x80400000,
2068 .cpu_name = "e6500",
2069 .cpu_features = CPU_FTRS_E6500,
Kumar Galacd66cc22012-09-07 15:57:17 -05002070 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU |
2071 PPC_FEATURE_HAS_ALTIVEC_COMP,
Kumar Gala10241842011-11-06 11:51:07 -06002072 .mmu_features = MMU_FTR_TYPE_FSL_E | MMU_FTR_BIG_PHYS |
2073 MMU_FTR_USE_TLBILX,
2074 .icache_bsize = 64,
2075 .dcache_bsize = 64,
2076 .num_pmcs = 4,
2077 .oprofile_cpu_type = "ppc/e6500",
2078 .oprofile_type = PPC_OPROFILE_FSL_EMB,
Kumar Galacd66cc22012-09-07 15:57:17 -05002079 .cpu_setup = __setup_cpu_e6500,
Varun Sethi2c71b0c2012-07-09 18:28:21 +05302080#ifndef CONFIG_PPC32
Kumar Galacd66cc22012-09-07 15:57:17 -05002081 .cpu_restore = __restore_cpu_e6500,
Varun Sethi2c71b0c2012-07-09 18:28:21 +05302082#endif
Kumar Gala10241842011-11-06 11:51:07 -06002083 .machine_check = machine_check_e500mc,
2084 .platform = "ppce6500",
2085 },
Kumar Gala4490c062010-10-08 08:32:11 -05002086#ifdef CONFIG_PPC32
Linus Torvalds1da177e2005-04-16 15:20:36 -07002087 { /* default match */
2088 .pvr_mask = 0x00000000,
2089 .pvr_value = 0x00000000,
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10002090 .cpu_name = "(generic E500 PPC)",
2091 .cpu_features = CPU_FTRS_E500,
2092 .cpu_user_features = COMMON_USER_BOOKE |
2093 PPC_FEATURE_HAS_SPE_COMP |
2094 PPC_FEATURE_HAS_EFP_SINGLE_COMP,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00002095 .mmu_features = MMU_FTR_TYPE_FSL_E,
Linus Torvalds1da177e2005-04-16 15:20:36 -07002096 .icache_bsize = 32,
2097 .dcache_bsize = 32,
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10002098 .machine_check = machine_check_e500,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11002099 .platform = "powerpc",
Paul Mackerras516c8be2008-05-12 14:20:35 +10002100 }
Stephen Rothwell49209602005-10-12 15:55:09 +10002101#endif /* CONFIG_PPC32 */
Kumar Gala4490c062010-10-08 08:32:11 -05002102#endif /* CONFIG_E500 */
Kumar Galaf45c4482009-08-18 19:08:30 +00002103
Benjamin Herrenschmidt76b4eda2011-04-14 22:32:01 +00002104#ifdef CONFIG_PPC_A2
2105 { /* Standard A2 (>= DD2) + FPU core */
2106 .pvr_mask = 0xffff0000,
2107 .pvr_value = 0x00480000,
2108 .cpu_name = "A2 (>= DD2)",
2109 .cpu_features = CPU_FTRS_A2,
2110 .cpu_user_features = COMMON_USER_PPC64,
Matt Evans44ae3ab2011-04-06 19:48:50 +00002111 .mmu_features = MMU_FTRS_A2,
Benjamin Herrenschmidt76b4eda2011-04-14 22:32:01 +00002112 .icache_bsize = 64,
2113 .dcache_bsize = 64,
2114 .num_pmcs = 0,
2115 .cpu_setup = __setup_cpu_a2,
2116 .cpu_restore = __restore_cpu_a2,
2117 .machine_check = machine_check_generic,
2118 .platform = "ppca2",
2119 },
Kumar Galaf45c4482009-08-18 19:08:30 +00002120 { /* This is a default entry to get going, to be replaced by
2121 * a real one at some stage
2122 */
2123#define CPU_FTRS_BASE_BOOK3E (CPU_FTR_USE_TB | \
2124 CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_SMT | \
2125 CPU_FTR_NODSISRALIGN | CPU_FTR_NOEXECUTE)
2126 .pvr_mask = 0x00000000,
2127 .pvr_value = 0x00000000,
2128 .cpu_name = "Book3E",
2129 .cpu_features = CPU_FTRS_BASE_BOOK3E,
2130 .cpu_user_features = COMMON_USER_PPC64,
2131 .mmu_features = MMU_FTR_TYPE_3E | MMU_FTR_USE_TLBILX |
2132 MMU_FTR_USE_TLBIVAX_BCAST |
2133 MMU_FTR_LOCK_BCAST_INVAL,
2134 .icache_bsize = 64,
2135 .dcache_bsize = 64,
2136 .num_pmcs = 0,
2137 .machine_check = machine_check_generic,
2138 .platform = "power6",
2139 },
Benjamin Herrenschmidt76b4eda2011-04-14 22:32:01 +00002140#endif /* CONFIG_PPC_A2 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07002141};
Benjamin Herrenschmidt42c4aaa2006-10-24 16:42:40 +10002142
Paul Mackerras87a72f92007-10-04 14:18:01 +10002143static struct cpu_spec the_cpu_spec;
2144
Scott Wood26ee9762011-07-25 11:04:36 +00002145static struct cpu_spec * __init setup_cpu_spec(unsigned long offset,
2146 struct cpu_spec *s)
Michael Ellerman666435b2009-02-22 16:25:43 +00002147{
2148 struct cpu_spec *t = &the_cpu_spec;
Michael Ellerman2657dd42009-02-22 16:25:45 +00002149 struct cpu_spec old;
2150
Michael Ellerman666435b2009-02-22 16:25:43 +00002151 t = PTRRELOC(t);
Michael Ellerman2657dd42009-02-22 16:25:45 +00002152 old = *t;
2153
2154 /* Copy everything, then do fixups */
2155 *t = *s;
Michael Ellerman666435b2009-02-22 16:25:43 +00002156
2157 /*
2158 * If we are overriding a previous value derived from the real
2159 * PVR with a new value obtained using a logical PVR value,
2160 * don't modify the performance monitor fields.
2161 */
Michael Ellerman2657dd42009-02-22 16:25:45 +00002162 if (old.num_pmcs && !s->num_pmcs) {
2163 t->num_pmcs = old.num_pmcs;
2164 t->pmc_type = old.pmc_type;
2165 t->oprofile_type = old.oprofile_type;
2166 t->oprofile_mmcra_sihv = old.oprofile_mmcra_sihv;
2167 t->oprofile_mmcra_sipr = old.oprofile_mmcra_sipr;
2168 t->oprofile_mmcra_clear = old.oprofile_mmcra_clear;
2169
Michael Ellerman666435b2009-02-22 16:25:43 +00002170 /*
2171 * If we have passed through this logic once before and
2172 * have pulled the default case because the real PVR was
2173 * not found inside cpu_specs[], then we are possibly
2174 * running in compatibility mode. In that case, let the
2175 * oprofiler know which set of compatibility counters to
2176 * pull from by making sure the oprofile_cpu_type string
2177 * is set to that of compatibility mode. If the
2178 * oprofile_cpu_type already has a value, then we are
2179 * possibly overriding a real PVR with a logical one,
2180 * and, in that case, keep the current value for
2181 * oprofile_cpu_type.
2182 */
Benjamin Herrenschmidtb173f032009-05-14 18:34:06 +00002183 if (old.oprofile_cpu_type != NULL) {
Benjamin Herrenschmidt0203d6e2009-04-29 19:39:38 +00002184 t->oprofile_cpu_type = old.oprofile_cpu_type;
2185 t->oprofile_type = old.oprofile_type;
Michael Wolf79af6c42009-04-27 06:17:54 +00002186 }
Michael Ellerman2657dd42009-02-22 16:25:45 +00002187 }
Michael Ellerman666435b2009-02-22 16:25:43 +00002188
2189 *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec;
2190
2191 /*
2192 * Set the base platform string once; assumes
2193 * we're called with real pvr first.
2194 */
2195 if (*PTRRELOC(&powerpc_base_platform) == NULL)
2196 *PTRRELOC(&powerpc_base_platform) = t->platform;
2197
2198#if defined(CONFIG_PPC64) || defined(CONFIG_BOOKE)
2199 /* ppc64 and booke expect identify_cpu to also call setup_cpu for
2200 * that processor. I will consolidate that at a later time, for now,
2201 * just use #ifdef. We also don't need to PTRRELOC the function
2202 * pointer on ppc64 and booke as we are running at 0 in real mode
2203 * on ppc64 and reloc_offset is always 0 on booke.
2204 */
Benjamin Herrenschmidtaf9eef32011-01-20 20:36:03 +00002205 if (t->cpu_setup) {
2206 t->cpu_setup(offset, t);
Michael Ellerman666435b2009-02-22 16:25:43 +00002207 }
2208#endif /* CONFIG_PPC64 || CONFIG_BOOKE */
Scott Wood26ee9762011-07-25 11:04:36 +00002209
2210 return t;
Michael Ellerman666435b2009-02-22 16:25:43 +00002211}
2212
Paul Mackerras87a72f92007-10-04 14:18:01 +10002213struct cpu_spec * __init identify_cpu(unsigned long offset, unsigned int pvr)
Benjamin Herrenschmidt42c4aaa2006-10-24 16:42:40 +10002214{
2215 struct cpu_spec *s = cpu_specs;
Benjamin Herrenschmidt42c4aaa2006-10-24 16:42:40 +10002216 int i;
2217
2218 s = PTRRELOC(s);
Benjamin Herrenschmidt42c4aaa2006-10-24 16:42:40 +10002219
Michael Ellerman666435b2009-02-22 16:25:43 +00002220 for (i = 0; i < ARRAY_SIZE(cpu_specs); i++,s++) {
Scott Wood26ee9762011-07-25 11:04:36 +00002221 if ((pvr & s->pvr_mask) == s->pvr_value)
2222 return setup_cpu_spec(offset, s);
Michael Ellerman666435b2009-02-22 16:25:43 +00002223 }
2224
Benjamin Herrenschmidt42c4aaa2006-10-24 16:42:40 +10002225 BUG();
Michael Ellerman666435b2009-02-22 16:25:43 +00002226
Benjamin Herrenschmidt42c4aaa2006-10-24 16:42:40 +10002227 return NULL;
2228}