diff options
Diffstat (limited to 'arch/mips/kernel/cpu-probe.c')
| -rw-r--r-- | arch/mips/kernel/cpu-probe.c | 39 | 
1 files changed, 33 insertions, 6 deletions
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index def1659fe262..e2955f1f6316 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c @@ -635,14 +635,14 @@ static int set_ftlb_enable(struct cpuinfo_mips *c, enum ftlb_flags flags)  		config = read_c0_config6();  		if (flags & FTLB_EN) -			config |= MIPS_CONF6_MTI_FTLBEN; +			config |= MTI_CONF6_FTLBEN;  		else -			config &= ~MIPS_CONF6_MTI_FTLBEN; +			config &= ~MTI_CONF6_FTLBEN;  		if (flags & FTLB_SET_PROB) { -			config &= ~(3 << MIPS_CONF6_MTI_FTLBP_SHIFT); +			config &= ~(3 << MTI_CONF6_FTLBP_SHIFT);  			config |= calculate_ftlb_probability(c) -				  << MIPS_CONF6_MTI_FTLBP_SHIFT; +				  << MTI_CONF6_FTLBP_SHIFT;  		}  		write_c0_config6(config); @@ -662,10 +662,10 @@ static int set_ftlb_enable(struct cpuinfo_mips *c, enum ftlb_flags flags)  		config = read_c0_config6();  		if (flags & FTLB_EN)  			/* Enable FTLB */ -			write_c0_config6(config & ~MIPS_CONF6_LOONGSON_FTLBDIS); +			write_c0_config6(config & ~LOONGSON_CONF6_FTLBDIS);  		else  			/* Disable FTLB */ -			write_c0_config6(config | MIPS_CONF6_LOONGSON_FTLBDIS); +			write_c0_config6(config | LOONGSON_CONF6_FTLBDIS);  		break;  	default:  		return 1; @@ -1827,6 +1827,19 @@ static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu)  	default:  		break;  	} + +	/* Recent MIPS cores use the implementation-dependent ExcCode 16 for +	 * cache/FTLB parity exceptions. +	 */ +	switch (__get_cpu_type(c->cputype)) { +	case CPU_PROAPTIV: +	case CPU_P5600: +	case CPU_P6600: +	case CPU_I6400: +	case CPU_I6500: +		c->options |= MIPS_CPU_FTLBPAREX; +		break; +	}  }  static inline void cpu_probe_alchemy(struct cpuinfo_mips *c, unsigned int cpu) @@ -2030,6 +2043,9 @@ static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu)  {  	decode_configs(c); +	/* All Loongson processors covered here define ExcCode 16 as GSExc. */ +	c->options |= MIPS_CPU_GSEXCEX; +  	switch (c->processor_id & PRID_IMP_MASK) {  	case PRID_IMP_LOONGSON_64R: /* Loongson-64 Reduced */  		switch (c->processor_id & PRID_REV_MASK) { @@ -2110,6 +2126,8 @@ static inline void cpu_probe_ingenic(struct cpuinfo_mips *c, unsigned int cpu)  	BUG_ON(!__builtin_constant_p(cpu_has_counter) || cpu_has_counter);  	switch (c->processor_id & PRID_IMP_MASK) { + +	/* XBurst®1 with MXU1.0/MXU1.1 SIMD ISA */  	case PRID_IMP_XBURST_REV1:  		/* @@ -2148,12 +2166,20 @@ static inline void cpu_probe_ingenic(struct cpuinfo_mips *c, unsigned int cpu)  			break;  		}  		fallthrough; + +	/* XBurst®1 with MXU2.0 SIMD ISA */  	case PRID_IMP_XBURST_REV2:  		c->cputype = CPU_XBURST;  		c->writecombine = _CACHE_UNCACHED_ACCELERATED;  		__cpu_name[cpu] = "Ingenic XBurst";  		break; +	/* XBurst®2 with MXU2.1 SIMD ISA */ +	case PRID_IMP_XBURST2: +		c->cputype = CPU_XBURST; +		__cpu_name[cpu] = "Ingenic XBurst II"; +		break; +  	default:  		panic("Unknown Ingenic Processor ID!");  		break; @@ -2299,6 +2325,7 @@ void cpu_probe(void)  	case PRID_COMP_LOONGSON:  		cpu_probe_loongson(c, cpu);  		break; +	case PRID_COMP_INGENIC_13:  	case PRID_COMP_INGENIC_D0:  	case PRID_COMP_INGENIC_D1:  	case PRID_COMP_INGENIC_E1:  |