Lines Matching refs:c

30 static inline void cpu_set_fpu_fcsr_mask(struct cpuinfo_loongarch *c)  in cpu_set_fpu_fcsr_mask()  argument
34 fcsr = c->fpu_csr0; in cpu_set_fpu_fcsr_mask()
52 c->fpu_mask = ~(fcsr0 ^ fcsr1) & ~mask; in cpu_set_fpu_fcsr_mask()
65 static void cpu_probe_addrbits(struct cpuinfo_loongarch *c) in cpu_probe_addrbits() argument
68 c->pabits = (read_cpucfg(LOONGARCH_CPUCFG1) & CPUCFG1_PABITS) >> 4; in cpu_probe_addrbits()
69 c->vabits = (read_cpucfg(LOONGARCH_CPUCFG1) & CPUCFG1_VABITS) >> 12; in cpu_probe_addrbits()
70 vm_map_base = 0UL - (1UL << c->vabits); in cpu_probe_addrbits()
74 static void set_isa(struct cpuinfo_loongarch *c, unsigned int isa) in set_isa() argument
78 c->isa_level |= LOONGARCH_CPU_ISA_LA64; in set_isa()
81 c->isa_level |= LOONGARCH_CPU_ISA_LA32S; in set_isa()
84 c->isa_level |= LOONGARCH_CPU_ISA_LA32R; in set_isa()
89 static void cpu_probe_common(struct cpuinfo_loongarch *c) in cpu_probe_common() argument
94 c->options = LOONGARCH_CPU_CPUCFG | LOONGARCH_CPU_CSR | LOONGARCH_CPU_VINT; in cpu_probe_common()
102 set_isa(c, LOONGARCH_CPU_ISA_LA32R); in cpu_probe_common()
105 set_isa(c, LOONGARCH_CPU_ISA_LA32S); in cpu_probe_common()
108 set_isa(c, LOONGARCH_CPU_ISA_LA64); in cpu_probe_common()
115 c->options |= LOONGARCH_CPU_TLB; in cpu_probe_common()
117 c->options |= LOONGARCH_CPU_IOCSR; in cpu_probe_common()
119 c->options |= LOONGARCH_CPU_UAL; in cpu_probe_common()
123 c->options |= LOONGARCH_CPU_CRC32; in cpu_probe_common()
129 c->options |= LOONGARCH_CPU_LAM; in cpu_probe_common()
133 c->options |= LOONGARCH_CPU_FPU; in cpu_probe_common()
138 c->options |= LOONGARCH_CPU_LSX; in cpu_probe_common()
144 c->options |= LOONGARCH_CPU_LASX; in cpu_probe_common()
149 c->options |= LOONGARCH_CPU_COMPLEX; in cpu_probe_common()
153 c->options |= LOONGARCH_CPU_CRYPTO; in cpu_probe_common()
157 c->options |= LOONGARCH_CPU_PTW; in cpu_probe_common()
161 c->options |= LOONGARCH_CPU_LSPW; in cpu_probe_common()
165 c->options |= LOONGARCH_CPU_LVZ; in cpu_probe_common()
170 c->options |= LOONGARCH_CPU_LBT_X86; in cpu_probe_common()
174 c->options |= LOONGARCH_CPU_LBT_ARM; in cpu_probe_common()
178 c->options |= LOONGARCH_CPU_LBT_MIPS; in cpu_probe_common()
185 c->options |= LOONGARCH_CPU_PMP; in cpu_probe_common()
190 set_cpu_asid_mask(c, asid_mask); in cpu_probe_common()
193 c->timerbits = (config & CSR_CONF1_TMRBITS) >> CSR_CONF1_TMRBITS_SHIFT; in cpu_probe_common()
194 c->ksave_mask = GENMASK((config & CSR_CONF1_KSNUM) - 1, 0); in cpu_probe_common()
195 c->ksave_mask &= ~(EXC_KSAVE_MASK | PERCPU_KSAVE_MASK | KVM_KSAVE_MASK); in cpu_probe_common()
200 c->tlbsizemtlb = 0; in cpu_probe_common()
201 c->tlbsizestlbsets = 0; in cpu_probe_common()
202 c->tlbsizestlbways = 0; in cpu_probe_common()
203 c->tlbsize = 0; in cpu_probe_common()
206 c->tlbsizemtlb = ((config & CSR_CONF3_MTLBSIZE) >> CSR_CONF3_MTLBSIZE_SHIFT) + 1; in cpu_probe_common()
207 c->tlbsizestlbsets = 0; in cpu_probe_common()
208 c->tlbsizestlbways = 0; in cpu_probe_common()
209 c->tlbsize = c->tlbsizemtlb + c->tlbsizestlbsets * c->tlbsizestlbways; in cpu_probe_common()
212 c->tlbsizemtlb = ((config & CSR_CONF3_MTLBSIZE) >> CSR_CONF3_MTLBSIZE_SHIFT) + 1; in cpu_probe_common()
213 c->tlbsizestlbsets = 1 << ((config & CSR_CONF3_STLBIDX) >> CSR_CONF3_STLBIDX_SHIFT); in cpu_probe_common()
214 c->tlbsizestlbways = ((config & CSR_CONF3_STLBWAYS) >> CSR_CONF3_STLBWAYS_SHIFT) + 1; in cpu_probe_common()
215 c->tlbsize = c->tlbsizemtlb + c->tlbsizestlbsets * c->tlbsizestlbways; in cpu_probe_common()
222 c->options |= LOONGARCH_CPU_WATCH; in cpu_probe_common()
231 static inline void cpu_probe_loongson(struct cpuinfo_loongarch *c, unsigned int cpu) in cpu_probe_loongson() argument
238 switch (BIT(fls(c->isa_level) - 1)) { in cpu_probe_loongson()
241 c->cputype = CPU_LOONGSON32; in cpu_probe_loongson()
245 c->cputype = CPU_LOONGSON64; in cpu_probe_loongson()
250 switch (c->processor_id & PRID_SERIES_MASK) { in cpu_probe_loongson()
281 c->options |= LOONGARCH_CPU_CSRIPI; in cpu_probe_loongson()
283 c->options |= LOONGARCH_CPU_EXTIOI; in cpu_probe_loongson()
285 c->options |= LOONGARCH_CPU_SCALEFREQ; in cpu_probe_loongson()
287 c->options |= LOONGARCH_CPU_FLATMODE; in cpu_probe_loongson()
289 c->options |= LOONGARCH_CPU_EIODECODE; in cpu_probe_loongson()
291 c->options |= LOONGARCH_CPU_AVECINT; in cpu_probe_loongson()
293 c->options |= LOONGARCH_CPU_HYPERVISOR; in cpu_probe_loongson()
308 struct cpuinfo_loongarch *c = &current_cpu_data; in cpu_report() local
311 smp_processor_id(), c->processor_id, cpu_family_string()); in cpu_report()
312 if (c->options & LOONGARCH_CPU_FPU) in cpu_report()
313 pr_info("FPU%d revision is: %08x\n", smp_processor_id(), c->fpu_vers); in cpu_report()
319 struct cpuinfo_loongarch *c = &current_cpu_data; in cpu_probe() local
327 c->cputype = CPU_UNKNOWN; in cpu_probe()
328 c->processor_id = read_cpucfg(LOONGARCH_CPUCFG0); in cpu_probe()
329 c->fpu_vers = (read_cpucfg(LOONGARCH_CPUCFG2) & CPUCFG2_FPVERS) >> 3; in cpu_probe()
331 c->fpu_csr0 = FPU_CSR_RN; in cpu_probe()
332 c->fpu_mask = FPU_CSR_RSVD; in cpu_probe()
334 cpu_probe_common(c); in cpu_probe()
338 switch (c->processor_id & PRID_COMP_MASK) { in cpu_probe()
340 cpu_probe_loongson(c, cpu); in cpu_probe()
345 BUG_ON(c->cputype == CPU_UNKNOWN); in cpu_probe()
347 cpu_probe_addrbits(c); in cpu_probe()