Skip to contentSkip to conversation

ARM: mach-shmobile: sh73a0 twd_base fix

PATCH New Magnus Damm 3 participants 3 messages May 19, 2011

Subsystems (4)
lore
Share & tools
lore

Magnus Damm

author maintainer
#0 lore raw

PATCH 1/1 ARM: mach-shmobile: sh73a0 twd_base fix

From: Magnus Damm <[email protected]>

Fix the case of too late twd_base initialization for SMP on sh73a0 which bas been broken because sh73a0 specific smp_prepare_cpu() and percpu_timer_setup() changed order in the commits:

05c74a6cbcfb416286a947668ba32f63d99fe74a
c413521eb4e2d7ffd5ce432a144708d479054bd3

Without this fix the sh73a0 SMP kernel panics on boot.

---

 arch/arm/mach-shmobile/smp-sh73a0.c |    9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)
arch/arm/mach-shmobile/smp-sh73a0.c +5 -4
@@ -59,6 +59,11 @@ unsigned int __init sh73a0_get_core_coun
 {
 	void __iomem *scu_base = scu_base_addr();
 
+#ifdef CONFIG_HAVE_ARM_TWD
+	/* twd_base needs to be initialized before percpu_timer_setup() */
+	twd_base = (void __iomem *)0xf0000600;
+#endif
+
 	return scu_get_core_count(scu_base);
 }
 
@@ -82,10 +87,6 @@ int __cpuinit sh73a0_boot_secondary(unsi
 
 void __init sh73a0_smp_prepare_cpus(void)
 {
-#ifdef CONFIG_HAVE_ARM_TWD
-	twd_base = (void __iomem *)0xf0000600;
-#endif
-
 	scu_enable(scu_base_addr());
 
 	/* Map the reset vector (in headsmp.S) */
#1 lore raw

PATCH 1/1 ARM: mach-shmobile: sh73a0 twd_base fix

Quoted 21 lines · Magnus Damm

From: Magnus Damm<[email protected]>

Fix the case of too late twd_base initialization for SMP on sh73a0 which bas been broken because sh73a0 specific smp_prepare_cpu() and percpu_timer_setup() changed order in the commits:

05c74a6cbcfb416286a947668ba32f63d99fe74a
c413521eb4e2d7ffd5ce432a144708d479054bd3

Without this fix the sh73a0 SMP kernel panics on boot.

---

  arch/arm/mach-shmobile/smp-sh73a0.c |    9 +++++----
  1 file changed, 5 insertions(+), 4 deletions(-)

arch/arm/mach-shmobile/smp-sh73a0.c unsigned int __init sh73a0_get_core_coun · line 64

Quoted 6 lines
arch/arm/mach-shmobile/smp-sh73a0.c +3 -0
@@ -59,6 +59,11 @@ unsigned int __init sh73a0_get_core_coun
  {
  	void __iomem *scu_base = scu_base_addr();
 
+#ifdef CONFIG_HAVE_ARM_TWD
+	/* twd_base needs to be initialized before percpu_timer_setup() */
+	twd_base = (void __iomem *)0xf0000600;

You might want to ioremap(PA) instead of hard-coding it. Even if you want a fixed VA, at least use macro.

Regards,
Santosh

#2 lore raw

PATCH 1/1 ARM: mach-shmobile: sh73a0 twd_base fix

In reply to Magnus Damm

Hello.

Quoted 9 lines · Magnus Damm

From: Magnus Damm<[email protected]>

Fix the case of too late twd_base initialization for SMP on sh73a0 which bas been broken because sh73a0 specific smp_prepare_cpu() and percpu_timer_setup() changed order in the commits:

05c74a6cbcfb416286a947668ba32f63d99fe74a
c413521eb4e2d7ffd5ce432a144708d479054bd3

Please also specify those commits' summaries -- for the human readers.

Quoted 3 lines

Without this fix the sh73a0 SMP kernel panics on boot.

WBR, Sergei