aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/include/asm/smp.h2
-rw-r--r--arch/powerpc/kernel/smp.c2
-rw-r--r--arch/powerpc/platforms/Kconfig8
-rw-r--r--arch/powerpc/platforms/Kconfig.cputype2
-rw-r--r--arch/powerpc/platforms/iseries/Kconfig1
-rw-r--r--arch/powerpc/platforms/powermac/Kconfig11
-rw-r--r--arch/powerpc/platforms/powermac/pic.c4
-rw-r--r--arch/powerpc/platforms/powermac/smp.c8
-rw-r--r--arch/powerpc/sysdev/xics/Kconfig1
9 files changed, 32 insertions, 7 deletions
diff --git a/arch/powerpc/include/asm/smp.h b/arch/powerpc/include/asm/smp.h
index 26f861560c51..880b8c1e6e53 100644
--- a/arch/powerpc/include/asm/smp.h
+++ b/arch/powerpc/include/asm/smp.h
@@ -38,7 +38,9 @@ extern void cpu_die(void);
38 38
39struct smp_ops_t { 39struct smp_ops_t {
40 void (*message_pass)(int cpu, int msg); 40 void (*message_pass)(int cpu, int msg);
41#ifdef CONFIG_PPC_SMP_MUXED_IPI
41 void (*cause_ipi)(int cpu, unsigned long data); 42 void (*cause_ipi)(int cpu, unsigned long data);
43#endif
42 int (*probe)(void); 44 int (*probe)(void);
43 int (*kick_cpu)(int nr); 45 int (*kick_cpu)(int nr);
44 void (*setup_cpu)(int nr); 46 void (*setup_cpu)(int nr);
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index fa8e8700064b..d76f7d7929be 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -178,6 +178,7 @@ int smp_request_message_ipi(int virq, int msg)
178 return err; 178 return err;
179} 179}
180 180
181#ifdef CONFIG_PPC_SMP_MUXED_IPI
181struct cpu_messages { 182struct cpu_messages {
182 unsigned long messages; /* current messages bits */ 183 unsigned long messages; /* current messages bits */
183 unsigned long data; /* data for cause ipi */ 184 unsigned long data; /* data for cause ipi */
@@ -230,6 +231,7 @@ irqreturn_t smp_ipi_demux(void)
230 } 231 }
231 return IRQ_HANDLED; 232 return IRQ_HANDLED;
232} 233}
234#endif /* CONFIG_PPC_SMP_MUXED_IPI */
233 235
234void smp_send_reschedule(int cpu) 236void smp_send_reschedule(int cpu)
235{ 237{
diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig
index 6059053e7158..83c704a637bb 100644
--- a/arch/powerpc/platforms/Kconfig
+++ b/arch/powerpc/platforms/Kconfig
@@ -57,6 +57,14 @@ config UDBG_RTAS_CONSOLE
57 depends on PPC_RTAS 57 depends on PPC_RTAS
58 default n 58 default n
59 59
60config PPC_SMP_MUXED_IPI
61 bool
62 help
63 Select this opton if your platform supports SMP and your
64 interrupt controller provides less than 4 interrupts to each
65 cpu. This will enable the generic code to multiplex the 4
66 messages on to one ipi.
67
60config PPC_UDBG_BEAT 68config PPC_UDBG_BEAT
61 bool "BEAT based debug console" 69 bool "BEAT based debug console"
62 depends on PPC_CELLEB 70 depends on PPC_CELLEB
diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype
index a1e623822a30..2165b65876f9 100644
--- a/arch/powerpc/platforms/Kconfig.cputype
+++ b/arch/powerpc/platforms/Kconfig.cputype
@@ -73,6 +73,7 @@ config PPC_BOOK3S_64
73config PPC_BOOK3E_64 73config PPC_BOOK3E_64
74 bool "Embedded processors" 74 bool "Embedded processors"
75 select PPC_FPU # Make it a choice ? 75 select PPC_FPU # Make it a choice ?
76 select PPC_SMP_MUXED_IPI
76 77
77endchoice 78endchoice
78 79
@@ -178,6 +179,7 @@ config FSL_BOOKE
178config PPC_FSL_BOOK3E 179config PPC_FSL_BOOK3E
179 bool 180 bool
180 select FSL_EMB_PERFMON 181 select FSL_EMB_PERFMON
182 select PPC_SMP_MUXED_IPI
181 default y if FSL_BOOKE 183 default y if FSL_BOOKE
182 184
183config PTE_64BIT 185config PTE_64BIT
diff --git a/arch/powerpc/platforms/iseries/Kconfig b/arch/powerpc/platforms/iseries/Kconfig
index ea1d3622b41c..b57cda3a0817 100644
--- a/arch/powerpc/platforms/iseries/Kconfig
+++ b/arch/powerpc/platforms/iseries/Kconfig
@@ -1,6 +1,7 @@
1config PPC_ISERIES 1config PPC_ISERIES
2 bool "IBM Legacy iSeries" 2 bool "IBM Legacy iSeries"
3 depends on PPC64 && PPC_BOOK3S 3 depends on PPC64 && PPC_BOOK3S
4 select PPC_SMP_MUXED_IPI
4 select PPC_INDIRECT_PIO 5 select PPC_INDIRECT_PIO
5 select PPC_INDIRECT_MMIO 6 select PPC_INDIRECT_MMIO
6 select PPC_PCI_CHOICE if EXPERT 7 select PPC_PCI_CHOICE if EXPERT
diff --git a/arch/powerpc/platforms/powermac/Kconfig b/arch/powerpc/platforms/powermac/Kconfig
index 1e1a0873e1dd..1afd10f67858 100644
--- a/arch/powerpc/platforms/powermac/Kconfig
+++ b/arch/powerpc/platforms/powermac/Kconfig
@@ -18,4 +18,13 @@ config PPC_PMAC64
18 select PPC_970_NAP 18 select PPC_970_NAP
19 default y 19 default y
20 20
21 21config PPC_PMAC32_PSURGE
22 bool "Support for powersurge upgrade cards" if EXPERT
23 depends on SMP && PPC32 && PPC_PMAC
24 select PPC_SMP_MUXED_IPI
25 default y
26 help
27 The powersurge cpu boards can be used in the generation
28 of powermacs that have a socket for an upgradeable cpu card,
29 including the 7500, 8500, 9500, 9600. Support exists for
30 both dual and quad socket upgrade cards.
diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c
index 2f34ad04029f..b706cb3ad99c 100644
--- a/arch/powerpc/platforms/powermac/pic.c
+++ b/arch/powerpc/platforms/powermac/pic.c
@@ -239,7 +239,7 @@ static unsigned int pmac_pic_get_irq(void)
239 unsigned long bits = 0; 239 unsigned long bits = 0;
240 unsigned long flags; 240 unsigned long flags;
241 241
242#ifdef CONFIG_SMP 242#ifdef CONFIG_PPC_PMAC32_PSURGE
243 void psurge_smp_message_recv(void); 243 void psurge_smp_message_recv(void);
244 244
245 /* IPI's are a hack on the powersurge -- Cort */ 245 /* IPI's are a hack on the powersurge -- Cort */
@@ -247,7 +247,7 @@ static unsigned int pmac_pic_get_irq(void)
247 psurge_smp_message_recv(); 247 psurge_smp_message_recv();
248 return NO_IRQ_IGNORE; /* ignore, already handled */ 248 return NO_IRQ_IGNORE; /* ignore, already handled */
249 } 249 }
250#endif /* CONFIG_SMP */ 250#endif /* CONFIG_PPC_PMAC32_PSURGE */
251 raw_spin_lock_irqsave(&pmac_pic_lock, flags); 251 raw_spin_lock_irqsave(&pmac_pic_lock, flags);
252 for (irq = max_real_irqs; (irq -= 32) >= 0; ) { 252 for (irq = max_real_irqs; (irq -= 32) >= 0; ) {
253 int i = irq >> 5; 253 int i = irq >> 5;
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c
index a3401071abfb..67b6e1432be2 100644
--- a/arch/powerpc/platforms/powermac/smp.c
+++ b/arch/powerpc/platforms/powermac/smp.c
@@ -70,7 +70,7 @@ static void (*pmac_tb_freeze)(int freeze);
70static u64 timebase; 70static u64 timebase;
71static int tb_req; 71static int tb_req;
72 72
73#ifdef CONFIG_PPC32 73#ifdef CONFIG_PPC_PMAC32_PSURGE
74 74
75/* 75/*
76 * Powersurge (old powermac SMP) support. 76 * Powersurge (old powermac SMP) support.
@@ -420,7 +420,7 @@ struct smp_ops_t psurge_smp_ops = {
420 .give_timebase = smp_psurge_give_timebase, 420 .give_timebase = smp_psurge_give_timebase,
421 .take_timebase = smp_psurge_take_timebase, 421 .take_timebase = smp_psurge_take_timebase,
422}; 422};
423#endif /* CONFIG_PPC32 - actually powersurge support */ 423#endif /* CONFIG_PPC_PMAC32_PSURGE */
424 424
425/* 425/*
426 * Core 99 and later support 426 * Core 99 and later support
@@ -980,7 +980,7 @@ void __init pmac_setup_smp(void)
980 of_node_put(np); 980 of_node_put(np);
981 smp_ops = &core99_smp_ops; 981 smp_ops = &core99_smp_ops;
982 } 982 }
983#ifdef CONFIG_PPC32 983#ifdef CONFIG_PPC_PMAC32_PSURGE
984 else { 984 else {
985 /* We have to set bits in cpu_possible_mask here since the 985 /* We have to set bits in cpu_possible_mask here since the
986 * secondary CPU(s) aren't in the device tree. Various 986 * secondary CPU(s) aren't in the device tree. Various
@@ -993,7 +993,7 @@ void __init pmac_setup_smp(void)
993 set_cpu_possible(cpu, true); 993 set_cpu_possible(cpu, true);
994 smp_ops = &psurge_smp_ops; 994 smp_ops = &psurge_smp_ops;
995 } 995 }
996#endif /* CONFIG_PPC32 */ 996#endif /* CONFIG_PPC_PMAC32_PSURGE */
997 997
998#ifdef CONFIG_HOTPLUG_CPU 998#ifdef CONFIG_HOTPLUG_CPU
999 ppc_md.cpu_die = pmac_cpu_die; 999 ppc_md.cpu_die = pmac_cpu_die;
diff --git a/arch/powerpc/sysdev/xics/Kconfig b/arch/powerpc/sysdev/xics/Kconfig
index 123b8ddf2816..0031eda320c3 100644
--- a/arch/powerpc/sysdev/xics/Kconfig
+++ b/arch/powerpc/sysdev/xics/Kconfig
@@ -1,5 +1,6 @@
1config PPC_XICS 1config PPC_XICS
2 def_bool n 2 def_bool n
3 select PPC_SMP_MUXED_IPI
3 4
4config PPC_ICP_NATIVE 5config PPC_ICP_NATIVE
5 def_bool n 6 def_bool n