Commit b4672d37 authored by Ralf Baechle's avatar Ralf Baechle Committed by

MIPS: Introduce machinery for testing for MIPSxxR1/2.

Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent e7958bb9
...@@ -435,6 +435,9 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c) ...@@ -435,6 +435,9 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c)
} }
} }
static char unknown_isa[] __initdata = KERN_ERR \
"Unsupported ISA type, c0.config0: %d.";
static inline unsigned int decode_config0(struct cpuinfo_mips *c) static inline unsigned int decode_config0(struct cpuinfo_mips *c)
{ {
unsigned int config0; unsigned int config0;
...@@ -447,16 +450,37 @@ static inline unsigned int decode_config0(struct cpuinfo_mips *c) ...@@ -447,16 +450,37 @@ static inline unsigned int decode_config0(struct cpuinfo_mips *c)
isa = (config0 & MIPS_CONF_AT) >> 13; isa = (config0 & MIPS_CONF_AT) >> 13;
switch (isa) { switch (isa) {
case 0: case 0:
c->isa_level = MIPS_CPU_ISA_M32R1; switch ((config0 >> 10) & 7) {
case 0:
c->isa_level = MIPS_CPU_ISA_M32R1;
break;
case 1:
c->isa_level = MIPS_CPU_ISA_M32R2;
break;
default:
goto unknown;
}
break; break;
case 2: case 2:
c->isa_level = MIPS_CPU_ISA_M64R1; switch ((config0 >> 10) & 7) {
case 0:
c->isa_level = MIPS_CPU_ISA_M64R1;
break;
case 1:
c->isa_level = MIPS_CPU_ISA_M64R2;
break;
default:
goto unknown;
}
break; break;
default: default:
panic("Unsupported ISA type, cp0.config0.at: %d.", isa); goto unknown;
} }
return config0 & MIPS_CONF_M; return config0 & MIPS_CONF_M;
unknown:
panic(unknown_isa, config0);
} }
static inline unsigned int decode_config1(struct cpuinfo_mips *c) static inline unsigned int decode_config1(struct cpuinfo_mips *c)
...@@ -568,7 +592,6 @@ static inline void cpu_probe_mips(struct cpuinfo_mips *c) ...@@ -568,7 +592,6 @@ static inline void cpu_probe_mips(struct cpuinfo_mips *c)
break; break;
case PRID_IMP_34K: case PRID_IMP_34K:
c->cputype = CPU_34K; c->cputype = CPU_34K;
c->isa_level = MIPS_CPU_ISA_M32R1;
break; break;
} }
} }
...@@ -691,7 +714,9 @@ __init void cpu_probe(void) ...@@ -691,7 +714,9 @@ __init void cpu_probe(void)
c->fpu_id = cpu_get_fpu_id(); c->fpu_id = cpu_get_fpu_id();
if (c->isa_level == MIPS_CPU_ISA_M32R1 || if (c->isa_level == MIPS_CPU_ISA_M32R1 ||
c->isa_level == MIPS_CPU_ISA_M64R1) { c->isa_level == MIPS_CPU_ISA_M32R2 ||
c->isa_level == MIPS_CPU_ISA_M64R1 ||
c->isa_level == MIPS_CPU_ISA_M64R2) {
if (c->fpu_id & MIPS_FPIR_3D) if (c->fpu_id & MIPS_FPIR_3D)
c->ases |= MIPS_ASE_MIPS3D; c->ases |= MIPS_ASE_MIPS3D;
} }
......
...@@ -628,9 +628,9 @@ void __init time_init(void) ...@@ -628,9 +628,9 @@ void __init time_init(void)
mips_hpt_init = c0_hpt_init; mips_hpt_init = c0_hpt_init;
} }
if ((current_cpu_data.isa_level == MIPS_CPU_ISA_M32R1) || if (cpu_has_mips32r1 || cpu_has_mips32r2 ||
(current_cpu_data.isa_level == MIPS_CPU_ISA_I) || (current_cpu_data.isa_level == MIPS_CPU_ISA_I) ||
(current_cpu_data.isa_level == MIPS_CPU_ISA_II)) (current_cpu_data.isa_level == MIPS_CPU_ISA_II))
/* /*
* We need to calibrate the counter but we don't have * We need to calibrate the counter but we don't have
* 64-bit division. * 64-bit division.
......
...@@ -144,6 +144,18 @@ ...@@ -144,6 +144,18 @@
# ifndef cpu_has_64bit_addresses # ifndef cpu_has_64bit_addresses
# define cpu_has_64bit_addresses 0 # define cpu_has_64bit_addresses 0
# endif # endif
# ifndef cpu_has_mips32r1
# define cpu_has_mips32r1 (cpu_data[0].isa_level & MIPS_CPU_ISA_M32R1)
# endif
# ifndef cpu_has_mips32r2
# define cpu_has_mips32r2 (cpu_data[0].isa_level & MIPS_CPU_ISA_M32R2)
# endif
# ifndef cpu_has_mips64r1
# define cpu_has_mips64r1 0
# endif
# ifndef cpu_has_mips64r2
# define cpu_has_mips64r2 0
# endif
#endif #endif
#ifdef CONFIG_64BIT #ifdef CONFIG_64BIT
...@@ -162,6 +174,18 @@ ...@@ -162,6 +174,18 @@
# ifndef cpu_has_64bit_addresses # ifndef cpu_has_64bit_addresses
# define cpu_has_64bit_addresses 1 # define cpu_has_64bit_addresses 1
# endif # endif
# ifndef cpu_has_mips32r1
# define cpu_has_mips32r1 0
# endif
# ifndef cpu_has_mips32r2
# define cpu_has_mips32r2 0
# endif
# ifndef cpu_has_mips64r1
# define cpu_has_mips64r1 (cpu_data[0].isa_level & MIPS_CPU_ISA_M64R1)
# endif
# ifndef cpu_has_mips64r2
# define cpu_has_mips64r2 (cpu_data[0].isa_level & MIPS_CPU_ISA_M64R2)
# endif
#endif #endif
#ifdef CONFIG_CPU_MIPSR2 #ifdef CONFIG_CPU_MIPSR2
......
...@@ -210,7 +210,9 @@ ...@@ -210,7 +210,9 @@
#define MIPS_CPU_ISA_IV (0x00000004 | MIPS_CPU_ISA_64BIT) #define MIPS_CPU_ISA_IV (0x00000004 | MIPS_CPU_ISA_64BIT)
#define MIPS_CPU_ISA_V (0x00000005 | MIPS_CPU_ISA_64BIT) #define MIPS_CPU_ISA_V (0x00000005 | MIPS_CPU_ISA_64BIT)
#define MIPS_CPU_ISA_M32R1 0x00000020 #define MIPS_CPU_ISA_M32R1 0x00000020
#define MIPS_CPU_ISA_M64R1 (0x00000040 | MIPS_CPU_ISA_64BIT) #define MIPS_CPU_ISA_M32R2 0x00000040
#define MIPS_CPU_ISA_M64R1 (0x00000080 | MIPS_CPU_ISA_64BIT)
#define MIPS_CPU_ISA_M64R2 (0x00000100 | MIPS_CPU_ISA_64BIT)
/* /*
* CPU Option encodings * CPU Option encodings
......
...@@ -34,4 +34,9 @@ ...@@ -34,4 +34,9 @@
#define cpu_has_nofpuex 0 #define cpu_has_nofpuex 0
#define cpu_has_64bits 1 #define cpu_has_64bits 1
#define cpu_has_mips32r1 0
#define cpu_has_mips32r2 0
#define cpu_has_mips64r1 0
#define cpu_has_mips64r2 0
#endif /* __ASM_MACH_IP22_CPU_FEATURE_OVERRIDES_H */ #endif /* __ASM_MACH_IP22_CPU_FEATURE_OVERRIDES_H */
...@@ -37,4 +37,9 @@ ...@@ -37,4 +37,9 @@
#define cpu_icache_line_size() 64 #define cpu_icache_line_size() 64
#define cpu_scache_line_size() 128 #define cpu_scache_line_size() 128
#define cpu_has_mips32r1 0
#define cpu_has_mips32r2 0
#define cpu_has_mips64r1 0
#define cpu_has_mips64r2 0
#endif /* __ASM_MACH_IP27_CPU_FEATURE_OVERRIDES_H */ #endif /* __ASM_MACH_IP27_CPU_FEATURE_OVERRIDES_H */
...@@ -39,4 +39,9 @@ ...@@ -39,4 +39,9 @@
#define cpu_has_ic_fills_f_dc 0 #define cpu_has_ic_fills_f_dc 0
#define cpu_has_dsp 0 #define cpu_has_dsp 0
#define cpu_has_mips32r1 0
#define cpu_has_mips32r2 0
#define cpu_has_mips64r1 0
#define cpu_has_mips64r2 0
#endif /* __ASM_MACH_IP32_CPU_FEATURE_OVERRIDES_H */ #endif /* __ASM_MACH_IP32_CPU_FEATURE_OVERRIDES_H */
...@@ -37,4 +37,9 @@ ...@@ -37,4 +37,9 @@
#define cpu_icache_line_size() 32 #define cpu_icache_line_size() 32
#define cpu_scache_line_size() 32 #define cpu_scache_line_size() 32
#define cpu_has_mips32r1 0
#define cpu_has_mips32r2 0
#define cpu_has_mips64r1 0
#define cpu_has_mips64r2 0
#endif /* __ASM_MACH_JA_CPU_FEATURE_OVERRIDES_H */ #endif /* __ASM_MACH_JA_CPU_FEATURE_OVERRIDES_H */
...@@ -40,4 +40,9 @@ ...@@ -40,4 +40,9 @@
#define cpu_icache_line_size() 32 #define cpu_icache_line_size() 32
#define cpu_scache_line_size() 32 #define cpu_scache_line_size() 32
#define cpu_has_mips32r1 0
#define cpu_has_mips32r2 0
#define cpu_has_mips64r1 0
#define cpu_has_mips64r2 0
#endif /* __ASM_MACH_JA_CPU_FEATURE_OVERRIDES_H */ #endif /* __ASM_MACH_JA_CPU_FEATURE_OVERRIDES_H */
...@@ -40,4 +40,9 @@ ...@@ -40,4 +40,9 @@
#define cpu_icache_line_size() 32 #define cpu_icache_line_size() 32
#define cpu_scache_line_size() 0 /* No S-cache on R5000 I think ... */ #define cpu_scache_line_size() 0 /* No S-cache on R5000 I think ... */
#define cpu_has_mips32r1 0
#define cpu_has_mips32r2 0
#define cpu_has_mips64r1 0
#define cpu_has_mips64r2 0
#endif /* __ASM_MACH_RM200_CPU_FEATURE_OVERRIDES_H */ #endif /* __ASM_MACH_RM200_CPU_FEATURE_OVERRIDES_H */
...@@ -37,4 +37,9 @@ ...@@ -37,4 +37,9 @@
#define cpu_icache_line_size() 32 #define cpu_icache_line_size() 32
#define cpu_scache_line_size() 32 #define cpu_scache_line_size() 32
#define cpu_has_mips32r1 0
#define cpu_has_mips32r2 0
#define cpu_has_mips64r1 0
#define cpu_has_mips64r2 0
#endif /* __ASM_MACH_YOSEMITE_CPU_FEATURE_OVERRIDES_H */ #endif /* __ASM_MACH_YOSEMITE_CPU_FEATURE_OVERRIDES_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment