diff options
author | Konrad Eisele <konrad@gaisler.com> | 2009-08-31 18:08:13 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-11-02 07:19:42 -0500 |
commit | 8401707ff645521e9f21cbb8fe3b138f60e85680 (patch) | |
tree | 114287cf273b57f96d0e132cd2274c7afe60b120 /arch/sparc/include | |
parent | b6727b12dd2ffb4a890eb5b13a298230c29ba45d (diff) |
sparc,leon: Sparc-Leon SMP support
Support SMP for a Sparc-Leon multiprocessor system.
Add Leon specific SMP code to arch/sparc/kernel/leon_smp.c.
Signed-off-by: Konrad Eisele <konrad@gaisler.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc/include')
-rw-r--r-- | arch/sparc/include/asm/leon.h | 28 | ||||
-rw-r--r-- | arch/sparc/include/asm/smp_32.h | 9 |
2 files changed, 37 insertions, 0 deletions
diff --git a/arch/sparc/include/asm/leon.h b/arch/sparc/include/asm/leon.h index 28a42b73f64f..559448c2c434 100644 --- a/arch/sparc/include/asm/leon.h +++ b/arch/sparc/include/asm/leon.h | |||
@@ -340,6 +340,30 @@ extern int leon_flush_needed(void); | |||
340 | extern void leon_switch_mm(void); | 340 | extern void leon_switch_mm(void); |
341 | extern int srmmu_swprobe_trace; | 341 | extern int srmmu_swprobe_trace; |
342 | 342 | ||
343 | #ifdef CONFIG_SMP | ||
344 | extern int leon_smp_nrcpus(void); | ||
345 | extern void leon_clear_profile_irq(int cpu); | ||
346 | extern void leon_smp_done(void); | ||
347 | extern void leon_boot_cpus(void); | ||
348 | extern int leon_boot_one_cpu(int i); | ||
349 | void leon_init_smp(void); | ||
350 | extern void cpu_probe(void); | ||
351 | extern void cpu_idle(void); | ||
352 | extern void init_IRQ(void); | ||
353 | extern void cpu_panic(void); | ||
354 | extern int __leon_processor_id(void); | ||
355 | void leon_enable_irq_cpu(unsigned int irq_nr, unsigned int cpu); | ||
356 | |||
357 | extern unsigned int real_irq_entry[], smpleon_ticker[]; | ||
358 | extern unsigned int patchme_maybe_smp_msg[]; | ||
359 | extern unsigned long trapbase_cpu1[]; | ||
360 | extern unsigned long trapbase_cpu2[]; | ||
361 | extern unsigned long trapbase_cpu3[]; | ||
362 | extern unsigned int t_nmi[], linux_trap_ipi15_leon[]; | ||
363 | extern unsigned int linux_trap_ipi15_sun4m[]; | ||
364 | |||
365 | #endif /* CONFIG_SMP */ | ||
366 | |||
343 | #endif /* __KERNEL__ */ | 367 | #endif /* __KERNEL__ */ |
344 | 368 | ||
345 | #endif /* __ASSEMBLY__ */ | 369 | #endif /* __ASSEMBLY__ */ |
@@ -356,6 +380,10 @@ extern int srmmu_swprobe_trace; | |||
356 | #define leon_switch_mm() do {} while (0) | 380 | #define leon_switch_mm() do {} while (0) |
357 | #define leon_init_IRQ() do {} while (0) | 381 | #define leon_init_IRQ() do {} while (0) |
358 | #define init_leon() do {} while (0) | 382 | #define init_leon() do {} while (0) |
383 | #define leon_smp_done() do {} while (0) | ||
384 | #define leon_boot_cpus() do {} while (0) | ||
385 | #define leon_boot_one_cpu(i) 1 | ||
386 | #define leon_init_smp() do {} while (0) | ||
359 | 387 | ||
360 | #endif /* !defined(CONFIG_SPARC_LEON) */ | 388 | #endif /* !defined(CONFIG_SPARC_LEON) */ |
361 | 389 | ||
diff --git a/arch/sparc/include/asm/smp_32.h b/arch/sparc/include/asm/smp_32.h index 58101dc70493..841905c10215 100644 --- a/arch/sparc/include/asm/smp_32.h +++ b/arch/sparc/include/asm/smp_32.h | |||
@@ -106,6 +106,15 @@ static inline int hard_smp4d_processor_id(void) | |||
106 | return cpuid; | 106 | return cpuid; |
107 | } | 107 | } |
108 | 108 | ||
109 | extern inline int hard_smpleon_processor_id(void) | ||
110 | { | ||
111 | int cpuid; | ||
112 | __asm__ __volatile__("rd %%asr17,%0\n\t" | ||
113 | "srl %0,28,%0" : | ||
114 | "=&r" (cpuid) : ); | ||
115 | return cpuid; | ||
116 | } | ||
117 | |||
109 | #ifndef MODULE | 118 | #ifndef MODULE |
110 | static inline int hard_smp_processor_id(void) | 119 | static inline int hard_smp_processor_id(void) |
111 | { | 120 | { |