MIPS: cpu-probe: Fix VTLB/FTLB configuration for R6
authorMarkos Chandras <markos.chandras@imgtec.com>
Thu, 9 Jul 2015 09:40:52 +0000 (10:40 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Wed, 26 Aug 2015 13:23:21 +0000 (15:23 +0200)
R6 has dropped the MMUExtDef field from the config4 register and it
now returns 0. However, the return value means nothing in that case
and the only supported configuration for R6 is the VTLB+FTLB
(MMUextDef == 3). As a result, rework the code so that the correct
value is set for R6 cores.

Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/10651/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/kernel/cpu-probe.c

index 6da5f2db67926a1d01e5f26b11aac80e03a3b01c..62dae429fe70699e08ffa09e3436184e397a0fa6 100644 (file)
@@ -546,7 +546,16 @@ static inline unsigned int decode_config4(struct cpuinfo_mips *c)
        if (cpu_has_tlb) {
                if (((config4 & MIPS_CONF4_IE) >> 29) == 2)
                        c->options |= MIPS_CPU_TLBINV;
-               mmuextdef = config4 & MIPS_CONF4_MMUEXTDEF;
+               /*
+                * This is a bit ugly. R6 has dropped that field from
+                * config4 and the only valid configuration is VTLB+FTLB so
+                * set a good value for mmuextdef for that case.
+                */
+               if (cpu_has_mips_r6)
+                       mmuextdef = MIPS_CONF4_MMUEXTDEF_VTLBSIZEEXT;
+               else
+                       mmuextdef = config4 & MIPS_CONF4_MMUEXTDEF;
+
                switch (mmuextdef) {
                case MIPS_CONF4_MMUEXTDEF_MMUSIZEEXT:
                        c->tlbsize += (config4 & MIPS_CONF4_MMUSIZEEXT) * 0x40;