MIPS: Fix core number detection for MT cores
authorPaul Burton <paul.burton@imgtec.com>
Thu, 27 Mar 2014 10:57:30 +0000 (10:57 +0000)
committerRalf Baechle <ralf@linux-mips.org>
Mon, 31 Mar 2014 16:17:12 +0000 (18:17 +0200)
In cores which implement the MT ASE, the CPUNum in the EBase register is
a concatenation of the core number & the VPE ID within that core. In
order to retrieve the correct core number CPUNum must be shifted
appropriately to remove the VPE ID bits.

Signed-off-by: Paul Burton <paul.burton@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/6666/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/kernel/cpu-probe.c

index bd712c9..6e8fb85 100644 (file)
@@ -23,6 +23,7 @@
 #include <asm/cpu-type.h>
 #include <asm/fpu.h>
 #include <asm/mipsregs.h>
+#include <asm/mipsmtregs.h>
 #include <asm/msa.h>
 #include <asm/watch.h>
 #include <asm/elf.h>
@@ -421,8 +422,11 @@ static void decode_configs(struct cpuinfo_mips *c)
        mips_probe_watch_registers(c);
 
 #ifndef CONFIG_MIPS_CPS
-       if (cpu_has_mips_r2)
+       if (cpu_has_mips_r2) {
                c->core = read_c0_ebase() & 0x3ff;
+               if (cpu_has_mipsmt)
+                       c->core >>= fls(core_nvpes()) - 1;
+       }
 #endif
 }