Skip to content

Commit 6605d15

Browse files
paulburtonralfbaechle
authored andcommitted
MIPS: CM: Fix mips_cm_max_vp_width for non-MT kernels on MT systems
When discovering the number of VPEs per core, smp_num_siblings will be incorrect for kernels built without support for the MIPS MultiThreading (MT) ASE running on systems which implement said ASE. This leads to accesses to VPEs in secondary cores being performed incorrectly since mips_cm_vp_id calculates the wrong ID to write to the local "other" registers. Fix this by examining the number of VPEs in the core as reported by the CM. This patch presumes that the number of VPEs will be the same in each core of the system. As this path only applies to systems with CM version 2.5 or lower, and this property is true of all such known systems, this is likely to be fine but is described in a comment for good measure. Signed-off-by: Paul Burton <paul.burton@imgtec.com> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/14338/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
1 parent 058effe commit 6605d15

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

arch/mips/include/asm/mips-cm.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,10 +458,21 @@ static inline int mips_cm_revision(void)
458458
static inline unsigned int mips_cm_max_vp_width(void)
459459
{
460460
extern int smp_num_siblings;
461+
uint32_t cfg;
461462

462463
if (mips_cm_revision() >= CM_REV_CM3)
463464
return read_gcr_sys_config2() & CM_GCR_SYS_CONFIG2_MAXVPW_MSK;
464465

466+
if (mips_cm_present()) {
467+
/*
468+
* We presume that all cores in the system will have the same
469+
* number of VP(E)s, and if that ever changes then this will
470+
* need revisiting.
471+
*/
472+
cfg = read_gcr_cl_config() & CM_GCR_Cx_CONFIG_PVPE_MSK;
473+
return (cfg >> CM_GCR_Cx_CONFIG_PVPE_SHF) + 1;
474+
}
475+
465476
if (IS_ENABLED(CONFIG_SMP))
466477
return smp_num_siblings;
467478

0 commit comments

Comments
 (0)