diff options
Diffstat (limited to 'arch/mips/kernel/cpu-probe.c')
| -rw-r--r-- | arch/mips/kernel/cpu-probe.c | 12 | 
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index 6b07b739f914..b2509c19cfb5 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c @@ -414,6 +414,14 @@ static int __init ftlb_disable(char *s)  __setup("noftlb", ftlb_disable); +/* + * Check if the CPU has per tc perf counters + */ +static inline void cpu_set_mt_per_tc_perf(struct cpuinfo_mips *c) +{ +	if (read_c0_config7() & MTI_CONF7_PTC) +		c->options |= MIPS_CPU_MT_PER_TC_PERF_COUNTERS; +}  static inline void check_errata(void)  { @@ -1572,6 +1580,7 @@ static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu)  		c->cputype = CPU_34K;  		c->writecombine = _CACHE_UNCACHED;  		__cpu_name[cpu] = "MIPS 34Kc"; +		cpu_set_mt_per_tc_perf(c);  		break;  	case PRID_IMP_74K:  		c->cputype = CPU_74K; @@ -1592,6 +1601,7 @@ static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu)  		c->cputype = CPU_1004K;  		c->writecombine = _CACHE_UNCACHED;  		__cpu_name[cpu] = "MIPS 1004Kc"; +		cpu_set_mt_per_tc_perf(c);  		break;  	case PRID_IMP_1074K:  		c->cputype = CPU_1074K; @@ -1601,10 +1611,12 @@ static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu)  	case PRID_IMP_INTERAPTIV_UP:  		c->cputype = CPU_INTERAPTIV;  		__cpu_name[cpu] = "MIPS interAptiv"; +		cpu_set_mt_per_tc_perf(c);  		break;  	case PRID_IMP_INTERAPTIV_MP:  		c->cputype = CPU_INTERAPTIV;  		__cpu_name[cpu] = "MIPS interAptiv (multi)"; +		cpu_set_mt_per_tc_perf(c);  		break;  	case PRID_IMP_PROAPTIV_UP:  		c->cputype = CPU_PROAPTIV;  |