Lines Matching refs:c
77 static inline void cpu_set_fpu_fcsr_mask(struct cpuinfo_mips *c) in cpu_set_fpu_fcsr_mask() argument
81 fcsr = c->fpu_csr31; in cpu_set_fpu_fcsr_mask()
99 c->fpu_msk31 = ~(fcsr0 ^ fcsr1) & ~mask; in cpu_set_fpu_fcsr_mask()
106 static void cpu_set_fpu_2008(struct cpuinfo_mips *c) in cpu_set_fpu_2008() argument
108 if (c->isa_level & (MIPS_CPU_ISA_M32R1 | MIPS_CPU_ISA_M64R1 | in cpu_set_fpu_2008()
131 c->options |= MIPS_CPU_NAN_LEGACY; in cpu_set_fpu_2008()
133 c->options |= MIPS_CPU_NAN_2008; in cpu_set_fpu_2008()
136 c->fpu_msk31 &= ~FPU_CSR_ABS2008; in cpu_set_fpu_2008()
138 c->fpu_csr31 |= fcsr & FPU_CSR_ABS2008; in cpu_set_fpu_2008()
141 c->fpu_msk31 &= ~FPU_CSR_NAN2008; in cpu_set_fpu_2008()
143 c->fpu_csr31 |= fcsr & FPU_CSR_NAN2008; in cpu_set_fpu_2008()
145 c->options |= MIPS_CPU_NAN_LEGACY; in cpu_set_fpu_2008()
150 c->options |= MIPS_CPU_NAN_LEGACY; in cpu_set_fpu_2008()
166 static void cpu_set_nofpu_2008(struct cpuinfo_mips *c) in cpu_set_nofpu_2008() argument
168 c->options &= ~(MIPS_CPU_NAN_2008 | MIPS_CPU_NAN_LEGACY); in cpu_set_nofpu_2008()
169 c->fpu_csr31 &= ~(FPU_CSR_ABS2008 | FPU_CSR_NAN2008); in cpu_set_nofpu_2008()
170 c->fpu_msk31 &= ~(FPU_CSR_ABS2008 | FPU_CSR_NAN2008); in cpu_set_nofpu_2008()
174 if (c->isa_level & (MIPS_CPU_ISA_M32R1 | MIPS_CPU_ISA_M64R1 | in cpu_set_nofpu_2008()
177 c->options |= MIPS_CPU_NAN_2008 | MIPS_CPU_NAN_LEGACY; in cpu_set_nofpu_2008()
179 c->options |= MIPS_CPU_NAN_LEGACY; in cpu_set_nofpu_2008()
180 c->fpu_msk31 |= FPU_CSR_ABS2008 | FPU_CSR_NAN2008; in cpu_set_nofpu_2008()
184 c->options |= MIPS_CPU_NAN_LEGACY; in cpu_set_nofpu_2008()
185 c->fpu_msk31 |= FPU_CSR_ABS2008 | FPU_CSR_NAN2008; in cpu_set_nofpu_2008()
188 c->options |= MIPS_CPU_NAN_2008; in cpu_set_nofpu_2008()
189 c->fpu_csr31 |= FPU_CSR_ABS2008 | FPU_CSR_NAN2008; in cpu_set_nofpu_2008()
190 c->fpu_msk31 |= FPU_CSR_ABS2008 | FPU_CSR_NAN2008; in cpu_set_nofpu_2008()
193 c->options |= MIPS_CPU_NAN_2008 | MIPS_CPU_NAN_LEGACY; in cpu_set_nofpu_2008()
202 static void cpu_set_nan_2008(struct cpuinfo_mips *c) in cpu_set_nan_2008() argument
260 static void cpu_set_nofpu_id(struct cpuinfo_mips *c) in cpu_set_nofpu_id() argument
265 if (c->isa_level & (MIPS_CPU_ISA_M32R1 | MIPS_CPU_ISA_M64R1 | in cpu_set_nofpu_id()
269 if (c->isa_level & (MIPS_CPU_ISA_M32R2 | MIPS_CPU_ISA_M64R2 | in cpu_set_nofpu_id()
272 if (c->options & MIPS_CPU_NAN_2008) in cpu_set_nofpu_id()
274 c->fpu_id = value; in cpu_set_nofpu_id()
283 static void cpu_set_fpu_opts(struct cpuinfo_mips *c) in cpu_set_fpu_opts() argument
285 c->fpu_id = cpu_get_fpu_id(); in cpu_set_fpu_opts()
286 mips_nofpu_msk31 = c->fpu_msk31; in cpu_set_fpu_opts()
288 if (c->isa_level & (MIPS_CPU_ISA_M32R1 | MIPS_CPU_ISA_M64R1 | in cpu_set_fpu_opts()
291 if (c->fpu_id & MIPS_FPIR_3D) in cpu_set_fpu_opts()
292 c->ases |= MIPS_ASE_MIPS3D; in cpu_set_fpu_opts()
293 if (c->fpu_id & MIPS_FPIR_UFRP) in cpu_set_fpu_opts()
294 c->options |= MIPS_CPU_UFR; in cpu_set_fpu_opts()
295 if (c->fpu_id & MIPS_FPIR_FREP) in cpu_set_fpu_opts()
296 c->options |= MIPS_CPU_FRE; in cpu_set_fpu_opts()
299 cpu_set_fpu_fcsr_mask(c); in cpu_set_fpu_opts()
300 cpu_set_fpu_2008(c); in cpu_set_fpu_opts()
301 cpu_set_nan_2008(c); in cpu_set_fpu_opts()
307 static void cpu_set_nofpu_opts(struct cpuinfo_mips *c) in cpu_set_nofpu_opts() argument
309 c->options &= ~MIPS_CPU_FPU; in cpu_set_nofpu_opts()
310 c->fpu_msk31 = mips_nofpu_msk31; in cpu_set_nofpu_opts()
312 cpu_set_nofpu_2008(c); in cpu_set_nofpu_opts()
313 cpu_set_nan_2008(c); in cpu_set_nofpu_opts()
314 cpu_set_nofpu_id(c); in cpu_set_nofpu_opts()
363 static int set_ftlb_enable(struct cpuinfo_mips *c, enum ftlb_flags flags);
420 static inline void cpu_set_mt_per_tc_perf(struct cpuinfo_mips *c) in cpu_set_mt_per_tc_perf() argument
423 c->options |= MIPS_CPU_MT_PER_TC_PERF_COUNTERS; in cpu_set_mt_per_tc_perf()
428 struct cpuinfo_mips *c = ¤t_cpu_data; in check_errata() local
437 if ((c->processor_id & PRID_REV_MASK) <= PRID_REV_34K_V1_0_2) in check_errata()
478 static inline void cpu_probe_vmbits(struct cpuinfo_mips *c) in cpu_probe_vmbits() argument
483 c->vmbits = fls64(read_c0_entryhi() & 0x3fffffffffffe000ULL); in cpu_probe_vmbits()
487 static void set_isa(struct cpuinfo_mips *c, unsigned int isa) in set_isa() argument
491 c->isa_level |= MIPS_CPU_ISA_M32R2 | MIPS_CPU_ISA_M64R2; in set_isa()
493 c->isa_level |= MIPS_CPU_ISA_M32R1 | MIPS_CPU_ISA_M64R1; in set_isa()
495 c->isa_level |= MIPS_CPU_ISA_V; in set_isa()
497 c->isa_level |= MIPS_CPU_ISA_IV; in set_isa()
499 c->isa_level |= MIPS_CPU_ISA_II | MIPS_CPU_ISA_III; in set_isa()
504 c->isa_level |= MIPS_CPU_ISA_M32R6 | MIPS_CPU_ISA_M64R6; in set_isa()
506 c->isa_level |= MIPS_CPU_ISA_M32R6; in set_isa()
510 c->isa_level |= MIPS_CPU_ISA_M32R2; in set_isa()
512 c->isa_level |= MIPS_CPU_ISA_M32R1; in set_isa()
514 c->isa_level |= MIPS_CPU_ISA_II; in set_isa()
522 static unsigned int calculate_ftlb_probability(struct cpuinfo_mips *c) in calculate_ftlb_probability() argument
525 unsigned int probability = c->tlbsize / c->tlbsizevtlb; in calculate_ftlb_probability()
548 static int set_ftlb_enable(struct cpuinfo_mips *c, enum ftlb_flags flags) in set_ftlb_enable() argument
553 switch (c->cputype) { in set_ftlb_enable()
567 config |= calculate_ftlb_probability(c) in set_ftlb_enable()
600 static inline unsigned int decode_config0(struct cpuinfo_mips *c) in decode_config0() argument
612 c->options |= MIPS_CPU_TLB; in decode_config0()
614 c->options |= MIPS_CPU_TLB | MIPS_CPU_FTLB; in decode_config0()
621 set_isa(c, MIPS_CPU_ISA_M32R1); in decode_config0()
624 set_isa(c, MIPS_CPU_ISA_M32R2); in decode_config0()
627 set_isa(c, MIPS_CPU_ISA_M32R6); in decode_config0()
636 set_isa(c, MIPS_CPU_ISA_M64R1); in decode_config0()
639 set_isa(c, MIPS_CPU_ISA_M64R2); in decode_config0()
642 set_isa(c, MIPS_CPU_ISA_M64R6); in decode_config0()
658 static inline unsigned int decode_config1(struct cpuinfo_mips *c) in decode_config1() argument
665 c->ases |= MIPS_ASE_MDMX; in decode_config1()
667 c->options |= MIPS_CPU_PERF; in decode_config1()
669 c->options |= MIPS_CPU_WATCH; in decode_config1()
671 c->ases |= MIPS_ASE_MIPS16; in decode_config1()
673 c->options |= MIPS_CPU_EJTAG; in decode_config1()
675 c->options |= MIPS_CPU_FPU; in decode_config1()
676 c->options |= MIPS_CPU_32FPR; in decode_config1()
679 c->tlbsize = ((config1 & MIPS_CONF1_TLBS) >> 25) + 1; in decode_config1()
680 c->tlbsizevtlb = c->tlbsize; in decode_config1()
681 c->tlbsizeftlbsets = 0; in decode_config1()
687 static inline unsigned int decode_config2(struct cpuinfo_mips *c) in decode_config2() argument
694 c->scache.flags &= ~MIPS_CACHE_NOT_PRESENT; in decode_config2()
699 static inline unsigned int decode_config3(struct cpuinfo_mips *c) in decode_config3() argument
706 c->ases |= MIPS_ASE_SMARTMIPS; in decode_config3()
707 c->options |= MIPS_CPU_RIXI | MIPS_CPU_CTXTC; in decode_config3()
710 c->options |= MIPS_CPU_RIXI; in decode_config3()
712 c->options |= MIPS_CPU_CTXTC; in decode_config3()
714 c->ases |= MIPS_ASE_DSP; in decode_config3()
716 c->ases |= MIPS_ASE_DSP2P; in decode_config3()
718 c->ases |= MIPS_ASE_DSP3; in decode_config3()
721 c->options |= MIPS_CPU_VINT; in decode_config3()
723 c->options |= MIPS_CPU_VEIC; in decode_config3()
725 c->options |= MIPS_CPU_LPA; in decode_config3()
727 c->ases |= MIPS_ASE_MIPSMT; in decode_config3()
729 c->options |= MIPS_CPU_ULRI; in decode_config3()
731 c->options |= MIPS_CPU_MICROMIPS; in decode_config3()
733 c->ases |= MIPS_ASE_VZ; in decode_config3()
735 c->options |= MIPS_CPU_SEGMENTS; in decode_config3()
737 c->options |= MIPS_CPU_BADINSTR; in decode_config3()
739 c->options |= MIPS_CPU_BADINSTRP; in decode_config3()
741 c->ases |= MIPS_ASE_MSA; in decode_config3()
743 c->htw_seq = 0; in decode_config3()
744 c->options |= MIPS_CPU_HTW; in decode_config3()
747 c->options |= MIPS_CPU_CDMM; in decode_config3()
749 c->options |= MIPS_CPU_SP; in decode_config3()
754 static inline unsigned int decode_config4(struct cpuinfo_mips *c) in decode_config4() argument
766 c->options |= MIPS_CPU_TLBINV; in decode_config4()
782 c->tlbsize += (config4 & MIPS_CONF4_MMUSIZEEXT) * 0x40; in decode_config4()
783 c->tlbsizevtlb = c->tlbsize; in decode_config4()
786 c->tlbsizevtlb += in decode_config4()
789 c->tlbsize = c->tlbsizevtlb; in decode_config4()
805 set_ftlb_enable(c, 0); in decode_config4()
809 c->tlbsizeftlbsets = 1 << in decode_config4()
812 c->tlbsizeftlbways = ((config4 & MIPS_CONF4_FTLBWAYS) >> in decode_config4()
814 c->tlbsize += c->tlbsizeftlbways * c->tlbsizeftlbsets; in decode_config4()
820 c->kscratch_mask = (config4 & MIPS_CONF4_KSCREXIST) in decode_config4()
826 set_cpu_asid_mask(c, asid_mask); in decode_config4()
833 WARN_ON(asid_mask != cpu_asid_mask(c)); in decode_config4()
838 static inline unsigned int decode_config5(struct cpuinfo_mips *c) in decode_config5() argument
847 c->options |= MIPS_CPU_EVA; in decode_config5()
849 c->options |= MIPS_CPU_MAAR; in decode_config5()
851 c->options |= MIPS_CPU_RW_LLB; in decode_config5()
853 c->options |= MIPS_CPU_MVH; in decode_config5()
855 c->options |= MIPS_CPU_VP; in decode_config5()
857 c->ases |= MIPS_ASE_MIPS16E2; in decode_config5()
865 static void decode_configs(struct cpuinfo_mips *c) in decode_configs() argument
870 c->options = MIPS_CPU_4KEX | MIPS_CPU_4K_CACHE | MIPS_CPU_COUNTER | in decode_configs()
873 c->scache.flags = MIPS_CACHE_NOT_PRESENT; in decode_configs()
876 set_ftlb_enable(c, mips_ftlb_disabled ? 0 : FTLB_EN); in decode_configs()
878 ok = decode_config0(c); /* Read Config registers. */ in decode_configs()
881 ok = decode_config1(c); in decode_configs()
883 ok = decode_config2(c); in decode_configs()
885 ok = decode_config3(c); in decode_configs()
887 ok = decode_config4(c); in decode_configs()
889 ok = decode_config5(c); in decode_configs()
901 c->options |= MIPS_CPU_EBASE_WG; in decode_configs()
920 c->options |= MIPS_CPU_EBASE_WG; in decode_configs()
927 set_ftlb_enable(c, (mips_ftlb_disabled ? 0 : FTLB_EN) | FTLB_SET_PROB); in decode_configs()
929 mips_probe_watch_registers(c); in decode_configs()
938 cpu_set_core(c, core); in decode_configs()
971 static inline unsigned int decode_guest_config0(struct cpuinfo_mips *c) in decode_guest_config0() argument
978 c->guest.conf |= BIT(1); in decode_guest_config0()
982 static inline unsigned int decode_guest_config1(struct cpuinfo_mips *c) in decode_guest_config1() argument
991 c->guest.options |= MIPS_CPU_FPU; in decode_guest_config1()
993 c->guest.options_dyn |= MIPS_CPU_FPU; in decode_guest_config1()
996 c->guest.options |= MIPS_CPU_WATCH; in decode_guest_config1()
998 c->guest.options_dyn |= MIPS_CPU_WATCH; in decode_guest_config1()
1001 c->guest.options |= MIPS_CPU_PERF; in decode_guest_config1()
1003 c->guest.options_dyn |= MIPS_CPU_PERF; in decode_guest_config1()
1006 c->guest.conf |= BIT(2); in decode_guest_config1()
1010 static inline unsigned int decode_guest_config2(struct cpuinfo_mips *c) in decode_guest_config2() argument
1017 c->guest.conf |= BIT(3); in decode_guest_config2()
1021 static inline unsigned int decode_guest_config3(struct cpuinfo_mips *c) in decode_guest_config3() argument
1030 c->guest.options |= MIPS_CPU_CTXTC; in decode_guest_config3()
1032 c->guest.options_dyn |= MIPS_CPU_CTXTC; in decode_guest_config3()
1035 c->guest.options |= MIPS_CPU_HTW; in decode_guest_config3()
1038 c->guest.options |= MIPS_CPU_ULRI; in decode_guest_config3()
1041 c->guest.options |= MIPS_CPU_SEGMENTS; in decode_guest_config3()
1044 c->guest.options |= MIPS_CPU_BADINSTR; in decode_guest_config3()
1046 c->guest.options |= MIPS_CPU_BADINSTRP; in decode_guest_config3()
1049 c->guest.ases |= MIPS_ASE_MSA; in decode_guest_config3()
1051 c->guest.ases_dyn |= MIPS_ASE_MSA; in decode_guest_config3()
1054 c->guest.conf |= BIT(4); in decode_guest_config3()
1058 static inline unsigned int decode_guest_config4(struct cpuinfo_mips *c) in decode_guest_config4() argument
1065 c->guest.kscratch_mask = (config4 & MIPS_CONF4_KSCREXIST) in decode_guest_config4()
1069 c->guest.conf |= BIT(5); in decode_guest_config4()
1073 static inline unsigned int decode_guest_config5(struct cpuinfo_mips *c) in decode_guest_config5() argument
1081 c->guest.options |= MIPS_CPU_MAAR; in decode_guest_config5()
1083 c->guest.options_dyn |= MIPS_CPU_MAAR; in decode_guest_config5()
1086 c->guest.options |= MIPS_CPU_RW_LLB; in decode_guest_config5()
1089 c->guest.options |= MIPS_CPU_MVH; in decode_guest_config5()
1092 c->guest.conf |= BIT(6); in decode_guest_config5()
1096 static inline void decode_guest_configs(struct cpuinfo_mips *c) in decode_guest_configs() argument
1100 ok = decode_guest_config0(c); in decode_guest_configs()
1102 ok = decode_guest_config1(c); in decode_guest_configs()
1104 ok = decode_guest_config2(c); in decode_guest_configs()
1106 ok = decode_guest_config3(c); in decode_guest_configs()
1108 ok = decode_guest_config4(c); in decode_guest_configs()
1110 decode_guest_config5(c); in decode_guest_configs()
1113 static inline void cpu_probe_guestctl0(struct cpuinfo_mips *c) in cpu_probe_guestctl0() argument
1120 c->options |= MIPS_CPU_GUESTCTL0EXT; in cpu_probe_guestctl0()
1122 c->options |= MIPS_CPU_GUESTCTL1; in cpu_probe_guestctl0()
1124 c->options |= MIPS_CPU_GUESTCTL2; in cpu_probe_guestctl0()
1126 c->options |= MIPS_CPU_GUESTID; in cpu_probe_guestctl0()
1142 c->options |= MIPS_CPU_DRG; in cpu_probe_guestctl0()
1147 static inline void cpu_probe_guestctl1(struct cpuinfo_mips *c) in cpu_probe_guestctl1() argument
1153 c->guestid_mask = (read_c0_guestctl1() & MIPS_GCTL1_ID) in cpu_probe_guestctl1()
1159 static inline void cpu_probe_gtoffset(struct cpuinfo_mips *c) in cpu_probe_gtoffset() argument
1164 c->gtoffset_mask = read_c0_gtoffset(); in cpu_probe_gtoffset()
1168 static inline void cpu_probe_vz(struct cpuinfo_mips *c) in cpu_probe_vz() argument
1170 cpu_probe_guestctl0(c); in cpu_probe_vz()
1172 cpu_probe_guestctl1(c); in cpu_probe_vz()
1174 cpu_probe_gtoffset(c); in cpu_probe_vz()
1176 decode_guest_configs(c); in cpu_probe_vz()
1182 static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_legacy() argument
1184 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_legacy()
1186 c->cputype = CPU_R2000; in cpu_probe_legacy()
1188 c->fpu_msk31 |= FPU_CSR_CONDX | FPU_CSR_FS; in cpu_probe_legacy()
1189 c->options = MIPS_CPU_TLB | MIPS_CPU_3K_CACHE | in cpu_probe_legacy()
1192 c->options |= MIPS_CPU_FPU; in cpu_probe_legacy()
1193 c->tlbsize = 64; in cpu_probe_legacy()
1196 if ((c->processor_id & PRID_REV_MASK) == PRID_REV_R3000A) { in cpu_probe_legacy()
1198 c->cputype = CPU_R3081E; in cpu_probe_legacy()
1201 c->cputype = CPU_R3000A; in cpu_probe_legacy()
1205 c->cputype = CPU_R3000; in cpu_probe_legacy()
1208 c->fpu_msk31 |= FPU_CSR_CONDX | FPU_CSR_FS; in cpu_probe_legacy()
1209 c->options = MIPS_CPU_TLB | MIPS_CPU_3K_CACHE | in cpu_probe_legacy()
1212 c->options |= MIPS_CPU_FPU; in cpu_probe_legacy()
1213 c->tlbsize = 64; in cpu_probe_legacy()
1217 if ((c->processor_id & PRID_REV_MASK) >= in cpu_probe_legacy()
1219 c->cputype = CPU_R4400PC; in cpu_probe_legacy()
1222 c->cputype = CPU_R4000PC; in cpu_probe_legacy()
1246 if ((c->processor_id & PRID_REV_MASK) >= in cpu_probe_legacy()
1248 c->cputype = mc ? CPU_R4400MC : CPU_R4400SC; in cpu_probe_legacy()
1251 c->cputype = mc ? CPU_R4000MC : CPU_R4000SC; in cpu_probe_legacy()
1256 set_isa(c, MIPS_CPU_ISA_III); in cpu_probe_legacy()
1257 c->fpu_msk31 |= FPU_CSR_CONDX; in cpu_probe_legacy()
1258 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_32FPR | in cpu_probe_legacy()
1261 c->tlbsize = 48; in cpu_probe_legacy()
1264 set_isa(c, MIPS_CPU_ISA_III); in cpu_probe_legacy()
1265 c->fpu_msk31 |= FPU_CSR_CONDX; in cpu_probe_legacy()
1266 c->options = R4K_OPTS; in cpu_probe_legacy()
1267 c->tlbsize = 32; in cpu_probe_legacy()
1268 switch (c->processor_id & 0xf0) { in cpu_probe_legacy()
1270 c->cputype = CPU_VR4111; in cpu_probe_legacy()
1274 c->cputype = CPU_VR4121; in cpu_probe_legacy()
1278 if ((c->processor_id & 0xf) < 0x3) { in cpu_probe_legacy()
1279 c->cputype = CPU_VR4122; in cpu_probe_legacy()
1282 c->cputype = CPU_VR4181A; in cpu_probe_legacy()
1287 if ((c->processor_id & 0xf) < 0x4) { in cpu_probe_legacy()
1288 c->cputype = CPU_VR4131; in cpu_probe_legacy()
1291 c->cputype = CPU_VR4133; in cpu_probe_legacy()
1292 c->options |= MIPS_CPU_LLSC; in cpu_probe_legacy()
1298 c->cputype = CPU_VR41XX; in cpu_probe_legacy()
1304 c->cputype = CPU_R4300; in cpu_probe_legacy()
1306 set_isa(c, MIPS_CPU_ISA_III); in cpu_probe_legacy()
1307 c->fpu_msk31 |= FPU_CSR_CONDX; in cpu_probe_legacy()
1308 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_32FPR | in cpu_probe_legacy()
1310 c->tlbsize = 32; in cpu_probe_legacy()
1313 c->cputype = CPU_R4600; in cpu_probe_legacy()
1315 set_isa(c, MIPS_CPU_ISA_III); in cpu_probe_legacy()
1316 c->fpu_msk31 |= FPU_CSR_CONDX; in cpu_probe_legacy()
1317 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_32FPR | in cpu_probe_legacy()
1319 c->tlbsize = 48; in cpu_probe_legacy()
1329 c->cputype = CPU_R4650; in cpu_probe_legacy()
1331 set_isa(c, MIPS_CPU_ISA_III); in cpu_probe_legacy()
1332 c->fpu_msk31 |= FPU_CSR_CONDX; in cpu_probe_legacy()
1333 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_LLSC; in cpu_probe_legacy()
1334 c->tlbsize = 48; in cpu_probe_legacy()
1338 c->fpu_msk31 |= FPU_CSR_CONDX | FPU_CSR_FS; in cpu_probe_legacy()
1339 c->options = MIPS_CPU_TLB | MIPS_CPU_TX39_CACHE; in cpu_probe_legacy()
1341 if ((c->processor_id & 0xf0) == (PRID_REV_TX3927 & 0xf0)) { in cpu_probe_legacy()
1342 c->cputype = CPU_TX3927; in cpu_probe_legacy()
1344 c->tlbsize = 64; in cpu_probe_legacy()
1346 switch (c->processor_id & PRID_REV_MASK) { in cpu_probe_legacy()
1348 c->cputype = CPU_TX3912; in cpu_probe_legacy()
1350 c->tlbsize = 32; in cpu_probe_legacy()
1353 c->cputype = CPU_TX3922; in cpu_probe_legacy()
1355 c->tlbsize = 64; in cpu_probe_legacy()
1361 c->cputype = CPU_R4700; in cpu_probe_legacy()
1363 set_isa(c, MIPS_CPU_ISA_III); in cpu_probe_legacy()
1364 c->fpu_msk31 |= FPU_CSR_CONDX; in cpu_probe_legacy()
1365 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_32FPR | in cpu_probe_legacy()
1367 c->tlbsize = 48; in cpu_probe_legacy()
1370 c->cputype = CPU_TX49XX; in cpu_probe_legacy()
1372 set_isa(c, MIPS_CPU_ISA_III); in cpu_probe_legacy()
1373 c->fpu_msk31 |= FPU_CSR_CONDX; in cpu_probe_legacy()
1374 c->options = R4K_OPTS | MIPS_CPU_LLSC; in cpu_probe_legacy()
1375 if (!(c->processor_id & 0x08)) in cpu_probe_legacy()
1376 c->options |= MIPS_CPU_FPU | MIPS_CPU_32FPR; in cpu_probe_legacy()
1377 c->tlbsize = 48; in cpu_probe_legacy()
1380 c->cputype = CPU_R5000; in cpu_probe_legacy()
1382 set_isa(c, MIPS_CPU_ISA_IV); in cpu_probe_legacy()
1383 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_32FPR | in cpu_probe_legacy()
1385 c->tlbsize = 48; in cpu_probe_legacy()
1388 c->cputype = CPU_R5432; in cpu_probe_legacy()
1390 set_isa(c, MIPS_CPU_ISA_IV); in cpu_probe_legacy()
1391 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_32FPR | in cpu_probe_legacy()
1393 c->tlbsize = 48; in cpu_probe_legacy()
1396 c->cputype = CPU_R5500; in cpu_probe_legacy()
1398 set_isa(c, MIPS_CPU_ISA_IV); in cpu_probe_legacy()
1399 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_32FPR | in cpu_probe_legacy()
1401 c->tlbsize = 48; in cpu_probe_legacy()
1404 c->cputype = CPU_NEVADA; in cpu_probe_legacy()
1406 set_isa(c, MIPS_CPU_ISA_IV); in cpu_probe_legacy()
1407 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_32FPR | in cpu_probe_legacy()
1409 c->tlbsize = 48; in cpu_probe_legacy()
1412 c->cputype = CPU_RM7000; in cpu_probe_legacy()
1414 set_isa(c, MIPS_CPU_ISA_IV); in cpu_probe_legacy()
1415 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_32FPR | in cpu_probe_legacy()
1425 c->tlbsize = (read_c0_info() & (1 << 29)) ? 64 : 48; in cpu_probe_legacy()
1428 c->cputype = CPU_R8000; in cpu_probe_legacy()
1430 set_isa(c, MIPS_CPU_ISA_IV); in cpu_probe_legacy()
1431 c->options = MIPS_CPU_TLB | MIPS_CPU_4KEX | in cpu_probe_legacy()
1434 c->tlbsize = 384; /* has weird TLB: 3-way x 128 */ in cpu_probe_legacy()
1437 c->cputype = CPU_R10000; in cpu_probe_legacy()
1439 set_isa(c, MIPS_CPU_ISA_IV); in cpu_probe_legacy()
1440 c->options = MIPS_CPU_TLB | MIPS_CPU_4K_CACHE | MIPS_CPU_4KEX | in cpu_probe_legacy()
1444 c->tlbsize = 64; in cpu_probe_legacy()
1447 c->cputype = CPU_R12000; in cpu_probe_legacy()
1449 set_isa(c, MIPS_CPU_ISA_IV); in cpu_probe_legacy()
1450 c->options = MIPS_CPU_TLB | MIPS_CPU_4K_CACHE | MIPS_CPU_4KEX | in cpu_probe_legacy()
1454 c->tlbsize = 64; in cpu_probe_legacy()
1457 if (((c->processor_id >> 4) & 0x0f) > 2) { in cpu_probe_legacy()
1458 c->cputype = CPU_R16000; in cpu_probe_legacy()
1461 c->cputype = CPU_R14000; in cpu_probe_legacy()
1464 set_isa(c, MIPS_CPU_ISA_IV); in cpu_probe_legacy()
1465 c->options = MIPS_CPU_TLB | MIPS_CPU_4K_CACHE | MIPS_CPU_4KEX | in cpu_probe_legacy()
1469 c->tlbsize = 64; in cpu_probe_legacy()
1472 switch (c->processor_id & PRID_REV_MASK) { in cpu_probe_legacy()
1474 c->cputype = CPU_LOONGSON2; in cpu_probe_legacy()
1477 set_isa(c, MIPS_CPU_ISA_III); in cpu_probe_legacy()
1478 c->fpu_msk31 |= FPU_CSR_CONDX; in cpu_probe_legacy()
1481 c->cputype = CPU_LOONGSON2; in cpu_probe_legacy()
1484 set_isa(c, MIPS_CPU_ISA_III); in cpu_probe_legacy()
1485 c->fpu_msk31 |= FPU_CSR_CONDX; in cpu_probe_legacy()
1488 c->cputype = CPU_LOONGSON3; in cpu_probe_legacy()
1491 set_isa(c, MIPS_CPU_ISA_M64R1); in cpu_probe_legacy()
1495 c->cputype = CPU_LOONGSON3; in cpu_probe_legacy()
1498 set_isa(c, MIPS_CPU_ISA_M64R1); in cpu_probe_legacy()
1502 c->options = R4K_OPTS | in cpu_probe_legacy()
1505 c->tlbsize = 64; in cpu_probe_legacy()
1506 c->writecombine = _CACHE_UNCACHED_ACCELERATED; in cpu_probe_legacy()
1509 decode_configs(c); in cpu_probe_legacy()
1511 c->cputype = CPU_LOONGSON1; in cpu_probe_legacy()
1513 switch (c->processor_id & PRID_REV_MASK) { in cpu_probe_legacy()
1523 static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_mips() argument
1525 c->writecombine = _CACHE_UNCACHED_ACCELERATED; in cpu_probe_mips()
1526 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_mips()
1528 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1529 c->cputype = CPU_QEMU_GENERIC; in cpu_probe_mips()
1533 c->cputype = CPU_4KC; in cpu_probe_mips()
1534 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1539 c->cputype = CPU_4KEC; in cpu_probe_mips()
1540 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1545 c->cputype = CPU_4KSC; in cpu_probe_mips()
1546 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1550 c->cputype = CPU_5KC; in cpu_probe_mips()
1551 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1555 c->cputype = CPU_5KE; in cpu_probe_mips()
1556 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1560 c->cputype = CPU_20KC; in cpu_probe_mips()
1561 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1565 c->cputype = CPU_24K; in cpu_probe_mips()
1566 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1570 c->cputype = CPU_24K; in cpu_probe_mips()
1571 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1575 c->cputype = CPU_25KF; in cpu_probe_mips()
1576 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1580 c->cputype = CPU_34K; in cpu_probe_mips()
1581 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1583 cpu_set_mt_per_tc_perf(c); in cpu_probe_mips()
1586 c->cputype = CPU_74K; in cpu_probe_mips()
1587 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1591 c->cputype = CPU_M14KC; in cpu_probe_mips()
1592 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1596 c->cputype = CPU_M14KEC; in cpu_probe_mips()
1597 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1601 c->cputype = CPU_1004K; in cpu_probe_mips()
1602 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1604 cpu_set_mt_per_tc_perf(c); in cpu_probe_mips()
1607 c->cputype = CPU_1074K; in cpu_probe_mips()
1608 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1612 c->cputype = CPU_INTERAPTIV; in cpu_probe_mips()
1614 cpu_set_mt_per_tc_perf(c); in cpu_probe_mips()
1617 c->cputype = CPU_INTERAPTIV; in cpu_probe_mips()
1619 cpu_set_mt_per_tc_perf(c); in cpu_probe_mips()
1622 c->cputype = CPU_PROAPTIV; in cpu_probe_mips()
1626 c->cputype = CPU_PROAPTIV; in cpu_probe_mips()
1630 c->cputype = CPU_P5600; in cpu_probe_mips()
1634 c->cputype = CPU_P6600; in cpu_probe_mips()
1638 c->cputype = CPU_I6400; in cpu_probe_mips()
1642 c->cputype = CPU_I6500; in cpu_probe_mips()
1646 c->cputype = CPU_M5150; in cpu_probe_mips()
1650 c->cputype = CPU_M6250; in cpu_probe_mips()
1655 decode_configs(c); in cpu_probe_mips()
1659 switch (__get_cpu_type(c->cputype)) { in cpu_probe_mips()
1661 c->options |= MIPS_CPU_SHARED_FTLB_ENTRIES; in cpu_probe_mips()
1664 c->options |= MIPS_CPU_SHARED_FTLB_RAM; in cpu_probe_mips()
1671 static inline void cpu_probe_alchemy(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_alchemy() argument
1673 decode_configs(c); in cpu_probe_alchemy()
1674 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_alchemy()
1677 c->cputype = CPU_ALCHEMY; in cpu_probe_alchemy()
1678 switch ((c->processor_id >> 24) & 0xff) { in cpu_probe_alchemy()
1693 if ((c->processor_id & PRID_REV_MASK) == 2) in cpu_probe_alchemy()
1707 static inline void cpu_probe_sibyte(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_sibyte() argument
1709 decode_configs(c); in cpu_probe_sibyte()
1711 c->writecombine = _CACHE_UNCACHED_ACCELERATED; in cpu_probe_sibyte()
1712 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_sibyte()
1714 c->cputype = CPU_SB1; in cpu_probe_sibyte()
1717 if ((c->processor_id & PRID_REV_MASK) < 0x02) in cpu_probe_sibyte()
1718 c->options &= ~(MIPS_CPU_FPU | MIPS_CPU_32FPR); in cpu_probe_sibyte()
1721 c->cputype = CPU_SB1A; in cpu_probe_sibyte()
1727 static inline void cpu_probe_sandcraft(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_sandcraft() argument
1729 decode_configs(c); in cpu_probe_sandcraft()
1730 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_sandcraft()
1732 c->cputype = CPU_SR71000; in cpu_probe_sandcraft()
1734 c->scache.ways = 8; in cpu_probe_sandcraft()
1735 c->tlbsize = 64; in cpu_probe_sandcraft()
1740 static inline void cpu_probe_nxp(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_nxp() argument
1742 decode_configs(c); in cpu_probe_nxp()
1743 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_nxp()
1745 c->cputype = CPU_PR4450; in cpu_probe_nxp()
1747 set_isa(c, MIPS_CPU_ISA_M32R1); in cpu_probe_nxp()
1752 static inline void cpu_probe_broadcom(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_broadcom() argument
1754 decode_configs(c); in cpu_probe_broadcom()
1755 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_broadcom()
1758 c->cputype = CPU_BMIPS32; in cpu_probe_broadcom()
1765 c->cputype = CPU_BMIPS3300; in cpu_probe_broadcom()
1770 int rev = c->processor_id & PRID_REV_MASK; in cpu_probe_broadcom()
1774 c->cputype = CPU_BMIPS4380; in cpu_probe_broadcom()
1777 c->options |= MIPS_CPU_RIXI; in cpu_probe_broadcom()
1779 c->cputype = CPU_BMIPS4350; in cpu_probe_broadcom()
1787 c->cputype = CPU_BMIPS5000; in cpu_probe_broadcom()
1788 if ((c->processor_id & PRID_IMP_MASK) == PRID_IMP_BMIPS5200) in cpu_probe_broadcom()
1793 c->options |= MIPS_CPU_ULRI | MIPS_CPU_RIXI; in cpu_probe_broadcom()
1798 static inline void cpu_probe_cavium(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_cavium() argument
1800 decode_configs(c); in cpu_probe_cavium()
1801 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_cavium()
1805 c->cputype = CPU_CAVIUM_OCTEON; in cpu_probe_cavium()
1812 c->cputype = CPU_CAVIUM_OCTEON_PLUS; in cpu_probe_cavium()
1822 c->cputype = CPU_CAVIUM_OCTEON2; in cpu_probe_cavium()
1830 c->cputype = CPU_CAVIUM_OCTEON3; in cpu_probe_cavium()
1836 c->cputype = CPU_UNKNOWN; in cpu_probe_cavium()
1841 static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_loongson() argument
1843 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_loongson()
1845 switch (c->processor_id & PRID_REV_MASK) { in cpu_probe_loongson()
1847 c->cputype = CPU_LOONGSON3; in cpu_probe_loongson()
1850 set_isa(c, MIPS_CPU_ISA_M64R2); in cpu_probe_loongson()
1854 c->cputype = CPU_LOONGSON3; in cpu_probe_loongson()
1857 set_isa(c, MIPS_CPU_ISA_M64R2); in cpu_probe_loongson()
1861 decode_configs(c); in cpu_probe_loongson()
1862 c->options |= MIPS_CPU_FTLB | MIPS_CPU_TLBINV | MIPS_CPU_LDPTE; in cpu_probe_loongson()
1863 c->writecombine = _CACHE_UNCACHED_ACCELERATED; in cpu_probe_loongson()
1871 static inline void cpu_probe_ingenic(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_ingenic() argument
1873 decode_configs(c); in cpu_probe_ingenic()
1875 c->options &= ~MIPS_CPU_COUNTER; in cpu_probe_ingenic()
1877 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_ingenic()
1879 c->cputype = CPU_JZRISC; in cpu_probe_ingenic()
1880 c->writecombine = _CACHE_UNCACHED_ACCELERATED; in cpu_probe_ingenic()
1889 static inline void cpu_probe_netlogic(struct cpuinfo_mips *c, int cpu) in cpu_probe_netlogic() argument
1891 decode_configs(c); in cpu_probe_netlogic()
1893 if ((c->processor_id & PRID_IMP_MASK) == PRID_IMP_NETLOGIC_AU13XX) { in cpu_probe_netlogic()
1894 c->cputype = CPU_ALCHEMY; in cpu_probe_netlogic()
1900 c->options = (MIPS_CPU_TLB | in cpu_probe_netlogic()
1908 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_netlogic()
1912 c->cputype = CPU_XLP; in cpu_probe_netlogic()
1918 c->cputype = CPU_XLP; in cpu_probe_netlogic()
1930 c->cputype = CPU_XLR; in cpu_probe_netlogic()
1947 c->cputype = CPU_XLR; in cpu_probe_netlogic()
1953 c->processor_id); in cpu_probe_netlogic()
1954 c->cputype = CPU_XLR; in cpu_probe_netlogic()
1958 if (c->cputype == CPU_XLP) { in cpu_probe_netlogic()
1959 set_isa(c, MIPS_CPU_ISA_M64R2); in cpu_probe_netlogic()
1960 c->options |= (MIPS_CPU_FPU | MIPS_CPU_ULRI | MIPS_CPU_MCHECK); in cpu_probe_netlogic()
1962 c->tlbsize = ((read_c0_config6() >> 16) & 0xffff) + 1; in cpu_probe_netlogic()
1964 set_isa(c, MIPS_CPU_ISA_M64R1); in cpu_probe_netlogic()
1965 c->tlbsize = ((read_c0_config1() >> 25) & 0x3f) + 1; in cpu_probe_netlogic()
1967 c->kscratch_mask = 0xf; in cpu_probe_netlogic()
1981 struct cpuinfo_mips *c = ¤t_cpu_data; in cpu_probe() local
1990 c->processor_id = PRID_IMP_UNKNOWN; in cpu_probe()
1991 c->fpu_id = FPIR_IMP_NONE; in cpu_probe()
1992 c->cputype = CPU_UNKNOWN; in cpu_probe()
1993 c->writecombine = _CACHE_UNCACHED; in cpu_probe()
1995 c->fpu_csr31 = FPU_CSR_RN; in cpu_probe()
1996 c->fpu_msk31 = FPU_CSR_RSVD | FPU_CSR_ABS2008 | FPU_CSR_NAN2008; in cpu_probe()
1998 c->processor_id = read_c0_prid(); in cpu_probe()
1999 switch (c->processor_id & PRID_COMP_MASK) { in cpu_probe()
2001 cpu_probe_legacy(c, cpu); in cpu_probe()
2004 cpu_probe_mips(c, cpu); in cpu_probe()
2007 cpu_probe_alchemy(c, cpu); in cpu_probe()
2010 cpu_probe_sibyte(c, cpu); in cpu_probe()
2013 cpu_probe_broadcom(c, cpu); in cpu_probe()
2016 cpu_probe_sandcraft(c, cpu); in cpu_probe()
2019 cpu_probe_nxp(c, cpu); in cpu_probe()
2022 cpu_probe_cavium(c, cpu); in cpu_probe()
2025 cpu_probe_loongson(c, cpu); in cpu_probe()
2030 cpu_probe_ingenic(c, cpu); in cpu_probe()
2033 cpu_probe_netlogic(c, cpu); in cpu_probe()
2038 BUG_ON(c->cputype == CPU_UNKNOWN); in cpu_probe()
2045 BUG_ON(current_cpu_type() != c->cputype); in cpu_probe()
2053 c->options |= MIPS_CPU_RIXIEX; in cpu_probe()
2057 c->options &= ~MIPS_CPU_FPU; in cpu_probe()
2060 c->ases &= ~(MIPS_ASE_DSP | MIPS_ASE_DSP2P); in cpu_probe()
2063 c->options &= ~MIPS_CPU_HTW; in cpu_probe()
2068 if (c->options & MIPS_CPU_FPU) in cpu_probe()
2069 cpu_set_fpu_opts(c); in cpu_probe()
2071 cpu_set_nofpu_opts(c); in cpu_probe()
2078 c->srsets = ((read_c0_srsctl() >> 26) & 0x0f) + 1; in cpu_probe()
2080 c->options |= MIPS_CPU_PCI; in cpu_probe()
2083 c->srsets = 1; in cpu_probe()
2089 c->msa_id = cpu_get_msa_id(); in cpu_probe()
2090 WARN(c->msa_id & MSA_IR_WRPF, in cpu_probe()
2096 cpu_probe_vz(c); in cpu_probe()
2098 cpu_probe_vmbits(c); in cpu_probe()
2108 struct cpuinfo_mips *c = ¤t_cpu_data; in cpu_report() local
2111 smp_processor_id(), c->processor_id, cpu_name_string()); in cpu_report()
2112 if (c->options & MIPS_CPU_FPU) in cpu_report()
2113 printk(KERN_INFO "FPU revision is: %08x\n", c->fpu_id); in cpu_report()
2115 pr_info("MSA revision is: %08x\n", c->msa_id); in cpu_report()