diff options
author | Daniel Hellstrom <daniel@gaisler.com> | 2011-04-21 04:20:24 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-04-21 16:44:45 -0700 |
commit | 01dae0f08dddf6ba86f956e60dceee4968f7a555 (patch) | |
tree | 5bf21fbff042da53d691ca834599dd7cde164669 /arch/sparc/kernel/head_32.S | |
parent | 5fcafb7a23e35b2f1a5243f4dd536240f52c8ceb (diff) | |
download | kernel_samsung_smdk4412-01dae0f08dddf6ba86f956e60dceee4968f7a555.tar.gz kernel_samsung_smdk4412-01dae0f08dddf6ba86f956e60dceee4968f7a555.tar.bz2 kernel_samsung_smdk4412-01dae0f08dddf6ba86f956e60dceee4968f7a555.zip |
sparc32,leon: operate on boot-cpu IRQ controller registers
* proper initialization of boot_cpu_id (no hardcoding to 0)
* use boot_cpu_id index to address into the IRQ controller where
appropriate
Each CPU has a separate set of IRQ controller registers, this
patch makes sure that the boot-cpu registers are used instead
of CPU0's.
Signed-off-by: Daniel Hellstrom <daniel@gaisler.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc/kernel/head_32.S')
-rw-r--r-- | arch/sparc/kernel/head_32.S | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/arch/sparc/kernel/head_32.S b/arch/sparc/kernel/head_32.S index 520c615d376..58778575983 100644 --- a/arch/sparc/kernel/head_32.S +++ b/arch/sparc/kernel/head_32.S @@ -810,28 +810,25 @@ found_version: got_prop: #ifdef CONFIG_SPARC_LEON /* no cpu-type check is needed, it is a SPARC-LEON */ -#ifdef CONFIG_SMP - ba leon_smp_init - nop - .global leon_smp_init -leon_smp_init: - /* let boot_cpu_id default to 0 (master always 0) */ + sethi %hi(boot_cpu_id), %g2 ! boot-cpu index - rd %asr17,%g1 - srl %g1,28,%g1 +#ifdef CONFIG_SMP + ldub [%g2 + %lo(boot_cpu_id)], %g1 + cmp %g1, 0xff ! unset means first CPU + bne leon_smp_cpu_startup ! continue only with master + nop +#endif + /* Get CPU-ID from most significant 4-bit of ASR17 */ + rd %asr17, %g1 + srl %g1, 28, %g1 - cmp %g0,%g1 - beq sun4c_continue_boot !continue with master - nop + /* Update boot_cpu_id only on boot cpu */ + stub %g1, [%g2 + %lo(boot_cpu_id)] - ba leon_smp_cpu_startup - nop -#else ba sun4c_continue_boot nop #endif -#endif set cputypval, %o2 ldub [%o2 + 0x4], %l1 |