From 5616897efd1816c18231c9976a6d64392fc6cdee Mon Sep 17 00:00:00 2001 From: Paul Burton Date: Sat, 12 Aug 2017 19:49:38 -0700 Subject: MIPS: Add CPU cluster number accessors Introduce cpu_cluster() & cpu_set_cluster() accessor functions in the same vein as cpu_core(), cpu_vpe_id() & their set variants. These will be used in further patches to allow users to get or set a CPUs cluster number. Signed-off-by: Paul Burton Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/17012/ Signed-off-by: Ralf Baechle --- arch/mips/include/asm/cpu-info.h | 11 +++++++++++ arch/mips/kernel/cpu-probe.c | 10 ++++++++++ 2 files changed, 21 insertions(+) (limited to 'arch/mips') diff --git a/arch/mips/include/asm/cpu-info.h b/arch/mips/include/asm/cpu-info.h index 0c61bdc82a53..a41059d47d31 100644 --- a/arch/mips/include/asm/cpu-info.h +++ b/arch/mips/include/asm/cpu-info.h @@ -139,6 +139,16 @@ struct proc_cpuinfo_notifier_args { unsigned long n; }; +static inline unsigned int cpu_cluster(struct cpuinfo_mips *cpuinfo) +{ + /* Optimisation for systems where multiple clusters aren't used */ + if (!IS_ENABLED(CONFIG_CPU_MIPSR6)) + return 0; + + return (cpuinfo->globalnumber & MIPS_GLOBALNUMBER_CLUSTER) >> + MIPS_GLOBALNUMBER_CLUSTER_SHF; +} + static inline unsigned int cpu_core(struct cpuinfo_mips *cpuinfo) { return (cpuinfo->globalnumber & MIPS_GLOBALNUMBER_CORE) >> @@ -155,6 +165,7 @@ static inline unsigned int cpu_vpe_id(struct cpuinfo_mips *cpuinfo) MIPS_GLOBALNUMBER_VP_SHF; } +extern void cpu_set_cluster(struct cpuinfo_mips *cpuinfo, unsigned int cluster); extern void cpu_set_core(struct cpuinfo_mips *cpuinfo, unsigned int core); extern void cpu_set_vpe_id(struct cpuinfo_mips *cpuinfo, unsigned int vpe); diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index 32aabd238737..cf3fd549e16d 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c @@ -2099,6 +2099,16 @@ void cpu_report(void) pr_info("MSA revision is: %08x\n", c->msa_id); } +void cpu_set_cluster(struct cpuinfo_mips *cpuinfo, unsigned int cluster) +{ + /* Ensure the core number fits in the field */ + WARN_ON(cluster > (MIPS_GLOBALNUMBER_CLUSTER >> + MIPS_GLOBALNUMBER_CLUSTER_SHF)); + + cpuinfo->globalnumber &= ~MIPS_GLOBALNUMBER_CLUSTER; + cpuinfo->globalnumber |= cluster << MIPS_GLOBALNUMBER_CLUSTER_SHF; +} + void cpu_set_core(struct cpuinfo_mips *cpuinfo, unsigned int core) { /* Ensure the core number fits in the field */ -- cgit