Skip to contentSkip to conversation

More highbank fixes for 3.8

PATCH New Rob Herring 1 participant 4 messages Jan 31, 2013

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

cover More highbank fixes for 3.8

From: Rob Herring <[email protected]>

A couple more fixes for highbank related to fallout from using MPIDR value for the physical cpu id and an scu build error introduced by suspend fixes.

Rob

Rob Herring (3):
ARM: scu: add empty scu_enable for !CONFIG_SMP
ARM: scu: mask cluster id from cpu_logical_map
ARM: highbank: mask cluster id from cpu_logical_map

 arch/arm/include/asm/smp_scu.h    |    8 +++++++-
 arch/arm/kernel/smp_scu.c         |    2 +-
 arch/arm/mach-highbank/highbank.c |    3 ++-
 arch/arm/mach-highbank/sysregs.h  |    4 ++--
 4 files changed, 12 insertions(+), 5 deletions(-)
Signature · 1 line
1.7.10.4
#1 lore raw

PATCH 1/3 ARM: scu: add empty scu_enable for !CONFIG_SMP

From: Rob Herring <[email protected]>

Add an empty version of scu_enable for !SMP builds. This fixes compile error for highbank suspend code on !SMP builds.

---
 arch/arm/include/asm/smp_scu.h |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
arch/arm/include/asm/smp_scu.h +7 -1
index 4eb6d00..86dff32 100644
@@ -7,8 +7,14 @@
 
 #ifndef __ASSEMBLER__
 unsigned int scu_get_core_count(void __iomem *);
-void scu_enable(void __iomem *);
 int scu_power_mode(void __iomem *, unsigned int);
+
+#ifdef CONFIG_SMP
+void scu_enable(void __iomem *scu_base);
+#else
+static inline void scu_enable(void __iomem *scu_base) {}
+#endif
+
 #endif
 
 #endif
Signature · 1 line
1.7.10.4
#2 lore raw

PATCH 2/3 ARM: scu: mask cluster id from cpu_logical_map

In reply to Rob Herring

From: Rob Herring <[email protected]>

With commit a0ae0240 (ARM: kernel: add device tree init map function), the cpu id value may include the cluster id and is no longer 0-3, so we need to mask it in scu_power_mode to get the local cpu number. Since we are only dealing with the cpu we are running on, the cluster id should not ever be needed.

---
 arch/arm/kernel/smp_scu.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/kernel/smp_scu.c +1 -1
index b9f015e..45eac87 100644
@@ -75,7 +75,7 @@ void scu_enable(void __iomem *scu_base)
 int scu_power_mode(void __iomem *scu_base, unsigned int mode)
 {
 	unsigned int val;
-	int cpu = cpu_logical_map(smp_processor_id());
+	int cpu = MPIDR_AFFINITY_LEVEL(cpu_logical_map(smp_processor_id()), 0);
 
 	if (mode > 3 || mode == 1 || cpu > 3)
 		return -EINVAL;
Signature · 1 line
1.7.10.4
#3 lore raw

PATCH 3/3 ARM: highbank: mask cluster id from cpu_logical_map

In reply to Rob Herring

From: Rob Herring <[email protected]>

With commit a0ae0240 (ARM: kernel: add device tree init map function), the cpu id value may include the cluster id and is no longer 0-3, so we need to mask it now to get the right hard cpu index.

---
 arch/arm/mach-highbank/highbank.c |    3 ++-
 arch/arm/mach-highbank/sysregs.h  |    4 ++--
 2 files changed, 4 insertions(+), 3 deletions(-)
arch/arm/mach-highbank/highbank.c +2 -1
index 981dc1e..e6c0612 100644
@@ -28,6 +28,7 @@
 
 #include <asm/arch_timer.h>
 #include <asm/cacheflush.h>
+#include <asm/cputype.h>
 #include <asm/smp_plat.h>
 #include <asm/smp_twd.h>
 #include <asm/hardware/arm_timer.h>
@@ -59,7 +60,7 @@ static void __init highbank_scu_map_io(void)
 
 void highbank_set_cpu_jump(int cpu, void *jump_addr)
 {
-	cpu = cpu_logical_map(cpu);
+	cpu = MPIDR_AFFINITY_LEVEL(cpu_logical_map(cpu), 0);
 	writel(virt_to_phys(jump_addr), HB_JUMP_TABLE_VIRT(cpu));
 	__cpuc_flush_dcache_area(HB_JUMP_TABLE_VIRT(cpu), 16);
 	outer_clean_range(HB_JUMP_TABLE_PHYS(cpu),
arch/arm/mach-highbank/sysregs.h +2 -2
index 70af9d1..5995df7 100644
@@ -37,7 +37,7 @@ extern void __iomem *sregs_base;
 
 static inline void highbank_set_core_pwr(void)
 {
-	int cpu = cpu_logical_map(smp_processor_id());
+	int cpu = MPIDR_AFFINITY_LEVEL(cpu_logical_map(smp_processor_id()), 0);
 	if (scu_base_addr)
 		scu_power_mode(scu_base_addr, SCU_PM_POWEROFF);
 	else
@@ -46,7 +46,7 @@ static inline void highbank_set_core_pwr(void)
 
 static inline void highbank_clear_core_pwr(void)
 {
-	int cpu = cpu_logical_map(smp_processor_id());
+	int cpu = MPIDR_AFFINITY_LEVEL(cpu_logical_map(smp_processor_id()), 0);
 	if (scu_base_addr)
 		scu_power_mode(scu_base_addr, SCU_PM_NORMAL);
 	else
Signature · 1 line
1.7.10.4