aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/include
diff options
context:
space:
mode:
authorKonrad Eisele <konrad@gaisler.com>2009-08-31 18:08:13 -0400
committerDavid S. Miller <davem@davemloft.net>2009-11-02 07:19:42 -0500
commit8401707ff645521e9f21cbb8fe3b138f60e85680 (patch)
tree114287cf273b57f96d0e132cd2274c7afe60b120 /arch/sparc/include
parentb6727b12dd2ffb4a890eb5b13a298230c29ba45d (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.h28
-rw-r--r--arch/sparc/include/asm/smp_32.h9
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);
340extern void leon_switch_mm(void); 340extern void leon_switch_mm(void);
341extern int srmmu_swprobe_trace; 341extern int srmmu_swprobe_trace;
342 342
343#ifdef CONFIG_SMP
344extern int leon_smp_nrcpus(void);
345extern void leon_clear_profile_irq(int cpu);
346extern void leon_smp_done(void);
347extern void leon_boot_cpus(void);
348extern int leon_boot_one_cpu(int i);
349void leon_init_smp(void);
350extern void cpu_probe(void);
351extern void cpu_idle(void);
352extern void init_IRQ(void);
353extern void cpu_panic(void);
354extern int __leon_processor_id(void);
355void leon_enable_irq_cpu(unsigned int irq_nr, unsigned int cpu);
356
357extern unsigned int real_irq_entry[], smpleon_ticker[];
358extern unsigned int patchme_maybe_smp_msg[];
359extern unsigned long trapbase_cpu1[];
360extern unsigned long trapbase_cpu2[];
361extern unsigned long trapbase_cpu3[];
362extern unsigned int t_nmi[], linux_trap_ipi15_leon[];
363extern 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
109extern 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
110static inline int hard_smp_processor_id(void) 119static inline int hard_smp_processor_id(void)
111{ 120{