blob: a792157ba5784873f5a75d7e34032d055152b466 [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 Herrenschmidtaa5cb022006-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)
Nishanth Aravamudan4a1ae4f2013-05-03 14:48:38 +0000101#define COMMON_USER2_POWER7 (PPC_FEATURE2_DSCR)
Michael Neuling71e18492012-10-30 19:34:15 +0000102#define COMMON_USER_POWER8 (COMMON_USER_PPC64 | PPC_FEATURE_ARCH_2_06 |\
103 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP | \
104 PPC_FEATURE_TRUE_LE | \
105 PPC_FEATURE_PSERIES_PERFMON_COMPAT)
Olof Johanssonb3ebd1d2006-09-06 14:35:57 -0500106#define COMMON_USER_PA6T (COMMON_USER_PPC64 | PPC_FEATURE_PA6T |\
107 PPC_FEATURE_TRUE_LE | \
108 PPC_FEATURE_HAS_ALTIVEC_COMP)
Kumar Galaf45c4482009-08-18 19:08:30 +0000109#ifdef CONFIG_PPC_BOOK3E_64
110#define COMMON_USER_BOOKE (COMMON_USER_PPC64 | PPC_FEATURE_BOOKE)
111#else
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100112#define COMMON_USER_BOOKE (PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU | \
113 PPC_FEATURE_BOOKE)
Kumar Galaf45c4482009-08-18 19:08:30 +0000114#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -0700115
Paul Mackerras87a72f92007-10-04 14:18:01 +1000116static struct cpu_spec __initdata cpu_specs[] = {
Benjamin Herrenschmidt2d27cfd2009-07-23 23:15:59 +0000117#ifdef CONFIG_PPC_BOOK3S_64
Stephen Rothwell49209602005-10-12 15:55:09 +1000118 { /* Power3 */
119 .pvr_mask = 0xffff0000,
120 .pvr_value = 0x00400000,
121 .cpu_name = "POWER3 (630)",
122 .cpu_features = CPU_FTRS_POWER3,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000123 .cpu_user_features = COMMON_USER_PPC64|PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000124 .mmu_features = MMU_FTR_HPTE_TABLE,
Stephen Rothwell49209602005-10-12 15:55:09 +1000125 .icache_bsize = 128,
126 .dcache_bsize = 128,
127 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600128 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000129 .oprofile_cpu_type = "ppc64/power3",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000130 .oprofile_type = PPC_OPROFILE_RS64,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100131 .platform = "power3",
Stephen Rothwell49209602005-10-12 15:55:09 +1000132 },
133 { /* Power3+ */
134 .pvr_mask = 0xffff0000,
135 .pvr_value = 0x00410000,
136 .cpu_name = "POWER3 (630+)",
137 .cpu_features = CPU_FTRS_POWER3,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000138 .cpu_user_features = COMMON_USER_PPC64|PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000139 .mmu_features = MMU_FTR_HPTE_TABLE,
Stephen Rothwell49209602005-10-12 15:55:09 +1000140 .icache_bsize = 128,
141 .dcache_bsize = 128,
142 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600143 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000144 .oprofile_cpu_type = "ppc64/power3",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000145 .oprofile_type = PPC_OPROFILE_RS64,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100146 .platform = "power3",
Stephen Rothwell49209602005-10-12 15:55:09 +1000147 },
148 { /* Northstar */
149 .pvr_mask = 0xffff0000,
150 .pvr_value = 0x00330000,
151 .cpu_name = "RS64-II (northstar)",
152 .cpu_features = CPU_FTRS_RS64,
153 .cpu_user_features = COMMON_USER_PPC64,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000154 .mmu_features = MMU_FTR_HPTE_TABLE,
Stephen Rothwell49209602005-10-12 15:55:09 +1000155 .icache_bsize = 128,
156 .dcache_bsize = 128,
157 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600158 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000159 .oprofile_cpu_type = "ppc64/rs64",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000160 .oprofile_type = PPC_OPROFILE_RS64,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100161 .platform = "rs64",
Stephen Rothwell49209602005-10-12 15:55:09 +1000162 },
163 { /* Pulsar */
164 .pvr_mask = 0xffff0000,
165 .pvr_value = 0x00340000,
166 .cpu_name = "RS64-III (pulsar)",
167 .cpu_features = CPU_FTRS_RS64,
168 .cpu_user_features = COMMON_USER_PPC64,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000169 .mmu_features = MMU_FTR_HPTE_TABLE,
Stephen Rothwell49209602005-10-12 15:55:09 +1000170 .icache_bsize = 128,
171 .dcache_bsize = 128,
172 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600173 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000174 .oprofile_cpu_type = "ppc64/rs64",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000175 .oprofile_type = PPC_OPROFILE_RS64,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100176 .platform = "rs64",
Stephen Rothwell49209602005-10-12 15:55:09 +1000177 },
178 { /* I-star */
179 .pvr_mask = 0xffff0000,
180 .pvr_value = 0x00360000,
181 .cpu_name = "RS64-III (icestar)",
182 .cpu_features = CPU_FTRS_RS64,
183 .cpu_user_features = COMMON_USER_PPC64,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000184 .mmu_features = MMU_FTR_HPTE_TABLE,
Stephen Rothwell49209602005-10-12 15:55:09 +1000185 .icache_bsize = 128,
186 .dcache_bsize = 128,
187 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600188 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000189 .oprofile_cpu_type = "ppc64/rs64",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000190 .oprofile_type = PPC_OPROFILE_RS64,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100191 .platform = "rs64",
Stephen Rothwell49209602005-10-12 15:55:09 +1000192 },
193 { /* S-star */
194 .pvr_mask = 0xffff0000,
195 .pvr_value = 0x00370000,
196 .cpu_name = "RS64-IV (sstar)",
197 .cpu_features = CPU_FTRS_RS64,
198 .cpu_user_features = COMMON_USER_PPC64,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000199 .mmu_features = MMU_FTR_HPTE_TABLE,
Stephen Rothwell49209602005-10-12 15:55:09 +1000200 .icache_bsize = 128,
201 .dcache_bsize = 128,
202 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600203 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000204 .oprofile_cpu_type = "ppc64/rs64",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000205 .oprofile_type = PPC_OPROFILE_RS64,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100206 .platform = "rs64",
Stephen Rothwell49209602005-10-12 15:55:09 +1000207 },
208 { /* Power4 */
209 .pvr_mask = 0xffff0000,
210 .pvr_value = 0x00350000,
211 .cpu_name = "POWER4 (gp)",
212 .cpu_features = CPU_FTRS_POWER4,
Paul Mackerrasa7ddc5e2005-11-10 14:29:18 +1100213 .cpu_user_features = COMMON_USER_POWER4,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000214 .mmu_features = MMU_FTRS_POWER4,
Stephen Rothwell49209602005-10-12 15:55:09 +1000215 .icache_bsize = 128,
216 .dcache_bsize = 128,
217 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600218 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000219 .oprofile_cpu_type = "ppc64/power4",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000220 .oprofile_type = PPC_OPROFILE_POWER4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100221 .platform = "power4",
Stephen Rothwell49209602005-10-12 15:55:09 +1000222 },
223 { /* Power4+ */
224 .pvr_mask = 0xffff0000,
225 .pvr_value = 0x00380000,
226 .cpu_name = "POWER4+ (gq)",
227 .cpu_features = CPU_FTRS_POWER4,
Paul Mackerrasa7ddc5e2005-11-10 14:29:18 +1100228 .cpu_user_features = COMMON_USER_POWER4,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000229 .mmu_features = MMU_FTRS_POWER4,
Stephen Rothwell49209602005-10-12 15:55:09 +1000230 .icache_bsize = 128,
231 .dcache_bsize = 128,
232 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600233 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000234 .oprofile_cpu_type = "ppc64/power4",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000235 .oprofile_type = PPC_OPROFILE_POWER4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100236 .platform = "power4",
Stephen Rothwell49209602005-10-12 15:55:09 +1000237 },
238 { /* PPC970 */
239 .pvr_mask = 0xffff0000,
240 .pvr_value = 0x00390000,
241 .cpu_name = "PPC970",
242 .cpu_features = CPU_FTRS_PPC970,
Paul Mackerrasa7ddc5e2005-11-10 14:29:18 +1100243 .cpu_user_features = COMMON_USER_POWER4 |
Stephen Rothwell49209602005-10-12 15:55:09 +1000244 PPC_FEATURE_HAS_ALTIVEC_COMP,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000245 .mmu_features = MMU_FTRS_PPC970,
Stephen Rothwell49209602005-10-12 15:55:09 +1000246 .icache_bsize = 128,
247 .dcache_bsize = 128,
248 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600249 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000250 .cpu_setup = __setup_cpu_ppc970,
Olof Johanssonf39b7a52006-08-11 00:07:08 -0500251 .cpu_restore = __restore_cpu_ppc970,
Stephen Rothwell49209602005-10-12 15:55:09 +1000252 .oprofile_cpu_type = "ppc64/970",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000253 .oprofile_type = PPC_OPROFILE_POWER4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100254 .platform = "ppc970",
Stephen Rothwell49209602005-10-12 15:55:09 +1000255 },
Stephen Rothwell49209602005-10-12 15:55:09 +1000256 { /* PPC970FX */
257 .pvr_mask = 0xffff0000,
258 .pvr_value = 0x003c0000,
259 .cpu_name = "PPC970FX",
Stephen Rothwell49209602005-10-12 15:55:09 +1000260 .cpu_features = CPU_FTRS_PPC970,
Paul Mackerrasa7ddc5e2005-11-10 14:29:18 +1100261 .cpu_user_features = COMMON_USER_POWER4 |
Stephen Rothwell49209602005-10-12 15:55:09 +1000262 PPC_FEATURE_HAS_ALTIVEC_COMP,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000263 .mmu_features = MMU_FTRS_PPC970,
Stephen Rothwell49209602005-10-12 15:55:09 +1000264 .icache_bsize = 128,
265 .dcache_bsize = 128,
266 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600267 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000268 .cpu_setup = __setup_cpu_ppc970,
Olof Johanssonf39b7a52006-08-11 00:07:08 -0500269 .cpu_restore = __restore_cpu_ppc970,
Stephen Rothwell49209602005-10-12 15:55:09 +1000270 .oprofile_cpu_type = "ppc64/970",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000271 .oprofile_type = PPC_OPROFILE_POWER4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100272 .platform = "ppc970",
Stephen Rothwell49209602005-10-12 15:55:09 +1000273 },
Olof Johansson3546e812007-02-26 00:35:14 -0600274 { /* PPC970MP DD1.0 - no DEEPNAP, use regular 970 init */
275 .pvr_mask = 0xffffffff,
276 .pvr_value = 0x00440100,
277 .cpu_name = "PPC970MP",
278 .cpu_features = CPU_FTRS_PPC970,
279 .cpu_user_features = COMMON_USER_POWER4 |
280 PPC_FEATURE_HAS_ALTIVEC_COMP,
Benjamin Herrenschmidtd63ac5f2013-03-13 09:55:02 +1100281 .mmu_features = MMU_FTRS_PPC970,
Olof Johansson3546e812007-02-26 00:35:14 -0600282 .icache_bsize = 128,
283 .dcache_bsize = 128,
284 .num_pmcs = 8,
Anton Blanchard2fae4982007-05-19 15:22:41 +1000285 .pmc_type = PPC_PMC_IBM,
Olof Johansson3546e812007-02-26 00:35:14 -0600286 .cpu_setup = __setup_cpu_ppc970,
287 .cpu_restore = __restore_cpu_ppc970,
288 .oprofile_cpu_type = "ppc64/970MP",
289 .oprofile_type = PPC_OPROFILE_POWER4,
290 .platform = "ppc970",
291 },
Stephen Rothwell49209602005-10-12 15:55:09 +1000292 { /* PPC970MP */
293 .pvr_mask = 0xffff0000,
294 .pvr_value = 0x00440000,
295 .cpu_name = "PPC970MP",
296 .cpu_features = CPU_FTRS_PPC970,
Paul Mackerrasa7ddc5e2005-11-10 14:29:18 +1100297 .cpu_user_features = COMMON_USER_POWER4 |
Stephen Rothwell49209602005-10-12 15:55:09 +1000298 PPC_FEATURE_HAS_ALTIVEC_COMP,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000299 .mmu_features = MMU_FTRS_PPC970,
Stephen Rothwell49209602005-10-12 15:55:09 +1000300 .icache_bsize = 128,
301 .dcache_bsize = 128,
Anton Blanchard87af41b2006-05-05 05:44:26 +1000302 .num_pmcs = 8,
Anton Blanchard2fae4982007-05-19 15:22:41 +1000303 .pmc_type = PPC_PMC_IBM,
Olof Johansson5b43d202006-10-04 23:41:41 -0500304 .cpu_setup = __setup_cpu_ppc970MP,
Olof Johanssonf39b7a52006-08-11 00:07:08 -0500305 .cpu_restore = __restore_cpu_ppc970,
Mike Wolffecb3522006-11-21 14:41:54 -0600306 .oprofile_cpu_type = "ppc64/970MP",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000307 .oprofile_type = PPC_OPROFILE_POWER4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100308 .platform = "ppc970",
Stephen Rothwell49209602005-10-12 15:55:09 +1000309 },
Jake Moilanen362ff7b2006-10-18 10:47:22 -0500310 { /* PPC970GX */
311 .pvr_mask = 0xffff0000,
312 .pvr_value = 0x00450000,
313 .cpu_name = "PPC970GX",
314 .cpu_features = CPU_FTRS_PPC970,
315 .cpu_user_features = COMMON_USER_POWER4 |
316 PPC_FEATURE_HAS_ALTIVEC_COMP,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000317 .mmu_features = MMU_FTRS_PPC970,
Jake Moilanen362ff7b2006-10-18 10:47:22 -0500318 .icache_bsize = 128,
319 .dcache_bsize = 128,
320 .num_pmcs = 8,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600321 .pmc_type = PPC_PMC_IBM,
Jake Moilanen362ff7b2006-10-18 10:47:22 -0500322 .cpu_setup = __setup_cpu_ppc970,
323 .oprofile_cpu_type = "ppc64/970",
324 .oprofile_type = PPC_OPROFILE_POWER4,
325 .platform = "ppc970",
326 },
Benjamin Herrenschmidt3c726f82005-11-07 11:06:55 +1100327 { /* Power5 GR */
Stephen Rothwell49209602005-10-12 15:55:09 +1000328 .pvr_mask = 0xffff0000,
329 .pvr_value = 0x003a0000,
330 .cpu_name = "POWER5 (gr)",
331 .cpu_features = CPU_FTRS_POWER5,
Paul Mackerrasa7ddc5e2005-11-10 14:29:18 +1100332 .cpu_user_features = COMMON_USER_POWER5,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000333 .mmu_features = MMU_FTRS_POWER5,
Stephen Rothwell49209602005-10-12 15:55:09 +1000334 .icache_bsize = 128,
335 .dcache_bsize = 128,
336 .num_pmcs = 6,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600337 .pmc_type = PPC_PMC_IBM,
Stephen Rothwell49209602005-10-12 15:55:09 +1000338 .oprofile_cpu_type = "ppc64/power5",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000339 .oprofile_type = PPC_OPROFILE_POWER4,
Michael Neulinge78dbc82006-06-08 14:42:34 +1000340 /* SIHV / SIPR bits are implemented on POWER4+ (GQ)
341 * and above but only works on POWER5 and above
342 */
343 .oprofile_mmcra_sihv = MMCRA_SIHV,
344 .oprofile_mmcra_sipr = MMCRA_SIPR,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100345 .platform = "power5",
Stephen Rothwell49209602005-10-12 15:55:09 +1000346 },
Mike Wolf31a12ce2007-07-10 13:13:47 -0500347 { /* Power5++ */
348 .pvr_mask = 0xffffff00,
349 .pvr_value = 0x003b0300,
350 .cpu_name = "POWER5+ (gs)",
351 .cpu_features = CPU_FTRS_POWER5,
352 .cpu_user_features = COMMON_USER_POWER5_PLUS,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000353 .mmu_features = MMU_FTRS_POWER5,
Mike Wolf31a12ce2007-07-10 13:13:47 -0500354 .icache_bsize = 128,
355 .dcache_bsize = 128,
356 .num_pmcs = 6,
357 .oprofile_cpu_type = "ppc64/power5++",
358 .oprofile_type = PPC_OPROFILE_POWER4,
359 .oprofile_mmcra_sihv = MMCRA_SIHV,
360 .oprofile_mmcra_sipr = MMCRA_SIPR,
361 .platform = "power5+",
362 },
Benjamin Herrenschmidt3c726f82005-11-07 11:06:55 +1100363 { /* Power5 GS */
Stephen Rothwell49209602005-10-12 15:55:09 +1000364 .pvr_mask = 0xffff0000,
365 .pvr_value = 0x003b0000,
Anton Blanchard834608f2006-01-09 15:42:30 +1100366 .cpu_name = "POWER5+ (gs)",
Stephen Rothwell49209602005-10-12 15:55:09 +1000367 .cpu_features = CPU_FTRS_POWER5,
Paul Mackerrasa7ddc5e2005-11-10 14:29:18 +1100368 .cpu_user_features = COMMON_USER_POWER5_PLUS,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000369 .mmu_features = MMU_FTRS_POWER5,
Stephen Rothwell49209602005-10-12 15:55:09 +1000370 .icache_bsize = 128,
371 .dcache_bsize = 128,
372 .num_pmcs = 6,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600373 .pmc_type = PPC_PMC_IBM,
Anton Blanchard834608f2006-01-09 15:42:30 +1100374 .oprofile_cpu_type = "ppc64/power5+",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000375 .oprofile_type = PPC_OPROFILE_POWER4,
Michael Neulinge78dbc82006-06-08 14:42:34 +1000376 .oprofile_mmcra_sihv = MMCRA_SIHV,
377 .oprofile_mmcra_sipr = MMCRA_SIPR,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100378 .platform = "power5+",
Stephen Rothwell49209602005-10-12 15:55:09 +1000379 },
Paul Mackerras974a76f2006-11-10 20:38:53 +1100380 { /* POWER6 in P5+ mode; 2.04-compliant processor */
381 .pvr_mask = 0xffffffff,
382 .pvr_value = 0x0f000001,
383 .cpu_name = "POWER5+",
384 .cpu_features = CPU_FTRS_POWER5,
385 .cpu_user_features = COMMON_USER_POWER5_PLUS,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000386 .mmu_features = MMU_FTRS_POWER5,
Paul Mackerras974a76f2006-11-10 20:38:53 +1100387 .icache_bsize = 128,
388 .dcache_bsize = 128,
Michael Wolf79af6c42009-04-27 06:17:54 +0000389 .oprofile_cpu_type = "ppc64/ibm-compat-v1",
390 .oprofile_type = PPC_OPROFILE_POWER4,
Paul Mackerras974a76f2006-11-10 20:38:53 +1100391 .platform = "power5+",
392 },
Anton Blanchard03054d52006-04-29 09:51:06 +1000393 { /* Power6 */
394 .pvr_mask = 0xffff0000,
395 .pvr_value = 0x003e0000,
Paul Mackerras974a76f2006-11-10 20:38:53 +1100396 .cpu_name = "POWER6 (raw)",
397 .cpu_features = CPU_FTRS_POWER6,
398 .cpu_user_features = COMMON_USER_POWER6 |
399 PPC_FEATURE_POWER6_EXT,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000400 .mmu_features = MMU_FTRS_POWER6,
Paul Mackerras974a76f2006-11-10 20:38:53 +1100401 .icache_bsize = 128,
402 .dcache_bsize = 128,
403 .num_pmcs = 6,
Anton Blanchard2fae4982007-05-19 15:22:41 +1000404 .pmc_type = PPC_PMC_IBM,
Paul Mackerras974a76f2006-11-10 20:38:53 +1100405 .oprofile_cpu_type = "ppc64/power6",
406 .oprofile_type = PPC_OPROFILE_POWER4,
407 .oprofile_mmcra_sihv = POWER6_MMCRA_SIHV,
408 .oprofile_mmcra_sipr = POWER6_MMCRA_SIPR,
409 .oprofile_mmcra_clear = POWER6_MMCRA_THRM |
410 POWER6_MMCRA_OTHER,
411 .platform = "power6x",
412 },
413 { /* 2.05-compliant processor, i.e. Power6 "architected" mode */
414 .pvr_mask = 0xffffffff,
415 .pvr_value = 0x0f000002,
416 .cpu_name = "POWER6 (architected)",
Anton Blanchard03054d52006-04-29 09:51:06 +1000417 .cpu_features = CPU_FTRS_POWER6,
418 .cpu_user_features = COMMON_USER_POWER6,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000419 .mmu_features = MMU_FTRS_POWER6,
Anton Blanchard03054d52006-04-29 09:51:06 +1000420 .icache_bsize = 128,
421 .dcache_bsize = 128,
Michael Wolf79af6c42009-04-27 06:17:54 +0000422 .oprofile_cpu_type = "ppc64/ibm-compat-v1",
423 .oprofile_type = PPC_OPROFILE_POWER4,
Anton Blanchard03054d52006-04-29 09:51:06 +1000424 .platform = "power6",
425 },
Joel Schopp635f5a62008-06-19 06:18:21 +1000426 { /* 2.06-compliant processor, i.e. Power7 "architected" mode */
427 .pvr_mask = 0xffffffff,
428 .pvr_value = 0x0f000003,
429 .cpu_name = "POWER7 (architected)",
430 .cpu_features = CPU_FTRS_POWER7,
431 .cpu_user_features = COMMON_USER_POWER7,
Nishanth Aravamudan4a1ae4f2013-05-03 14:48:38 +0000432 .cpu_user_features2 = COMMON_USER2_POWER7,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000433 .mmu_features = MMU_FTRS_POWER7,
Joel Schopp635f5a62008-06-19 06:18:21 +1000434 .icache_bsize = 128,
435 .dcache_bsize = 128,
Michael Wolf79af6c42009-04-27 06:17:54 +0000436 .oprofile_type = PPC_OPROFILE_POWER4,
437 .oprofile_cpu_type = "ppc64/ibm-compat-v1",
Benjamin Herrenschmidt24cc67d2011-01-20 18:50:55 +1100438 .cpu_setup = __setup_cpu_power7,
439 .cpu_restore = __restore_cpu_power7,
Joel Schopp635f5a62008-06-19 06:18:21 +1000440 .platform = "power7",
441 },
Michael Neulingc674e702012-11-08 20:26:42 +0000442 { /* 2.07-compliant processor, i.e. Power8 "architected" mode */
443 .pvr_mask = 0xffffffff,
444 .pvr_value = 0x0f000004,
445 .cpu_name = "POWER8 (architected)",
446 .cpu_features = CPU_FTRS_POWER8,
447 .cpu_user_features = COMMON_USER_POWER8,
448 .mmu_features = MMU_FTRS_POWER8,
449 .icache_bsize = 128,
450 .dcache_bsize = 128,
451 .oprofile_type = PPC_OPROFILE_POWER4,
452 .oprofile_cpu_type = "ppc64/ibm-compat-v1",
453 .cpu_setup = __setup_cpu_power8,
454 .cpu_restore = __restore_cpu_power8,
455 .platform = "power8",
456 },
Michael Neulinge952e6c2008-06-18 10:47:26 +1000457 { /* Power7 */
458 .pvr_mask = 0xffff0000,
459 .pvr_value = 0x003f0000,
Joel Schopp635f5a62008-06-19 06:18:21 +1000460 .cpu_name = "POWER7 (raw)",
Michael Neulinge952e6c2008-06-18 10:47:26 +1000461 .cpu_features = CPU_FTRS_POWER7,
462 .cpu_user_features = COMMON_USER_POWER7,
Nishanth Aravamudan4a1ae4f2013-05-03 14:48:38 +0000463 .cpu_user_features2 = COMMON_USER2_POWER7,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000464 .mmu_features = MMU_FTRS_POWER7,
Michael Neulinge952e6c2008-06-18 10:47:26 +1000465 .icache_bsize = 128,
466 .dcache_bsize = 128,
467 .num_pmcs = 6,
468 .pmc_type = PPC_PMC_IBM,
Michael Neulinge952e6c2008-06-18 10:47:26 +1000469 .oprofile_cpu_type = "ppc64/power7",
470 .oprofile_type = PPC_OPROFILE_POWER4,
Benjamin Herrenschmidt24cc67d2011-01-20 18:50:55 +1100471 .cpu_setup = __setup_cpu_power7,
472 .cpu_restore = __restore_cpu_power7,
Michael Neulinge952e6c2008-06-18 10:47:26 +1000473 .platform = "power7",
474 },
Michael Neuling6f08cb32010-11-17 18:52:44 +0000475 { /* Power7+ */
476 .pvr_mask = 0xffff0000,
477 .pvr_value = 0x004A0000,
478 .cpu_name = "POWER7+ (raw)",
479 .cpu_features = CPU_FTRS_POWER7,
480 .cpu_user_features = COMMON_USER_POWER7,
Nishanth Aravamudan4a1ae4f2013-05-03 14:48:38 +0000481 .cpu_user_features = COMMON_USER2_POWER7,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000482 .mmu_features = MMU_FTRS_POWER7,
Michael Neuling6f08cb32010-11-17 18:52:44 +0000483 .icache_bsize = 128,
484 .dcache_bsize = 128,
485 .num_pmcs = 6,
486 .pmc_type = PPC_PMC_IBM,
487 .oprofile_cpu_type = "ppc64/power7",
488 .oprofile_type = PPC_OPROFILE_POWER4,
Benjamin Herrenschmidt24cc67d2011-01-20 18:50:55 +1100489 .cpu_setup = __setup_cpu_power7,
490 .cpu_restore = __restore_cpu_power7,
Michael Neuling6f08cb32010-11-17 18:52:44 +0000491 .platform = "power7+",
492 },
Michael Neuling71e18492012-10-30 19:34:15 +0000493 { /* Power8 */
494 .pvr_mask = 0xffff0000,
495 .pvr_value = 0x004b0000,
496 .cpu_name = "POWER8 (raw)",
497 .cpu_features = CPU_FTRS_POWER8,
498 .cpu_user_features = COMMON_USER_POWER8,
499 .mmu_features = MMU_FTRS_POWER8,
500 .icache_bsize = 128,
501 .dcache_bsize = 128,
502 .num_pmcs = 6,
503 .pmc_type = PPC_PMC_IBM,
504 .oprofile_cpu_type = "ppc64/power8",
505 .oprofile_type = PPC_OPROFILE_POWER4,
506 .cpu_setup = __setup_cpu_power8,
507 .cpu_restore = __restore_cpu_power8,
508 .platform = "power8",
509 },
Arnd Bergmannc902be72006-01-04 19:55:53 +0000510 { /* Cell Broadband Engine */
Stephen Rothwell49209602005-10-12 15:55:09 +1000511 .pvr_mask = 0xffff0000,
512 .pvr_value = 0x00700000,
513 .cpu_name = "Cell Broadband Engine",
514 .cpu_features = CPU_FTRS_CELL,
515 .cpu_user_features = COMMON_USER_PPC64 |
Benjamin Herrenschmidtaa5cb022006-03-01 15:07:07 +1100516 PPC_FEATURE_CELL | PPC_FEATURE_HAS_ALTIVEC_COMP |
517 PPC_FEATURE_SMT,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000518 .mmu_features = MMU_FTRS_CELL,
Stephen Rothwell49209602005-10-12 15:55:09 +1000519 .icache_bsize = 128,
520 .dcache_bsize = 128,
Maynard Johnson18f21902006-11-20 18:45:16 +0100521 .num_pmcs = 4,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600522 .pmc_type = PPC_PMC_IBM,
Maynard Johnson18f21902006-11-20 18:45:16 +0100523 .oprofile_cpu_type = "ppc64/cell-be",
524 .oprofile_type = PPC_OPROFILE_CELL,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100525 .platform = "ppc-cell-be",
Stephen Rothwell49209602005-10-12 15:55:09 +1000526 },
Olof Johanssonb3ebd1d2006-09-06 14:35:57 -0500527 { /* PA Semi PA6T */
528 .pvr_mask = 0x7fff0000,
529 .pvr_value = 0x00900000,
530 .cpu_name = "PA6T",
531 .cpu_features = CPU_FTRS_PA6T,
532 .cpu_user_features = COMMON_USER_PA6T,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000533 .mmu_features = MMU_FTRS_PA6T,
Olof Johanssonb3ebd1d2006-09-06 14:35:57 -0500534 .icache_bsize = 64,
535 .dcache_bsize = 64,
536 .num_pmcs = 6,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600537 .pmc_type = PPC_PMC_PA6T,
Olof Johansson11999192007-02-04 16:36:51 -0600538 .cpu_setup = __setup_cpu_pa6t,
539 .cpu_restore = __restore_cpu_pa6t,
Olof Johansson25fc5302007-04-18 16:38:21 +1000540 .oprofile_cpu_type = "ppc64/pa6t",
541 .oprofile_type = PPC_OPROFILE_PA6T,
Olof Johanssonb3ebd1d2006-09-06 14:35:57 -0500542 .platform = "pa6t",
543 },
Stephen Rothwell49209602005-10-12 15:55:09 +1000544 { /* default match */
545 .pvr_mask = 0x00000000,
546 .pvr_value = 0x00000000,
547 .cpu_name = "POWER4 (compatible)",
548 .cpu_features = CPU_FTRS_COMPATIBLE,
549 .cpu_user_features = COMMON_USER_PPC64,
Matt Evans44ae3ab2011-04-06 19:48:50 +0000550 .mmu_features = MMU_FTRS_DEFAULT_HPTE_ARCH_V2,
Stephen Rothwell49209602005-10-12 15:55:09 +1000551 .icache_bsize = 128,
552 .dcache_bsize = 128,
553 .num_pmcs = 6,
Olof Johansson1bd2e5a2007-01-28 21:23:54 -0600554 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100555 .platform = "power4",
Stephen Rothwell49209602005-10-12 15:55:09 +1000556 }
Benjamin Herrenschmidt2d27cfd2009-07-23 23:15:59 +0000557#endif /* CONFIG_PPC_BOOK3S_64 */
Benjamin Herrenschmidt2d27cfd2009-07-23 23:15:59 +0000558
Stephen Rothwell49209602005-10-12 15:55:09 +1000559#ifdef CONFIG_PPC32
Linus Torvalds1da177e2005-04-16 15:20:36 -0700560#if CLASSIC_PPC
Stephen Rothwell49209602005-10-12 15:55:09 +1000561 { /* 601 */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700562 .pvr_mask = 0xffff0000,
563 .pvr_value = 0x00010000,
564 .cpu_name = "601",
Kumar Gala10b35d92005-09-23 14:08:58 -0500565 .cpu_features = CPU_FTRS_PPC601,
Stephen Rothwell49209602005-10-12 15:55:09 +1000566 .cpu_user_features = COMMON_USER | PPC_FEATURE_601_INSTR |
Paul Mackerras98599012005-10-22 16:51:34 +1000567 PPC_FEATURE_UNIFIED_CACHE | PPC_FEATURE_NO_TB,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000568 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700569 .icache_bsize = 32,
570 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100571 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100572 .platform = "ppc601",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700573 },
574 { /* 603 */
575 .pvr_mask = 0xffff0000,
576 .pvr_value = 0x00030000,
577 .cpu_name = "603",
Kumar Gala10b35d92005-09-23 14:08:58 -0500578 .cpu_features = CPU_FTRS_603,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000579 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000580 .mmu_features = 0,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700581 .icache_bsize = 32,
582 .dcache_bsize = 32,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100583 .cpu_setup = __setup_cpu_603,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100584 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100585 .platform = "ppc603",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700586 },
587 { /* 603e */
588 .pvr_mask = 0xffff0000,
589 .pvr_value = 0x00060000,
590 .cpu_name = "603e",
Kumar Gala10b35d92005-09-23 14:08:58 -0500591 .cpu_features = CPU_FTRS_603,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000592 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000593 .mmu_features = 0,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700594 .icache_bsize = 32,
595 .dcache_bsize = 32,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100596 .cpu_setup = __setup_cpu_603,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100597 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100598 .platform = "ppc603",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700599 },
600 { /* 603ev */
601 .pvr_mask = 0xffff0000,
602 .pvr_value = 0x00070000,
603 .cpu_name = "603ev",
Kumar Gala10b35d92005-09-23 14:08:58 -0500604 .cpu_features = CPU_FTRS_603,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000605 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000606 .mmu_features = 0,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700607 .icache_bsize = 32,
608 .dcache_bsize = 32,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100609 .cpu_setup = __setup_cpu_603,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100610 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100611 .platform = "ppc603",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700612 },
613 { /* 604 */
614 .pvr_mask = 0xffff0000,
615 .pvr_value = 0x00040000,
616 .cpu_name = "604",
Kumar Gala10b35d92005-09-23 14:08:58 -0500617 .cpu_features = CPU_FTRS_604,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000618 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000619 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700620 .icache_bsize = 32,
621 .dcache_bsize = 32,
622 .num_pmcs = 2,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100623 .cpu_setup = __setup_cpu_604,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100624 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100625 .platform = "ppc604",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700626 },
627 { /* 604e */
628 .pvr_mask = 0xfffff000,
629 .pvr_value = 0x00090000,
630 .cpu_name = "604e",
Kumar Gala10b35d92005-09-23 14:08:58 -0500631 .cpu_features = CPU_FTRS_604,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000632 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000633 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700634 .icache_bsize = 32,
635 .dcache_bsize = 32,
636 .num_pmcs = 4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100637 .cpu_setup = __setup_cpu_604,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100638 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100639 .platform = "ppc604",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700640 },
641 { /* 604r */
642 .pvr_mask = 0xffff0000,
643 .pvr_value = 0x00090000,
644 .cpu_name = "604r",
Kumar Gala10b35d92005-09-23 14:08:58 -0500645 .cpu_features = CPU_FTRS_604,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000646 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000647 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700648 .icache_bsize = 32,
649 .dcache_bsize = 32,
650 .num_pmcs = 4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100651 .cpu_setup = __setup_cpu_604,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100652 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100653 .platform = "ppc604",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700654 },
655 { /* 604ev */
656 .pvr_mask = 0xffff0000,
657 .pvr_value = 0x000a0000,
658 .cpu_name = "604ev",
Kumar Gala10b35d92005-09-23 14:08:58 -0500659 .cpu_features = CPU_FTRS_604,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000660 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000661 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700662 .icache_bsize = 32,
663 .dcache_bsize = 32,
664 .num_pmcs = 4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100665 .cpu_setup = __setup_cpu_604,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100666 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100667 .platform = "ppc604",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700668 },
669 { /* 740/750 (0x4202, don't support TAU ?) */
670 .pvr_mask = 0xffffffff,
671 .pvr_value = 0x00084202,
672 .cpu_name = "740/750",
Kumar Gala10b35d92005-09-23 14:08:58 -0500673 .cpu_features = CPU_FTRS_740_NOTAU,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000674 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000675 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700676 .icache_bsize = 32,
677 .dcache_bsize = 32,
678 .num_pmcs = 4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100679 .cpu_setup = __setup_cpu_750,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100680 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100681 .platform = "ppc750",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700682 },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700683 { /* 750CX (80100 and 8010x?) */
684 .pvr_mask = 0xfffffff0,
685 .pvr_value = 0x00080100,
686 .cpu_name = "750CX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500687 .cpu_features = CPU_FTRS_750,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000688 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000689 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700690 .icache_bsize = 32,
691 .dcache_bsize = 32,
692 .num_pmcs = 4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100693 .cpu_setup = __setup_cpu_750cx,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100694 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100695 .platform = "ppc750",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700696 },
697 { /* 750CX (82201 and 82202) */
698 .pvr_mask = 0xfffffff0,
699 .pvr_value = 0x00082200,
700 .cpu_name = "750CX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500701 .cpu_features = CPU_FTRS_750,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000702 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000703 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700704 .icache_bsize = 32,
705 .dcache_bsize = 32,
706 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000707 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100708 .cpu_setup = __setup_cpu_750cx,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100709 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100710 .platform = "ppc750",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700711 },
712 { /* 750CXe (82214) */
713 .pvr_mask = 0xfffffff0,
714 .pvr_value = 0x00082210,
715 .cpu_name = "750CXe",
Kumar Gala10b35d92005-09-23 14:08:58 -0500716 .cpu_features = CPU_FTRS_750,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000717 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000718 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700719 .icache_bsize = 32,
720 .dcache_bsize = 32,
721 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000722 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100723 .cpu_setup = __setup_cpu_750cx,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100724 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100725 .platform = "ppc750",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700726 },
Arthur Othieno7c316252005-09-03 15:55:52 -0700727 { /* 750CXe "Gekko" (83214) */
728 .pvr_mask = 0xffffffff,
729 .pvr_value = 0x00083214,
730 .cpu_name = "750CXe",
Kumar Gala10b35d92005-09-23 14:08:58 -0500731 .cpu_features = CPU_FTRS_750,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000732 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000733 .mmu_features = MMU_FTR_HPTE_TABLE,
Arthur Othieno7c316252005-09-03 15:55:52 -0700734 .icache_bsize = 32,
735 .dcache_bsize = 32,
736 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000737 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100738 .cpu_setup = __setup_cpu_750cx,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100739 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100740 .platform = "ppc750",
Arthur Othieno7c316252005-09-03 15:55:52 -0700741 },
Albert Herranz45158dc2009-12-12 06:31:46 +0000742 { /* 750CL (and "Broadway") */
743 .pvr_mask = 0xfffff0e0,
744 .pvr_value = 0x00087000,
Jake Moilanencfbff8a2006-10-03 14:29:34 -0500745 .cpu_name = "750CL",
Josh Boyera14c4502007-04-13 04:33:25 +1000746 .cpu_features = CPU_FTRS_750CL,
Jake Moilanencfbff8a2006-10-03 14:29:34 -0500747 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000748 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Jake Moilanencfbff8a2006-10-03 14:29:34 -0500749 .icache_bsize = 32,
750 .dcache_bsize = 32,
751 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000752 .pmc_type = PPC_PMC_IBM,
Josh Boyera14c4502007-04-13 04:33:25 +1000753 .cpu_setup = __setup_cpu_750,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100754 .machine_check = machine_check_generic,
Jake Moilanencfbff8a2006-10-03 14:29:34 -0500755 .platform = "ppc750",
Dragos Tatulea04f56532009-09-16 11:58:15 +0300756 .oprofile_cpu_type = "ppc/750",
757 .oprofile_type = PPC_OPROFILE_G4,
Jake Moilanencfbff8a2006-10-03 14:29:34 -0500758 },
Arthur Othienoac1ff042005-09-03 15:55:51 -0700759 { /* 745/755 */
760 .pvr_mask = 0xfffff000,
761 .pvr_value = 0x00083000,
762 .cpu_name = "745/755",
Kumar Gala10b35d92005-09-23 14:08:58 -0500763 .cpu_features = CPU_FTRS_750,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000764 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000765 .mmu_features = MMU_FTR_HPTE_TABLE,
Arthur Othienoac1ff042005-09-03 15:55:51 -0700766 .icache_bsize = 32,
767 .dcache_bsize = 32,
768 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000769 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100770 .cpu_setup = __setup_cpu_750,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100771 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100772 .platform = "ppc750",
Arthur Othienoac1ff042005-09-03 15:55:51 -0700773 },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700774 { /* 750FX rev 1.x */
775 .pvr_mask = 0xffffff00,
776 .pvr_value = 0x70000100,
777 .cpu_name = "750FX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500778 .cpu_features = CPU_FTRS_750FX1,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000779 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000780 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700781 .icache_bsize = 32,
782 .dcache_bsize = 32,
783 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000784 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100785 .cpu_setup = __setup_cpu_750,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100786 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100787 .platform = "ppc750",
Octavian Purdila7c9583a2009-03-04 02:02:42 +0000788 .oprofile_cpu_type = "ppc/750",
789 .oprofile_type = PPC_OPROFILE_G4,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700790 },
791 { /* 750FX rev 2.0 must disable HID0[DPM] */
792 .pvr_mask = 0xffffffff,
793 .pvr_value = 0x70000200,
794 .cpu_name = "750FX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500795 .cpu_features = CPU_FTRS_750FX2,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000796 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000797 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700798 .icache_bsize = 32,
799 .dcache_bsize = 32,
800 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000801 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100802 .cpu_setup = __setup_cpu_750,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100803 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100804 .platform = "ppc750",
Octavian Purdila7c9583a2009-03-04 02:02:42 +0000805 .oprofile_cpu_type = "ppc/750",
806 .oprofile_type = PPC_OPROFILE_G4,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700807 },
808 { /* 750FX (All revs except 2.0) */
809 .pvr_mask = 0xffff0000,
810 .pvr_value = 0x70000000,
811 .cpu_name = "750FX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500812 .cpu_features = CPU_FTRS_750FX,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000813 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000814 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700815 .icache_bsize = 32,
816 .dcache_bsize = 32,
817 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000818 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100819 .cpu_setup = __setup_cpu_750fx,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100820 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100821 .platform = "ppc750",
Octavian Purdila7c9583a2009-03-04 02:02:42 +0000822 .oprofile_cpu_type = "ppc/750",
823 .oprofile_type = PPC_OPROFILE_G4,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700824 },
825 { /* 750GX */
826 .pvr_mask = 0xffff0000,
827 .pvr_value = 0x70020000,
828 .cpu_name = "750GX",
Kumar Gala10b35d92005-09-23 14:08:58 -0500829 .cpu_features = CPU_FTRS_750GX,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000830 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000831 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700832 .icache_bsize = 32,
833 .dcache_bsize = 32,
834 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000835 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100836 .cpu_setup = __setup_cpu_750fx,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100837 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100838 .platform = "ppc750",
Octavian Purdila7c9583a2009-03-04 02:02:42 +0000839 .oprofile_cpu_type = "ppc/750",
840 .oprofile_type = PPC_OPROFILE_G4,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700841 },
842 { /* 740/750 (L2CR bit need fixup for 740) */
843 .pvr_mask = 0xffff0000,
844 .pvr_value = 0x00080000,
845 .cpu_name = "740/750",
Kumar Gala10b35d92005-09-23 14:08:58 -0500846 .cpu_features = CPU_FTRS_740,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000847 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000848 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700849 .icache_bsize = 32,
850 .dcache_bsize = 32,
851 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000852 .pmc_type = PPC_PMC_IBM,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100853 .cpu_setup = __setup_cpu_750,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100854 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100855 .platform = "ppc750",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700856 },
857 { /* 7400 rev 1.1 ? (no TAU) */
858 .pvr_mask = 0xffffffff,
859 .pvr_value = 0x000c1101,
860 .cpu_name = "7400 (1.1)",
Kumar Gala10b35d92005-09-23 14:08:58 -0500861 .cpu_features = CPU_FTRS_7400_NOTAU,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000862 .cpu_user_features = COMMON_USER |
863 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000864 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700865 .icache_bsize = 32,
866 .dcache_bsize = 32,
867 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000868 .pmc_type = PPC_PMC_G4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100869 .cpu_setup = __setup_cpu_7400,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100870 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100871 .platform = "ppc7400",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700872 },
873 { /* 7400 */
874 .pvr_mask = 0xffff0000,
875 .pvr_value = 0x000c0000,
876 .cpu_name = "7400",
Kumar Gala10b35d92005-09-23 14:08:58 -0500877 .cpu_features = CPU_FTRS_7400,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000878 .cpu_user_features = COMMON_USER |
879 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000880 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700881 .icache_bsize = 32,
882 .dcache_bsize = 32,
883 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000884 .pmc_type = PPC_PMC_G4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100885 .cpu_setup = __setup_cpu_7400,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100886 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100887 .platform = "ppc7400",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700888 },
889 { /* 7410 */
890 .pvr_mask = 0xffff0000,
891 .pvr_value = 0x800c0000,
892 .cpu_name = "7410",
Kumar Gala10b35d92005-09-23 14:08:58 -0500893 .cpu_features = CPU_FTRS_7400,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000894 .cpu_user_features = COMMON_USER |
895 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000896 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700897 .icache_bsize = 32,
898 .dcache_bsize = 32,
899 .num_pmcs = 4,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000900 .pmc_type = PPC_PMC_G4,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100901 .cpu_setup = __setup_cpu_7410,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100902 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100903 .platform = "ppc7400",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700904 },
905 { /* 7450 2.0 - no doze/nap */
906 .pvr_mask = 0xffffffff,
907 .pvr_value = 0x80000200,
908 .cpu_name = "7450",
Kumar Gala10b35d92005-09-23 14:08:58 -0500909 .cpu_features = CPU_FTRS_7450_20,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000910 .cpu_user_features = COMMON_USER |
911 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000912 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700913 .icache_bsize = 32,
914 .dcache_bsize = 32,
915 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000916 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -0600917 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -0600918 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000919 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100920 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100921 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700922 },
923 { /* 7450 2.1 */
924 .pvr_mask = 0xffffffff,
925 .pvr_value = 0x80000201,
926 .cpu_name = "7450",
Kumar Gala10b35d92005-09-23 14:08:58 -0500927 .cpu_features = CPU_FTRS_7450_21,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000928 .cpu_user_features = COMMON_USER |
929 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000930 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700931 .icache_bsize = 32,
932 .dcache_bsize = 32,
933 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000934 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -0600935 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -0600936 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000937 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100938 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100939 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700940 },
941 { /* 7450 2.3 and newer */
942 .pvr_mask = 0xffff0000,
943 .pvr_value = 0x80000000,
944 .cpu_name = "7450",
Kumar Gala10b35d92005-09-23 14:08:58 -0500945 .cpu_features = CPU_FTRS_7450_23,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000946 .cpu_user_features = COMMON_USER |
947 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000948 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700949 .icache_bsize = 32,
950 .dcache_bsize = 32,
951 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000952 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -0600953 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -0600954 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000955 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100956 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100957 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700958 },
959 { /* 7455 rev 1.x */
960 .pvr_mask = 0xffffff00,
961 .pvr_value = 0x80010100,
962 .cpu_name = "7455",
Kumar Gala10b35d92005-09-23 14:08:58 -0500963 .cpu_features = CPU_FTRS_7455_1,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000964 .cpu_user_features = COMMON_USER |
965 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000966 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700967 .icache_bsize = 32,
968 .dcache_bsize = 32,
969 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000970 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -0600971 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -0600972 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000973 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100974 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100975 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700976 },
977 { /* 7455 rev 2.0 */
978 .pvr_mask = 0xffffffff,
979 .pvr_value = 0x80010200,
980 .cpu_name = "7455",
Kumar Gala10b35d92005-09-23 14:08:58 -0500981 .cpu_features = CPU_FTRS_7455_20,
Paul Mackerrasfab5db92006-06-07 16:14:40 +1000982 .cpu_user_features = COMMON_USER |
983 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +0000984 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700985 .icache_bsize = 32,
986 .dcache_bsize = 32,
987 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +1000988 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -0600989 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -0600990 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +0000991 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +1100992 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +1100993 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700994 },
995 { /* 7455 others */
996 .pvr_mask = 0xffff0000,
997 .pvr_value = 0x80010000,
998 .cpu_name = "7455",
Kumar Gala10b35d92005-09-23 14:08:58 -0500999 .cpu_features = CPU_FTRS_7455,
Paul Mackerrasfab5db92006-06-07 16:14:40 +10001000 .cpu_user_features = COMMON_USER |
1001 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001002 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001003 .icache_bsize = 32,
1004 .dcache_bsize = 32,
1005 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +10001006 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -06001007 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -06001008 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +00001009 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001010 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001011 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001012 },
1013 { /* 7447/7457 Rev 1.0 */
1014 .pvr_mask = 0xffffffff,
1015 .pvr_value = 0x80020100,
1016 .cpu_name = "7447/7457",
Kumar Gala10b35d92005-09-23 14:08:58 -05001017 .cpu_features = CPU_FTRS_7447_10,
Paul Mackerrasfab5db92006-06-07 16:14:40 +10001018 .cpu_user_features = COMMON_USER |
1019 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001020 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001021 .icache_bsize = 32,
1022 .dcache_bsize = 32,
1023 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +10001024 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -06001025 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -06001026 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +00001027 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001028 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001029 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001030 },
1031 { /* 7447/7457 Rev 1.1 */
1032 .pvr_mask = 0xffffffff,
1033 .pvr_value = 0x80020101,
1034 .cpu_name = "7447/7457",
Kumar Gala10b35d92005-09-23 14:08:58 -05001035 .cpu_features = CPU_FTRS_7447_10,
Paul Mackerrasfab5db92006-06-07 16:14:40 +10001036 .cpu_user_features = COMMON_USER |
1037 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001038 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001039 .icache_bsize = 32,
1040 .dcache_bsize = 32,
1041 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +10001042 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -06001043 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -06001044 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +00001045 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001046 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001047 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001048 },
1049 { /* 7447/7457 Rev 1.2 and later */
1050 .pvr_mask = 0xffff0000,
1051 .pvr_value = 0x80020000,
1052 .cpu_name = "7447/7457",
Kumar Gala10b35d92005-09-23 14:08:58 -05001053 .cpu_features = CPU_FTRS_7447,
Paul Mackerrasfab5db92006-06-07 16:14:40 +10001054 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001055 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001056 .icache_bsize = 32,
1057 .dcache_bsize = 32,
1058 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +10001059 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -06001060 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -06001061 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +00001062 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001063 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001064 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001065 },
1066 { /* 7447A */
1067 .pvr_mask = 0xffff0000,
1068 .pvr_value = 0x80030000,
1069 .cpu_name = "7447A",
Kumar Gala10b35d92005-09-23 14:08:58 -05001070 .cpu_features = CPU_FTRS_7447A,
Paul Mackerrasfab5db92006-06-07 16:14:40 +10001071 .cpu_user_features = COMMON_USER |
1072 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001073 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001074 .icache_bsize = 32,
1075 .dcache_bsize = 32,
1076 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +10001077 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -06001078 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -06001079 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +00001080 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001081 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001082 .platform = "ppc7450",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001083 },
Kumar Galabbde6302005-09-03 15:55:55 -07001084 { /* 7448 */
1085 .pvr_mask = 0xffff0000,
1086 .pvr_value = 0x80040000,
1087 .cpu_name = "7448",
James.Yang3d372542007-05-02 16:34:43 -05001088 .cpu_features = CPU_FTRS_7448,
Paul Mackerrasfab5db92006-06-07 16:14:40 +10001089 .cpu_user_features = COMMON_USER |
1090 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001091 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
Kumar Galabbde6302005-09-03 15:55:55 -07001092 .icache_bsize = 32,
1093 .dcache_bsize = 32,
1094 .num_pmcs = 6,
Benjamin Herrenschmidtb950bdd2008-08-18 14:23:51 +10001095 .pmc_type = PPC_PMC_G4,
Andy Fleming555d97a2005-12-15 20:02:04 -06001096 .cpu_setup = __setup_cpu_745x,
Andy Fleming555d97a2005-12-15 20:02:04 -06001097 .oprofile_cpu_type = "ppc/7450",
Andy Whitcroft7a45fb12006-01-13 12:35:49 +00001098 .oprofile_type = PPC_OPROFILE_G4,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001099 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001100 .platform = "ppc7450",
Kumar Galabbde6302005-09-03 15:55:55 -07001101 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001102 { /* 82xx (8240, 8245, 8260 are all 603e cores) */
1103 .pvr_mask = 0x7fff0000,
1104 .pvr_value = 0x00810000,
1105 .cpu_name = "82xx",
Kumar Gala10b35d92005-09-23 14:08:58 -05001106 .cpu_features = CPU_FTRS_82XX,
Stephen Rothwell49209602005-10-12 15:55:09 +10001107 .cpu_user_features = COMMON_USER,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001108 .mmu_features = 0,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001109 .icache_bsize = 32,
1110 .dcache_bsize = 32,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001111 .cpu_setup = __setup_cpu_603,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001112 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001113 .platform = "ppc603",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001114 },
1115 { /* All G2_LE (603e core, plus some) have the same pvr */
1116 .pvr_mask = 0x7fff0000,
1117 .pvr_value = 0x00820000,
1118 .cpu_name = "G2_LE",
Kumar Gala10b35d92005-09-23 14:08:58 -05001119 .cpu_features = CPU_FTRS_G2_LE,
Stephen Rothwell49209602005-10-12 15:55:09 +10001120 .cpu_user_features = COMMON_USER,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001121 .mmu_features = MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001122 .icache_bsize = 32,
1123 .dcache_bsize = 32,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001124 .cpu_setup = __setup_cpu_603,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001125 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001126 .platform = "ppc603",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001127 },
Kim Phillips6c4a2502006-10-02 20:10:24 -05001128 { /* e300c1 (a 603e core, plus some) on 83xx */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001129 .pvr_mask = 0x7fff0000,
1130 .pvr_value = 0x00830000,
Kim Phillips6c4a2502006-10-02 20:10:24 -05001131 .cpu_name = "e300c1",
Kumar Gala10b35d92005-09-23 14:08:58 -05001132 .cpu_features = CPU_FTRS_E300,
Stephen Rothwell49209602005-10-12 15:55:09 +10001133 .cpu_user_features = COMMON_USER,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001134 .mmu_features = MMU_FTR_USE_HIGH_BATS,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001135 .icache_bsize = 32,
1136 .dcache_bsize = 32,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001137 .cpu_setup = __setup_cpu_603,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001138 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001139 .platform = "ppc603",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001140 },
Kim Phillips6c4a2502006-10-02 20:10:24 -05001141 { /* e300c2 (an e300c1 core, plus some, minus FPU) on 83xx */
1142 .pvr_mask = 0x7fff0000,
1143 .pvr_value = 0x00840000,
1144 .cpu_name = "e300c2",
Kim Phillipsaa42c692006-12-08 02:43:30 -06001145 .cpu_features = CPU_FTRS_E300C2,
Kim Phillips6c4a2502006-10-02 20:10:24 -05001146 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
Kumar Gala2319f122009-03-19 03:55:41 +00001147 .mmu_features = MMU_FTR_USE_HIGH_BATS |
1148 MMU_FTR_NEED_DTLB_SW_LRU,
Kim Phillips6c4a2502006-10-02 20:10:24 -05001149 .icache_bsize = 32,
1150 .dcache_bsize = 32,
1151 .cpu_setup = __setup_cpu_603,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001152 .machine_check = machine_check_generic,
Kim Phillips6c4a2502006-10-02 20:10:24 -05001153 .platform = "ppc603",
1154 },
Li Yanga58d5242007-10-19 19:38:42 +08001155 { /* e300c3 (e300c1, plus one IU, half cache size) on 83xx */
Scott Wood57933f82006-12-01 12:57:05 -06001156 .pvr_mask = 0x7fff0000,
1157 .pvr_value = 0x00850000,
1158 .cpu_name = "e300c3",
1159 .cpu_features = CPU_FTRS_E300,
1160 .cpu_user_features = COMMON_USER,
Kumar Gala2319f122009-03-19 03:55:41 +00001161 .mmu_features = MMU_FTR_USE_HIGH_BATS |
1162 MMU_FTR_NEED_DTLB_SW_LRU,
Scott Wood57933f82006-12-01 12:57:05 -06001163 .icache_bsize = 32,
1164 .dcache_bsize = 32,
1165 .cpu_setup = __setup_cpu_603,
Andy Fleming1347a2c12008-02-04 18:28:07 -06001166 .num_pmcs = 4,
1167 .oprofile_cpu_type = "ppc/e300",
1168 .oprofile_type = PPC_OPROFILE_FSL_EMB,
Scott Wood57933f82006-12-01 12:57:05 -06001169 .platform = "ppc603",
1170 },
Li Yanga58d5242007-10-19 19:38:42 +08001171 { /* e300c4 (e300c1, plus one IU) */
1172 .pvr_mask = 0x7fff0000,
1173 .pvr_value = 0x00860000,
1174 .cpu_name = "e300c4",
1175 .cpu_features = CPU_FTRS_E300,
1176 .cpu_user_features = COMMON_USER,
Kumar Gala2319f122009-03-19 03:55:41 +00001177 .mmu_features = MMU_FTR_USE_HIGH_BATS |
1178 MMU_FTR_NEED_DTLB_SW_LRU,
Li Yanga58d5242007-10-19 19:38:42 +08001179 .icache_bsize = 32,
1180 .dcache_bsize = 32,
1181 .cpu_setup = __setup_cpu_603,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001182 .machine_check = machine_check_generic,
Andy Fleming1347a2c12008-02-04 18:28:07 -06001183 .num_pmcs = 4,
1184 .oprofile_cpu_type = "ppc/e300",
1185 .oprofile_type = PPC_OPROFILE_FSL_EMB,
Li Yanga58d5242007-10-19 19:38:42 +08001186 .platform = "ppc603",
1187 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001188 { /* default match, we assume split I/D cache & TB (non-601)... */
1189 .pvr_mask = 0x00000000,
1190 .pvr_value = 0x00000000,
1191 .cpu_name = "(generic PPC)",
Kumar Gala10b35d92005-09-23 14:08:58 -05001192 .cpu_features = CPU_FTRS_CLASSIC32,
Stephen Rothwell49209602005-10-12 15:55:09 +10001193 .cpu_user_features = COMMON_USER,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001194 .mmu_features = MMU_FTR_HPTE_TABLE,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001195 .icache_bsize = 32,
1196 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001197 .machine_check = machine_check_generic,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001198 .platform = "ppc603",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001199 },
1200#endif /* CLASSIC_PPC */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001201#ifdef CONFIG_8xx
1202 { /* 8xx */
1203 .pvr_mask = 0xffff0000,
1204 .pvr_value = 0x00500000,
1205 .cpu_name = "8xx",
1206 /* CPU_FTR_MAYBE_CAN_DOZE is possible,
1207 * if the 8xx code is there.... */
Kumar Gala10b35d92005-09-23 14:08:58 -05001208 .cpu_features = CPU_FTRS_8XX,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001209 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001210 .mmu_features = MMU_FTR_TYPE_8xx,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001211 .icache_bsize = 16,
1212 .dcache_bsize = 16,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001213 .platform = "ppc823",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001214 },
1215#endif /* CONFIG_8xx */
1216#ifdef CONFIG_40x
1217 { /* 403GC */
1218 .pvr_mask = 0xffffff00,
1219 .pvr_value = 0x00200200,
1220 .cpu_name = "403GC",
Kumar Gala10b35d92005-09-23 14:08:58 -05001221 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001222 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001223 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001224 .icache_bsize = 16,
1225 .dcache_bsize = 16,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001226 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001227 .platform = "ppc403",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001228 },
1229 { /* 403GCX */
1230 .pvr_mask = 0xffffff00,
1231 .pvr_value = 0x00201400,
1232 .cpu_name = "403GCX",
Kumar Gala10b35d92005-09-23 14:08:58 -05001233 .cpu_features = CPU_FTRS_40X,
Paul Mackerras98599012005-10-22 16:51:34 +10001234 .cpu_user_features = PPC_FEATURE_32 |
1235 PPC_FEATURE_HAS_MMU | PPC_FEATURE_NO_TB,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001236 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001237 .icache_bsize = 16,
1238 .dcache_bsize = 16,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001239 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001240 .platform = "ppc403",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001241 },
1242 { /* 403G ?? */
1243 .pvr_mask = 0xffff0000,
1244 .pvr_value = 0x00200000,
1245 .cpu_name = "403G ??",
Kumar Gala10b35d92005-09-23 14:08:58 -05001246 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001247 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001248 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001249 .icache_bsize = 16,
1250 .dcache_bsize = 16,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001251 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001252 .platform = "ppc403",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001253 },
1254 { /* 405GP */
1255 .pvr_mask = 0xffff0000,
1256 .pvr_value = 0x40110000,
1257 .cpu_name = "405GP",
Kumar Gala10b35d92005-09-23 14:08:58 -05001258 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001259 .cpu_user_features = PPC_FEATURE_32 |
1260 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001261 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001262 .icache_bsize = 32,
1263 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001264 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001265 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001266 },
1267 { /* STB 03xxx */
1268 .pvr_mask = 0xffff0000,
1269 .pvr_value = 0x40130000,
1270 .cpu_name = "STB03xxx",
Kumar Gala10b35d92005-09-23 14:08:58 -05001271 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001272 .cpu_user_features = PPC_FEATURE_32 |
1273 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001274 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001275 .icache_bsize = 32,
1276 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001277 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001278 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001279 },
1280 { /* STB 04xxx */
1281 .pvr_mask = 0xffff0000,
1282 .pvr_value = 0x41810000,
1283 .cpu_name = "STB04xxx",
Kumar Gala10b35d92005-09-23 14:08:58 -05001284 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001285 .cpu_user_features = PPC_FEATURE_32 |
1286 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001287 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001288 .icache_bsize = 32,
1289 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001290 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001291 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001292 },
1293 { /* NP405L */
1294 .pvr_mask = 0xffff0000,
1295 .pvr_value = 0x41610000,
1296 .cpu_name = "NP405L",
Kumar Gala10b35d92005-09-23 14:08:58 -05001297 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001298 .cpu_user_features = PPC_FEATURE_32 |
1299 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001300 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001301 .icache_bsize = 32,
1302 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001303 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001304 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001305 },
1306 { /* NP4GS3 */
1307 .pvr_mask = 0xffff0000,
1308 .pvr_value = 0x40B10000,
1309 .cpu_name = "NP4GS3",
Kumar Gala10b35d92005-09-23 14:08:58 -05001310 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001311 .cpu_user_features = PPC_FEATURE_32 |
1312 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001313 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001314 .icache_bsize = 32,
1315 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001316 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001317 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001318 },
1319 { /* NP405H */
1320 .pvr_mask = 0xffff0000,
1321 .pvr_value = 0x41410000,
1322 .cpu_name = "NP405H",
Kumar Gala10b35d92005-09-23 14:08:58 -05001323 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001324 .cpu_user_features = PPC_FEATURE_32 |
1325 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001326 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001327 .icache_bsize = 32,
1328 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001329 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001330 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001331 },
1332 { /* 405GPr */
1333 .pvr_mask = 0xffff0000,
1334 .pvr_value = 0x50910000,
1335 .cpu_name = "405GPr",
Kumar Gala10b35d92005-09-23 14:08:58 -05001336 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001337 .cpu_user_features = PPC_FEATURE_32 |
1338 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001339 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001340 .icache_bsize = 32,
1341 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001342 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001343 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001344 },
1345 { /* STBx25xx */
1346 .pvr_mask = 0xffff0000,
1347 .pvr_value = 0x51510000,
1348 .cpu_name = "STBx25xx",
Kumar Gala10b35d92005-09-23 14:08:58 -05001349 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001350 .cpu_user_features = PPC_FEATURE_32 |
1351 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001352 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001353 .icache_bsize = 32,
1354 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001355 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001356 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001357 },
1358 { /* 405LP */
1359 .pvr_mask = 0xffff0000,
1360 .pvr_value = 0x41F10000,
1361 .cpu_name = "405LP",
Kumar Gala10b35d92005-09-23 14:08:58 -05001362 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001363 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001364 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001365 .icache_bsize = 32,
1366 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001367 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001368 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001369 },
1370 { /* Xilinx Virtex-II Pro */
Grant C. Likely72646c72006-01-19 01:13:20 -07001371 .pvr_mask = 0xfffff000,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001372 .pvr_value = 0x20010000,
1373 .cpu_name = "Virtex-II Pro",
Kumar Gala10b35d92005-09-23 14:08:58 -05001374 .cpu_features = CPU_FTRS_40X,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001375 .cpu_user_features = PPC_FEATURE_32 |
1376 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001377 .mmu_features = MMU_FTR_TYPE_40x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001378 .icache_bsize = 32,
1379 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001380 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001381 .platform = "ppc405",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001382 },
Grant C. Likely72646c72006-01-19 01:13:20 -07001383 { /* Xilinx Virtex-4 FX */
1384 .pvr_mask = 0xfffff000,
1385 .pvr_value = 0x20011000,
1386 .cpu_name = "Virtex-4 FX",
1387 .cpu_features = CPU_FTRS_40X,
1388 .cpu_user_features = PPC_FEATURE_32 |
1389 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001390 .mmu_features = MMU_FTR_TYPE_40x,
Grant C. Likely72646c72006-01-19 01:13:20 -07001391 .icache_bsize = 32,
1392 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001393 .machine_check = machine_check_4xx,
Peter Bergner838fdb42006-09-14 14:18:38 -05001394 .platform = "ppc405",
Grant C. Likely72646c72006-01-19 01:13:20 -07001395 },
Eugene Suroveginad95d602005-06-07 13:22:09 -07001396 { /* 405EP */
1397 .pvr_mask = 0xffff0000,
1398 .pvr_value = 0x51210000,
1399 .cpu_name = "405EP",
Kumar Gala10b35d92005-09-23 14:08:58 -05001400 .cpu_features = CPU_FTRS_40X,
Eugene Suroveginad95d602005-06-07 13:22:09 -07001401 .cpu_user_features = PPC_FEATURE_32 |
1402 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001403 .mmu_features = MMU_FTR_TYPE_40x,
Eugene Suroveginad95d602005-06-07 13:22:09 -07001404 .icache_bsize = 32,
1405 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001406 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001407 .platform = "ppc405",
Eugene Suroveginad95d602005-06-07 13:22:09 -07001408 },
Lee Nipperff349102010-07-09 01:17:16 +00001409 { /* 405EX Rev. A/B with Security */
1410 .pvr_mask = 0xffff000f,
1411 .pvr_value = 0x12910007,
1412 .cpu_name = "405EX Rev. A/B",
Stefan Roese5d8476c2007-10-11 22:08:14 +10001413 .cpu_features = CPU_FTRS_40X,
1414 .cpu_user_features = PPC_FEATURE_32 |
1415 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001416 .mmu_features = MMU_FTR_TYPE_40x,
Stefan Roese5d8476c2007-10-11 22:08:14 +10001417 .icache_bsize = 32,
1418 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001419 .machine_check = machine_check_4xx,
Stefan Roese5d8476c2007-10-11 22:08:14 +10001420 .platform = "ppc405",
1421 },
Lee Nipperff349102010-07-09 01:17:16 +00001422 { /* 405EX Rev. C without Security */
1423 .pvr_mask = 0xffff000f,
1424 .pvr_value = 0x1291000d,
1425 .cpu_name = "405EX Rev. C",
1426 .cpu_features = CPU_FTRS_40X,
1427 .cpu_user_features = PPC_FEATURE_32 |
1428 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1429 .mmu_features = MMU_FTR_TYPE_40x,
1430 .icache_bsize = 32,
1431 .dcache_bsize = 32,
1432 .machine_check = machine_check_4xx,
1433 .platform = "ppc405",
1434 },
1435 { /* 405EX Rev. C with Security */
1436 .pvr_mask = 0xffff000f,
1437 .pvr_value = 0x1291000f,
1438 .cpu_name = "405EX Rev. C",
1439 .cpu_features = CPU_FTRS_40X,
1440 .cpu_user_features = PPC_FEATURE_32 |
1441 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1442 .mmu_features = MMU_FTR_TYPE_40x,
1443 .icache_bsize = 32,
1444 .dcache_bsize = 32,
1445 .machine_check = machine_check_4xx,
1446 .platform = "ppc405",
1447 },
1448 { /* 405EX Rev. D without Security */
1449 .pvr_mask = 0xffff000f,
1450 .pvr_value = 0x12910003,
1451 .cpu_name = "405EX Rev. D",
1452 .cpu_features = CPU_FTRS_40X,
1453 .cpu_user_features = PPC_FEATURE_32 |
1454 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1455 .mmu_features = MMU_FTR_TYPE_40x,
1456 .icache_bsize = 32,
1457 .dcache_bsize = 32,
1458 .machine_check = machine_check_4xx,
1459 .platform = "ppc405",
1460 },
1461 { /* 405EX Rev. D with Security */
1462 .pvr_mask = 0xffff000f,
1463 .pvr_value = 0x12910005,
1464 .cpu_name = "405EX Rev. D",
1465 .cpu_features = CPU_FTRS_40X,
1466 .cpu_user_features = PPC_FEATURE_32 |
1467 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1468 .mmu_features = MMU_FTR_TYPE_40x,
1469 .icache_bsize = 32,
1470 .dcache_bsize = 32,
1471 .machine_check = machine_check_4xx,
1472 .platform = "ppc405",
1473 },
1474 { /* 405EXr Rev. A/B without Security */
1475 .pvr_mask = 0xffff000f,
1476 .pvr_value = 0x12910001,
1477 .cpu_name = "405EXr Rev. A/B",
1478 .cpu_features = CPU_FTRS_40X,
1479 .cpu_user_features = PPC_FEATURE_32 |
1480 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1481 .mmu_features = MMU_FTR_TYPE_40x,
1482 .icache_bsize = 32,
1483 .dcache_bsize = 32,
1484 .machine_check = machine_check_4xx,
1485 .platform = "ppc405",
1486 },
1487 { /* 405EXr Rev. C without Security */
1488 .pvr_mask = 0xffff000f,
1489 .pvr_value = 0x12910009,
1490 .cpu_name = "405EXr Rev. C",
1491 .cpu_features = CPU_FTRS_40X,
1492 .cpu_user_features = PPC_FEATURE_32 |
1493 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1494 .mmu_features = MMU_FTR_TYPE_40x,
1495 .icache_bsize = 32,
1496 .dcache_bsize = 32,
1497 .machine_check = machine_check_4xx,
1498 .platform = "ppc405",
1499 },
1500 { /* 405EXr Rev. C with Security */
1501 .pvr_mask = 0xffff000f,
1502 .pvr_value = 0x1291000b,
1503 .cpu_name = "405EXr Rev. C",
1504 .cpu_features = CPU_FTRS_40X,
1505 .cpu_user_features = PPC_FEATURE_32 |
1506 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1507 .mmu_features = MMU_FTR_TYPE_40x,
1508 .icache_bsize = 32,
1509 .dcache_bsize = 32,
1510 .machine_check = machine_check_4xx,
1511 .platform = "ppc405",
1512 },
1513 { /* 405EXr Rev. D without Security */
1514 .pvr_mask = 0xffff000f,
Stefan Roeseb676d842008-01-15 18:09:15 +11001515 .pvr_value = 0x12910000,
Lee Nipperff349102010-07-09 01:17:16 +00001516 .cpu_name = "405EXr Rev. D",
1517 .cpu_features = CPU_FTRS_40X,
1518 .cpu_user_features = PPC_FEATURE_32 |
1519 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1520 .mmu_features = MMU_FTR_TYPE_40x,
1521 .icache_bsize = 32,
1522 .dcache_bsize = 32,
1523 .machine_check = machine_check_4xx,
1524 .platform = "ppc405",
1525 },
1526 { /* 405EXr Rev. D with Security */
1527 .pvr_mask = 0xffff000f,
1528 .pvr_value = 0x12910002,
1529 .cpu_name = "405EXr Rev. D",
Stefan Roeseb676d842008-01-15 18:09:15 +11001530 .cpu_features = CPU_FTRS_40X,
1531 .cpu_user_features = PPC_FEATURE_32 |
1532 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001533 .mmu_features = MMU_FTR_TYPE_40x,
Stefan Roeseb676d842008-01-15 18:09:15 +11001534 .icache_bsize = 32,
1535 .dcache_bsize = 32,
1536 .machine_check = machine_check_4xx,
1537 .platform = "ppc405",
1538 },
Josh Boyerdf8f71f2008-10-09 08:56:38 -04001539 {
1540 /* 405EZ */
1541 .pvr_mask = 0xffff0000,
1542 .pvr_value = 0x41510000,
1543 .cpu_name = "405EZ",
1544 .cpu_features = CPU_FTRS_40X,
1545 .cpu_user_features = PPC_FEATURE_32 |
1546 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001547 .mmu_features = MMU_FTR_TYPE_40x,
Josh Boyerdf8f71f2008-10-09 08:56:38 -04001548 .icache_bsize = 32,
1549 .dcache_bsize = 32,
1550 .machine_check = machine_check_4xx,
1551 .platform = "ppc405",
1552 },
Tanmay Inamdard5b9ee72011-11-28 21:01:41 +00001553 { /* APM8018X */
1554 .pvr_mask = 0xffff0000,
1555 .pvr_value = 0x7ff11432,
1556 .cpu_name = "APM8018X",
1557 .cpu_features = CPU_FTRS_40X,
1558 .cpu_user_features = PPC_FEATURE_32 |
1559 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1560 .mmu_features = MMU_FTR_TYPE_40x,
1561 .icache_bsize = 32,
1562 .dcache_bsize = 32,
1563 .machine_check = machine_check_4xx,
1564 .platform = "ppc405",
1565 },
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001566 { /* default match */
1567 .pvr_mask = 0x00000000,
1568 .pvr_value = 0x00000000,
1569 .cpu_name = "(generic 40x PPC)",
1570 .cpu_features = CPU_FTRS_40X,
1571 .cpu_user_features = PPC_FEATURE_32 |
1572 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001573 .mmu_features = MMU_FTR_TYPE_40x,
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001574 .icache_bsize = 32,
1575 .dcache_bsize = 32,
1576 .machine_check = machine_check_4xx,
1577 .platform = "ppc405",
1578 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001579
1580#endif /* CONFIG_40x */
1581#ifdef CONFIG_44x
Matt Porterc9cf73a2005-07-31 22:34:52 -07001582 {
1583 .pvr_mask = 0xf0000fff,
1584 .pvr_value = 0x40000850,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001585 .cpu_name = "440GR Rev. A",
1586 .cpu_features = CPU_FTRS_44X,
1587 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001588 .mmu_features = MMU_FTR_TYPE_44x,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001589 .icache_bsize = 32,
1590 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001591 .machine_check = machine_check_4xx,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001592 .platform = "ppc440",
1593 },
1594 { /* Use logical PVR for 440EP (logical pvr = pvr | 0x8) */
1595 .pvr_mask = 0xf0000fff,
1596 .pvr_value = 0x40000858,
Matt Porterc9cf73a2005-07-31 22:34:52 -07001597 .cpu_name = "440EP Rev. A",
Kumar Gala10b35d92005-09-23 14:08:58 -05001598 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001599 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001600 .mmu_features = MMU_FTR_TYPE_44x,
Matt Porterc9cf73a2005-07-31 22:34:52 -07001601 .icache_bsize = 32,
1602 .dcache_bsize = 32,
Valentine Barshak81127532007-09-22 00:46:57 +10001603 .cpu_setup = __setup_cpu_440ep,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001604 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001605 .platform = "ppc440",
Matt Porterc9cf73a2005-07-31 22:34:52 -07001606 },
1607 {
1608 .pvr_mask = 0xf0000fff,
1609 .pvr_value = 0x400008d3,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001610 .cpu_name = "440GR Rev. B",
1611 .cpu_features = CPU_FTRS_44X,
1612 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001613 .mmu_features = MMU_FTR_TYPE_44x,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001614 .icache_bsize = 32,
1615 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001616 .machine_check = machine_check_4xx,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001617 .platform = "ppc440",
1618 },
Sean MacLennan3f8fc3e2008-01-10 07:25:58 +11001619 { /* Matches both physical and logical PVR for 440EP (logical pvr = pvr | 0x8) */
1620 .pvr_mask = 0xf0000ff7,
1621 .pvr_value = 0x400008d4,
1622 .cpu_name = "440EP Rev. C",
1623 .cpu_features = CPU_FTRS_44X,
1624 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001625 .mmu_features = MMU_FTR_TYPE_44x,
Sean MacLennan3f8fc3e2008-01-10 07:25:58 +11001626 .icache_bsize = 32,
1627 .dcache_bsize = 32,
1628 .cpu_setup = __setup_cpu_440ep,
1629 .machine_check = machine_check_4xx,
1630 .platform = "ppc440",
1631 },
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001632 { /* Use logical PVR for 440EP (logical pvr = pvr | 0x8) */
1633 .pvr_mask = 0xf0000fff,
1634 .pvr_value = 0x400008db,
Matt Porterc9cf73a2005-07-31 22:34:52 -07001635 .cpu_name = "440EP Rev. B",
Kumar Gala10b35d92005-09-23 14:08:58 -05001636 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001637 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001638 .mmu_features = MMU_FTR_TYPE_44x,
Matt Porterc9cf73a2005-07-31 22:34:52 -07001639 .icache_bsize = 32,
1640 .dcache_bsize = 32,
Valentine Barshak81127532007-09-22 00:46:57 +10001641 .cpu_setup = __setup_cpu_440ep,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001642 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001643 .platform = "ppc440",
Matt Porterc9cf73a2005-07-31 22:34:52 -07001644 },
Valentine Barshak15fc9932007-08-29 17:40:30 +04001645 { /* 440GRX */
1646 .pvr_mask = 0xf0000ffb,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001647 .pvr_value = 0x200008D0,
Valentine Barshak15fc9932007-08-29 17:40:30 +04001648 .cpu_name = "440GRX",
1649 .cpu_features = CPU_FTRS_44X,
1650 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001651 .mmu_features = MMU_FTR_TYPE_44x,
Valentine Barshak15fc9932007-08-29 17:40:30 +04001652 .icache_bsize = 32,
1653 .dcache_bsize = 32,
Valentine Barshak340ffd22007-09-22 00:50:09 +10001654 .cpu_setup = __setup_cpu_440grx,
Valentine Barshakb2be3b12007-12-22 03:22:23 +11001655 .machine_check = machine_check_440A,
Valentine Barshak340ffd22007-09-22 00:50:09 +10001656 .platform = "ppc440",
Valentine Barshak15fc9932007-08-29 17:40:30 +04001657 },
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001658 { /* Use logical PVR for 440EPx (logical pvr = pvr | 0x8) */
1659 .pvr_mask = 0xf0000ffb,
1660 .pvr_value = 0x200008D8,
1661 .cpu_name = "440EPX",
1662 .cpu_features = CPU_FTRS_44X,
1663 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001664 .mmu_features = MMU_FTR_TYPE_44x,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001665 .icache_bsize = 32,
1666 .dcache_bsize = 32,
1667 .cpu_setup = __setup_cpu_440epx,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001668 .machine_check = machine_check_440A,
Valentine Barshakd1dfc352007-10-26 04:16:40 +10001669 .platform = "ppc440",
1670 },
Stephen Rothwell49209602005-10-12 15:55:09 +10001671 { /* 440GP Rev. B */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001672 .pvr_mask = 0xf0000fff,
1673 .pvr_value = 0x40000440,
1674 .cpu_name = "440GP Rev. B",
Kumar Gala10b35d92005-09-23 14:08:58 -05001675 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001676 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001677 .mmu_features = MMU_FTR_TYPE_44x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001678 .icache_bsize = 32,
1679 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001680 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001681 .platform = "ppc440gp",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001682 },
Stephen Rothwell49209602005-10-12 15:55:09 +10001683 { /* 440GP Rev. C */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001684 .pvr_mask = 0xf0000fff,
1685 .pvr_value = 0x40000481,
1686 .cpu_name = "440GP Rev. C",
Kumar Gala10b35d92005-09-23 14:08:58 -05001687 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001688 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001689 .mmu_features = MMU_FTR_TYPE_44x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001690 .icache_bsize = 32,
1691 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001692 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001693 .platform = "ppc440gp",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001694 },
1695 { /* 440GX Rev. A */
1696 .pvr_mask = 0xf0000fff,
1697 .pvr_value = 0x50000850,
1698 .cpu_name = "440GX Rev. A",
Kumar Gala10b35d92005-09-23 14:08:58 -05001699 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001700 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001701 .mmu_features = MMU_FTR_TYPE_44x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001702 .icache_bsize = 32,
1703 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001704 .cpu_setup = __setup_cpu_440gx,
1705 .machine_check = machine_check_440A,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001706 .platform = "ppc440",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001707 },
1708 { /* 440GX Rev. B */
1709 .pvr_mask = 0xf0000fff,
1710 .pvr_value = 0x50000851,
1711 .cpu_name = "440GX Rev. B",
Kumar Gala10b35d92005-09-23 14:08:58 -05001712 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001713 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001714 .mmu_features = MMU_FTR_TYPE_44x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001715 .icache_bsize = 32,
1716 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001717 .cpu_setup = __setup_cpu_440gx,
1718 .machine_check = machine_check_440A,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001719 .platform = "ppc440",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001720 },
1721 { /* 440GX Rev. C */
1722 .pvr_mask = 0xf0000fff,
1723 .pvr_value = 0x50000892,
1724 .cpu_name = "440GX Rev. C",
Kumar Gala10b35d92005-09-23 14:08:58 -05001725 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001726 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001727 .mmu_features = MMU_FTR_TYPE_44x,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001728 .icache_bsize = 32,
1729 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001730 .cpu_setup = __setup_cpu_440gx,
1731 .machine_check = machine_check_440A,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001732 .platform = "ppc440",
Linus Torvalds1da177e2005-04-16 15:20:36 -07001733 },
Eugene Surovegin9149fb32005-09-03 15:55:40 -07001734 { /* 440GX Rev. F */
1735 .pvr_mask = 0xf0000fff,
1736 .pvr_value = 0x50000894,
1737 .cpu_name = "440GX Rev. F",
Kumar Gala10b35d92005-09-23 14:08:58 -05001738 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001739 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001740 .mmu_features = MMU_FTR_TYPE_44x,
Eugene Surovegin9149fb32005-09-03 15:55:40 -07001741 .icache_bsize = 32,
1742 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001743 .cpu_setup = __setup_cpu_440gx,
1744 .machine_check = machine_check_440A,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001745 .platform = "ppc440",
Eugene Surovegin9149fb32005-09-03 15:55:40 -07001746 },
Matt Porter656de7e2005-09-03 15:55:42 -07001747 { /* 440SP Rev. A */
Roland Dreier333e6152007-06-16 05:36:32 +10001748 .pvr_mask = 0xfff00fff,
1749 .pvr_value = 0x53200891,
Matt Porter656de7e2005-09-03 15:55:42 -07001750 .cpu_name = "440SP Rev. A",
Kumar Gala10b35d92005-09-23 14:08:58 -05001751 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001752 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001753 .mmu_features = MMU_FTR_TYPE_44x,
Matt Porter656de7e2005-09-03 15:55:42 -07001754 .icache_bsize = 32,
1755 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001756 .machine_check = machine_check_4xx,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001757 .platform = "ppc440",
Matt Porter656de7e2005-09-03 15:55:42 -07001758 },
Roland Dreierb0f7b8b2005-11-07 00:58:13 -08001759 { /* 440SPe Rev. A */
Roland Dreier333e6152007-06-16 05:36:32 +10001760 .pvr_mask = 0xfff00fff,
1761 .pvr_value = 0x53400890,
1762 .cpu_name = "440SPe Rev. A",
1763 .cpu_features = CPU_FTRS_44X,
1764 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001765 .mmu_features = MMU_FTR_TYPE_44x,
Roland Dreier333e6152007-06-16 05:36:32 +10001766 .icache_bsize = 32,
1767 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001768 .cpu_setup = __setup_cpu_440spe,
1769 .machine_check = machine_check_440A,
Roland Dreier333e6152007-06-16 05:36:32 +10001770 .platform = "ppc440",
1771 },
1772 { /* 440SPe Rev. B */
1773 .pvr_mask = 0xfff00fff,
1774 .pvr_value = 0x53400891,
1775 .cpu_name = "440SPe Rev. B",
Kumar Galaa147c582006-12-08 02:34:38 -06001776 .cpu_features = CPU_FTRS_44X,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001777 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001778 .mmu_features = MMU_FTR_TYPE_44x,
Roland Dreierb0f7b8b2005-11-07 00:58:13 -08001779 .icache_bsize = 32,
1780 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001781 .cpu_setup = __setup_cpu_440spe,
1782 .machine_check = machine_check_440A,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001783 .platform = "ppc440",
Roland Dreierb0f7b8b2005-11-07 00:58:13 -08001784 },
John Linn23e72372008-07-01 09:42:07 -07001785 { /* 440 in Xilinx Virtex-5 FXT */
1786 .pvr_mask = 0xfffffff0,
1787 .pvr_value = 0x7ff21910,
1788 .cpu_name = "440 in Virtex-5 FXT",
1789 .cpu_features = CPU_FTRS_44X,
1790 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001791 .mmu_features = MMU_FTR_TYPE_44x,
John Linn23e72372008-07-01 09:42:07 -07001792 .icache_bsize = 32,
1793 .dcache_bsize = 32,
Grant Likely640d17d2008-12-04 05:39:55 +00001794 .cpu_setup = __setup_cpu_440x5,
1795 .machine_check = machine_check_440A,
John Linn23e72372008-07-01 09:42:07 -07001796 .platform = "ppc440",
1797 },
Stefan Roese464076a2008-02-24 08:07:41 +11001798 { /* 460EX */
Stefan Roese20d70342009-07-29 07:04:46 +00001799 .pvr_mask = 0xffff0006,
Stefan Roese464076a2008-02-24 08:07:41 +11001800 .pvr_value = 0x13020002,
1801 .cpu_name = "460EX",
Benjamin Herrenschmidt6d2170b2008-12-18 19:13:22 +00001802 .cpu_features = CPU_FTRS_440x6,
Stefan Roese464076a2008-02-24 08:07:41 +11001803 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001804 .mmu_features = MMU_FTR_TYPE_44x,
Stefan Roese464076a2008-02-24 08:07:41 +11001805 .icache_bsize = 32,
1806 .dcache_bsize = 32,
1807 .cpu_setup = __setup_cpu_460ex,
1808 .machine_check = machine_check_440A,
1809 .platform = "ppc440",
1810 },
Stefan Roese20d70342009-07-29 07:04:46 +00001811 { /* 460EX Rev B */
1812 .pvr_mask = 0xffff0007,
1813 .pvr_value = 0x13020004,
1814 .cpu_name = "460EX Rev. B",
1815 .cpu_features = CPU_FTRS_440x6,
1816 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1817 .mmu_features = MMU_FTR_TYPE_44x,
1818 .icache_bsize = 32,
1819 .dcache_bsize = 32,
1820 .cpu_setup = __setup_cpu_460ex,
1821 .machine_check = machine_check_440A,
1822 .platform = "ppc440",
1823 },
Stefan Roese464076a2008-02-24 08:07:41 +11001824 { /* 460GT */
Stefan Roese20d70342009-07-29 07:04:46 +00001825 .pvr_mask = 0xffff0006,
Stefan Roese464076a2008-02-24 08:07:41 +11001826 .pvr_value = 0x13020000,
1827 .cpu_name = "460GT",
Benjamin Herrenschmidt6d2170b2008-12-18 19:13:22 +00001828 .cpu_features = CPU_FTRS_440x6,
Josh Boyer939e6222008-06-11 07:52:40 -04001829 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001830 .mmu_features = MMU_FTR_TYPE_44x,
Stefan Roese464076a2008-02-24 08:07:41 +11001831 .icache_bsize = 32,
1832 .dcache_bsize = 32,
Josh Boyer939e6222008-06-11 07:52:40 -04001833 .cpu_setup = __setup_cpu_460gt,
Stefan Roese464076a2008-02-24 08:07:41 +11001834 .machine_check = machine_check_440A,
1835 .platform = "ppc440",
1836 },
Stefan Roese20d70342009-07-29 07:04:46 +00001837 { /* 460GT Rev B */
1838 .pvr_mask = 0xffff0007,
1839 .pvr_value = 0x13020005,
1840 .cpu_name = "460GT Rev. B",
1841 .cpu_features = CPU_FTRS_440x6,
1842 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1843 .mmu_features = MMU_FTR_TYPE_44x,
1844 .icache_bsize = 32,
1845 .dcache_bsize = 32,
1846 .cpu_setup = __setup_cpu_460gt,
1847 .machine_check = machine_check_440A,
1848 .platform = "ppc440",
1849 },
Madhulika Madishetty6c712092009-02-05 13:31:36 +00001850 { /* 460SX */
1851 .pvr_mask = 0xffffff00,
1852 .pvr_value = 0x13541800,
1853 .cpu_name = "460SX",
1854 .cpu_features = CPU_FTRS_44X,
1855 .cpu_user_features = COMMON_USER_BOOKE,
1856 .mmu_features = MMU_FTR_TYPE_44x,
1857 .icache_bsize = 32,
1858 .dcache_bsize = 32,
1859 .cpu_setup = __setup_cpu_460sx,
1860 .machine_check = machine_check_440A,
1861 .platform = "ppc440",
1862 },
Tirumala Marri6edc3232010-09-13 13:26:11 +00001863 { /* 464 in APM821xx */
Vinh Nguyen Huu Tuong7c801162011-12-20 02:43:34 +00001864 .pvr_mask = 0xfffffff0,
Tirumala Marri6edc3232010-09-13 13:26:11 +00001865 .pvr_value = 0x12C41C80,
1866 .cpu_name = "APM821XX",
1867 .cpu_features = CPU_FTRS_44X,
1868 .cpu_user_features = COMMON_USER_BOOKE |
1869 PPC_FEATURE_HAS_FPU,
1870 .mmu_features = MMU_FTR_TYPE_44x,
1871 .icache_bsize = 32,
1872 .dcache_bsize = 32,
1873 .cpu_setup = __setup_cpu_apm821xx,
1874 .machine_check = machine_check_440A,
1875 .platform = "ppc440",
1876 },
Dave Kleikampc48d0db2011-01-26 06:17:58 +00001877 { /* 476 DD2 core */
1878 .pvr_mask = 0xffffffff,
1879 .pvr_value = 0x11a52080,
Dave Kleikampe7f75ad2010-03-05 10:43:12 +00001880 .cpu_name = "476",
Dave Kleikampc48d0db2011-01-26 06:17:58 +00001881 .cpu_features = CPU_FTRS_47X | CPU_FTR_476_DD2,
Dave Kleikampe7f75ad2010-03-05 10:43:12 +00001882 .cpu_user_features = COMMON_USER_BOOKE |
1883 PPC_FEATURE_HAS_FPU,
1884 .mmu_features = MMU_FTR_TYPE_47x |
1885 MMU_FTR_USE_TLBIVAX_BCAST | MMU_FTR_LOCK_BCAST_INVAL,
1886 .icache_bsize = 32,
1887 .dcache_bsize = 128,
Dave Kleikampfc5e7092010-03-05 03:43:18 +00001888 .machine_check = machine_check_47x,
Dave Kleikampe7f75ad2010-03-05 10:43:12 +00001889 .platform = "ppc470",
1890 },
Tony Breedsdf777bd2011-11-30 21:39:23 +00001891 { /* 476fpe */
1892 .pvr_mask = 0xffff0000,
1893 .pvr_value = 0x7ff50000,
1894 .cpu_name = "476fpe",
1895 .cpu_features = CPU_FTRS_47X | CPU_FTR_476_DD2,
1896 .cpu_user_features = COMMON_USER_BOOKE |
1897 PPC_FEATURE_HAS_FPU,
1898 .mmu_features = MMU_FTR_TYPE_47x |
1899 MMU_FTR_USE_TLBIVAX_BCAST | MMU_FTR_LOCK_BCAST_INVAL,
1900 .icache_bsize = 32,
1901 .dcache_bsize = 128,
1902 .machine_check = machine_check_47x,
1903 .platform = "ppc470",
1904 },
Torez Smithb4e8c8d2010-03-05 10:45:54 +00001905 { /* 476 iss */
1906 .pvr_mask = 0xffff0000,
1907 .pvr_value = 0x00050000,
1908 .cpu_name = "476",
1909 .cpu_features = CPU_FTRS_47X,
1910 .cpu_user_features = COMMON_USER_BOOKE |
1911 PPC_FEATURE_HAS_FPU,
Torez Smithb4e8c8d2010-03-05 10:45:54 +00001912 .mmu_features = MMU_FTR_TYPE_47x |
1913 MMU_FTR_USE_TLBIVAX_BCAST | MMU_FTR_LOCK_BCAST_INVAL,
1914 .icache_bsize = 32,
1915 .dcache_bsize = 128,
1916 .machine_check = machine_check_47x,
1917 .platform = "ppc470",
1918 },
Dave Kleikampc48d0db2011-01-26 06:17:58 +00001919 { /* 476 others */
1920 .pvr_mask = 0xffff0000,
1921 .pvr_value = 0x11a50000,
1922 .cpu_name = "476",
1923 .cpu_features = CPU_FTRS_47X,
1924 .cpu_user_features = COMMON_USER_BOOKE |
1925 PPC_FEATURE_HAS_FPU,
1926 .mmu_features = MMU_FTR_TYPE_47x |
1927 MMU_FTR_USE_TLBIVAX_BCAST | MMU_FTR_LOCK_BCAST_INVAL,
1928 .icache_bsize = 32,
1929 .dcache_bsize = 128,
1930 .machine_check = machine_check_47x,
1931 .platform = "ppc470",
1932 },
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001933 { /* default match */
1934 .pvr_mask = 0x00000000,
1935 .pvr_value = 0x00000000,
1936 .cpu_name = "(generic 44x PPC)",
1937 .cpu_features = CPU_FTRS_44X,
1938 .cpu_user_features = COMMON_USER_BOOKE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001939 .mmu_features = MMU_FTR_TYPE_44x,
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001940 .icache_bsize = 32,
1941 .dcache_bsize = 32,
1942 .machine_check = machine_check_4xx,
1943 .platform = "ppc440",
1944 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001945#endif /* CONFIG_44x */
Josh Boyere3e414b2007-12-24 08:44:47 -06001946#ifdef CONFIG_E200
Stephen Rothwell49209602005-10-12 15:55:09 +10001947 { /* e200z5 */
Kumar Gala33d9e9b2005-06-25 14:54:37 -07001948 .pvr_mask = 0xfff00000,
1949 .pvr_value = 0x81000000,
1950 .cpu_name = "e200z5",
1951 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
Kumar Gala10b35d92005-09-23 14:08:58 -05001952 .cpu_features = CPU_FTRS_E200,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001953 .cpu_user_features = COMMON_USER_BOOKE |
1954 PPC_FEATURE_HAS_EFP_SINGLE |
Kumar Gala33d9e9b2005-06-25 14:54:37 -07001955 PPC_FEATURE_UNIFIED_CACHE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001956 .mmu_features = MMU_FTR_TYPE_FSL_E,
Kumar Gala33d9e9b2005-06-25 14:54:37 -07001957 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001958 .machine_check = machine_check_e200,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001959 .platform = "ppc5554",
Kumar Gala33d9e9b2005-06-25 14:54:37 -07001960 },
Stephen Rothwell49209602005-10-12 15:55:09 +10001961 { /* e200z6 */
Kumar Gala33d9e9b2005-06-25 14:54:37 -07001962 .pvr_mask = 0xfff00000,
1963 .pvr_value = 0x81100000,
1964 .cpu_name = "e200z6",
1965 /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */
Kumar Gala10b35d92005-09-23 14:08:58 -05001966 .cpu_features = CPU_FTRS_E200,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001967 .cpu_user_features = COMMON_USER_BOOKE |
Kumar Gala5e14d212007-09-13 01:44:20 -05001968 PPC_FEATURE_HAS_SPE_COMP |
1969 PPC_FEATURE_HAS_EFP_SINGLE_COMP |
Kumar Gala33d9e9b2005-06-25 14:54:37 -07001970 PPC_FEATURE_UNIFIED_CACHE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001971 .mmu_features = MMU_FTR_TYPE_FSL_E,
Kumar Gala33d9e9b2005-06-25 14:54:37 -07001972 .dcache_bsize = 32,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11001973 .machine_check = machine_check_e200,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001974 .platform = "ppc5554",
Kumar Gala33d9e9b2005-06-25 14:54:37 -07001975 },
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001976 { /* default match */
1977 .pvr_mask = 0x00000000,
1978 .pvr_value = 0x00000000,
1979 .cpu_name = "(generic E200 PPC)",
1980 .cpu_features = CPU_FTRS_E200,
1981 .cpu_user_features = COMMON_USER_BOOKE |
1982 PPC_FEATURE_HAS_EFP_SINGLE |
1983 PPC_FEATURE_UNIFIED_CACHE,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00001984 .mmu_features = MMU_FTR_TYPE_FSL_E,
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001985 .dcache_bsize = 32,
Kumar Gala105c31d2009-01-08 08:31:20 -06001986 .cpu_setup = __setup_cpu_e200,
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001987 .machine_check = machine_check_e200,
1988 .platform = "ppc5554",
Paul Mackerras516c8be2008-05-12 14:20:35 +10001989 }
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001990#endif /* CONFIG_E200 */
Kumar Gala4490c062010-10-08 08:32:11 -05001991#endif /* CONFIG_PPC32 */
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10001992#ifdef CONFIG_E500
Kumar Gala4490c062010-10-08 08:32:11 -05001993#ifdef CONFIG_PPC32
Stephen Rothwell49209602005-10-12 15:55:09 +10001994 { /* e500 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001995 .pvr_mask = 0xffff0000,
1996 .pvr_value = 0x80200000,
1997 .cpu_name = "e500",
Kumar Gala10b35d92005-09-23 14:08:58 -05001998 .cpu_features = CPU_FTRS_E500,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11001999 .cpu_user_features = COMMON_USER_BOOKE |
Kumar Gala5e14d212007-09-13 01:44:20 -05002000 PPC_FEATURE_HAS_SPE_COMP |
2001 PPC_FEATURE_HAS_EFP_SINGLE_COMP,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00002002 .mmu_features = MMU_FTR_TYPE_FSL_E,
Linus Torvalds1da177e2005-04-16 15:20:36 -07002003 .icache_bsize = 32,
2004 .dcache_bsize = 32,
2005 .num_pmcs = 4,
Andy Fleming555d97a2005-12-15 20:02:04 -06002006 .oprofile_cpu_type = "ppc/e500",
Andy Fleming39aef682008-02-04 18:27:55 -06002007 .oprofile_type = PPC_OPROFILE_FSL_EMB,
Kumar Gala105c31d2009-01-08 08:31:20 -06002008 .cpu_setup = __setup_cpu_e500v1,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11002009 .machine_check = machine_check_e500,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11002010 .platform = "ppc8540",
Linus Torvalds1da177e2005-04-16 15:20:36 -07002011 },
Stephen Rothwell49209602005-10-12 15:55:09 +10002012 { /* e500v2 */
Kumar Gala5b37b702005-06-21 17:15:18 -07002013 .pvr_mask = 0xffff0000,
2014 .pvr_value = 0x80210000,
2015 .cpu_name = "e500v2",
Kumar Gala10b35d92005-09-23 14:08:58 -05002016 .cpu_features = CPU_FTRS_E500_2,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11002017 .cpu_user_features = COMMON_USER_BOOKE |
Kumar Gala5e14d212007-09-13 01:44:20 -05002018 PPC_FEATURE_HAS_SPE_COMP |
2019 PPC_FEATURE_HAS_EFP_SINGLE_COMP |
2020 PPC_FEATURE_HAS_EFP_DOUBLE_COMP,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00002021 .mmu_features = MMU_FTR_TYPE_FSL_E | MMU_FTR_BIG_PHYS,
Kumar Gala5b37b702005-06-21 17:15:18 -07002022 .icache_bsize = 32,
2023 .dcache_bsize = 32,
2024 .num_pmcs = 4,
Andy Fleming555d97a2005-12-15 20:02:04 -06002025 .oprofile_cpu_type = "ppc/e500",
Andy Fleming39aef682008-02-04 18:27:55 -06002026 .oprofile_type = PPC_OPROFILE_FSL_EMB,
Kumar Gala105c31d2009-01-08 08:31:20 -06002027 .cpu_setup = __setup_cpu_e500v2,
Benjamin Herrenschmidt47c0bd12007-12-21 15:39:21 +11002028 .machine_check = machine_check_e500,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11002029 .platform = "ppc8548",
Kumar Gala5b37b702005-06-21 17:15:18 -07002030 },
Kumar Gala3dfa8772008-06-16 09:41:32 -05002031 { /* e500mc */
2032 .pvr_mask = 0xffff0000,
2033 .pvr_value = 0x80230000,
2034 .cpu_name = "e500mc",
Kumar Gala3dfa8772008-06-16 09:41:32 -05002035 .cpu_features = CPU_FTRS_E500MC,
2036 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Kumar Galac3071952009-02-10 22:26:06 -06002037 .mmu_features = MMU_FTR_TYPE_FSL_E | MMU_FTR_BIG_PHYS |
Kumar Gala323d23a2009-04-23 08:51:22 -05002038 MMU_FTR_USE_TLBILX,
Kumar Gala3dfa8772008-06-16 09:41:32 -05002039 .icache_bsize = 64,
2040 .dcache_bsize = 64,
2041 .num_pmcs = 4,
Scott Wooda1110652010-02-25 18:09:45 -06002042 .oprofile_cpu_type = "ppc/e500mc",
Kumar Gala3dfa8772008-06-16 09:41:32 -05002043 .oprofile_type = PPC_OPROFILE_FSL_EMB,
Kumar Gala105c31d2009-01-08 08:31:20 -06002044 .cpu_setup = __setup_cpu_e500mc,
Scott Woodfe04b112010-04-08 00:38:22 -05002045 .machine_check = machine_check_e500mc,
Kumar Gala3dfa8772008-06-16 09:41:32 -05002046 .platform = "ppce500mc",
2047 },
Kumar Gala4490c062010-10-08 08:32:11 -05002048#endif /* CONFIG_PPC32 */
2049 { /* e5500 */
2050 .pvr_mask = 0xffff0000,
2051 .pvr_value = 0x80240000,
2052 .cpu_name = "e5500",
Kumar Gala11ed0db2011-04-06 00:11:06 -05002053 .cpu_features = CPU_FTRS_E5500,
Kumar Galafb9be232011-06-02 11:26:13 -05002054 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
Kumar Gala4490c062010-10-08 08:32:11 -05002055 .mmu_features = MMU_FTR_TYPE_FSL_E | MMU_FTR_BIG_PHYS |
2056 MMU_FTR_USE_TLBILX,
2057 .icache_bsize = 64,
2058 .dcache_bsize = 64,
2059 .num_pmcs = 4,
2060 .oprofile_cpu_type = "ppc/e500mc",
2061 .oprofile_type = PPC_OPROFILE_FSL_EMB,
2062 .cpu_setup = __setup_cpu_e5500,
Varun Sethi2c71b0c2012-07-09 18:28:21 +05302063#ifndef CONFIG_PPC32
Kumar Gala4490c062010-10-08 08:32:11 -05002064 .cpu_restore = __restore_cpu_e5500,
Varun Sethi2c71b0c2012-07-09 18:28:21 +05302065#endif
Kumar Gala4490c062010-10-08 08:32:11 -05002066 .machine_check = machine_check_e500mc,
2067 .platform = "ppce5500",
2068 },
Kumar Gala10241842011-11-06 11:51:07 -06002069 { /* e6500 */
2070 .pvr_mask = 0xffff0000,
2071 .pvr_value = 0x80400000,
2072 .cpu_name = "e6500",
2073 .cpu_features = CPU_FTRS_E6500,
Kumar Galacd66cc22012-09-07 15:57:17 -05002074 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU |
2075 PPC_FEATURE_HAS_ALTIVEC_COMP,
Kumar Gala10241842011-11-06 11:51:07 -06002076 .mmu_features = MMU_FTR_TYPE_FSL_E | MMU_FTR_BIG_PHYS |
2077 MMU_FTR_USE_TLBILX,
2078 .icache_bsize = 64,
2079 .dcache_bsize = 64,
2080 .num_pmcs = 4,
2081 .oprofile_cpu_type = "ppc/e6500",
2082 .oprofile_type = PPC_OPROFILE_FSL_EMB,
Kumar Galacd66cc22012-09-07 15:57:17 -05002083 .cpu_setup = __setup_cpu_e6500,
Varun Sethi2c71b0c2012-07-09 18:28:21 +05302084#ifndef CONFIG_PPC32
Kumar Galacd66cc22012-09-07 15:57:17 -05002085 .cpu_restore = __restore_cpu_e6500,
Varun Sethi2c71b0c2012-07-09 18:28:21 +05302086#endif
Kumar Gala10241842011-11-06 11:51:07 -06002087 .machine_check = machine_check_e500mc,
2088 .platform = "ppce6500",
2089 },
Kumar Gala4490c062010-10-08 08:32:11 -05002090#ifdef CONFIG_PPC32
Linus Torvalds1da177e2005-04-16 15:20:36 -07002091 { /* default match */
2092 .pvr_mask = 0x00000000,
2093 .pvr_value = 0x00000000,
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10002094 .cpu_name = "(generic E500 PPC)",
2095 .cpu_features = CPU_FTRS_E500,
2096 .cpu_user_features = COMMON_USER_BOOKE |
2097 PPC_FEATURE_HAS_SPE_COMP |
2098 PPC_FEATURE_HAS_EFP_SINGLE_COMP,
Benjamin Herrenschmidt7c03d652008-12-18 19:13:32 +00002099 .mmu_features = MMU_FTR_TYPE_FSL_E,
Linus Torvalds1da177e2005-04-16 15:20:36 -07002100 .icache_bsize = 32,
2101 .dcache_bsize = 32,
Benjamin Herrenschmidt76bc080e2008-05-05 15:22:27 +10002102 .machine_check = machine_check_e500,
Paul Mackerras80f15dc2006-01-14 10:11:39 +11002103 .platform = "powerpc",
Paul Mackerras516c8be2008-05-12 14:20:35 +10002104 }
Stephen Rothwell49209602005-10-12 15:55:09 +10002105#endif /* CONFIG_PPC32 */
Kumar Gala4490c062010-10-08 08:32:11 -05002106#endif /* CONFIG_E500 */
Kumar Galaf45c4482009-08-18 19:08:30 +00002107
Benjamin Herrenschmidt76b4eda2011-04-14 22:32:01 +00002108#ifdef CONFIG_PPC_A2
2109 { /* Standard A2 (>= DD2) + FPU core */
2110 .pvr_mask = 0xffff0000,
2111 .pvr_value = 0x00480000,
2112 .cpu_name = "A2 (>= DD2)",
2113 .cpu_features = CPU_FTRS_A2,
2114 .cpu_user_features = COMMON_USER_PPC64,
Matt Evans44ae3ab2011-04-06 19:48:50 +00002115 .mmu_features = MMU_FTRS_A2,
Benjamin Herrenschmidt76b4eda2011-04-14 22:32:01 +00002116 .icache_bsize = 64,
2117 .dcache_bsize = 64,
2118 .num_pmcs = 0,
2119 .cpu_setup = __setup_cpu_a2,
2120 .cpu_restore = __restore_cpu_a2,
2121 .machine_check = machine_check_generic,
2122 .platform = "ppca2",
2123 },
Kumar Galaf45c4482009-08-18 19:08:30 +00002124 { /* This is a default entry to get going, to be replaced by
2125 * a real one at some stage
2126 */
2127#define CPU_FTRS_BASE_BOOK3E (CPU_FTR_USE_TB | \
2128 CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_SMT | \
2129 CPU_FTR_NODSISRALIGN | CPU_FTR_NOEXECUTE)
2130 .pvr_mask = 0x00000000,
2131 .pvr_value = 0x00000000,
2132 .cpu_name = "Book3E",
2133 .cpu_features = CPU_FTRS_BASE_BOOK3E,
2134 .cpu_user_features = COMMON_USER_PPC64,
2135 .mmu_features = MMU_FTR_TYPE_3E | MMU_FTR_USE_TLBILX |
2136 MMU_FTR_USE_TLBIVAX_BCAST |
2137 MMU_FTR_LOCK_BCAST_INVAL,
2138 .icache_bsize = 64,
2139 .dcache_bsize = 64,
2140 .num_pmcs = 0,
2141 .machine_check = machine_check_generic,
2142 .platform = "power6",
2143 },
Benjamin Herrenschmidt76b4eda2011-04-14 22:32:01 +00002144#endif /* CONFIG_PPC_A2 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07002145};
Benjamin Herrenschmidt42c4aaa2006-10-24 16:42:40 +10002146
Paul Mackerras87a72f92007-10-04 14:18:01 +10002147static struct cpu_spec the_cpu_spec;
2148
Scott Wood26ee9762011-07-25 11:04:36 +00002149static struct cpu_spec * __init setup_cpu_spec(unsigned long offset,
2150 struct cpu_spec *s)
Michael Ellerman666435b2009-02-22 16:25:43 +00002151{
2152 struct cpu_spec *t = &the_cpu_spec;
Michael Ellerman2657dd42009-02-22 16:25:45 +00002153 struct cpu_spec old;
2154
Michael Ellerman666435b2009-02-22 16:25:43 +00002155 t = PTRRELOC(t);
Michael Ellerman2657dd42009-02-22 16:25:45 +00002156 old = *t;
2157
2158 /* Copy everything, then do fixups */
2159 *t = *s;
Michael Ellerman666435b2009-02-22 16:25:43 +00002160
2161 /*
2162 * If we are overriding a previous value derived from the real
2163 * PVR with a new value obtained using a logical PVR value,
2164 * don't modify the performance monitor fields.
2165 */
Michael Ellerman2657dd42009-02-22 16:25:45 +00002166 if (old.num_pmcs && !s->num_pmcs) {
2167 t->num_pmcs = old.num_pmcs;
2168 t->pmc_type = old.pmc_type;
2169 t->oprofile_type = old.oprofile_type;
2170 t->oprofile_mmcra_sihv = old.oprofile_mmcra_sihv;
2171 t->oprofile_mmcra_sipr = old.oprofile_mmcra_sipr;
2172 t->oprofile_mmcra_clear = old.oprofile_mmcra_clear;
2173
Michael Ellerman666435b2009-02-22 16:25:43 +00002174 /*
2175 * If we have passed through this logic once before and
2176 * have pulled the default case because the real PVR was
2177 * not found inside cpu_specs[], then we are possibly
2178 * running in compatibility mode. In that case, let the
2179 * oprofiler know which set of compatibility counters to
2180 * pull from by making sure the oprofile_cpu_type string
2181 * is set to that of compatibility mode. If the
2182 * oprofile_cpu_type already has a value, then we are
2183 * possibly overriding a real PVR with a logical one,
2184 * and, in that case, keep the current value for
2185 * oprofile_cpu_type.
2186 */
Benjamin Herrenschmidtb173f032009-05-14 18:34:06 +00002187 if (old.oprofile_cpu_type != NULL) {
Benjamin Herrenschmidt0203d6e2009-04-29 19:39:38 +00002188 t->oprofile_cpu_type = old.oprofile_cpu_type;
2189 t->oprofile_type = old.oprofile_type;
Michael Wolf79af6c42009-04-27 06:17:54 +00002190 }
Michael Ellerman2657dd42009-02-22 16:25:45 +00002191 }
Michael Ellerman666435b2009-02-22 16:25:43 +00002192
2193 *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec;
2194
2195 /*
2196 * Set the base platform string once; assumes
2197 * we're called with real pvr first.
2198 */
2199 if (*PTRRELOC(&powerpc_base_platform) == NULL)
2200 *PTRRELOC(&powerpc_base_platform) = t->platform;
2201
2202#if defined(CONFIG_PPC64) || defined(CONFIG_BOOKE)
2203 /* ppc64 and booke expect identify_cpu to also call setup_cpu for
2204 * that processor. I will consolidate that at a later time, for now,
2205 * just use #ifdef. We also don't need to PTRRELOC the function
2206 * pointer on ppc64 and booke as we are running at 0 in real mode
2207 * on ppc64 and reloc_offset is always 0 on booke.
2208 */
Benjamin Herrenschmidtaf9eef32011-01-20 20:36:03 +00002209 if (t->cpu_setup) {
2210 t->cpu_setup(offset, t);
Michael Ellerman666435b2009-02-22 16:25:43 +00002211 }
2212#endif /* CONFIG_PPC64 || CONFIG_BOOKE */
Scott Wood26ee9762011-07-25 11:04:36 +00002213
2214 return t;
Michael Ellerman666435b2009-02-22 16:25:43 +00002215}
2216
Paul Mackerras87a72f92007-10-04 14:18:01 +10002217struct cpu_spec * __init identify_cpu(unsigned long offset, unsigned int pvr)
Benjamin Herrenschmidt42c4aaa2006-10-24 16:42:40 +10002218{
2219 struct cpu_spec *s = cpu_specs;
Benjamin Herrenschmidt42c4aaa2006-10-24 16:42:40 +10002220 int i;
2221
2222 s = PTRRELOC(s);
Benjamin Herrenschmidt42c4aaa2006-10-24 16:42:40 +10002223
Michael Ellerman666435b2009-02-22 16:25:43 +00002224 for (i = 0; i < ARRAY_SIZE(cpu_specs); i++,s++) {
Scott Wood26ee9762011-07-25 11:04:36 +00002225 if ((pvr & s->pvr_mask) == s->pvr_value)
2226 return setup_cpu_spec(offset, s);
Michael Ellerman666435b2009-02-22 16:25:43 +00002227 }
2228
Benjamin Herrenschmidt42c4aaa2006-10-24 16:42:40 +10002229 BUG();
Michael Ellerman666435b2009-02-22 16:25:43 +00002230
Benjamin Herrenschmidt42c4aaa2006-10-24 16:42:40 +10002231 return NULL;
2232}