diff options
author | Magnus Damm <damm@opensource.se> | 2011-05-19 02:26:20 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2011-05-23 23:31:17 -0400 |
commit | 60116a73780fcf7dc01950467d75229926dc73dc (patch) | |
tree | 86e3a118aecc85b81e9ebe41d736230c0d3721ba /arch/arm/mach-shmobile | |
parent | 34154f355904c837402aab61ef17b78f972a10b5 (diff) |
ARM: mach-shmobile: sh73a0 twd_base fix
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.
Signed-off-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/arm/mach-shmobile')
-rw-r--r-- | arch/arm/mach-shmobile/smp-sh73a0.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/arch/arm/mach-shmobile/smp-sh73a0.c b/arch/arm/mach-shmobile/smp-sh73a0.c index a156d2108df1..3ffdbc92ba82 100644 --- a/arch/arm/mach-shmobile/smp-sh73a0.c +++ b/arch/arm/mach-shmobile/smp-sh73a0.c | |||
@@ -59,6 +59,11 @@ unsigned int __init sh73a0_get_core_count(void) | |||
59 | { | 59 | { |
60 | void __iomem *scu_base = scu_base_addr(); | 60 | void __iomem *scu_base = scu_base_addr(); |
61 | 61 | ||
62 | #ifdef CONFIG_HAVE_ARM_TWD | ||
63 | /* twd_base needs to be initialized before percpu_timer_setup() */ | ||
64 | twd_base = (void __iomem *)0xf0000600; | ||
65 | #endif | ||
66 | |||
62 | return scu_get_core_count(scu_base); | 67 | return scu_get_core_count(scu_base); |
63 | } | 68 | } |
64 | 69 | ||
@@ -82,10 +87,6 @@ int __cpuinit sh73a0_boot_secondary(unsigned int cpu) | |||
82 | 87 | ||
83 | void __init sh73a0_smp_prepare_cpus(void) | 88 | void __init sh73a0_smp_prepare_cpus(void) |
84 | { | 89 | { |
85 | #ifdef CONFIG_HAVE_ARM_TWD | ||
86 | twd_base = (void __iomem *)0xf0000600; | ||
87 | #endif | ||
88 | |||
89 | scu_enable(scu_base_addr()); | 90 | scu_enable(scu_base_addr()); |
90 | 91 | ||
91 | /* Map the reset vector (in headsmp.S) */ | 92 | /* Map the reset vector (in headsmp.S) */ |