[13/17] ARM: EXYNOS: Move cpunr calculation to a function
diff mbox series

Message ID 20190128230700.7325-14-stuart.menefy@mathembedded.com
State Under Review
Headers show
Series
  • Resuscitate Exynos 5260 support
Related show

Commit Message

Stuart Menefy Jan. 28, 2019, 11:06 p.m. UTC
The generic MCPM code uses a [cpu,cluster] tuple to identify each core,
so the Exynos specific code converts this into a single integer cpunr,
which is then used as an offset to registers. Move the current 5420
specific calculations to a new function so we can change this for other
devices.

Signed-off-by: Stuart Menefy <stuart.menefy@mathembedded.com>
---
 arch/arm/mach-exynos/mcpm-exynos.c | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

Patch
diff mbox series

diff --git a/arch/arm/mach-exynos/mcpm-exynos.c b/arch/arm/mach-exynos/mcpm-exynos.c
index 72bc035bedbe..571349e1e02e 100644
--- a/arch/arm/mach-exynos/mcpm-exynos.c
+++ b/arch/arm/mach-exynos/mcpm-exynos.c
@@ -55,13 +55,21 @@  static void __iomem *ns_sram_base_addr __ro_after_init;
 	: "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \
 	  "r9", "r10", "lr", "memory")
 
+static int exynos_cpunr(unsigned int cpu, unsigned int cluster)
+{
+	if (cpu >= EXYNOS5420_CPUS_PER_CLUSTER ||
+	    cluster >= EXYNOS5420_NR_CLUSTERS)
+		return -EINVAL;
+	return cpu + (cluster * EXYNOS5420_CPUS_PER_CLUSTER);
+}
+
 static int exynos_cpu_powerup(unsigned int cpu, unsigned int cluster)
 {
-	unsigned int cpunr = cpu + (cluster * EXYNOS5420_CPUS_PER_CLUSTER);
+	unsigned int cpunr;
 
 	pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster);
-	if (cpu >= EXYNOS5420_CPUS_PER_CLUSTER ||
-		cluster >= EXYNOS5420_NR_CLUSTERS)
+	cpunr = exynos_cpunr(cpu, cluster);
+	if (cpunr < 0)
 		return -EINVAL;
 
 	if (!exynos_cpu_power_state(cpunr)) {
@@ -104,11 +112,10 @@  static int exynos_cluster_powerup(unsigned int cluster)
 
 static void exynos_cpu_powerdown_prepare(unsigned int cpu, unsigned int cluster)
 {
-	unsigned int cpunr = cpu + (cluster * EXYNOS5420_CPUS_PER_CLUSTER);
+	unsigned int cpunr = exynos_cpunr(cpu, cluster);
 
 	pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster);
-	BUG_ON(cpu >= EXYNOS5420_CPUS_PER_CLUSTER ||
-			cluster >= EXYNOS5420_NR_CLUSTERS);
+	BUG_ON(cpunr < 0);
 	exynos_cpu_power_down(cpunr);
 }
 
@@ -152,11 +159,10 @@  static void exynos_cluster_cache_disable(void)
 static int exynos_wait_for_powerdown(unsigned int cpu, unsigned int cluster)
 {
 	unsigned int tries = 100;
-	unsigned int cpunr = cpu + (cluster * EXYNOS5420_CPUS_PER_CLUSTER);
+	unsigned int cpunr = exynos_cpunr(cpu, cluster);
 
 	pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster);
-	BUG_ON(cpu >= EXYNOS5420_CPUS_PER_CLUSTER ||
-			cluster >= EXYNOS5420_NR_CLUSTERS);
+	BUG_ON(cpunr < 0);
 
 	/* Wait for the core state to be OFF */
 	while (tries--) {