Lines Matching refs:c
62 static inline void cpu_set_fpu_fcsr_mask(struct cpuinfo_mips *c) in cpu_set_fpu_fcsr_mask() argument
66 fcsr = c->fpu_csr31; in cpu_set_fpu_fcsr_mask()
84 c->fpu_msk31 = ~(fcsr0 ^ fcsr1) & ~mask; in cpu_set_fpu_fcsr_mask()
91 static void cpu_set_fpu_2008(struct cpuinfo_mips *c) in cpu_set_fpu_2008() argument
93 if (c->isa_level & (MIPS_CPU_ISA_M32R1 | MIPS_CPU_ISA_M64R1 | in cpu_set_fpu_2008()
116 c->options |= MIPS_CPU_NAN_LEGACY; in cpu_set_fpu_2008()
118 c->options |= MIPS_CPU_NAN_2008; in cpu_set_fpu_2008()
121 c->fpu_msk31 &= ~FPU_CSR_ABS2008; in cpu_set_fpu_2008()
123 c->fpu_csr31 |= fcsr & FPU_CSR_ABS2008; in cpu_set_fpu_2008()
126 c->fpu_msk31 &= ~FPU_CSR_NAN2008; in cpu_set_fpu_2008()
128 c->fpu_csr31 |= fcsr & FPU_CSR_NAN2008; in cpu_set_fpu_2008()
130 c->options |= MIPS_CPU_NAN_LEGACY; in cpu_set_fpu_2008()
135 c->options |= MIPS_CPU_NAN_LEGACY; in cpu_set_fpu_2008()
151 static void cpu_set_nofpu_2008(struct cpuinfo_mips *c) in cpu_set_nofpu_2008() argument
153 c->options &= ~(MIPS_CPU_NAN_2008 | MIPS_CPU_NAN_LEGACY); in cpu_set_nofpu_2008()
154 c->fpu_csr31 &= ~(FPU_CSR_ABS2008 | FPU_CSR_NAN2008); in cpu_set_nofpu_2008()
155 c->fpu_msk31 &= ~(FPU_CSR_ABS2008 | FPU_CSR_NAN2008); in cpu_set_nofpu_2008()
159 if (c->isa_level & (MIPS_CPU_ISA_M32R1 | MIPS_CPU_ISA_M64R1 | in cpu_set_nofpu_2008()
162 c->options |= MIPS_CPU_NAN_2008 | MIPS_CPU_NAN_LEGACY; in cpu_set_nofpu_2008()
164 c->options |= MIPS_CPU_NAN_LEGACY; in cpu_set_nofpu_2008()
165 c->fpu_msk31 |= FPU_CSR_ABS2008 | FPU_CSR_NAN2008; in cpu_set_nofpu_2008()
169 c->options |= MIPS_CPU_NAN_LEGACY; in cpu_set_nofpu_2008()
170 c->fpu_msk31 |= FPU_CSR_ABS2008 | FPU_CSR_NAN2008; in cpu_set_nofpu_2008()
173 c->options |= MIPS_CPU_NAN_2008; in cpu_set_nofpu_2008()
174 c->fpu_csr31 |= FPU_CSR_ABS2008 | FPU_CSR_NAN2008; in cpu_set_nofpu_2008()
175 c->fpu_msk31 |= FPU_CSR_ABS2008 | FPU_CSR_NAN2008; in cpu_set_nofpu_2008()
178 c->options |= MIPS_CPU_NAN_2008 | MIPS_CPU_NAN_LEGACY; in cpu_set_nofpu_2008()
187 static void cpu_set_nan_2008(struct cpuinfo_mips *c) in cpu_set_nan_2008() argument
245 static void cpu_set_nofpu_id(struct cpuinfo_mips *c) in cpu_set_nofpu_id() argument
250 if (c->isa_level & (MIPS_CPU_ISA_M32R1 | MIPS_CPU_ISA_M64R1 | in cpu_set_nofpu_id()
254 if (c->isa_level & (MIPS_CPU_ISA_M32R2 | MIPS_CPU_ISA_M64R2 | in cpu_set_nofpu_id()
257 if (c->options & MIPS_CPU_NAN_2008) in cpu_set_nofpu_id()
259 c->fpu_id = value; in cpu_set_nofpu_id()
268 static void cpu_set_fpu_opts(struct cpuinfo_mips *c) in cpu_set_fpu_opts() argument
270 c->fpu_id = cpu_get_fpu_id(); in cpu_set_fpu_opts()
271 mips_nofpu_msk31 = c->fpu_msk31; in cpu_set_fpu_opts()
273 if (c->isa_level & (MIPS_CPU_ISA_M32R1 | MIPS_CPU_ISA_M64R1 | in cpu_set_fpu_opts()
276 if (c->fpu_id & MIPS_FPIR_3D) in cpu_set_fpu_opts()
277 c->ases |= MIPS_ASE_MIPS3D; in cpu_set_fpu_opts()
278 if (c->fpu_id & MIPS_FPIR_UFRP) in cpu_set_fpu_opts()
279 c->options |= MIPS_CPU_UFR; in cpu_set_fpu_opts()
280 if (c->fpu_id & MIPS_FPIR_FREP) in cpu_set_fpu_opts()
281 c->options |= MIPS_CPU_FRE; in cpu_set_fpu_opts()
284 cpu_set_fpu_fcsr_mask(c); in cpu_set_fpu_opts()
285 cpu_set_fpu_2008(c); in cpu_set_fpu_opts()
286 cpu_set_nan_2008(c); in cpu_set_fpu_opts()
292 static void cpu_set_nofpu_opts(struct cpuinfo_mips *c) in cpu_set_nofpu_opts() argument
294 c->options &= ~MIPS_CPU_FPU; in cpu_set_nofpu_opts()
295 c->fpu_msk31 = mips_nofpu_msk31; in cpu_set_nofpu_opts()
297 cpu_set_nofpu_2008(c); in cpu_set_nofpu_opts()
298 cpu_set_nan_2008(c); in cpu_set_nofpu_opts()
299 cpu_set_nofpu_id(c); in cpu_set_nofpu_opts()
328 static void cpu_set_fpu_opts(struct cpuinfo_mips *c) in cpu_set_fpu_opts() argument
333 static void cpu_set_nofpu_opts(struct cpuinfo_mips *c) in cpu_set_nofpu_opts() argument
387 static int set_ftlb_enable(struct cpuinfo_mips *c, enum ftlb_flags flags);
444 static inline void cpu_set_mt_per_tc_perf(struct cpuinfo_mips *c) in cpu_set_mt_per_tc_perf() argument
447 c->options |= MIPS_CPU_MT_PER_TC_PERF_COUNTERS; in cpu_set_mt_per_tc_perf()
452 struct cpuinfo_mips *c = ¤t_cpu_data; in check_errata() local
461 if ((c->processor_id & PRID_REV_MASK) <= PRID_REV_34K_V1_0_2) in check_errata()
502 static inline void cpu_probe_vmbits(struct cpuinfo_mips *c) in cpu_probe_vmbits() argument
507 c->vmbits = fls64(read_c0_entryhi() & 0x3fffffffffffe000ULL); in cpu_probe_vmbits()
511 static void set_isa(struct cpuinfo_mips *c, unsigned int isa) in set_isa() argument
515 c->isa_level |= MIPS_CPU_ISA_M32R2 | MIPS_CPU_ISA_M64R2; in set_isa()
518 c->isa_level |= MIPS_CPU_ISA_M32R1 | MIPS_CPU_ISA_M64R1; in set_isa()
521 c->isa_level |= MIPS_CPU_ISA_V; in set_isa()
524 c->isa_level |= MIPS_CPU_ISA_IV; in set_isa()
527 c->isa_level |= MIPS_CPU_ISA_II | MIPS_CPU_ISA_III; in set_isa()
532 c->isa_level |= MIPS_CPU_ISA_M32R6 | MIPS_CPU_ISA_M64R6; in set_isa()
535 c->isa_level |= MIPS_CPU_ISA_M32R6; in set_isa()
539 c->isa_level |= MIPS_CPU_ISA_M32R2; in set_isa()
542 c->isa_level |= MIPS_CPU_ISA_M32R1; in set_isa()
545 c->isa_level |= MIPS_CPU_ISA_II; in set_isa()
553 static unsigned int calculate_ftlb_probability(struct cpuinfo_mips *c) in calculate_ftlb_probability() argument
556 unsigned int probability = c->tlbsize / c->tlbsizevtlb; in calculate_ftlb_probability()
579 static int set_ftlb_enable(struct cpuinfo_mips *c, enum ftlb_flags flags) in set_ftlb_enable() argument
584 switch (c->cputype) { in set_ftlb_enable()
598 config |= calculate_ftlb_probability(c) in set_ftlb_enable()
631 static inline unsigned int decode_config0(struct cpuinfo_mips *c) in decode_config0() argument
643 c->options |= MIPS_CPU_TLB; in decode_config0()
645 c->options |= MIPS_CPU_TLB | MIPS_CPU_FTLB; in decode_config0()
652 set_isa(c, MIPS_CPU_ISA_M32R1); in decode_config0()
655 set_isa(c, MIPS_CPU_ISA_M32R2); in decode_config0()
658 set_isa(c, MIPS_CPU_ISA_M32R6); in decode_config0()
667 set_isa(c, MIPS_CPU_ISA_M64R1); in decode_config0()
670 set_isa(c, MIPS_CPU_ISA_M64R2); in decode_config0()
673 set_isa(c, MIPS_CPU_ISA_M64R6); in decode_config0()
689 static inline unsigned int decode_config1(struct cpuinfo_mips *c) in decode_config1() argument
696 c->ases |= MIPS_ASE_MDMX; in decode_config1()
698 c->options |= MIPS_CPU_PERF; in decode_config1()
700 c->options |= MIPS_CPU_WATCH; in decode_config1()
702 c->ases |= MIPS_ASE_MIPS16; in decode_config1()
704 c->options |= MIPS_CPU_EJTAG; in decode_config1()
706 c->options |= MIPS_CPU_FPU; in decode_config1()
707 c->options |= MIPS_CPU_32FPR; in decode_config1()
710 c->tlbsize = ((config1 & MIPS_CONF1_TLBS) >> 25) + 1; in decode_config1()
711 c->tlbsizevtlb = c->tlbsize; in decode_config1()
712 c->tlbsizeftlbsets = 0; in decode_config1()
718 static inline unsigned int decode_config2(struct cpuinfo_mips *c) in decode_config2() argument
725 c->scache.flags &= ~MIPS_CACHE_NOT_PRESENT; in decode_config2()
730 static inline unsigned int decode_config3(struct cpuinfo_mips *c) in decode_config3() argument
737 c->ases |= MIPS_ASE_SMARTMIPS; in decode_config3()
738 c->options |= MIPS_CPU_RIXI | MIPS_CPU_CTXTC; in decode_config3()
741 c->options |= MIPS_CPU_RIXI; in decode_config3()
743 c->options |= MIPS_CPU_CTXTC; in decode_config3()
745 c->ases |= MIPS_ASE_DSP; in decode_config3()
747 c->ases |= MIPS_ASE_DSP2P; in decode_config3()
749 c->ases |= MIPS_ASE_DSP3; in decode_config3()
752 c->options |= MIPS_CPU_VINT; in decode_config3()
754 c->options |= MIPS_CPU_VEIC; in decode_config3()
756 c->options |= MIPS_CPU_LPA; in decode_config3()
758 c->ases |= MIPS_ASE_MIPSMT; in decode_config3()
760 c->options |= MIPS_CPU_ULRI; in decode_config3()
762 c->options |= MIPS_CPU_MICROMIPS; in decode_config3()
764 c->ases |= MIPS_ASE_VZ; in decode_config3()
766 c->options |= MIPS_CPU_SEGMENTS; in decode_config3()
768 c->options |= MIPS_CPU_BADINSTR; in decode_config3()
770 c->options |= MIPS_CPU_BADINSTRP; in decode_config3()
772 c->ases |= MIPS_ASE_MSA; in decode_config3()
774 c->htw_seq = 0; in decode_config3()
775 c->options |= MIPS_CPU_HTW; in decode_config3()
778 c->options |= MIPS_CPU_CDMM; in decode_config3()
780 c->options |= MIPS_CPU_SP; in decode_config3()
785 static inline unsigned int decode_config4(struct cpuinfo_mips *c) in decode_config4() argument
797 c->options |= MIPS_CPU_TLBINV; in decode_config4()
813 c->tlbsize += (config4 & MIPS_CONF4_MMUSIZEEXT) * 0x40; in decode_config4()
814 c->tlbsizevtlb = c->tlbsize; in decode_config4()
817 c->tlbsizevtlb += in decode_config4()
820 c->tlbsize = c->tlbsizevtlb; in decode_config4()
836 set_ftlb_enable(c, 0); in decode_config4()
840 c->tlbsizeftlbsets = 1 << in decode_config4()
843 c->tlbsizeftlbways = ((config4 & MIPS_CONF4_FTLBWAYS) >> in decode_config4()
845 c->tlbsize += c->tlbsizeftlbways * c->tlbsizeftlbsets; in decode_config4()
851 c->kscratch_mask = (config4 & MIPS_CONF4_KSCREXIST) in decode_config4()
857 set_cpu_asid_mask(c, asid_mask); in decode_config4()
864 WARN_ON(asid_mask != cpu_asid_mask(c)); in decode_config4()
869 static inline unsigned int decode_config5(struct cpuinfo_mips *c) in decode_config5() argument
887 c->options |= MIPS_CPU_EVA; in decode_config5()
889 c->options |= MIPS_CPU_MAAR; in decode_config5()
891 c->options |= MIPS_CPU_RW_LLB; in decode_config5()
893 c->options |= MIPS_CPU_MVH; in decode_config5()
895 c->options |= MIPS_CPU_VP; in decode_config5()
897 c->ases |= MIPS_ASE_MIPS16E2; in decode_config5()
909 c->options |= MIPS_CPU_MMID; in decode_config5()
942 set_cpu_asid_mask(c, asid_mask); in decode_config5()
949 static void decode_configs(struct cpuinfo_mips *c) in decode_configs() argument
954 c->options = MIPS_CPU_4KEX | MIPS_CPU_4K_CACHE | MIPS_CPU_COUNTER | in decode_configs()
957 c->scache.flags = MIPS_CACHE_NOT_PRESENT; in decode_configs()
960 set_ftlb_enable(c, mips_ftlb_disabled ? 0 : FTLB_EN); in decode_configs()
962 ok = decode_config0(c); /* Read Config registers. */ in decode_configs()
965 ok = decode_config1(c); in decode_configs()
967 ok = decode_config2(c); in decode_configs()
969 ok = decode_config3(c); in decode_configs()
971 ok = decode_config4(c); in decode_configs()
973 ok = decode_config5(c); in decode_configs()
985 c->options |= MIPS_CPU_EBASE_WG; in decode_configs()
1004 c->options |= MIPS_CPU_EBASE_WG; in decode_configs()
1011 set_ftlb_enable(c, (mips_ftlb_disabled ? 0 : FTLB_EN) | FTLB_SET_PROB); in decode_configs()
1013 mips_probe_watch_registers(c); in decode_configs()
1022 cpu_set_core(c, core); in decode_configs()
1055 static inline unsigned int decode_guest_config0(struct cpuinfo_mips *c) in decode_guest_config0() argument
1062 c->guest.conf |= BIT(1); in decode_guest_config0()
1066 static inline unsigned int decode_guest_config1(struct cpuinfo_mips *c) in decode_guest_config1() argument
1075 c->guest.options |= MIPS_CPU_FPU; in decode_guest_config1()
1077 c->guest.options_dyn |= MIPS_CPU_FPU; in decode_guest_config1()
1080 c->guest.options |= MIPS_CPU_WATCH; in decode_guest_config1()
1082 c->guest.options_dyn |= MIPS_CPU_WATCH; in decode_guest_config1()
1085 c->guest.options |= MIPS_CPU_PERF; in decode_guest_config1()
1087 c->guest.options_dyn |= MIPS_CPU_PERF; in decode_guest_config1()
1090 c->guest.conf |= BIT(2); in decode_guest_config1()
1094 static inline unsigned int decode_guest_config2(struct cpuinfo_mips *c) in decode_guest_config2() argument
1101 c->guest.conf |= BIT(3); in decode_guest_config2()
1105 static inline unsigned int decode_guest_config3(struct cpuinfo_mips *c) in decode_guest_config3() argument
1114 c->guest.options |= MIPS_CPU_CTXTC; in decode_guest_config3()
1116 c->guest.options_dyn |= MIPS_CPU_CTXTC; in decode_guest_config3()
1119 c->guest.options |= MIPS_CPU_HTW; in decode_guest_config3()
1122 c->guest.options |= MIPS_CPU_ULRI; in decode_guest_config3()
1125 c->guest.options |= MIPS_CPU_SEGMENTS; in decode_guest_config3()
1128 c->guest.options |= MIPS_CPU_BADINSTR; in decode_guest_config3()
1130 c->guest.options |= MIPS_CPU_BADINSTRP; in decode_guest_config3()
1133 c->guest.ases |= MIPS_ASE_MSA; in decode_guest_config3()
1135 c->guest.ases_dyn |= MIPS_ASE_MSA; in decode_guest_config3()
1138 c->guest.conf |= BIT(4); in decode_guest_config3()
1142 static inline unsigned int decode_guest_config4(struct cpuinfo_mips *c) in decode_guest_config4() argument
1149 c->guest.kscratch_mask = (config4 & MIPS_CONF4_KSCREXIST) in decode_guest_config4()
1153 c->guest.conf |= BIT(5); in decode_guest_config4()
1157 static inline unsigned int decode_guest_config5(struct cpuinfo_mips *c) in decode_guest_config5() argument
1165 c->guest.options |= MIPS_CPU_MAAR; in decode_guest_config5()
1167 c->guest.options_dyn |= MIPS_CPU_MAAR; in decode_guest_config5()
1170 c->guest.options |= MIPS_CPU_RW_LLB; in decode_guest_config5()
1173 c->guest.options |= MIPS_CPU_MVH; in decode_guest_config5()
1176 c->guest.conf |= BIT(6); in decode_guest_config5()
1180 static inline void decode_guest_configs(struct cpuinfo_mips *c) in decode_guest_configs() argument
1184 ok = decode_guest_config0(c); in decode_guest_configs()
1186 ok = decode_guest_config1(c); in decode_guest_configs()
1188 ok = decode_guest_config2(c); in decode_guest_configs()
1190 ok = decode_guest_config3(c); in decode_guest_configs()
1192 ok = decode_guest_config4(c); in decode_guest_configs()
1194 decode_guest_config5(c); in decode_guest_configs()
1197 static inline void cpu_probe_guestctl0(struct cpuinfo_mips *c) in cpu_probe_guestctl0() argument
1204 c->options |= MIPS_CPU_GUESTCTL0EXT; in cpu_probe_guestctl0()
1206 c->options |= MIPS_CPU_GUESTCTL1; in cpu_probe_guestctl0()
1208 c->options |= MIPS_CPU_GUESTCTL2; in cpu_probe_guestctl0()
1210 c->options |= MIPS_CPU_GUESTID; in cpu_probe_guestctl0()
1226 c->options |= MIPS_CPU_DRG; in cpu_probe_guestctl0()
1231 static inline void cpu_probe_guestctl1(struct cpuinfo_mips *c) in cpu_probe_guestctl1() argument
1237 c->guestid_mask = (read_c0_guestctl1() & MIPS_GCTL1_ID) in cpu_probe_guestctl1()
1243 static inline void cpu_probe_gtoffset(struct cpuinfo_mips *c) in cpu_probe_gtoffset() argument
1248 c->gtoffset_mask = read_c0_gtoffset(); in cpu_probe_gtoffset()
1252 static inline void cpu_probe_vz(struct cpuinfo_mips *c) in cpu_probe_vz() argument
1254 cpu_probe_guestctl0(c); in cpu_probe_vz()
1256 cpu_probe_guestctl1(c); in cpu_probe_vz()
1258 cpu_probe_gtoffset(c); in cpu_probe_vz()
1260 decode_guest_configs(c); in cpu_probe_vz()
1266 static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_legacy() argument
1268 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_legacy()
1270 c->cputype = CPU_R2000; in cpu_probe_legacy()
1272 c->fpu_msk31 |= FPU_CSR_CONDX | FPU_CSR_FS; in cpu_probe_legacy()
1273 c->options = MIPS_CPU_TLB | MIPS_CPU_3K_CACHE | in cpu_probe_legacy()
1276 c->options |= MIPS_CPU_FPU; in cpu_probe_legacy()
1277 c->tlbsize = 64; in cpu_probe_legacy()
1280 if ((c->processor_id & PRID_REV_MASK) == PRID_REV_R3000A) { in cpu_probe_legacy()
1282 c->cputype = CPU_R3081E; in cpu_probe_legacy()
1285 c->cputype = CPU_R3000A; in cpu_probe_legacy()
1289 c->cputype = CPU_R3000; in cpu_probe_legacy()
1292 c->fpu_msk31 |= FPU_CSR_CONDX | FPU_CSR_FS; in cpu_probe_legacy()
1293 c->options = MIPS_CPU_TLB | MIPS_CPU_3K_CACHE | in cpu_probe_legacy()
1296 c->options |= MIPS_CPU_FPU; in cpu_probe_legacy()
1297 c->tlbsize = 64; in cpu_probe_legacy()
1301 if ((c->processor_id & PRID_REV_MASK) >= in cpu_probe_legacy()
1303 c->cputype = CPU_R4400PC; in cpu_probe_legacy()
1306 c->cputype = CPU_R4000PC; in cpu_probe_legacy()
1330 if ((c->processor_id & PRID_REV_MASK) >= in cpu_probe_legacy()
1332 c->cputype = mc ? CPU_R4400MC : CPU_R4400SC; in cpu_probe_legacy()
1335 c->cputype = mc ? CPU_R4000MC : CPU_R4000SC; in cpu_probe_legacy()
1340 set_isa(c, MIPS_CPU_ISA_III); in cpu_probe_legacy()
1341 c->fpu_msk31 |= FPU_CSR_CONDX; in cpu_probe_legacy()
1342 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_32FPR | in cpu_probe_legacy()
1345 c->tlbsize = 48; in cpu_probe_legacy()
1348 set_isa(c, MIPS_CPU_ISA_III); in cpu_probe_legacy()
1349 c->fpu_msk31 |= FPU_CSR_CONDX; in cpu_probe_legacy()
1350 c->options = R4K_OPTS; in cpu_probe_legacy()
1351 c->tlbsize = 32; in cpu_probe_legacy()
1352 switch (c->processor_id & 0xf0) { in cpu_probe_legacy()
1354 c->cputype = CPU_VR4111; in cpu_probe_legacy()
1358 c->cputype = CPU_VR4121; in cpu_probe_legacy()
1362 if ((c->processor_id & 0xf) < 0x3) { in cpu_probe_legacy()
1363 c->cputype = CPU_VR4122; in cpu_probe_legacy()
1366 c->cputype = CPU_VR4181A; in cpu_probe_legacy()
1371 if ((c->processor_id & 0xf) < 0x4) { in cpu_probe_legacy()
1372 c->cputype = CPU_VR4131; in cpu_probe_legacy()
1375 c->cputype = CPU_VR4133; in cpu_probe_legacy()
1376 c->options |= MIPS_CPU_LLSC; in cpu_probe_legacy()
1382 c->cputype = CPU_VR41XX; in cpu_probe_legacy()
1388 c->cputype = CPU_R4600; in cpu_probe_legacy()
1390 set_isa(c, MIPS_CPU_ISA_III); in cpu_probe_legacy()
1391 c->fpu_msk31 |= FPU_CSR_CONDX; in cpu_probe_legacy()
1392 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_32FPR | in cpu_probe_legacy()
1394 c->tlbsize = 48; in cpu_probe_legacy()
1404 c->cputype = CPU_R4650; in cpu_probe_legacy()
1406 set_isa(c, MIPS_CPU_ISA_III); in cpu_probe_legacy()
1407 c->fpu_msk31 |= FPU_CSR_CONDX; in cpu_probe_legacy()
1408 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_LLSC; in cpu_probe_legacy()
1409 c->tlbsize = 48; in cpu_probe_legacy()
1413 c->fpu_msk31 |= FPU_CSR_CONDX | FPU_CSR_FS; in cpu_probe_legacy()
1414 c->options = MIPS_CPU_TLB | MIPS_CPU_TX39_CACHE; in cpu_probe_legacy()
1416 if ((c->processor_id & 0xf0) == (PRID_REV_TX3927 & 0xf0)) { in cpu_probe_legacy()
1417 c->cputype = CPU_TX3927; in cpu_probe_legacy()
1419 c->tlbsize = 64; in cpu_probe_legacy()
1421 switch (c->processor_id & PRID_REV_MASK) { in cpu_probe_legacy()
1423 c->cputype = CPU_TX3912; in cpu_probe_legacy()
1425 c->tlbsize = 32; in cpu_probe_legacy()
1428 c->cputype = CPU_TX3922; in cpu_probe_legacy()
1430 c->tlbsize = 64; in cpu_probe_legacy()
1436 c->cputype = CPU_R4700; in cpu_probe_legacy()
1438 set_isa(c, MIPS_CPU_ISA_III); in cpu_probe_legacy()
1439 c->fpu_msk31 |= FPU_CSR_CONDX; in cpu_probe_legacy()
1440 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_32FPR | in cpu_probe_legacy()
1442 c->tlbsize = 48; in cpu_probe_legacy()
1445 c->cputype = CPU_TX49XX; in cpu_probe_legacy()
1447 set_isa(c, MIPS_CPU_ISA_III); in cpu_probe_legacy()
1448 c->fpu_msk31 |= FPU_CSR_CONDX; in cpu_probe_legacy()
1449 c->options = R4K_OPTS | MIPS_CPU_LLSC; in cpu_probe_legacy()
1450 if (!(c->processor_id & 0x08)) in cpu_probe_legacy()
1451 c->options |= MIPS_CPU_FPU | MIPS_CPU_32FPR; in cpu_probe_legacy()
1452 c->tlbsize = 48; in cpu_probe_legacy()
1455 c->cputype = CPU_R5000; in cpu_probe_legacy()
1457 set_isa(c, MIPS_CPU_ISA_IV); in cpu_probe_legacy()
1458 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_32FPR | in cpu_probe_legacy()
1460 c->tlbsize = 48; in cpu_probe_legacy()
1463 c->cputype = CPU_R5500; in cpu_probe_legacy()
1465 set_isa(c, MIPS_CPU_ISA_IV); in cpu_probe_legacy()
1466 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_32FPR | in cpu_probe_legacy()
1468 c->tlbsize = 48; in cpu_probe_legacy()
1471 c->cputype = CPU_NEVADA; in cpu_probe_legacy()
1473 set_isa(c, MIPS_CPU_ISA_IV); in cpu_probe_legacy()
1474 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_32FPR | in cpu_probe_legacy()
1476 c->tlbsize = 48; in cpu_probe_legacy()
1479 c->cputype = CPU_RM7000; in cpu_probe_legacy()
1481 set_isa(c, MIPS_CPU_ISA_IV); in cpu_probe_legacy()
1482 c->options = R4K_OPTS | MIPS_CPU_FPU | MIPS_CPU_32FPR | in cpu_probe_legacy()
1492 c->tlbsize = (read_c0_info() & (1 << 29)) ? 64 : 48; in cpu_probe_legacy()
1495 c->cputype = CPU_R10000; in cpu_probe_legacy()
1497 set_isa(c, MIPS_CPU_ISA_IV); in cpu_probe_legacy()
1498 c->options = MIPS_CPU_TLB | MIPS_CPU_4K_CACHE | MIPS_CPU_4KEX | in cpu_probe_legacy()
1502 c->tlbsize = 64; in cpu_probe_legacy()
1505 c->cputype = CPU_R12000; in cpu_probe_legacy()
1507 set_isa(c, MIPS_CPU_ISA_IV); in cpu_probe_legacy()
1508 c->options = MIPS_CPU_TLB | MIPS_CPU_4K_CACHE | MIPS_CPU_4KEX | in cpu_probe_legacy()
1512 c->tlbsize = 64; in cpu_probe_legacy()
1515 if (((c->processor_id >> 4) & 0x0f) > 2) { in cpu_probe_legacy()
1516 c->cputype = CPU_R16000; in cpu_probe_legacy()
1519 c->cputype = CPU_R14000; in cpu_probe_legacy()
1522 set_isa(c, MIPS_CPU_ISA_IV); in cpu_probe_legacy()
1523 c->options = MIPS_CPU_TLB | MIPS_CPU_4K_CACHE | MIPS_CPU_4KEX | in cpu_probe_legacy()
1527 c->tlbsize = 64; in cpu_probe_legacy()
1530 switch (c->processor_id & PRID_REV_MASK) { in cpu_probe_legacy()
1532 c->cputype = CPU_LOONGSON2; in cpu_probe_legacy()
1535 set_isa(c, MIPS_CPU_ISA_III); in cpu_probe_legacy()
1536 c->fpu_msk31 |= FPU_CSR_CONDX; in cpu_probe_legacy()
1539 c->cputype = CPU_LOONGSON2; in cpu_probe_legacy()
1542 set_isa(c, MIPS_CPU_ISA_III); in cpu_probe_legacy()
1543 c->fpu_msk31 |= FPU_CSR_CONDX; in cpu_probe_legacy()
1546 c->cputype = CPU_LOONGSON3; in cpu_probe_legacy()
1549 set_isa(c, MIPS_CPU_ISA_M64R1); in cpu_probe_legacy()
1550 c->ases |= (MIPS_ASE_LOONGSON_MMI | MIPS_ASE_LOONGSON_CAM | in cpu_probe_legacy()
1555 c->cputype = CPU_LOONGSON3; in cpu_probe_legacy()
1558 set_isa(c, MIPS_CPU_ISA_M64R1); in cpu_probe_legacy()
1559 c->ases |= (MIPS_ASE_LOONGSON_MMI | MIPS_ASE_LOONGSON_CAM | in cpu_probe_legacy()
1564 c->options = R4K_OPTS | in cpu_probe_legacy()
1567 c->tlbsize = 64; in cpu_probe_legacy()
1568 c->writecombine = _CACHE_UNCACHED_ACCELERATED; in cpu_probe_legacy()
1571 decode_configs(c); in cpu_probe_legacy()
1573 c->cputype = CPU_LOONGSON1; in cpu_probe_legacy()
1575 switch (c->processor_id & PRID_REV_MASK) { in cpu_probe_legacy()
1585 static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_mips() argument
1587 c->writecombine = _CACHE_UNCACHED_ACCELERATED; in cpu_probe_mips()
1588 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_mips()
1590 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1591 c->cputype = CPU_QEMU_GENERIC; in cpu_probe_mips()
1595 c->cputype = CPU_4KC; in cpu_probe_mips()
1596 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1601 c->cputype = CPU_4KEC; in cpu_probe_mips()
1602 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1607 c->cputype = CPU_4KSC; in cpu_probe_mips()
1608 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1612 c->cputype = CPU_5KC; in cpu_probe_mips()
1613 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1617 c->cputype = CPU_5KE; in cpu_probe_mips()
1618 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1622 c->cputype = CPU_20KC; in cpu_probe_mips()
1623 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1627 c->cputype = CPU_24K; in cpu_probe_mips()
1628 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1632 c->cputype = CPU_24K; in cpu_probe_mips()
1633 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1637 c->cputype = CPU_25KF; in cpu_probe_mips()
1638 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1642 c->cputype = CPU_34K; in cpu_probe_mips()
1643 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1645 cpu_set_mt_per_tc_perf(c); in cpu_probe_mips()
1648 c->cputype = CPU_74K; in cpu_probe_mips()
1649 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1653 c->cputype = CPU_M14KC; in cpu_probe_mips()
1654 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1658 c->cputype = CPU_M14KEC; in cpu_probe_mips()
1659 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1663 c->cputype = CPU_1004K; in cpu_probe_mips()
1664 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1666 cpu_set_mt_per_tc_perf(c); in cpu_probe_mips()
1669 c->cputype = CPU_1074K; in cpu_probe_mips()
1670 c->writecombine = _CACHE_UNCACHED; in cpu_probe_mips()
1674 c->cputype = CPU_INTERAPTIV; in cpu_probe_mips()
1676 cpu_set_mt_per_tc_perf(c); in cpu_probe_mips()
1679 c->cputype = CPU_INTERAPTIV; in cpu_probe_mips()
1681 cpu_set_mt_per_tc_perf(c); in cpu_probe_mips()
1684 c->cputype = CPU_PROAPTIV; in cpu_probe_mips()
1688 c->cputype = CPU_PROAPTIV; in cpu_probe_mips()
1692 c->cputype = CPU_P5600; in cpu_probe_mips()
1696 c->cputype = CPU_P6600; in cpu_probe_mips()
1700 c->cputype = CPU_I6400; in cpu_probe_mips()
1704 c->cputype = CPU_I6500; in cpu_probe_mips()
1708 c->cputype = CPU_M5150; in cpu_probe_mips()
1712 c->cputype = CPU_M6250; in cpu_probe_mips()
1717 decode_configs(c); in cpu_probe_mips()
1721 switch (__get_cpu_type(c->cputype)) { in cpu_probe_mips()
1723 c->options |= MIPS_CPU_SHARED_FTLB_ENTRIES; in cpu_probe_mips()
1726 c->options |= MIPS_CPU_SHARED_FTLB_RAM; in cpu_probe_mips()
1733 static inline void cpu_probe_alchemy(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_alchemy() argument
1735 decode_configs(c); in cpu_probe_alchemy()
1736 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_alchemy()
1739 c->cputype = CPU_ALCHEMY; in cpu_probe_alchemy()
1740 switch ((c->processor_id >> 24) & 0xff) { in cpu_probe_alchemy()
1755 if ((c->processor_id & PRID_REV_MASK) == 2) in cpu_probe_alchemy()
1769 static inline void cpu_probe_sibyte(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_sibyte() argument
1771 decode_configs(c); in cpu_probe_sibyte()
1773 c->writecombine = _CACHE_UNCACHED_ACCELERATED; in cpu_probe_sibyte()
1774 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_sibyte()
1776 c->cputype = CPU_SB1; in cpu_probe_sibyte()
1779 if ((c->processor_id & PRID_REV_MASK) < 0x02) in cpu_probe_sibyte()
1780 c->options &= ~(MIPS_CPU_FPU | MIPS_CPU_32FPR); in cpu_probe_sibyte()
1783 c->cputype = CPU_SB1A; in cpu_probe_sibyte()
1789 static inline void cpu_probe_sandcraft(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_sandcraft() argument
1791 decode_configs(c); in cpu_probe_sandcraft()
1792 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_sandcraft()
1794 c->cputype = CPU_SR71000; in cpu_probe_sandcraft()
1796 c->scache.ways = 8; in cpu_probe_sandcraft()
1797 c->tlbsize = 64; in cpu_probe_sandcraft()
1802 static inline void cpu_probe_nxp(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_nxp() argument
1804 decode_configs(c); in cpu_probe_nxp()
1805 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_nxp()
1807 c->cputype = CPU_PR4450; in cpu_probe_nxp()
1809 set_isa(c, MIPS_CPU_ISA_M32R1); in cpu_probe_nxp()
1814 static inline void cpu_probe_broadcom(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_broadcom() argument
1816 decode_configs(c); in cpu_probe_broadcom()
1817 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_broadcom()
1820 c->cputype = CPU_BMIPS32; in cpu_probe_broadcom()
1827 c->cputype = CPU_BMIPS3300; in cpu_probe_broadcom()
1832 int rev = c->processor_id & PRID_REV_MASK; in cpu_probe_broadcom()
1836 c->cputype = CPU_BMIPS4380; in cpu_probe_broadcom()
1839 c->options |= MIPS_CPU_RIXI; in cpu_probe_broadcom()
1841 c->cputype = CPU_BMIPS4350; in cpu_probe_broadcom()
1849 c->cputype = CPU_BMIPS5000; in cpu_probe_broadcom()
1850 if ((c->processor_id & PRID_IMP_MASK) == PRID_IMP_BMIPS5200) in cpu_probe_broadcom()
1855 c->options |= MIPS_CPU_ULRI | MIPS_CPU_RIXI; in cpu_probe_broadcom()
1860 static inline void cpu_probe_cavium(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_cavium() argument
1862 decode_configs(c); in cpu_probe_cavium()
1863 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_cavium()
1867 c->cputype = CPU_CAVIUM_OCTEON; in cpu_probe_cavium()
1874 c->cputype = CPU_CAVIUM_OCTEON_PLUS; in cpu_probe_cavium()
1884 c->cputype = CPU_CAVIUM_OCTEON2; in cpu_probe_cavium()
1892 c->cputype = CPU_CAVIUM_OCTEON3; in cpu_probe_cavium()
1898 c->cputype = CPU_UNKNOWN; in cpu_probe_cavium()
1903 static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_loongson() argument
1905 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_loongson()
1907 switch (c->processor_id & PRID_REV_MASK) { in cpu_probe_loongson()
1910 c->cputype = CPU_LOONGSON3; in cpu_probe_loongson()
1913 set_isa(c, MIPS_CPU_ISA_M64R2); in cpu_probe_loongson()
1917 c->cputype = CPU_LOONGSON3; in cpu_probe_loongson()
1920 set_isa(c, MIPS_CPU_ISA_M64R2); in cpu_probe_loongson()
1924 decode_configs(c); in cpu_probe_loongson()
1925 c->options |= MIPS_CPU_FTLB | MIPS_CPU_TLBINV | MIPS_CPU_LDPTE; in cpu_probe_loongson()
1926 c->writecombine = _CACHE_UNCACHED_ACCELERATED; in cpu_probe_loongson()
1927 c->ases |= (MIPS_ASE_LOONGSON_MMI | MIPS_ASE_LOONGSON_CAM | in cpu_probe_loongson()
1936 static inline void cpu_probe_ingenic(struct cpuinfo_mips *c, unsigned int cpu) in cpu_probe_ingenic() argument
1938 decode_configs(c); in cpu_probe_ingenic()
1944 decode_config3(c); in cpu_probe_ingenic()
1947 c->options &= ~MIPS_CPU_COUNTER; in cpu_probe_ingenic()
1950 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_ingenic()
1952 c->cputype = CPU_XBURST; in cpu_probe_ingenic()
1953 c->writecombine = _CACHE_UNCACHED_ACCELERATED; in cpu_probe_ingenic()
1973 if ((c->processor_id & PRID_COMP_MASK) == PRID_COMP_INGENIC_D0) in cpu_probe_ingenic()
1974 c->isa_level &= ~MIPS_CPU_ISA_M32R2; in cpu_probe_ingenic()
1977 static inline void cpu_probe_netlogic(struct cpuinfo_mips *c, int cpu) in cpu_probe_netlogic() argument
1979 decode_configs(c); in cpu_probe_netlogic()
1981 if ((c->processor_id & PRID_IMP_MASK) == PRID_IMP_NETLOGIC_AU13XX) { in cpu_probe_netlogic()
1982 c->cputype = CPU_ALCHEMY; in cpu_probe_netlogic()
1988 c->options = (MIPS_CPU_TLB | in cpu_probe_netlogic()
1996 switch (c->processor_id & PRID_IMP_MASK) { in cpu_probe_netlogic()
2000 c->cputype = CPU_XLP; in cpu_probe_netlogic()
2006 c->cputype = CPU_XLP; in cpu_probe_netlogic()
2018 c->cputype = CPU_XLR; in cpu_probe_netlogic()
2035 c->cputype = CPU_XLR; in cpu_probe_netlogic()
2041 c->processor_id); in cpu_probe_netlogic()
2042 c->cputype = CPU_XLR; in cpu_probe_netlogic()
2046 if (c->cputype == CPU_XLP) { in cpu_probe_netlogic()
2047 set_isa(c, MIPS_CPU_ISA_M64R2); in cpu_probe_netlogic()
2048 c->options |= (MIPS_CPU_FPU | MIPS_CPU_ULRI | MIPS_CPU_MCHECK); in cpu_probe_netlogic()
2050 c->tlbsize = ((read_c0_config6() >> 16) & 0xffff) + 1; in cpu_probe_netlogic()
2052 set_isa(c, MIPS_CPU_ISA_M64R1); in cpu_probe_netlogic()
2053 c->tlbsize = ((read_c0_config1() >> 25) & 0x3f) + 1; in cpu_probe_netlogic()
2055 c->kscratch_mask = 0xf; in cpu_probe_netlogic()
2069 struct cpuinfo_mips *c = ¤t_cpu_data; in cpu_probe() local
2078 c->processor_id = PRID_IMP_UNKNOWN; in cpu_probe()
2079 c->fpu_id = FPIR_IMP_NONE; in cpu_probe()
2080 c->cputype = CPU_UNKNOWN; in cpu_probe()
2081 c->writecombine = _CACHE_UNCACHED; in cpu_probe()
2083 c->fpu_csr31 = FPU_CSR_RN; in cpu_probe()
2084 c->fpu_msk31 = FPU_CSR_RSVD | FPU_CSR_ABS2008 | FPU_CSR_NAN2008; in cpu_probe()
2086 c->processor_id = read_c0_prid(); in cpu_probe()
2087 switch (c->processor_id & PRID_COMP_MASK) { in cpu_probe()
2089 cpu_probe_legacy(c, cpu); in cpu_probe()
2092 cpu_probe_mips(c, cpu); in cpu_probe()
2095 cpu_probe_alchemy(c, cpu); in cpu_probe()
2098 cpu_probe_sibyte(c, cpu); in cpu_probe()
2101 cpu_probe_broadcom(c, cpu); in cpu_probe()
2104 cpu_probe_sandcraft(c, cpu); in cpu_probe()
2107 cpu_probe_nxp(c, cpu); in cpu_probe()
2110 cpu_probe_cavium(c, cpu); in cpu_probe()
2113 cpu_probe_loongson(c, cpu); in cpu_probe()
2118 cpu_probe_ingenic(c, cpu); in cpu_probe()
2121 cpu_probe_netlogic(c, cpu); in cpu_probe()
2126 BUG_ON(c->cputype == CPU_UNKNOWN); in cpu_probe()
2133 BUG_ON(current_cpu_type() != c->cputype); in cpu_probe()
2141 c->options |= MIPS_CPU_RIXIEX; in cpu_probe()
2145 c->options &= ~MIPS_CPU_FPU; in cpu_probe()
2148 c->ases &= ~(MIPS_ASE_DSP | MIPS_ASE_DSP2P); in cpu_probe()
2151 c->options &= ~MIPS_CPU_HTW; in cpu_probe()
2156 if (c->options & MIPS_CPU_FPU) in cpu_probe()
2157 cpu_set_fpu_opts(c); in cpu_probe()
2159 cpu_set_nofpu_opts(c); in cpu_probe()
2166 c->srsets = ((read_c0_srsctl() >> 26) & 0x0f) + 1; in cpu_probe()
2168 c->options |= MIPS_CPU_PCI; in cpu_probe()
2171 c->srsets = 1; in cpu_probe()
2177 c->msa_id = cpu_get_msa_id(); in cpu_probe()
2178 WARN(c->msa_id & MSA_IR_WRPF, in cpu_probe()
2217 cpu_probe_vz(c); in cpu_probe()
2219 cpu_probe_vmbits(c); in cpu_probe()
2229 struct cpuinfo_mips *c = ¤t_cpu_data; in cpu_report() local
2232 smp_processor_id(), c->processor_id, cpu_name_string()); in cpu_report()
2233 if (c->options & MIPS_CPU_FPU) in cpu_report()
2234 printk(KERN_INFO "FPU revision is: %08x\n", c->fpu_id); in cpu_report()
2236 pr_info("MSA revision is: %08x\n", c->msa_id); in cpu_report()