diff options
Diffstat (limited to 'arch/arm/mach-shmobile/smp-emev2.c')
-rw-r--r-- | arch/arm/mach-shmobile/smp-emev2.c | 22 |
1 files changed, 2 insertions, 20 deletions
diff --git a/arch/arm/mach-shmobile/smp-emev2.c b/arch/arm/mach-shmobile/smp-emev2.c index f67456286280..535426c306bd 100644 --- a/arch/arm/mach-shmobile/smp-emev2.c +++ b/arch/arm/mach-shmobile/smp-emev2.c | |||
@@ -32,24 +32,8 @@ | |||
32 | 32 | ||
33 | #define EMEV2_SCU_BASE 0x1e000000 | 33 | #define EMEV2_SCU_BASE 0x1e000000 |
34 | 34 | ||
35 | static DEFINE_SPINLOCK(scu_lock); | ||
36 | static void __iomem *scu_base; | 35 | static void __iomem *scu_base; |
37 | 36 | ||
38 | static void modify_scu_cpu_psr(unsigned long set, unsigned long clr) | ||
39 | { | ||
40 | unsigned long tmp; | ||
41 | |||
42 | /* we assume this code is running on a different cpu | ||
43 | * than the one that is changing coherency setting */ | ||
44 | spin_lock(&scu_lock); | ||
45 | tmp = readl(scu_base + 8); | ||
46 | tmp &= ~clr; | ||
47 | tmp |= set; | ||
48 | writel(tmp, scu_base + 8); | ||
49 | spin_unlock(&scu_lock); | ||
50 | |||
51 | } | ||
52 | |||
53 | static unsigned int __init emev2_get_core_count(void) | 37 | static unsigned int __init emev2_get_core_count(void) |
54 | { | 38 | { |
55 | if (!scu_base) { | 39 | if (!scu_base) { |
@@ -95,7 +79,7 @@ static int __cpuinit emev2_boot_secondary(unsigned int cpu, struct task_struct * | |||
95 | cpu = cpu_logical_map(cpu); | 79 | cpu = cpu_logical_map(cpu); |
96 | 80 | ||
97 | /* enable cache coherency */ | 81 | /* enable cache coherency */ |
98 | modify_scu_cpu_psr(0, 3 << (cpu * 8)); | 82 | scu_power_mode(scu_base, 0); |
99 | 83 | ||
100 | /* Tell ROM loader about our vector (in headsmp.S) */ | 84 | /* Tell ROM loader about our vector (in headsmp.S) */ |
101 | emev2_set_boot_vector(__pa(shmobile_secondary_vector)); | 85 | emev2_set_boot_vector(__pa(shmobile_secondary_vector)); |
@@ -106,12 +90,10 @@ static int __cpuinit emev2_boot_secondary(unsigned int cpu, struct task_struct * | |||
106 | 90 | ||
107 | static void __init emev2_smp_prepare_cpus(unsigned int max_cpus) | 91 | static void __init emev2_smp_prepare_cpus(unsigned int max_cpus) |
108 | { | 92 | { |
109 | int cpu = cpu_logical_map(0); | ||
110 | |||
111 | scu_enable(scu_base); | 93 | scu_enable(scu_base); |
112 | 94 | ||
113 | /* enable cache coherency on CPU0 */ | 95 | /* enable cache coherency on CPU0 */ |
114 | modify_scu_cpu_psr(0, 3 << (cpu * 8)); | 96 | scu_power_mode(scu_base, 0); |
115 | } | 97 | } |
116 | 98 | ||
117 | static void __init emev2_smp_init_cpus(void) | 99 | static void __init emev2_smp_init_cpus(void) |