diff options
Diffstat (limited to 'arch/mips/kernel/cpu-probe.c')
-rw-r--r-- | arch/mips/kernel/cpu-probe.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index b12eeee0e974..c6b8b074a81a 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c | |||
@@ -186,9 +186,29 @@ static inline void check_wait(void) | |||
186 | } | 186 | } |
187 | } | 187 | } |
188 | 188 | ||
189 | static inline void check_errata(void) | ||
190 | { | ||
191 | struct cpuinfo_mips *c = ¤t_cpu_data; | ||
192 | |||
193 | switch (c->cputype) { | ||
194 | case CPU_34K: | ||
195 | /* | ||
196 | * Erratum "RPS May Cause Incorrect Instruction Execution" | ||
197 | * This code only handles VPE0, any SMP/SMTC/RTOS code | ||
198 | * making use of VPE1 will be responsable for that VPE. | ||
199 | */ | ||
200 | if ((c->processor_id & PRID_REV_MASK) <= PRID_REV_34K_V1_0_2) | ||
201 | write_c0_config7(read_c0_config7() | MIPS_CONF7_RPS); | ||
202 | break; | ||
203 | default: | ||
204 | break; | ||
205 | } | ||
206 | } | ||
207 | |||
189 | void __init check_bugs32(void) | 208 | void __init check_bugs32(void) |
190 | { | 209 | { |
191 | check_wait(); | 210 | check_wait(); |
211 | check_errata(); | ||
192 | } | 212 | } |
193 | 213 | ||
194 | /* | 214 | /* |
@@ -485,6 +505,14 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c) | |||
485 | MIPS_CPU_LLSC; | 505 | MIPS_CPU_LLSC; |
486 | c->tlbsize = 64; | 506 | c->tlbsize = 64; |
487 | break; | 507 | break; |
508 | case PRID_IMP_LOONGSON2: | ||
509 | c->cputype = CPU_LOONGSON2; | ||
510 | c->isa_level = MIPS_CPU_ISA_III; | ||
511 | c->options = R4K_OPTS | | ||
512 | MIPS_CPU_FPU | MIPS_CPU_LLSC | | ||
513 | MIPS_CPU_32FPR; | ||
514 | c->tlbsize = 64; | ||
515 | break; | ||
488 | } | 516 | } |
489 | } | 517 | } |
490 | 518 | ||
@@ -588,6 +616,8 @@ static inline unsigned int decode_config3(struct cpuinfo_mips *c) | |||
588 | c->options |= MIPS_CPU_VEIC; | 616 | c->options |= MIPS_CPU_VEIC; |
589 | if (config3 & MIPS_CONF3_MT) | 617 | if (config3 & MIPS_CONF3_MT) |
590 | c->ases |= MIPS_ASE_MIPSMT; | 618 | c->ases |= MIPS_ASE_MIPSMT; |
619 | if (config3 & MIPS_CONF3_ULRI) | ||
620 | c->options |= MIPS_CPU_ULRI; | ||
591 | 621 | ||
592 | return config3 & MIPS_CONF_M; | 622 | return config3 & MIPS_CONF_M; |
593 | } | 623 | } |