0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <linux/string.h>
0010 #include <linux/sched.h>
0011 #include <linux/threads.h>
0012 #include <linux/init.h>
0013 #include <linux/export.h>
0014 #include <linux/jump_label.h>
0015 #include <linux/of.h>
0016
0017 #include <asm/cputable.h>
0018 #include <asm/mce.h>
0019 #include <asm/mmu.h>
0020 #include <asm/setup.h>
0021
0022 static struct cpu_spec the_cpu_spec __read_mostly;
0023
0024 struct cpu_spec* cur_cpu_spec __read_mostly = NULL;
0025 EXPORT_SYMBOL(cur_cpu_spec);
0026
0027
0028 const char *powerpc_base_platform;
0029
0030
0031
0032
0033
0034
0035
0036
0037 #ifdef CONFIG_PPC32
0038 extern void __setup_cpu_e500v1(unsigned long offset, struct cpu_spec* spec);
0039 extern void __setup_cpu_e500v2(unsigned long offset, struct cpu_spec* spec);
0040 extern void __setup_cpu_e500mc(unsigned long offset, struct cpu_spec* spec);
0041 extern void __setup_cpu_440ep(unsigned long offset, struct cpu_spec* spec);
0042 extern void __setup_cpu_440epx(unsigned long offset, struct cpu_spec* spec);
0043 extern void __setup_cpu_440gx(unsigned long offset, struct cpu_spec* spec);
0044 extern void __setup_cpu_440grx(unsigned long offset, struct cpu_spec* spec);
0045 extern void __setup_cpu_440spe(unsigned long offset, struct cpu_spec* spec);
0046 extern void __setup_cpu_440x5(unsigned long offset, struct cpu_spec* spec);
0047 extern void __setup_cpu_460ex(unsigned long offset, struct cpu_spec* spec);
0048 extern void __setup_cpu_460gt(unsigned long offset, struct cpu_spec* spec);
0049 extern void __setup_cpu_460sx(unsigned long offset, struct cpu_spec *spec);
0050 extern void __setup_cpu_apm821xx(unsigned long offset, struct cpu_spec *spec);
0051 extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec);
0052 extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec);
0053 extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec);
0054 extern void __setup_cpu_750cx(unsigned long offset, struct cpu_spec* spec);
0055 extern void __setup_cpu_750fx(unsigned long offset, struct cpu_spec* spec);
0056 extern void __setup_cpu_7400(unsigned long offset, struct cpu_spec* spec);
0057 extern void __setup_cpu_7410(unsigned long offset, struct cpu_spec* spec);
0058 extern void __setup_cpu_745x(unsigned long offset, struct cpu_spec* spec);
0059 #endif
0060 #ifdef CONFIG_PPC64
0061 #include <asm/cpu_setup_power.h>
0062 extern void __setup_cpu_ppc970(unsigned long offset, struct cpu_spec* spec);
0063 extern void __setup_cpu_ppc970MP(unsigned long offset, struct cpu_spec* spec);
0064 extern void __setup_cpu_pa6t(unsigned long offset, struct cpu_spec* spec);
0065 extern void __restore_cpu_pa6t(void);
0066 extern void __restore_cpu_ppc970(void);
0067 extern long __machine_check_early_realmode_p7(struct pt_regs *regs);
0068 extern long __machine_check_early_realmode_p8(struct pt_regs *regs);
0069 extern long __machine_check_early_realmode_p9(struct pt_regs *regs);
0070 #endif
0071 #if defined(CONFIG_E500)
0072 extern void __setup_cpu_e5500(unsigned long offset, struct cpu_spec* spec);
0073 extern void __setup_cpu_e6500(unsigned long offset, struct cpu_spec* spec);
0074 extern void __restore_cpu_e5500(void);
0075 extern void __restore_cpu_e6500(void);
0076 #endif
0077
0078
0079
0080
0081 #define COMMON_USER (PPC_FEATURE_32 | PPC_FEATURE_HAS_FPU | \
0082 PPC_FEATURE_HAS_MMU)
0083 #define COMMON_USER_PPC64 (COMMON_USER | PPC_FEATURE_64)
0084 #define COMMON_USER_POWER4 (COMMON_USER_PPC64 | PPC_FEATURE_POWER4)
0085 #define COMMON_USER_POWER5 (COMMON_USER_PPC64 | PPC_FEATURE_POWER5 |\
0086 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP)
0087 #define COMMON_USER_POWER5_PLUS (COMMON_USER_PPC64 | PPC_FEATURE_POWER5_PLUS|\
0088 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP)
0089 #define COMMON_USER_POWER6 (COMMON_USER_PPC64 | PPC_FEATURE_ARCH_2_05 |\
0090 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP | \
0091 PPC_FEATURE_TRUE_LE | \
0092 PPC_FEATURE_PSERIES_PERFMON_COMPAT)
0093 #define COMMON_USER_POWER7 (COMMON_USER_PPC64 | PPC_FEATURE_ARCH_2_06 |\
0094 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP | \
0095 PPC_FEATURE_TRUE_LE | \
0096 PPC_FEATURE_PSERIES_PERFMON_COMPAT)
0097 #define COMMON_USER2_POWER7 (PPC_FEATURE2_DSCR)
0098 #define COMMON_USER_POWER8 (COMMON_USER_PPC64 | PPC_FEATURE_ARCH_2_06 |\
0099 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP | \
0100 PPC_FEATURE_TRUE_LE | \
0101 PPC_FEATURE_PSERIES_PERFMON_COMPAT)
0102 #define COMMON_USER2_POWER8 (PPC_FEATURE2_ARCH_2_07 | \
0103 PPC_FEATURE2_HTM_COMP | \
0104 PPC_FEATURE2_HTM_NOSC_COMP | \
0105 PPC_FEATURE2_DSCR | \
0106 PPC_FEATURE2_ISEL | PPC_FEATURE2_TAR | \
0107 PPC_FEATURE2_VEC_CRYPTO)
0108 #define COMMON_USER_PA6T (COMMON_USER_PPC64 | PPC_FEATURE_PA6T |\
0109 PPC_FEATURE_TRUE_LE | \
0110 PPC_FEATURE_HAS_ALTIVEC_COMP)
0111 #define COMMON_USER_POWER9 COMMON_USER_POWER8
0112 #define COMMON_USER2_POWER9 (COMMON_USER2_POWER8 | \
0113 PPC_FEATURE2_ARCH_3_00 | \
0114 PPC_FEATURE2_HAS_IEEE128 | \
0115 PPC_FEATURE2_DARN | \
0116 PPC_FEATURE2_SCV)
0117 #define COMMON_USER_POWER10 COMMON_USER_POWER9
0118 #define COMMON_USER2_POWER10 (PPC_FEATURE2_ARCH_3_1 | \
0119 PPC_FEATURE2_MMA | \
0120 PPC_FEATURE2_ARCH_3_00 | \
0121 PPC_FEATURE2_HAS_IEEE128 | \
0122 PPC_FEATURE2_DARN | \
0123 PPC_FEATURE2_SCV | \
0124 PPC_FEATURE2_ARCH_2_07 | \
0125 PPC_FEATURE2_DSCR | \
0126 PPC_FEATURE2_ISEL | PPC_FEATURE2_TAR | \
0127 PPC_FEATURE2_VEC_CRYPTO)
0128
0129 #ifdef CONFIG_PPC_BOOK3E_64
0130 #define COMMON_USER_BOOKE (COMMON_USER_PPC64 | PPC_FEATURE_BOOKE)
0131 #else
0132 #define COMMON_USER_BOOKE (PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU | \
0133 PPC_FEATURE_BOOKE)
0134 #endif
0135
0136 static struct cpu_spec __initdata cpu_specs[] = {
0137 #ifdef CONFIG_PPC_BOOK3S_64
0138 {
0139 .pvr_mask = 0xffff0000,
0140 .pvr_value = 0x00390000,
0141 .cpu_name = "PPC970",
0142 .cpu_features = CPU_FTRS_PPC970,
0143 .cpu_user_features = COMMON_USER_POWER4 |
0144 PPC_FEATURE_HAS_ALTIVEC_COMP,
0145 .mmu_features = MMU_FTRS_PPC970,
0146 .icache_bsize = 128,
0147 .dcache_bsize = 128,
0148 .num_pmcs = 8,
0149 .pmc_type = PPC_PMC_IBM,
0150 .cpu_setup = __setup_cpu_ppc970,
0151 .cpu_restore = __restore_cpu_ppc970,
0152 .platform = "ppc970",
0153 },
0154 {
0155 .pvr_mask = 0xffff0000,
0156 .pvr_value = 0x003c0000,
0157 .cpu_name = "PPC970FX",
0158 .cpu_features = CPU_FTRS_PPC970,
0159 .cpu_user_features = COMMON_USER_POWER4 |
0160 PPC_FEATURE_HAS_ALTIVEC_COMP,
0161 .mmu_features = MMU_FTRS_PPC970,
0162 .icache_bsize = 128,
0163 .dcache_bsize = 128,
0164 .num_pmcs = 8,
0165 .pmc_type = PPC_PMC_IBM,
0166 .cpu_setup = __setup_cpu_ppc970,
0167 .cpu_restore = __restore_cpu_ppc970,
0168 .platform = "ppc970",
0169 },
0170 {
0171 .pvr_mask = 0xffffffff,
0172 .pvr_value = 0x00440100,
0173 .cpu_name = "PPC970MP",
0174 .cpu_features = CPU_FTRS_PPC970,
0175 .cpu_user_features = COMMON_USER_POWER4 |
0176 PPC_FEATURE_HAS_ALTIVEC_COMP,
0177 .mmu_features = MMU_FTRS_PPC970,
0178 .icache_bsize = 128,
0179 .dcache_bsize = 128,
0180 .num_pmcs = 8,
0181 .pmc_type = PPC_PMC_IBM,
0182 .cpu_setup = __setup_cpu_ppc970,
0183 .cpu_restore = __restore_cpu_ppc970,
0184 .platform = "ppc970",
0185 },
0186 {
0187 .pvr_mask = 0xffff0000,
0188 .pvr_value = 0x00440000,
0189 .cpu_name = "PPC970MP",
0190 .cpu_features = CPU_FTRS_PPC970,
0191 .cpu_user_features = COMMON_USER_POWER4 |
0192 PPC_FEATURE_HAS_ALTIVEC_COMP,
0193 .mmu_features = MMU_FTRS_PPC970,
0194 .icache_bsize = 128,
0195 .dcache_bsize = 128,
0196 .num_pmcs = 8,
0197 .pmc_type = PPC_PMC_IBM,
0198 .cpu_setup = __setup_cpu_ppc970MP,
0199 .cpu_restore = __restore_cpu_ppc970,
0200 .platform = "ppc970",
0201 },
0202 {
0203 .pvr_mask = 0xffff0000,
0204 .pvr_value = 0x00450000,
0205 .cpu_name = "PPC970GX",
0206 .cpu_features = CPU_FTRS_PPC970,
0207 .cpu_user_features = COMMON_USER_POWER4 |
0208 PPC_FEATURE_HAS_ALTIVEC_COMP,
0209 .mmu_features = MMU_FTRS_PPC970,
0210 .icache_bsize = 128,
0211 .dcache_bsize = 128,
0212 .num_pmcs = 8,
0213 .pmc_type = PPC_PMC_IBM,
0214 .cpu_setup = __setup_cpu_ppc970,
0215 .platform = "ppc970",
0216 },
0217 {
0218 .pvr_mask = 0xffff0000,
0219 .pvr_value = 0x003a0000,
0220 .cpu_name = "POWER5 (gr)",
0221 .cpu_features = CPU_FTRS_POWER5,
0222 .cpu_user_features = COMMON_USER_POWER5,
0223 .mmu_features = MMU_FTRS_POWER5,
0224 .icache_bsize = 128,
0225 .dcache_bsize = 128,
0226 .num_pmcs = 6,
0227 .pmc_type = PPC_PMC_IBM,
0228 .platform = "power5",
0229 },
0230 {
0231 .pvr_mask = 0xffffff00,
0232 .pvr_value = 0x003b0300,
0233 .cpu_name = "POWER5+ (gs)",
0234 .cpu_features = CPU_FTRS_POWER5,
0235 .cpu_user_features = COMMON_USER_POWER5_PLUS,
0236 .mmu_features = MMU_FTRS_POWER5,
0237 .icache_bsize = 128,
0238 .dcache_bsize = 128,
0239 .num_pmcs = 6,
0240 .platform = "power5+",
0241 },
0242 {
0243 .pvr_mask = 0xffff0000,
0244 .pvr_value = 0x003b0000,
0245 .cpu_name = "POWER5+ (gs)",
0246 .cpu_features = CPU_FTRS_POWER5,
0247 .cpu_user_features = COMMON_USER_POWER5_PLUS,
0248 .mmu_features = MMU_FTRS_POWER5,
0249 .icache_bsize = 128,
0250 .dcache_bsize = 128,
0251 .num_pmcs = 6,
0252 .pmc_type = PPC_PMC_IBM,
0253 .platform = "power5+",
0254 },
0255 {
0256 .pvr_mask = 0xffffffff,
0257 .pvr_value = 0x0f000001,
0258 .cpu_name = "POWER5+",
0259 .cpu_features = CPU_FTRS_POWER5,
0260 .cpu_user_features = COMMON_USER_POWER5_PLUS,
0261 .mmu_features = MMU_FTRS_POWER5,
0262 .icache_bsize = 128,
0263 .dcache_bsize = 128,
0264 .platform = "power5+",
0265 },
0266 {
0267 .pvr_mask = 0xffff0000,
0268 .pvr_value = 0x003e0000,
0269 .cpu_name = "POWER6 (raw)",
0270 .cpu_features = CPU_FTRS_POWER6,
0271 .cpu_user_features = COMMON_USER_POWER6 |
0272 PPC_FEATURE_POWER6_EXT,
0273 .mmu_features = MMU_FTRS_POWER6,
0274 .icache_bsize = 128,
0275 .dcache_bsize = 128,
0276 .num_pmcs = 6,
0277 .pmc_type = PPC_PMC_IBM,
0278 .platform = "power6x",
0279 },
0280 {
0281 .pvr_mask = 0xffffffff,
0282 .pvr_value = 0x0f000002,
0283 .cpu_name = "POWER6 (architected)",
0284 .cpu_features = CPU_FTRS_POWER6,
0285 .cpu_user_features = COMMON_USER_POWER6,
0286 .mmu_features = MMU_FTRS_POWER6,
0287 .icache_bsize = 128,
0288 .dcache_bsize = 128,
0289 .platform = "power6",
0290 },
0291 {
0292 .pvr_mask = 0xffffffff,
0293 .pvr_value = 0x0f000003,
0294 .cpu_name = "POWER7 (architected)",
0295 .cpu_features = CPU_FTRS_POWER7,
0296 .cpu_user_features = COMMON_USER_POWER7,
0297 .cpu_user_features2 = COMMON_USER2_POWER7,
0298 .mmu_features = MMU_FTRS_POWER7,
0299 .icache_bsize = 128,
0300 .dcache_bsize = 128,
0301 .cpu_setup = __setup_cpu_power7,
0302 .cpu_restore = __restore_cpu_power7,
0303 .machine_check_early = __machine_check_early_realmode_p7,
0304 .platform = "power7",
0305 },
0306 {
0307 .pvr_mask = 0xffffffff,
0308 .pvr_value = 0x0f000004,
0309 .cpu_name = "POWER8 (architected)",
0310 .cpu_features = CPU_FTRS_POWER8,
0311 .cpu_user_features = COMMON_USER_POWER8,
0312 .cpu_user_features2 = COMMON_USER2_POWER8,
0313 .mmu_features = MMU_FTRS_POWER8,
0314 .icache_bsize = 128,
0315 .dcache_bsize = 128,
0316 .cpu_setup = __setup_cpu_power8,
0317 .cpu_restore = __restore_cpu_power8,
0318 .machine_check_early = __machine_check_early_realmode_p8,
0319 .platform = "power8",
0320 },
0321 {
0322 .pvr_mask = 0xffffffff,
0323 .pvr_value = 0x0f000005,
0324 .cpu_name = "POWER9 (architected)",
0325 .cpu_features = CPU_FTRS_POWER9,
0326 .cpu_user_features = COMMON_USER_POWER9,
0327 .cpu_user_features2 = COMMON_USER2_POWER9,
0328 .mmu_features = MMU_FTRS_POWER9,
0329 .icache_bsize = 128,
0330 .dcache_bsize = 128,
0331 .cpu_setup = __setup_cpu_power9,
0332 .cpu_restore = __restore_cpu_power9,
0333 .platform = "power9",
0334 },
0335 {
0336 .pvr_mask = 0xffffffff,
0337 .pvr_value = 0x0f000006,
0338 .cpu_name = "POWER10 (architected)",
0339 .cpu_features = CPU_FTRS_POWER10,
0340 .cpu_user_features = COMMON_USER_POWER10,
0341 .cpu_user_features2 = COMMON_USER2_POWER10,
0342 .mmu_features = MMU_FTRS_POWER10,
0343 .icache_bsize = 128,
0344 .dcache_bsize = 128,
0345 .cpu_setup = __setup_cpu_power10,
0346 .cpu_restore = __restore_cpu_power10,
0347 .platform = "power10",
0348 },
0349 {
0350 .pvr_mask = 0xffff0000,
0351 .pvr_value = 0x003f0000,
0352 .cpu_name = "POWER7 (raw)",
0353 .cpu_features = CPU_FTRS_POWER7,
0354 .cpu_user_features = COMMON_USER_POWER7,
0355 .cpu_user_features2 = COMMON_USER2_POWER7,
0356 .mmu_features = MMU_FTRS_POWER7,
0357 .icache_bsize = 128,
0358 .dcache_bsize = 128,
0359 .num_pmcs = 6,
0360 .pmc_type = PPC_PMC_IBM,
0361 .cpu_setup = __setup_cpu_power7,
0362 .cpu_restore = __restore_cpu_power7,
0363 .machine_check_early = __machine_check_early_realmode_p7,
0364 .platform = "power7",
0365 },
0366 {
0367 .pvr_mask = 0xffff0000,
0368 .pvr_value = 0x004A0000,
0369 .cpu_name = "POWER7+ (raw)",
0370 .cpu_features = CPU_FTRS_POWER7,
0371 .cpu_user_features = COMMON_USER_POWER7,
0372 .cpu_user_features2 = COMMON_USER2_POWER7,
0373 .mmu_features = MMU_FTRS_POWER7,
0374 .icache_bsize = 128,
0375 .dcache_bsize = 128,
0376 .num_pmcs = 6,
0377 .pmc_type = PPC_PMC_IBM,
0378 .cpu_setup = __setup_cpu_power7,
0379 .cpu_restore = __restore_cpu_power7,
0380 .machine_check_early = __machine_check_early_realmode_p7,
0381 .platform = "power7+",
0382 },
0383 {
0384 .pvr_mask = 0xffff0000,
0385 .pvr_value = 0x004b0000,
0386 .cpu_name = "POWER8E (raw)",
0387 .cpu_features = CPU_FTRS_POWER8E,
0388 .cpu_user_features = COMMON_USER_POWER8,
0389 .cpu_user_features2 = COMMON_USER2_POWER8,
0390 .mmu_features = MMU_FTRS_POWER8,
0391 .icache_bsize = 128,
0392 .dcache_bsize = 128,
0393 .num_pmcs = 6,
0394 .pmc_type = PPC_PMC_IBM,
0395 .cpu_setup = __setup_cpu_power8,
0396 .cpu_restore = __restore_cpu_power8,
0397 .machine_check_early = __machine_check_early_realmode_p8,
0398 .platform = "power8",
0399 },
0400 {
0401 .pvr_mask = 0xffff0000,
0402 .pvr_value = 0x004c0000,
0403 .cpu_name = "POWER8NVL (raw)",
0404 .cpu_features = CPU_FTRS_POWER8,
0405 .cpu_user_features = COMMON_USER_POWER8,
0406 .cpu_user_features2 = COMMON_USER2_POWER8,
0407 .mmu_features = MMU_FTRS_POWER8,
0408 .icache_bsize = 128,
0409 .dcache_bsize = 128,
0410 .num_pmcs = 6,
0411 .pmc_type = PPC_PMC_IBM,
0412 .cpu_setup = __setup_cpu_power8,
0413 .cpu_restore = __restore_cpu_power8,
0414 .machine_check_early = __machine_check_early_realmode_p8,
0415 .platform = "power8",
0416 },
0417 {
0418 .pvr_mask = 0xffff0000,
0419 .pvr_value = 0x004d0000,
0420 .cpu_name = "POWER8 (raw)",
0421 .cpu_features = CPU_FTRS_POWER8,
0422 .cpu_user_features = COMMON_USER_POWER8,
0423 .cpu_user_features2 = COMMON_USER2_POWER8,
0424 .mmu_features = MMU_FTRS_POWER8,
0425 .icache_bsize = 128,
0426 .dcache_bsize = 128,
0427 .num_pmcs = 6,
0428 .pmc_type = PPC_PMC_IBM,
0429 .cpu_setup = __setup_cpu_power8,
0430 .cpu_restore = __restore_cpu_power8,
0431 .machine_check_early = __machine_check_early_realmode_p8,
0432 .platform = "power8",
0433 },
0434 {
0435 .pvr_mask = 0xffffefff,
0436 .pvr_value = 0x004e0200,
0437 .cpu_name = "POWER9 (raw)",
0438 .cpu_features = CPU_FTRS_POWER9_DD2_0,
0439 .cpu_user_features = COMMON_USER_POWER9,
0440 .cpu_user_features2 = COMMON_USER2_POWER9,
0441 .mmu_features = MMU_FTRS_POWER9,
0442 .icache_bsize = 128,
0443 .dcache_bsize = 128,
0444 .num_pmcs = 6,
0445 .pmc_type = PPC_PMC_IBM,
0446 .cpu_setup = __setup_cpu_power9,
0447 .cpu_restore = __restore_cpu_power9,
0448 .machine_check_early = __machine_check_early_realmode_p9,
0449 .platform = "power9",
0450 },
0451 {
0452 .pvr_mask = 0xffffefff,
0453 .pvr_value = 0x004e0201,
0454 .cpu_name = "POWER9 (raw)",
0455 .cpu_features = CPU_FTRS_POWER9_DD2_1,
0456 .cpu_user_features = COMMON_USER_POWER9,
0457 .cpu_user_features2 = COMMON_USER2_POWER9,
0458 .mmu_features = MMU_FTRS_POWER9,
0459 .icache_bsize = 128,
0460 .dcache_bsize = 128,
0461 .num_pmcs = 6,
0462 .pmc_type = PPC_PMC_IBM,
0463 .cpu_setup = __setup_cpu_power9,
0464 .cpu_restore = __restore_cpu_power9,
0465 .machine_check_early = __machine_check_early_realmode_p9,
0466 .platform = "power9",
0467 },
0468 {
0469 .pvr_mask = 0xffffefff,
0470 .pvr_value = 0x004e0202,
0471 .cpu_name = "POWER9 (raw)",
0472 .cpu_features = CPU_FTRS_POWER9_DD2_2,
0473 .cpu_user_features = COMMON_USER_POWER9,
0474 .cpu_user_features2 = COMMON_USER2_POWER9,
0475 .mmu_features = MMU_FTRS_POWER9,
0476 .icache_bsize = 128,
0477 .dcache_bsize = 128,
0478 .num_pmcs = 6,
0479 .pmc_type = PPC_PMC_IBM,
0480 .cpu_setup = __setup_cpu_power9,
0481 .cpu_restore = __restore_cpu_power9,
0482 .machine_check_early = __machine_check_early_realmode_p9,
0483 .platform = "power9",
0484 },
0485 {
0486 .pvr_mask = 0xffff0000,
0487 .pvr_value = 0x004e0000,
0488 .cpu_name = "POWER9 (raw)",
0489 .cpu_features = CPU_FTRS_POWER9_DD2_3,
0490 .cpu_user_features = COMMON_USER_POWER9,
0491 .cpu_user_features2 = COMMON_USER2_POWER9,
0492 .mmu_features = MMU_FTRS_POWER9,
0493 .icache_bsize = 128,
0494 .dcache_bsize = 128,
0495 .num_pmcs = 6,
0496 .pmc_type = PPC_PMC_IBM,
0497 .cpu_setup = __setup_cpu_power9,
0498 .cpu_restore = __restore_cpu_power9,
0499 .machine_check_early = __machine_check_early_realmode_p9,
0500 .platform = "power9",
0501 },
0502 {
0503 .pvr_mask = 0xffff0000,
0504 .pvr_value = 0x00800000,
0505 .cpu_name = "POWER10 (raw)",
0506 .cpu_features = CPU_FTRS_POWER10,
0507 .cpu_user_features = COMMON_USER_POWER10,
0508 .cpu_user_features2 = COMMON_USER2_POWER10,
0509 .mmu_features = MMU_FTRS_POWER10,
0510 .icache_bsize = 128,
0511 .dcache_bsize = 128,
0512 .num_pmcs = 6,
0513 .pmc_type = PPC_PMC_IBM,
0514 .cpu_setup = __setup_cpu_power10,
0515 .cpu_restore = __restore_cpu_power10,
0516 .machine_check_early = __machine_check_early_realmode_p10,
0517 .platform = "power10",
0518 },
0519 {
0520 .pvr_mask = 0xffff0000,
0521 .pvr_value = 0x00700000,
0522 .cpu_name = "Cell Broadband Engine",
0523 .cpu_features = CPU_FTRS_CELL,
0524 .cpu_user_features = COMMON_USER_PPC64 |
0525 PPC_FEATURE_CELL | PPC_FEATURE_HAS_ALTIVEC_COMP |
0526 PPC_FEATURE_SMT,
0527 .mmu_features = MMU_FTRS_CELL,
0528 .icache_bsize = 128,
0529 .dcache_bsize = 128,
0530 .num_pmcs = 4,
0531 .pmc_type = PPC_PMC_IBM,
0532 .platform = "ppc-cell-be",
0533 },
0534 {
0535 .pvr_mask = 0x7fff0000,
0536 .pvr_value = 0x00900000,
0537 .cpu_name = "PA6T",
0538 .cpu_features = CPU_FTRS_PA6T,
0539 .cpu_user_features = COMMON_USER_PA6T,
0540 .mmu_features = MMU_FTRS_PA6T,
0541 .icache_bsize = 64,
0542 .dcache_bsize = 64,
0543 .num_pmcs = 6,
0544 .pmc_type = PPC_PMC_PA6T,
0545 .cpu_setup = __setup_cpu_pa6t,
0546 .cpu_restore = __restore_cpu_pa6t,
0547 .platform = "pa6t",
0548 },
0549 {
0550 .pvr_mask = 0x00000000,
0551 .pvr_value = 0x00000000,
0552 .cpu_name = "POWER5 (compatible)",
0553 .cpu_features = CPU_FTRS_COMPATIBLE,
0554 .cpu_user_features = COMMON_USER_PPC64,
0555 .mmu_features = MMU_FTRS_POWER,
0556 .icache_bsize = 128,
0557 .dcache_bsize = 128,
0558 .num_pmcs = 6,
0559 .pmc_type = PPC_PMC_IBM,
0560 .platform = "power5",
0561 }
0562 #endif
0563
0564 #ifdef CONFIG_PPC32
0565 #ifdef CONFIG_PPC_BOOK3S_32
0566 #ifdef CONFIG_PPC_BOOK3S_604
0567 {
0568 .pvr_mask = 0xffff0000,
0569 .pvr_value = 0x00040000,
0570 .cpu_name = "604",
0571 .cpu_features = CPU_FTRS_604,
0572 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
0573 .mmu_features = MMU_FTR_HPTE_TABLE,
0574 .icache_bsize = 32,
0575 .dcache_bsize = 32,
0576 .num_pmcs = 2,
0577 .cpu_setup = __setup_cpu_604,
0578 .machine_check = machine_check_generic,
0579 .platform = "ppc604",
0580 },
0581 {
0582 .pvr_mask = 0xfffff000,
0583 .pvr_value = 0x00090000,
0584 .cpu_name = "604e",
0585 .cpu_features = CPU_FTRS_604,
0586 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
0587 .mmu_features = MMU_FTR_HPTE_TABLE,
0588 .icache_bsize = 32,
0589 .dcache_bsize = 32,
0590 .num_pmcs = 4,
0591 .cpu_setup = __setup_cpu_604,
0592 .machine_check = machine_check_generic,
0593 .platform = "ppc604",
0594 },
0595 {
0596 .pvr_mask = 0xffff0000,
0597 .pvr_value = 0x00090000,
0598 .cpu_name = "604r",
0599 .cpu_features = CPU_FTRS_604,
0600 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
0601 .mmu_features = MMU_FTR_HPTE_TABLE,
0602 .icache_bsize = 32,
0603 .dcache_bsize = 32,
0604 .num_pmcs = 4,
0605 .cpu_setup = __setup_cpu_604,
0606 .machine_check = machine_check_generic,
0607 .platform = "ppc604",
0608 },
0609 {
0610 .pvr_mask = 0xffff0000,
0611 .pvr_value = 0x000a0000,
0612 .cpu_name = "604ev",
0613 .cpu_features = CPU_FTRS_604,
0614 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
0615 .mmu_features = MMU_FTR_HPTE_TABLE,
0616 .icache_bsize = 32,
0617 .dcache_bsize = 32,
0618 .num_pmcs = 4,
0619 .cpu_setup = __setup_cpu_604,
0620 .machine_check = machine_check_generic,
0621 .platform = "ppc604",
0622 },
0623 {
0624 .pvr_mask = 0xffffffff,
0625 .pvr_value = 0x00084202,
0626 .cpu_name = "740/750",
0627 .cpu_features = CPU_FTRS_740_NOTAU,
0628 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
0629 .mmu_features = MMU_FTR_HPTE_TABLE,
0630 .icache_bsize = 32,
0631 .dcache_bsize = 32,
0632 .num_pmcs = 4,
0633 .cpu_setup = __setup_cpu_750,
0634 .machine_check = machine_check_generic,
0635 .platform = "ppc750",
0636 },
0637 {
0638 .pvr_mask = 0xfffffff0,
0639 .pvr_value = 0x00080100,
0640 .cpu_name = "750CX",
0641 .cpu_features = CPU_FTRS_750,
0642 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
0643 .mmu_features = MMU_FTR_HPTE_TABLE,
0644 .icache_bsize = 32,
0645 .dcache_bsize = 32,
0646 .num_pmcs = 4,
0647 .cpu_setup = __setup_cpu_750cx,
0648 .machine_check = machine_check_generic,
0649 .platform = "ppc750",
0650 },
0651 {
0652 .pvr_mask = 0xfffffff0,
0653 .pvr_value = 0x00082200,
0654 .cpu_name = "750CX",
0655 .cpu_features = CPU_FTRS_750,
0656 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
0657 .mmu_features = MMU_FTR_HPTE_TABLE,
0658 .icache_bsize = 32,
0659 .dcache_bsize = 32,
0660 .num_pmcs = 4,
0661 .pmc_type = PPC_PMC_IBM,
0662 .cpu_setup = __setup_cpu_750cx,
0663 .machine_check = machine_check_generic,
0664 .platform = "ppc750",
0665 },
0666 {
0667 .pvr_mask = 0xfffffff0,
0668 .pvr_value = 0x00082210,
0669 .cpu_name = "750CXe",
0670 .cpu_features = CPU_FTRS_750,
0671 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
0672 .mmu_features = MMU_FTR_HPTE_TABLE,
0673 .icache_bsize = 32,
0674 .dcache_bsize = 32,
0675 .num_pmcs = 4,
0676 .pmc_type = PPC_PMC_IBM,
0677 .cpu_setup = __setup_cpu_750cx,
0678 .machine_check = machine_check_generic,
0679 .platform = "ppc750",
0680 },
0681 {
0682 .pvr_mask = 0xffffffff,
0683 .pvr_value = 0x00083214,
0684 .cpu_name = "750CXe",
0685 .cpu_features = CPU_FTRS_750,
0686 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
0687 .mmu_features = MMU_FTR_HPTE_TABLE,
0688 .icache_bsize = 32,
0689 .dcache_bsize = 32,
0690 .num_pmcs = 4,
0691 .pmc_type = PPC_PMC_IBM,
0692 .cpu_setup = __setup_cpu_750cx,
0693 .machine_check = machine_check_generic,
0694 .platform = "ppc750",
0695 },
0696 {
0697 .pvr_mask = 0xfffff0e0,
0698 .pvr_value = 0x00087000,
0699 .cpu_name = "750CL",
0700 .cpu_features = CPU_FTRS_750CL,
0701 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
0702 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
0703 .icache_bsize = 32,
0704 .dcache_bsize = 32,
0705 .num_pmcs = 4,
0706 .pmc_type = PPC_PMC_IBM,
0707 .cpu_setup = __setup_cpu_750,
0708 .machine_check = machine_check_generic,
0709 .platform = "ppc750",
0710 },
0711 {
0712 .pvr_mask = 0xfffff000,
0713 .pvr_value = 0x00083000,
0714 .cpu_name = "745/755",
0715 .cpu_features = CPU_FTRS_750,
0716 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
0717 .mmu_features = MMU_FTR_HPTE_TABLE,
0718 .icache_bsize = 32,
0719 .dcache_bsize = 32,
0720 .num_pmcs = 4,
0721 .pmc_type = PPC_PMC_IBM,
0722 .cpu_setup = __setup_cpu_750,
0723 .machine_check = machine_check_generic,
0724 .platform = "ppc750",
0725 },
0726 {
0727 .pvr_mask = 0xffffff00,
0728 .pvr_value = 0x70000100,
0729 .cpu_name = "750FX",
0730 .cpu_features = CPU_FTRS_750FX1,
0731 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
0732 .mmu_features = MMU_FTR_HPTE_TABLE,
0733 .icache_bsize = 32,
0734 .dcache_bsize = 32,
0735 .num_pmcs = 4,
0736 .pmc_type = PPC_PMC_IBM,
0737 .cpu_setup = __setup_cpu_750,
0738 .machine_check = machine_check_generic,
0739 .platform = "ppc750",
0740 },
0741 {
0742 .pvr_mask = 0xffffffff,
0743 .pvr_value = 0x70000200,
0744 .cpu_name = "750FX",
0745 .cpu_features = CPU_FTRS_750FX2,
0746 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
0747 .mmu_features = MMU_FTR_HPTE_TABLE,
0748 .icache_bsize = 32,
0749 .dcache_bsize = 32,
0750 .num_pmcs = 4,
0751 .pmc_type = PPC_PMC_IBM,
0752 .cpu_setup = __setup_cpu_750,
0753 .machine_check = machine_check_generic,
0754 .platform = "ppc750",
0755 },
0756 {
0757 .pvr_mask = 0xffff0000,
0758 .pvr_value = 0x70000000,
0759 .cpu_name = "750FX",
0760 .cpu_features = CPU_FTRS_750FX,
0761 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
0762 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
0763 .icache_bsize = 32,
0764 .dcache_bsize = 32,
0765 .num_pmcs = 4,
0766 .pmc_type = PPC_PMC_IBM,
0767 .cpu_setup = __setup_cpu_750fx,
0768 .machine_check = machine_check_generic,
0769 .platform = "ppc750",
0770 },
0771 {
0772 .pvr_mask = 0xffff0000,
0773 .pvr_value = 0x70020000,
0774 .cpu_name = "750GX",
0775 .cpu_features = CPU_FTRS_750GX,
0776 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
0777 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
0778 .icache_bsize = 32,
0779 .dcache_bsize = 32,
0780 .num_pmcs = 4,
0781 .pmc_type = PPC_PMC_IBM,
0782 .cpu_setup = __setup_cpu_750fx,
0783 .machine_check = machine_check_generic,
0784 .platform = "ppc750",
0785 },
0786 {
0787 .pvr_mask = 0xffff0000,
0788 .pvr_value = 0x00080000,
0789 .cpu_name = "740/750",
0790 .cpu_features = CPU_FTRS_740,
0791 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
0792 .mmu_features = MMU_FTR_HPTE_TABLE,
0793 .icache_bsize = 32,
0794 .dcache_bsize = 32,
0795 .num_pmcs = 4,
0796 .pmc_type = PPC_PMC_IBM,
0797 .cpu_setup = __setup_cpu_750,
0798 .machine_check = machine_check_generic,
0799 .platform = "ppc750",
0800 },
0801 {
0802 .pvr_mask = 0xffffffff,
0803 .pvr_value = 0x000c1101,
0804 .cpu_name = "7400 (1.1)",
0805 .cpu_features = CPU_FTRS_7400_NOTAU,
0806 .cpu_user_features = COMMON_USER |
0807 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
0808 .mmu_features = MMU_FTR_HPTE_TABLE,
0809 .icache_bsize = 32,
0810 .dcache_bsize = 32,
0811 .num_pmcs = 4,
0812 .pmc_type = PPC_PMC_G4,
0813 .cpu_setup = __setup_cpu_7400,
0814 .machine_check = machine_check_generic,
0815 .platform = "ppc7400",
0816 },
0817 {
0818 .pvr_mask = 0xffff0000,
0819 .pvr_value = 0x000c0000,
0820 .cpu_name = "7400",
0821 .cpu_features = CPU_FTRS_7400,
0822 .cpu_user_features = COMMON_USER |
0823 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
0824 .mmu_features = MMU_FTR_HPTE_TABLE,
0825 .icache_bsize = 32,
0826 .dcache_bsize = 32,
0827 .num_pmcs = 4,
0828 .pmc_type = PPC_PMC_G4,
0829 .cpu_setup = __setup_cpu_7400,
0830 .machine_check = machine_check_generic,
0831 .platform = "ppc7400",
0832 },
0833 {
0834 .pvr_mask = 0xffff0000,
0835 .pvr_value = 0x800c0000,
0836 .cpu_name = "7410",
0837 .cpu_features = CPU_FTRS_7400,
0838 .cpu_user_features = COMMON_USER |
0839 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
0840 .mmu_features = MMU_FTR_HPTE_TABLE,
0841 .icache_bsize = 32,
0842 .dcache_bsize = 32,
0843 .num_pmcs = 4,
0844 .pmc_type = PPC_PMC_G4,
0845 .cpu_setup = __setup_cpu_7410,
0846 .machine_check = machine_check_generic,
0847 .platform = "ppc7400",
0848 },
0849 {
0850 .pvr_mask = 0xffffffff,
0851 .pvr_value = 0x80000200,
0852 .cpu_name = "7450",
0853 .cpu_features = CPU_FTRS_7450_20,
0854 .cpu_user_features = COMMON_USER |
0855 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
0856 .mmu_features = MMU_FTR_HPTE_TABLE,
0857 .icache_bsize = 32,
0858 .dcache_bsize = 32,
0859 .num_pmcs = 6,
0860 .pmc_type = PPC_PMC_G4,
0861 .cpu_setup = __setup_cpu_745x,
0862 .machine_check = machine_check_generic,
0863 .platform = "ppc7450",
0864 },
0865 {
0866 .pvr_mask = 0xffffffff,
0867 .pvr_value = 0x80000201,
0868 .cpu_name = "7450",
0869 .cpu_features = CPU_FTRS_7450_21,
0870 .cpu_user_features = COMMON_USER |
0871 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
0872 .mmu_features = MMU_FTR_HPTE_TABLE,
0873 .icache_bsize = 32,
0874 .dcache_bsize = 32,
0875 .num_pmcs = 6,
0876 .pmc_type = PPC_PMC_G4,
0877 .cpu_setup = __setup_cpu_745x,
0878 .machine_check = machine_check_generic,
0879 .platform = "ppc7450",
0880 },
0881 {
0882 .pvr_mask = 0xffff0000,
0883 .pvr_value = 0x80000000,
0884 .cpu_name = "7450",
0885 .cpu_features = CPU_FTRS_7450_23,
0886 .cpu_user_features = COMMON_USER |
0887 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
0888 .mmu_features = MMU_FTR_HPTE_TABLE,
0889 .icache_bsize = 32,
0890 .dcache_bsize = 32,
0891 .num_pmcs = 6,
0892 .pmc_type = PPC_PMC_G4,
0893 .cpu_setup = __setup_cpu_745x,
0894 .machine_check = machine_check_generic,
0895 .platform = "ppc7450",
0896 },
0897 {
0898 .pvr_mask = 0xffffff00,
0899 .pvr_value = 0x80010100,
0900 .cpu_name = "7455",
0901 .cpu_features = CPU_FTRS_7455_1,
0902 .cpu_user_features = COMMON_USER |
0903 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
0904 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
0905 .icache_bsize = 32,
0906 .dcache_bsize = 32,
0907 .num_pmcs = 6,
0908 .pmc_type = PPC_PMC_G4,
0909 .cpu_setup = __setup_cpu_745x,
0910 .machine_check = machine_check_generic,
0911 .platform = "ppc7450",
0912 },
0913 {
0914 .pvr_mask = 0xffffffff,
0915 .pvr_value = 0x80010200,
0916 .cpu_name = "7455",
0917 .cpu_features = CPU_FTRS_7455_20,
0918 .cpu_user_features = COMMON_USER |
0919 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
0920 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
0921 .icache_bsize = 32,
0922 .dcache_bsize = 32,
0923 .num_pmcs = 6,
0924 .pmc_type = PPC_PMC_G4,
0925 .cpu_setup = __setup_cpu_745x,
0926 .machine_check = machine_check_generic,
0927 .platform = "ppc7450",
0928 },
0929 {
0930 .pvr_mask = 0xffff0000,
0931 .pvr_value = 0x80010000,
0932 .cpu_name = "7455",
0933 .cpu_features = CPU_FTRS_7455,
0934 .cpu_user_features = COMMON_USER |
0935 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
0936 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
0937 .icache_bsize = 32,
0938 .dcache_bsize = 32,
0939 .num_pmcs = 6,
0940 .pmc_type = PPC_PMC_G4,
0941 .cpu_setup = __setup_cpu_745x,
0942 .machine_check = machine_check_generic,
0943 .platform = "ppc7450",
0944 },
0945 {
0946 .pvr_mask = 0xffffffff,
0947 .pvr_value = 0x80020100,
0948 .cpu_name = "7447/7457",
0949 .cpu_features = CPU_FTRS_7447_10,
0950 .cpu_user_features = COMMON_USER |
0951 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
0952 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
0953 .icache_bsize = 32,
0954 .dcache_bsize = 32,
0955 .num_pmcs = 6,
0956 .pmc_type = PPC_PMC_G4,
0957 .cpu_setup = __setup_cpu_745x,
0958 .machine_check = machine_check_generic,
0959 .platform = "ppc7450",
0960 },
0961 {
0962 .pvr_mask = 0xffffffff,
0963 .pvr_value = 0x80020101,
0964 .cpu_name = "7447/7457",
0965 .cpu_features = CPU_FTRS_7447_10,
0966 .cpu_user_features = COMMON_USER |
0967 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
0968 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
0969 .icache_bsize = 32,
0970 .dcache_bsize = 32,
0971 .num_pmcs = 6,
0972 .pmc_type = PPC_PMC_G4,
0973 .cpu_setup = __setup_cpu_745x,
0974 .machine_check = machine_check_generic,
0975 .platform = "ppc7450",
0976 },
0977 {
0978 .pvr_mask = 0xffff0000,
0979 .pvr_value = 0x80020000,
0980 .cpu_name = "7447/7457",
0981 .cpu_features = CPU_FTRS_7447,
0982 .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
0983 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
0984 .icache_bsize = 32,
0985 .dcache_bsize = 32,
0986 .num_pmcs = 6,
0987 .pmc_type = PPC_PMC_G4,
0988 .cpu_setup = __setup_cpu_745x,
0989 .machine_check = machine_check_generic,
0990 .platform = "ppc7450",
0991 },
0992 {
0993 .pvr_mask = 0xffff0000,
0994 .pvr_value = 0x80030000,
0995 .cpu_name = "7447A",
0996 .cpu_features = CPU_FTRS_7447A,
0997 .cpu_user_features = COMMON_USER |
0998 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
0999 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
1000 .icache_bsize = 32,
1001 .dcache_bsize = 32,
1002 .num_pmcs = 6,
1003 .pmc_type = PPC_PMC_G4,
1004 .cpu_setup = __setup_cpu_745x,
1005 .machine_check = machine_check_generic,
1006 .platform = "ppc7450",
1007 },
1008 {
1009 .pvr_mask = 0xffff0000,
1010 .pvr_value = 0x80040000,
1011 .cpu_name = "7448",
1012 .cpu_features = CPU_FTRS_7448,
1013 .cpu_user_features = COMMON_USER |
1014 PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE,
1015 .mmu_features = MMU_FTR_HPTE_TABLE | MMU_FTR_USE_HIGH_BATS,
1016 .icache_bsize = 32,
1017 .dcache_bsize = 32,
1018 .num_pmcs = 6,
1019 .pmc_type = PPC_PMC_G4,
1020 .cpu_setup = __setup_cpu_745x,
1021 .machine_check = machine_check_generic,
1022 .platform = "ppc7450",
1023 },
1024 #endif
1025 #ifdef CONFIG_PPC_BOOK3S_603
1026 {
1027 .pvr_mask = 0xffff0000,
1028 .pvr_value = 0x00030000,
1029 .cpu_name = "603",
1030 .cpu_features = CPU_FTRS_603,
1031 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1032 .mmu_features = 0,
1033 .icache_bsize = 32,
1034 .dcache_bsize = 32,
1035 .cpu_setup = __setup_cpu_603,
1036 .machine_check = machine_check_generic,
1037 .platform = "ppc603",
1038 },
1039 {
1040 .pvr_mask = 0xffff0000,
1041 .pvr_value = 0x00060000,
1042 .cpu_name = "603e",
1043 .cpu_features = CPU_FTRS_603,
1044 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1045 .mmu_features = 0,
1046 .icache_bsize = 32,
1047 .dcache_bsize = 32,
1048 .cpu_setup = __setup_cpu_603,
1049 .machine_check = machine_check_generic,
1050 .platform = "ppc603",
1051 },
1052 {
1053 .pvr_mask = 0xffff0000,
1054 .pvr_value = 0x00070000,
1055 .cpu_name = "603ev",
1056 .cpu_features = CPU_FTRS_603,
1057 .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
1058 .mmu_features = 0,
1059 .icache_bsize = 32,
1060 .dcache_bsize = 32,
1061 .cpu_setup = __setup_cpu_603,
1062 .machine_check = machine_check_generic,
1063 .platform = "ppc603",
1064 },
1065 {
1066 .pvr_mask = 0x7fff0000,
1067 .pvr_value = 0x00810000,
1068 .cpu_name = "82xx",
1069 .cpu_features = CPU_FTRS_82XX,
1070 .cpu_user_features = COMMON_USER,
1071 .mmu_features = 0,
1072 .icache_bsize = 32,
1073 .dcache_bsize = 32,
1074 .cpu_setup = __setup_cpu_603,
1075 .machine_check = machine_check_generic,
1076 .platform = "ppc603",
1077 },
1078 {
1079 .pvr_mask = 0x7fff0000,
1080 .pvr_value = 0x00820000,
1081 .cpu_name = "G2_LE",
1082 .cpu_features = CPU_FTRS_G2_LE,
1083 .cpu_user_features = COMMON_USER,
1084 .mmu_features = MMU_FTR_USE_HIGH_BATS,
1085 .icache_bsize = 32,
1086 .dcache_bsize = 32,
1087 .cpu_setup = __setup_cpu_603,
1088 .machine_check = machine_check_generic,
1089 .platform = "ppc603",
1090 },
1091 #ifdef CONFIG_PPC_83xx
1092 {
1093 .pvr_mask = 0x7fff0000,
1094 .pvr_value = 0x00830000,
1095 .cpu_name = "e300c1",
1096 .cpu_features = CPU_FTRS_E300,
1097 .cpu_user_features = COMMON_USER,
1098 .mmu_features = MMU_FTR_USE_HIGH_BATS,
1099 .icache_bsize = 32,
1100 .dcache_bsize = 32,
1101 .cpu_setup = __setup_cpu_603,
1102 .machine_check = machine_check_83xx,
1103 .platform = "ppc603",
1104 },
1105 {
1106 .pvr_mask = 0x7fff0000,
1107 .pvr_value = 0x00840000,
1108 .cpu_name = "e300c2",
1109 .cpu_features = CPU_FTRS_E300C2,
1110 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
1111 .mmu_features = MMU_FTR_USE_HIGH_BATS |
1112 MMU_FTR_NEED_DTLB_SW_LRU,
1113 .icache_bsize = 32,
1114 .dcache_bsize = 32,
1115 .cpu_setup = __setup_cpu_603,
1116 .machine_check = machine_check_83xx,
1117 .platform = "ppc603",
1118 },
1119 {
1120 .pvr_mask = 0x7fff0000,
1121 .pvr_value = 0x00850000,
1122 .cpu_name = "e300c3",
1123 .cpu_features = CPU_FTRS_E300,
1124 .cpu_user_features = COMMON_USER,
1125 .mmu_features = MMU_FTR_USE_HIGH_BATS |
1126 MMU_FTR_NEED_DTLB_SW_LRU,
1127 .icache_bsize = 32,
1128 .dcache_bsize = 32,
1129 .cpu_setup = __setup_cpu_603,
1130 .machine_check = machine_check_83xx,
1131 .num_pmcs = 4,
1132 .platform = "ppc603",
1133 },
1134 {
1135 .pvr_mask = 0x7fff0000,
1136 .pvr_value = 0x00860000,
1137 .cpu_name = "e300c4",
1138 .cpu_features = CPU_FTRS_E300,
1139 .cpu_user_features = COMMON_USER,
1140 .mmu_features = MMU_FTR_USE_HIGH_BATS |
1141 MMU_FTR_NEED_DTLB_SW_LRU,
1142 .icache_bsize = 32,
1143 .dcache_bsize = 32,
1144 .cpu_setup = __setup_cpu_603,
1145 .machine_check = machine_check_83xx,
1146 .num_pmcs = 4,
1147 .platform = "ppc603",
1148 },
1149 #endif
1150 #endif
1151 #ifdef CONFIG_PPC_BOOK3S_604
1152 {
1153 .pvr_mask = 0x00000000,
1154 .pvr_value = 0x00000000,
1155 .cpu_name = "(generic PPC)",
1156 .cpu_features = CPU_FTRS_CLASSIC32,
1157 .cpu_user_features = COMMON_USER,
1158 .mmu_features = MMU_FTR_HPTE_TABLE,
1159 .icache_bsize = 32,
1160 .dcache_bsize = 32,
1161 .machine_check = machine_check_generic,
1162 .platform = "ppc603",
1163 },
1164 #endif
1165 #endif
1166 #ifdef CONFIG_PPC_8xx
1167 {
1168 .pvr_mask = 0xffff0000,
1169 .pvr_value = PVR_8xx,
1170 .cpu_name = "8xx",
1171
1172
1173 .cpu_features = CPU_FTRS_8XX,
1174 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
1175 .mmu_features = MMU_FTR_TYPE_8xx,
1176 .icache_bsize = 16,
1177 .dcache_bsize = 16,
1178 .machine_check = machine_check_8xx,
1179 .platform = "ppc823",
1180 },
1181 #endif
1182 #ifdef CONFIG_40x
1183 {
1184 .pvr_mask = 0xffff0000,
1185 .pvr_value = 0x41810000,
1186 .cpu_name = "STB04xxx",
1187 .cpu_features = CPU_FTRS_40X,
1188 .cpu_user_features = PPC_FEATURE_32 |
1189 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1190 .mmu_features = MMU_FTR_TYPE_40x,
1191 .icache_bsize = 32,
1192 .dcache_bsize = 32,
1193 .machine_check = machine_check_4xx,
1194 .platform = "ppc405",
1195 },
1196 {
1197 .pvr_mask = 0xffff0000,
1198 .pvr_value = 0x41610000,
1199 .cpu_name = "NP405L",
1200 .cpu_features = CPU_FTRS_40X,
1201 .cpu_user_features = PPC_FEATURE_32 |
1202 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1203 .mmu_features = MMU_FTR_TYPE_40x,
1204 .icache_bsize = 32,
1205 .dcache_bsize = 32,
1206 .machine_check = machine_check_4xx,
1207 .platform = "ppc405",
1208 },
1209 {
1210 .pvr_mask = 0xffff0000,
1211 .pvr_value = 0x40B10000,
1212 .cpu_name = "NP4GS3",
1213 .cpu_features = CPU_FTRS_40X,
1214 .cpu_user_features = PPC_FEATURE_32 |
1215 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1216 .mmu_features = MMU_FTR_TYPE_40x,
1217 .icache_bsize = 32,
1218 .dcache_bsize = 32,
1219 .machine_check = machine_check_4xx,
1220 .platform = "ppc405",
1221 },
1222 {
1223 .pvr_mask = 0xffff0000,
1224 .pvr_value = 0x41410000,
1225 .cpu_name = "NP405H",
1226 .cpu_features = CPU_FTRS_40X,
1227 .cpu_user_features = PPC_FEATURE_32 |
1228 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1229 .mmu_features = MMU_FTR_TYPE_40x,
1230 .icache_bsize = 32,
1231 .dcache_bsize = 32,
1232 .machine_check = machine_check_4xx,
1233 .platform = "ppc405",
1234 },
1235 {
1236 .pvr_mask = 0xffff0000,
1237 .pvr_value = 0x50910000,
1238 .cpu_name = "405GPr",
1239 .cpu_features = CPU_FTRS_40X,
1240 .cpu_user_features = PPC_FEATURE_32 |
1241 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1242 .mmu_features = MMU_FTR_TYPE_40x,
1243 .icache_bsize = 32,
1244 .dcache_bsize = 32,
1245 .machine_check = machine_check_4xx,
1246 .platform = "ppc405",
1247 },
1248 {
1249 .pvr_mask = 0xffff0000,
1250 .pvr_value = 0x51510000,
1251 .cpu_name = "STBx25xx",
1252 .cpu_features = CPU_FTRS_40X,
1253 .cpu_user_features = PPC_FEATURE_32 |
1254 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1255 .mmu_features = MMU_FTR_TYPE_40x,
1256 .icache_bsize = 32,
1257 .dcache_bsize = 32,
1258 .machine_check = machine_check_4xx,
1259 .platform = "ppc405",
1260 },
1261 {
1262 .pvr_mask = 0xffff0000,
1263 .pvr_value = 0x41F10000,
1264 .cpu_name = "405LP",
1265 .cpu_features = CPU_FTRS_40X,
1266 .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
1267 .mmu_features = MMU_FTR_TYPE_40x,
1268 .icache_bsize = 32,
1269 .dcache_bsize = 32,
1270 .machine_check = machine_check_4xx,
1271 .platform = "ppc405",
1272 },
1273 {
1274 .pvr_mask = 0xffff0000,
1275 .pvr_value = 0x51210000,
1276 .cpu_name = "405EP",
1277 .cpu_features = CPU_FTRS_40X,
1278 .cpu_user_features = PPC_FEATURE_32 |
1279 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1280 .mmu_features = MMU_FTR_TYPE_40x,
1281 .icache_bsize = 32,
1282 .dcache_bsize = 32,
1283 .machine_check = machine_check_4xx,
1284 .platform = "ppc405",
1285 },
1286 {
1287 .pvr_mask = 0xffff000f,
1288 .pvr_value = 0x12910007,
1289 .cpu_name = "405EX Rev. A/B",
1290 .cpu_features = CPU_FTRS_40X,
1291 .cpu_user_features = PPC_FEATURE_32 |
1292 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1293 .mmu_features = MMU_FTR_TYPE_40x,
1294 .icache_bsize = 32,
1295 .dcache_bsize = 32,
1296 .machine_check = machine_check_4xx,
1297 .platform = "ppc405",
1298 },
1299 {
1300 .pvr_mask = 0xffff000f,
1301 .pvr_value = 0x1291000d,
1302 .cpu_name = "405EX Rev. C",
1303 .cpu_features = CPU_FTRS_40X,
1304 .cpu_user_features = PPC_FEATURE_32 |
1305 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1306 .mmu_features = MMU_FTR_TYPE_40x,
1307 .icache_bsize = 32,
1308 .dcache_bsize = 32,
1309 .machine_check = machine_check_4xx,
1310 .platform = "ppc405",
1311 },
1312 {
1313 .pvr_mask = 0xffff000f,
1314 .pvr_value = 0x1291000f,
1315 .cpu_name = "405EX Rev. C",
1316 .cpu_features = CPU_FTRS_40X,
1317 .cpu_user_features = PPC_FEATURE_32 |
1318 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1319 .mmu_features = MMU_FTR_TYPE_40x,
1320 .icache_bsize = 32,
1321 .dcache_bsize = 32,
1322 .machine_check = machine_check_4xx,
1323 .platform = "ppc405",
1324 },
1325 {
1326 .pvr_mask = 0xffff000f,
1327 .pvr_value = 0x12910003,
1328 .cpu_name = "405EX Rev. D",
1329 .cpu_features = CPU_FTRS_40X,
1330 .cpu_user_features = PPC_FEATURE_32 |
1331 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1332 .mmu_features = MMU_FTR_TYPE_40x,
1333 .icache_bsize = 32,
1334 .dcache_bsize = 32,
1335 .machine_check = machine_check_4xx,
1336 .platform = "ppc405",
1337 },
1338 {
1339 .pvr_mask = 0xffff000f,
1340 .pvr_value = 0x12910005,
1341 .cpu_name = "405EX Rev. D",
1342 .cpu_features = CPU_FTRS_40X,
1343 .cpu_user_features = PPC_FEATURE_32 |
1344 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1345 .mmu_features = MMU_FTR_TYPE_40x,
1346 .icache_bsize = 32,
1347 .dcache_bsize = 32,
1348 .machine_check = machine_check_4xx,
1349 .platform = "ppc405",
1350 },
1351 {
1352 .pvr_mask = 0xffff000f,
1353 .pvr_value = 0x12910001,
1354 .cpu_name = "405EXr Rev. A/B",
1355 .cpu_features = CPU_FTRS_40X,
1356 .cpu_user_features = PPC_FEATURE_32 |
1357 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1358 .mmu_features = MMU_FTR_TYPE_40x,
1359 .icache_bsize = 32,
1360 .dcache_bsize = 32,
1361 .machine_check = machine_check_4xx,
1362 .platform = "ppc405",
1363 },
1364 {
1365 .pvr_mask = 0xffff000f,
1366 .pvr_value = 0x12910009,
1367 .cpu_name = "405EXr Rev. C",
1368 .cpu_features = CPU_FTRS_40X,
1369 .cpu_user_features = PPC_FEATURE_32 |
1370 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1371 .mmu_features = MMU_FTR_TYPE_40x,
1372 .icache_bsize = 32,
1373 .dcache_bsize = 32,
1374 .machine_check = machine_check_4xx,
1375 .platform = "ppc405",
1376 },
1377 {
1378 .pvr_mask = 0xffff000f,
1379 .pvr_value = 0x1291000b,
1380 .cpu_name = "405EXr Rev. C",
1381 .cpu_features = CPU_FTRS_40X,
1382 .cpu_user_features = PPC_FEATURE_32 |
1383 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1384 .mmu_features = MMU_FTR_TYPE_40x,
1385 .icache_bsize = 32,
1386 .dcache_bsize = 32,
1387 .machine_check = machine_check_4xx,
1388 .platform = "ppc405",
1389 },
1390 {
1391 .pvr_mask = 0xffff000f,
1392 .pvr_value = 0x12910000,
1393 .cpu_name = "405EXr Rev. D",
1394 .cpu_features = CPU_FTRS_40X,
1395 .cpu_user_features = PPC_FEATURE_32 |
1396 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1397 .mmu_features = MMU_FTR_TYPE_40x,
1398 .icache_bsize = 32,
1399 .dcache_bsize = 32,
1400 .machine_check = machine_check_4xx,
1401 .platform = "ppc405",
1402 },
1403 {
1404 .pvr_mask = 0xffff000f,
1405 .pvr_value = 0x12910002,
1406 .cpu_name = "405EXr Rev. D",
1407 .cpu_features = CPU_FTRS_40X,
1408 .cpu_user_features = PPC_FEATURE_32 |
1409 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1410 .mmu_features = MMU_FTR_TYPE_40x,
1411 .icache_bsize = 32,
1412 .dcache_bsize = 32,
1413 .machine_check = machine_check_4xx,
1414 .platform = "ppc405",
1415 },
1416 {
1417
1418 .pvr_mask = 0xffff0000,
1419 .pvr_value = 0x41510000,
1420 .cpu_name = "405EZ",
1421 .cpu_features = CPU_FTRS_40X,
1422 .cpu_user_features = PPC_FEATURE_32 |
1423 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1424 .mmu_features = MMU_FTR_TYPE_40x,
1425 .icache_bsize = 32,
1426 .dcache_bsize = 32,
1427 .machine_check = machine_check_4xx,
1428 .platform = "ppc405",
1429 },
1430 {
1431 .pvr_mask = 0xffff0000,
1432 .pvr_value = 0x7ff11432,
1433 .cpu_name = "APM8018X",
1434 .cpu_features = CPU_FTRS_40X,
1435 .cpu_user_features = PPC_FEATURE_32 |
1436 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1437 .mmu_features = MMU_FTR_TYPE_40x,
1438 .icache_bsize = 32,
1439 .dcache_bsize = 32,
1440 .machine_check = machine_check_4xx,
1441 .platform = "ppc405",
1442 },
1443 {
1444 .pvr_mask = 0x00000000,
1445 .pvr_value = 0x00000000,
1446 .cpu_name = "(generic 40x PPC)",
1447 .cpu_features = CPU_FTRS_40X,
1448 .cpu_user_features = PPC_FEATURE_32 |
1449 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1450 .mmu_features = MMU_FTR_TYPE_40x,
1451 .icache_bsize = 32,
1452 .dcache_bsize = 32,
1453 .machine_check = machine_check_4xx,
1454 .platform = "ppc405",
1455 }
1456
1457 #endif
1458 #ifdef CONFIG_44x
1459 #ifndef CONFIG_PPC_47x
1460 {
1461 .pvr_mask = 0xf0000fff,
1462 .pvr_value = 0x40000850,
1463 .cpu_name = "440GR Rev. A",
1464 .cpu_features = CPU_FTRS_44X,
1465 .cpu_user_features = COMMON_USER_BOOKE,
1466 .mmu_features = MMU_FTR_TYPE_44x,
1467 .icache_bsize = 32,
1468 .dcache_bsize = 32,
1469 .machine_check = machine_check_4xx,
1470 .platform = "ppc440",
1471 },
1472 {
1473 .pvr_mask = 0xf0000fff,
1474 .pvr_value = 0x40000858,
1475 .cpu_name = "440EP Rev. A",
1476 .cpu_features = CPU_FTRS_44X,
1477 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1478 .mmu_features = MMU_FTR_TYPE_44x,
1479 .icache_bsize = 32,
1480 .dcache_bsize = 32,
1481 .cpu_setup = __setup_cpu_440ep,
1482 .machine_check = machine_check_4xx,
1483 .platform = "ppc440",
1484 },
1485 {
1486 .pvr_mask = 0xf0000fff,
1487 .pvr_value = 0x400008d3,
1488 .cpu_name = "440GR Rev. B",
1489 .cpu_features = CPU_FTRS_44X,
1490 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1491 .mmu_features = MMU_FTR_TYPE_44x,
1492 .icache_bsize = 32,
1493 .dcache_bsize = 32,
1494 .machine_check = machine_check_4xx,
1495 .platform = "ppc440",
1496 },
1497 {
1498 .pvr_mask = 0xf0000ff7,
1499 .pvr_value = 0x400008d4,
1500 .cpu_name = "440EP Rev. C",
1501 .cpu_features = CPU_FTRS_44X,
1502 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1503 .mmu_features = MMU_FTR_TYPE_44x,
1504 .icache_bsize = 32,
1505 .dcache_bsize = 32,
1506 .cpu_setup = __setup_cpu_440ep,
1507 .machine_check = machine_check_4xx,
1508 .platform = "ppc440",
1509 },
1510 {
1511 .pvr_mask = 0xf0000fff,
1512 .pvr_value = 0x400008db,
1513 .cpu_name = "440EP Rev. B",
1514 .cpu_features = CPU_FTRS_44X,
1515 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1516 .mmu_features = MMU_FTR_TYPE_44x,
1517 .icache_bsize = 32,
1518 .dcache_bsize = 32,
1519 .cpu_setup = __setup_cpu_440ep,
1520 .machine_check = machine_check_4xx,
1521 .platform = "ppc440",
1522 },
1523 {
1524 .pvr_mask = 0xf0000ffb,
1525 .pvr_value = 0x200008D0,
1526 .cpu_name = "440GRX",
1527 .cpu_features = CPU_FTRS_44X,
1528 .cpu_user_features = COMMON_USER_BOOKE,
1529 .mmu_features = MMU_FTR_TYPE_44x,
1530 .icache_bsize = 32,
1531 .dcache_bsize = 32,
1532 .cpu_setup = __setup_cpu_440grx,
1533 .machine_check = machine_check_440A,
1534 .platform = "ppc440",
1535 },
1536 {
1537 .pvr_mask = 0xf0000ffb,
1538 .pvr_value = 0x200008D8,
1539 .cpu_name = "440EPX",
1540 .cpu_features = CPU_FTRS_44X,
1541 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1542 .mmu_features = MMU_FTR_TYPE_44x,
1543 .icache_bsize = 32,
1544 .dcache_bsize = 32,
1545 .cpu_setup = __setup_cpu_440epx,
1546 .machine_check = machine_check_440A,
1547 .platform = "ppc440",
1548 },
1549 {
1550 .pvr_mask = 0xf0000fff,
1551 .pvr_value = 0x40000440,
1552 .cpu_name = "440GP Rev. B",
1553 .cpu_features = CPU_FTRS_44X,
1554 .cpu_user_features = COMMON_USER_BOOKE,
1555 .mmu_features = MMU_FTR_TYPE_44x,
1556 .icache_bsize = 32,
1557 .dcache_bsize = 32,
1558 .machine_check = machine_check_4xx,
1559 .platform = "ppc440gp",
1560 },
1561 {
1562 .pvr_mask = 0xf0000fff,
1563 .pvr_value = 0x40000481,
1564 .cpu_name = "440GP Rev. C",
1565 .cpu_features = CPU_FTRS_44X,
1566 .cpu_user_features = COMMON_USER_BOOKE,
1567 .mmu_features = MMU_FTR_TYPE_44x,
1568 .icache_bsize = 32,
1569 .dcache_bsize = 32,
1570 .machine_check = machine_check_4xx,
1571 .platform = "ppc440gp",
1572 },
1573 {
1574 .pvr_mask = 0xf0000fff,
1575 .pvr_value = 0x50000850,
1576 .cpu_name = "440GX Rev. A",
1577 .cpu_features = CPU_FTRS_44X,
1578 .cpu_user_features = COMMON_USER_BOOKE,
1579 .mmu_features = MMU_FTR_TYPE_44x,
1580 .icache_bsize = 32,
1581 .dcache_bsize = 32,
1582 .cpu_setup = __setup_cpu_440gx,
1583 .machine_check = machine_check_440A,
1584 .platform = "ppc440",
1585 },
1586 {
1587 .pvr_mask = 0xf0000fff,
1588 .pvr_value = 0x50000851,
1589 .cpu_name = "440GX Rev. B",
1590 .cpu_features = CPU_FTRS_44X,
1591 .cpu_user_features = COMMON_USER_BOOKE,
1592 .mmu_features = MMU_FTR_TYPE_44x,
1593 .icache_bsize = 32,
1594 .dcache_bsize = 32,
1595 .cpu_setup = __setup_cpu_440gx,
1596 .machine_check = machine_check_440A,
1597 .platform = "ppc440",
1598 },
1599 {
1600 .pvr_mask = 0xf0000fff,
1601 .pvr_value = 0x50000892,
1602 .cpu_name = "440GX Rev. C",
1603 .cpu_features = CPU_FTRS_44X,
1604 .cpu_user_features = COMMON_USER_BOOKE,
1605 .mmu_features = MMU_FTR_TYPE_44x,
1606 .icache_bsize = 32,
1607 .dcache_bsize = 32,
1608 .cpu_setup = __setup_cpu_440gx,
1609 .machine_check = machine_check_440A,
1610 .platform = "ppc440",
1611 },
1612 {
1613 .pvr_mask = 0xf0000fff,
1614 .pvr_value = 0x50000894,
1615 .cpu_name = "440GX Rev. F",
1616 .cpu_features = CPU_FTRS_44X,
1617 .cpu_user_features = COMMON_USER_BOOKE,
1618 .mmu_features = MMU_FTR_TYPE_44x,
1619 .icache_bsize = 32,
1620 .dcache_bsize = 32,
1621 .cpu_setup = __setup_cpu_440gx,
1622 .machine_check = machine_check_440A,
1623 .platform = "ppc440",
1624 },
1625 {
1626 .pvr_mask = 0xfff00fff,
1627 .pvr_value = 0x53200891,
1628 .cpu_name = "440SP Rev. A",
1629 .cpu_features = CPU_FTRS_44X,
1630 .cpu_user_features = COMMON_USER_BOOKE,
1631 .mmu_features = MMU_FTR_TYPE_44x,
1632 .icache_bsize = 32,
1633 .dcache_bsize = 32,
1634 .machine_check = machine_check_4xx,
1635 .platform = "ppc440",
1636 },
1637 {
1638 .pvr_mask = 0xfff00fff,
1639 .pvr_value = 0x53400890,
1640 .cpu_name = "440SPe Rev. A",
1641 .cpu_features = CPU_FTRS_44X,
1642 .cpu_user_features = COMMON_USER_BOOKE,
1643 .mmu_features = MMU_FTR_TYPE_44x,
1644 .icache_bsize = 32,
1645 .dcache_bsize = 32,
1646 .cpu_setup = __setup_cpu_440spe,
1647 .machine_check = machine_check_440A,
1648 .platform = "ppc440",
1649 },
1650 {
1651 .pvr_mask = 0xfff00fff,
1652 .pvr_value = 0x53400891,
1653 .cpu_name = "440SPe Rev. B",
1654 .cpu_features = CPU_FTRS_44X,
1655 .cpu_user_features = COMMON_USER_BOOKE,
1656 .mmu_features = MMU_FTR_TYPE_44x,
1657 .icache_bsize = 32,
1658 .dcache_bsize = 32,
1659 .cpu_setup = __setup_cpu_440spe,
1660 .machine_check = machine_check_440A,
1661 .platform = "ppc440",
1662 },
1663 {
1664 .pvr_mask = 0xffff0006,
1665 .pvr_value = 0x13020002,
1666 .cpu_name = "460EX",
1667 .cpu_features = CPU_FTRS_440x6,
1668 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1669 .mmu_features = MMU_FTR_TYPE_44x,
1670 .icache_bsize = 32,
1671 .dcache_bsize = 32,
1672 .cpu_setup = __setup_cpu_460ex,
1673 .machine_check = machine_check_440A,
1674 .platform = "ppc440",
1675 },
1676 {
1677 .pvr_mask = 0xffff0007,
1678 .pvr_value = 0x13020004,
1679 .cpu_name = "460EX Rev. B",
1680 .cpu_features = CPU_FTRS_440x6,
1681 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1682 .mmu_features = MMU_FTR_TYPE_44x,
1683 .icache_bsize = 32,
1684 .dcache_bsize = 32,
1685 .cpu_setup = __setup_cpu_460ex,
1686 .machine_check = machine_check_440A,
1687 .platform = "ppc440",
1688 },
1689 {
1690 .pvr_mask = 0xffff0006,
1691 .pvr_value = 0x13020000,
1692 .cpu_name = "460GT",
1693 .cpu_features = CPU_FTRS_440x6,
1694 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1695 .mmu_features = MMU_FTR_TYPE_44x,
1696 .icache_bsize = 32,
1697 .dcache_bsize = 32,
1698 .cpu_setup = __setup_cpu_460gt,
1699 .machine_check = machine_check_440A,
1700 .platform = "ppc440",
1701 },
1702 {
1703 .pvr_mask = 0xffff0007,
1704 .pvr_value = 0x13020005,
1705 .cpu_name = "460GT Rev. B",
1706 .cpu_features = CPU_FTRS_440x6,
1707 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1708 .mmu_features = MMU_FTR_TYPE_44x,
1709 .icache_bsize = 32,
1710 .dcache_bsize = 32,
1711 .cpu_setup = __setup_cpu_460gt,
1712 .machine_check = machine_check_440A,
1713 .platform = "ppc440",
1714 },
1715 {
1716 .pvr_mask = 0xffffff00,
1717 .pvr_value = 0x13541800,
1718 .cpu_name = "460SX",
1719 .cpu_features = CPU_FTRS_44X,
1720 .cpu_user_features = COMMON_USER_BOOKE,
1721 .mmu_features = MMU_FTR_TYPE_44x,
1722 .icache_bsize = 32,
1723 .dcache_bsize = 32,
1724 .cpu_setup = __setup_cpu_460sx,
1725 .machine_check = machine_check_440A,
1726 .platform = "ppc440",
1727 },
1728 {
1729 .pvr_mask = 0xfffffff0,
1730 .pvr_value = 0x12C41C80,
1731 .cpu_name = "APM821XX",
1732 .cpu_features = CPU_FTRS_44X,
1733 .cpu_user_features = COMMON_USER_BOOKE |
1734 PPC_FEATURE_HAS_FPU,
1735 .mmu_features = MMU_FTR_TYPE_44x,
1736 .icache_bsize = 32,
1737 .dcache_bsize = 32,
1738 .cpu_setup = __setup_cpu_apm821xx,
1739 .machine_check = machine_check_440A,
1740 .platform = "ppc440",
1741 },
1742 {
1743 .pvr_mask = 0x00000000,
1744 .pvr_value = 0x00000000,
1745 .cpu_name = "(generic 44x PPC)",
1746 .cpu_features = CPU_FTRS_44X,
1747 .cpu_user_features = COMMON_USER_BOOKE,
1748 .mmu_features = MMU_FTR_TYPE_44x,
1749 .icache_bsize = 32,
1750 .dcache_bsize = 32,
1751 .machine_check = machine_check_4xx,
1752 .platform = "ppc440",
1753 }
1754 #else
1755 {
1756 .pvr_mask = 0xffffffff,
1757 .pvr_value = 0x11a52080,
1758 .cpu_name = "476",
1759 .cpu_features = CPU_FTRS_47X | CPU_FTR_476_DD2,
1760 .cpu_user_features = COMMON_USER_BOOKE |
1761 PPC_FEATURE_HAS_FPU,
1762 .mmu_features = MMU_FTR_TYPE_47x |
1763 MMU_FTR_USE_TLBIVAX_BCAST | MMU_FTR_LOCK_BCAST_INVAL,
1764 .icache_bsize = 32,
1765 .dcache_bsize = 128,
1766 .machine_check = machine_check_47x,
1767 .platform = "ppc470",
1768 },
1769 {
1770 .pvr_mask = 0xffff0000,
1771 .pvr_value = 0x7ff50000,
1772 .cpu_name = "476fpe",
1773 .cpu_features = CPU_FTRS_47X | CPU_FTR_476_DD2,
1774 .cpu_user_features = COMMON_USER_BOOKE |
1775 PPC_FEATURE_HAS_FPU,
1776 .mmu_features = MMU_FTR_TYPE_47x |
1777 MMU_FTR_USE_TLBIVAX_BCAST | MMU_FTR_LOCK_BCAST_INVAL,
1778 .icache_bsize = 32,
1779 .dcache_bsize = 128,
1780 .machine_check = machine_check_47x,
1781 .platform = "ppc470",
1782 },
1783 {
1784 .pvr_mask = 0xffff0000,
1785 .pvr_value = 0x00050000,
1786 .cpu_name = "476",
1787 .cpu_features = CPU_FTRS_47X,
1788 .cpu_user_features = COMMON_USER_BOOKE |
1789 PPC_FEATURE_HAS_FPU,
1790 .mmu_features = MMU_FTR_TYPE_47x |
1791 MMU_FTR_USE_TLBIVAX_BCAST | MMU_FTR_LOCK_BCAST_INVAL,
1792 .icache_bsize = 32,
1793 .dcache_bsize = 128,
1794 .machine_check = machine_check_47x,
1795 .platform = "ppc470",
1796 },
1797 {
1798 .pvr_mask = 0xffff0000,
1799 .pvr_value = 0x11a50000,
1800 .cpu_name = "476",
1801 .cpu_features = CPU_FTRS_47X,
1802 .cpu_user_features = COMMON_USER_BOOKE |
1803 PPC_FEATURE_HAS_FPU,
1804 .mmu_features = MMU_FTR_TYPE_47x |
1805 MMU_FTR_USE_TLBIVAX_BCAST | MMU_FTR_LOCK_BCAST_INVAL,
1806 .icache_bsize = 32,
1807 .dcache_bsize = 128,
1808 .machine_check = machine_check_47x,
1809 .platform = "ppc470",
1810 },
1811 {
1812 .pvr_mask = 0x00000000,
1813 .pvr_value = 0x00000000,
1814 .cpu_name = "(generic 47x PPC)",
1815 .cpu_features = CPU_FTRS_47X,
1816 .cpu_user_features = COMMON_USER_BOOKE,
1817 .mmu_features = MMU_FTR_TYPE_47x,
1818 .icache_bsize = 32,
1819 .dcache_bsize = 128,
1820 .machine_check = machine_check_47x,
1821 .platform = "ppc470",
1822 }
1823 #endif
1824 #endif
1825 #endif
1826 #ifdef CONFIG_E500
1827 #ifdef CONFIG_PPC32
1828 #ifndef CONFIG_PPC_E500MC
1829 {
1830 .pvr_mask = 0xffff0000,
1831 .pvr_value = 0x80200000,
1832 .cpu_name = "e500",
1833 .cpu_features = CPU_FTRS_E500,
1834 .cpu_user_features = COMMON_USER_BOOKE |
1835 PPC_FEATURE_HAS_SPE_COMP |
1836 PPC_FEATURE_HAS_EFP_SINGLE_COMP,
1837 .cpu_user_features2 = PPC_FEATURE2_ISEL,
1838 .mmu_features = MMU_FTR_TYPE_FSL_E,
1839 .icache_bsize = 32,
1840 .dcache_bsize = 32,
1841 .num_pmcs = 4,
1842 .cpu_setup = __setup_cpu_e500v1,
1843 .machine_check = machine_check_e500,
1844 .platform = "ppc8540",
1845 },
1846 {
1847 .pvr_mask = 0xffff0000,
1848 .pvr_value = 0x80210000,
1849 .cpu_name = "e500v2",
1850 .cpu_features = CPU_FTRS_E500_2,
1851 .cpu_user_features = COMMON_USER_BOOKE |
1852 PPC_FEATURE_HAS_SPE_COMP |
1853 PPC_FEATURE_HAS_EFP_SINGLE_COMP |
1854 PPC_FEATURE_HAS_EFP_DOUBLE_COMP,
1855 .cpu_user_features2 = PPC_FEATURE2_ISEL,
1856 .mmu_features = MMU_FTR_TYPE_FSL_E | MMU_FTR_BIG_PHYS,
1857 .icache_bsize = 32,
1858 .dcache_bsize = 32,
1859 .num_pmcs = 4,
1860 .cpu_setup = __setup_cpu_e500v2,
1861 .machine_check = machine_check_e500,
1862 .platform = "ppc8548",
1863 .cpu_down_flush = cpu_down_flush_e500v2,
1864 },
1865 #else
1866 {
1867 .pvr_mask = 0xffff0000,
1868 .pvr_value = 0x80230000,
1869 .cpu_name = "e500mc",
1870 .cpu_features = CPU_FTRS_E500MC,
1871 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1872 .cpu_user_features2 = PPC_FEATURE2_ISEL,
1873 .mmu_features = MMU_FTR_TYPE_FSL_E | MMU_FTR_BIG_PHYS |
1874 MMU_FTR_USE_TLBILX,
1875 .icache_bsize = 64,
1876 .dcache_bsize = 64,
1877 .num_pmcs = 4,
1878 .cpu_setup = __setup_cpu_e500mc,
1879 .machine_check = machine_check_e500mc,
1880 .platform = "ppce500mc",
1881 .cpu_down_flush = cpu_down_flush_e500mc,
1882 },
1883 #endif
1884 #endif
1885 #ifdef CONFIG_PPC_E500MC
1886 {
1887 .pvr_mask = 0xffff0000,
1888 .pvr_value = 0x80240000,
1889 .cpu_name = "e5500",
1890 .cpu_features = CPU_FTRS_E5500,
1891 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
1892 .cpu_user_features2 = PPC_FEATURE2_ISEL,
1893 .mmu_features = MMU_FTR_TYPE_FSL_E | MMU_FTR_BIG_PHYS |
1894 MMU_FTR_USE_TLBILX,
1895 .icache_bsize = 64,
1896 .dcache_bsize = 64,
1897 .num_pmcs = 4,
1898 .cpu_setup = __setup_cpu_e5500,
1899 #ifndef CONFIG_PPC32
1900 .cpu_restore = __restore_cpu_e5500,
1901 #endif
1902 .machine_check = machine_check_e500mc,
1903 .platform = "ppce5500",
1904 .cpu_down_flush = cpu_down_flush_e5500,
1905 },
1906 {
1907 .pvr_mask = 0xffff0000,
1908 .pvr_value = 0x80400000,
1909 .cpu_name = "e6500",
1910 .cpu_features = CPU_FTRS_E6500,
1911 .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU |
1912 PPC_FEATURE_HAS_ALTIVEC_COMP,
1913 .cpu_user_features2 = PPC_FEATURE2_ISEL,
1914 .mmu_features = MMU_FTR_TYPE_FSL_E | MMU_FTR_BIG_PHYS |
1915 MMU_FTR_USE_TLBILX,
1916 .icache_bsize = 64,
1917 .dcache_bsize = 64,
1918 .num_pmcs = 6,
1919 .cpu_setup = __setup_cpu_e6500,
1920 #ifndef CONFIG_PPC32
1921 .cpu_restore = __restore_cpu_e6500,
1922 #endif
1923 .machine_check = machine_check_e500mc,
1924 .platform = "ppce6500",
1925 .cpu_down_flush = cpu_down_flush_e6500,
1926 },
1927 #endif
1928 #ifdef CONFIG_PPC32
1929 {
1930 .pvr_mask = 0x00000000,
1931 .pvr_value = 0x00000000,
1932 .cpu_name = "(generic E500 PPC)",
1933 .cpu_features = CPU_FTRS_E500,
1934 .cpu_user_features = COMMON_USER_BOOKE |
1935 PPC_FEATURE_HAS_SPE_COMP |
1936 PPC_FEATURE_HAS_EFP_SINGLE_COMP,
1937 .mmu_features = MMU_FTR_TYPE_FSL_E,
1938 .icache_bsize = 32,
1939 .dcache_bsize = 32,
1940 .machine_check = machine_check_e500,
1941 .platform = "powerpc",
1942 }
1943 #endif
1944 #endif
1945 };
1946
1947 void __init set_cur_cpu_spec(struct cpu_spec *s)
1948 {
1949 struct cpu_spec *t = &the_cpu_spec;
1950
1951 t = PTRRELOC(t);
1952
1953
1954
1955
1956 memcpy(t, s, sizeof(*t));
1957
1958 *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec;
1959 }
1960
1961 static struct cpu_spec * __init setup_cpu_spec(unsigned long offset,
1962 struct cpu_spec *s)
1963 {
1964 struct cpu_spec *t = &the_cpu_spec;
1965 struct cpu_spec old;
1966
1967 t = PTRRELOC(t);
1968 old = *t;
1969
1970
1971
1972
1973
1974 memcpy(t, s, sizeof(*t));
1975
1976
1977
1978
1979
1980
1981 if (old.num_pmcs && !s->num_pmcs) {
1982 t->num_pmcs = old.num_pmcs;
1983 t->pmc_type = old.pmc_type;
1984
1985
1986
1987
1988
1989 t->cpu_features |= old.cpu_features & CPU_FTR_PMAO_BUG;
1990 }
1991
1992 *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec;
1993
1994
1995
1996
1997
1998 if (*PTRRELOC(&powerpc_base_platform) == NULL)
1999 *PTRRELOC(&powerpc_base_platform) = t->platform;
2000
2001 #if defined(CONFIG_PPC64) || defined(CONFIG_BOOKE)
2002
2003
2004
2005
2006
2007
2008 if (t->cpu_setup) {
2009 t->cpu_setup(offset, t);
2010 }
2011 #endif
2012
2013 return t;
2014 }
2015
2016 struct cpu_spec * __init identify_cpu(unsigned long offset, unsigned int pvr)
2017 {
2018 struct cpu_spec *s = cpu_specs;
2019 int i;
2020
2021 s = PTRRELOC(s);
2022
2023 for (i = 0; i < ARRAY_SIZE(cpu_specs); i++,s++) {
2024 if ((pvr & s->pvr_mask) == s->pvr_value)
2025 return setup_cpu_spec(offset, s);
2026 }
2027
2028 BUG();
2029
2030 return NULL;
2031 }
2032
2033
2034
2035
2036
2037
2038 void __init identify_cpu_name(unsigned int pvr)
2039 {
2040 struct cpu_spec *s = cpu_specs;
2041 struct cpu_spec *t = &the_cpu_spec;
2042 int i;
2043
2044 s = PTRRELOC(s);
2045 t = PTRRELOC(t);
2046
2047 for (i = 0; i < ARRAY_SIZE(cpu_specs); i++,s++) {
2048 if ((pvr & s->pvr_mask) == s->pvr_value) {
2049 t->cpu_name = s->cpu_name;
2050 return;
2051 }
2052 }
2053 }
2054
2055
2056 #ifdef CONFIG_JUMP_LABEL_FEATURE_CHECKS
2057 struct static_key_true cpu_feature_keys[NUM_CPU_FTR_KEYS] = {
2058 [0 ... NUM_CPU_FTR_KEYS - 1] = STATIC_KEY_TRUE_INIT
2059 };
2060 EXPORT_SYMBOL_GPL(cpu_feature_keys);
2061
2062 void __init cpu_feature_keys_init(void)
2063 {
2064 int i;
2065
2066 for (i = 0; i < NUM_CPU_FTR_KEYS; i++) {
2067 unsigned long f = 1ul << i;
2068
2069 if (!(cur_cpu_spec->cpu_features & f))
2070 static_branch_disable(&cpu_feature_keys[i]);
2071 }
2072 }
2073
2074 struct static_key_true mmu_feature_keys[NUM_MMU_FTR_KEYS] = {
2075 [0 ... NUM_MMU_FTR_KEYS - 1] = STATIC_KEY_TRUE_INIT
2076 };
2077 EXPORT_SYMBOL(mmu_feature_keys);
2078
2079 void __init mmu_feature_keys_init(void)
2080 {
2081 int i;
2082
2083 for (i = 0; i < NUM_MMU_FTR_KEYS; i++) {
2084 unsigned long f = 1ul << i;
2085
2086 if (!(cur_cpu_spec->mmu_features & f))
2087 static_branch_disable(&mmu_feature_keys[i]);
2088 }
2089 }
2090 #endif