diff options
Diffstat (limited to 'arch/powerpc/platforms')
-rw-r--r-- | arch/powerpc/platforms/52xx/mpc52xx_gpt.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/82xx/pq2ads-pci-pic.c | 10 | ||||
-rw-r--r-- | arch/powerpc/platforms/85xx/socrates_fpga_pic.c | 34 | ||||
-rw-r--r-- | arch/powerpc/platforms/86xx/Kconfig | 12 | ||||
-rw-r--r-- | arch/powerpc/platforms/86xx/gef_gpio.c | 10 | ||||
-rw-r--r-- | arch/powerpc/platforms/86xx/gef_pic.c | 20 | ||||
-rw-r--r-- | arch/powerpc/platforms/86xx/gef_ppc9a.c | 12 | ||||
-rw-r--r-- | arch/powerpc/platforms/86xx/gef_sbc310.c | 12 | ||||
-rw-r--r-- | arch/powerpc/platforms/86xx/gef_sbc610.c | 12 | ||||
-rw-r--r-- | arch/powerpc/platforms/Kconfig.cputype | 10 | ||||
-rw-r--r-- | arch/powerpc/platforms/iseries/exception.S | 25 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/hotplug-cpu.c | 42 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/offline_states.h | 23 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/plpar_wrappers.h | 4 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/xics.c | 7 |
15 files changed, 131 insertions, 104 deletions
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_gpt.c b/arch/powerpc/platforms/52xx/mpc52xx_gpt.c index 6f8ebe1085b3..072b948b2e2d 100644 --- a/arch/powerpc/platforms/52xx/mpc52xx_gpt.c +++ b/arch/powerpc/platforms/52xx/mpc52xx_gpt.c | |||
@@ -553,7 +553,7 @@ static ssize_t mpc52xx_wdt_write(struct file *file, const char __user *data, | |||
553 | return 0; | 553 | return 0; |
554 | } | 554 | } |
555 | 555 | ||
556 | static struct watchdog_info mpc5200_wdt_info = { | 556 | static const struct watchdog_info mpc5200_wdt_info = { |
557 | .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING, | 557 | .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING, |
558 | .identity = WDT_IDENTITY, | 558 | .identity = WDT_IDENTITY, |
559 | }; | 559 | }; |
diff --git a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c index 9d962d7c72c1..d4a09f8705b5 100644 --- a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c +++ b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c | |||
@@ -24,7 +24,7 @@ | |||
24 | 24 | ||
25 | #include "pq2.h" | 25 | #include "pq2.h" |
26 | 26 | ||
27 | static DEFINE_SPINLOCK(pci_pic_lock); | 27 | static DEFINE_RAW_SPINLOCK(pci_pic_lock); |
28 | 28 | ||
29 | struct pq2ads_pci_pic { | 29 | struct pq2ads_pci_pic { |
30 | struct device_node *node; | 30 | struct device_node *node; |
@@ -45,12 +45,12 @@ static void pq2ads_pci_mask_irq(unsigned int virq) | |||
45 | 45 | ||
46 | if (irq != -1) { | 46 | if (irq != -1) { |
47 | unsigned long flags; | 47 | unsigned long flags; |
48 | spin_lock_irqsave(&pci_pic_lock, flags); | 48 | raw_spin_lock_irqsave(&pci_pic_lock, flags); |
49 | 49 | ||
50 | setbits32(&priv->regs->mask, 1 << irq); | 50 | setbits32(&priv->regs->mask, 1 << irq); |
51 | mb(); | 51 | mb(); |
52 | 52 | ||
53 | spin_unlock_irqrestore(&pci_pic_lock, flags); | 53 | raw_spin_unlock_irqrestore(&pci_pic_lock, flags); |
54 | } | 54 | } |
55 | } | 55 | } |
56 | 56 | ||
@@ -62,9 +62,9 @@ static void pq2ads_pci_unmask_irq(unsigned int virq) | |||
62 | if (irq != -1) { | 62 | if (irq != -1) { |
63 | unsigned long flags; | 63 | unsigned long flags; |
64 | 64 | ||
65 | spin_lock_irqsave(&pci_pic_lock, flags); | 65 | raw_spin_lock_irqsave(&pci_pic_lock, flags); |
66 | clrbits32(&priv->regs->mask, 1 << irq); | 66 | clrbits32(&priv->regs->mask, 1 << irq); |
67 | spin_unlock_irqrestore(&pci_pic_lock, flags); | 67 | raw_spin_unlock_irqrestore(&pci_pic_lock, flags); |
68 | } | 68 | } |
69 | } | 69 | } |
70 | 70 | ||
diff --git a/arch/powerpc/platforms/85xx/socrates_fpga_pic.c b/arch/powerpc/platforms/85xx/socrates_fpga_pic.c index 42e87f08aa01..d48527ffc425 100644 --- a/arch/powerpc/platforms/85xx/socrates_fpga_pic.c +++ b/arch/powerpc/platforms/85xx/socrates_fpga_pic.c | |||
@@ -50,7 +50,7 @@ static struct socrates_fpga_irq_info fpga_irqs[SOCRATES_FPGA_NUM_IRQS] = { | |||
50 | 50 | ||
51 | #define socrates_fpga_irq_to_hw(virq) ((unsigned int)irq_map[virq].hwirq) | 51 | #define socrates_fpga_irq_to_hw(virq) ((unsigned int)irq_map[virq].hwirq) |
52 | 52 | ||
53 | static DEFINE_SPINLOCK(socrates_fpga_pic_lock); | 53 | static DEFINE_RAW_SPINLOCK(socrates_fpga_pic_lock); |
54 | 54 | ||
55 | static void __iomem *socrates_fpga_pic_iobase; | 55 | static void __iomem *socrates_fpga_pic_iobase; |
56 | static struct irq_host *socrates_fpga_pic_irq_host; | 56 | static struct irq_host *socrates_fpga_pic_irq_host; |
@@ -80,9 +80,9 @@ static inline unsigned int socrates_fpga_pic_get_irq(unsigned int irq) | |||
80 | if (i == 3) | 80 | if (i == 3) |
81 | return NO_IRQ; | 81 | return NO_IRQ; |
82 | 82 | ||
83 | spin_lock_irqsave(&socrates_fpga_pic_lock, flags); | 83 | raw_spin_lock_irqsave(&socrates_fpga_pic_lock, flags); |
84 | cause = socrates_fpga_pic_read(FPGA_PIC_IRQMASK(i)); | 84 | cause = socrates_fpga_pic_read(FPGA_PIC_IRQMASK(i)); |
85 | spin_unlock_irqrestore(&socrates_fpga_pic_lock, flags); | 85 | raw_spin_unlock_irqrestore(&socrates_fpga_pic_lock, flags); |
86 | for (i = SOCRATES_FPGA_NUM_IRQS - 1; i >= 0; i--) { | 86 | for (i = SOCRATES_FPGA_NUM_IRQS - 1; i >= 0; i--) { |
87 | if (cause >> (i + 16)) | 87 | if (cause >> (i + 16)) |
88 | break; | 88 | break; |
@@ -116,12 +116,12 @@ static void socrates_fpga_pic_ack(unsigned int virq) | |||
116 | hwirq = socrates_fpga_irq_to_hw(virq); | 116 | hwirq = socrates_fpga_irq_to_hw(virq); |
117 | 117 | ||
118 | irq_line = fpga_irqs[hwirq].irq_line; | 118 | irq_line = fpga_irqs[hwirq].irq_line; |
119 | spin_lock_irqsave(&socrates_fpga_pic_lock, flags); | 119 | raw_spin_lock_irqsave(&socrates_fpga_pic_lock, flags); |
120 | mask = socrates_fpga_pic_read(FPGA_PIC_IRQMASK(irq_line)) | 120 | mask = socrates_fpga_pic_read(FPGA_PIC_IRQMASK(irq_line)) |
121 | & SOCRATES_FPGA_IRQ_MASK; | 121 | & SOCRATES_FPGA_IRQ_MASK; |
122 | mask |= (1 << (hwirq + 16)); | 122 | mask |= (1 << (hwirq + 16)); |
123 | socrates_fpga_pic_write(FPGA_PIC_IRQMASK(irq_line), mask); | 123 | socrates_fpga_pic_write(FPGA_PIC_IRQMASK(irq_line), mask); |
124 | spin_unlock_irqrestore(&socrates_fpga_pic_lock, flags); | 124 | raw_spin_unlock_irqrestore(&socrates_fpga_pic_lock, flags); |
125 | } | 125 | } |
126 | 126 | ||
127 | static void socrates_fpga_pic_mask(unsigned int virq) | 127 | static void socrates_fpga_pic_mask(unsigned int virq) |
@@ -134,12 +134,12 @@ static void socrates_fpga_pic_mask(unsigned int virq) | |||
134 | hwirq = socrates_fpga_irq_to_hw(virq); | 134 | hwirq = socrates_fpga_irq_to_hw(virq); |
135 | 135 | ||
136 | irq_line = fpga_irqs[hwirq].irq_line; | 136 | irq_line = fpga_irqs[hwirq].irq_line; |
137 | spin_lock_irqsave(&socrates_fpga_pic_lock, flags); | 137 | raw_spin_lock_irqsave(&socrates_fpga_pic_lock, flags); |
138 | mask = socrates_fpga_pic_read(FPGA_PIC_IRQMASK(irq_line)) | 138 | mask = socrates_fpga_pic_read(FPGA_PIC_IRQMASK(irq_line)) |
139 | & SOCRATES_FPGA_IRQ_MASK; | 139 | & SOCRATES_FPGA_IRQ_MASK; |
140 | mask &= ~(1 << hwirq); | 140 | mask &= ~(1 << hwirq); |
141 | socrates_fpga_pic_write(FPGA_PIC_IRQMASK(irq_line), mask); | 141 | socrates_fpga_pic_write(FPGA_PIC_IRQMASK(irq_line), mask); |
142 | spin_unlock_irqrestore(&socrates_fpga_pic_lock, flags); | 142 | raw_spin_unlock_irqrestore(&socrates_fpga_pic_lock, flags); |
143 | } | 143 | } |
144 | 144 | ||
145 | static void socrates_fpga_pic_mask_ack(unsigned int virq) | 145 | static void socrates_fpga_pic_mask_ack(unsigned int virq) |
@@ -152,13 +152,13 @@ static void socrates_fpga_pic_mask_ack(unsigned int virq) | |||
152 | hwirq = socrates_fpga_irq_to_hw(virq); | 152 | hwirq = socrates_fpga_irq_to_hw(virq); |
153 | 153 | ||
154 | irq_line = fpga_irqs[hwirq].irq_line; | 154 | irq_line = fpga_irqs[hwirq].irq_line; |
155 | spin_lock_irqsave(&socrates_fpga_pic_lock, flags); | 155 | raw_spin_lock_irqsave(&socrates_fpga_pic_lock, flags); |
156 | mask = socrates_fpga_pic_read(FPGA_PIC_IRQMASK(irq_line)) | 156 | mask = socrates_fpga_pic_read(FPGA_PIC_IRQMASK(irq_line)) |
157 | & SOCRATES_FPGA_IRQ_MASK; | 157 | & SOCRATES_FPGA_IRQ_MASK; |
158 | mask &= ~(1 << hwirq); | 158 | mask &= ~(1 << hwirq); |
159 | mask |= (1 << (hwirq + 16)); | 159 | mask |= (1 << (hwirq + 16)); |
160 | socrates_fpga_pic_write(FPGA_PIC_IRQMASK(irq_line), mask); | 160 | socrates_fpga_pic_write(FPGA_PIC_IRQMASK(irq_line), mask); |
161 | spin_unlock_irqrestore(&socrates_fpga_pic_lock, flags); | 161 | raw_spin_unlock_irqrestore(&socrates_fpga_pic_lock, flags); |
162 | } | 162 | } |
163 | 163 | ||
164 | static void socrates_fpga_pic_unmask(unsigned int virq) | 164 | static void socrates_fpga_pic_unmask(unsigned int virq) |
@@ -171,12 +171,12 @@ static void socrates_fpga_pic_unmask(unsigned int virq) | |||
171 | hwirq = socrates_fpga_irq_to_hw(virq); | 171 | hwirq = socrates_fpga_irq_to_hw(virq); |
172 | 172 | ||
173 | irq_line = fpga_irqs[hwirq].irq_line; | 173 | irq_line = fpga_irqs[hwirq].irq_line; |
174 | spin_lock_irqsave(&socrates_fpga_pic_lock, flags); | 174 | raw_spin_lock_irqsave(&socrates_fpga_pic_lock, flags); |
175 | mask = socrates_fpga_pic_read(FPGA_PIC_IRQMASK(irq_line)) | 175 | mask = socrates_fpga_pic_read(FPGA_PIC_IRQMASK(irq_line)) |
176 | & SOCRATES_FPGA_IRQ_MASK; | 176 | & SOCRATES_FPGA_IRQ_MASK; |
177 | mask |= (1 << hwirq); | 177 | mask |= (1 << hwirq); |
178 | socrates_fpga_pic_write(FPGA_PIC_IRQMASK(irq_line), mask); | 178 | socrates_fpga_pic_write(FPGA_PIC_IRQMASK(irq_line), mask); |
179 | spin_unlock_irqrestore(&socrates_fpga_pic_lock, flags); | 179 | raw_spin_unlock_irqrestore(&socrates_fpga_pic_lock, flags); |
180 | } | 180 | } |
181 | 181 | ||
182 | static void socrates_fpga_pic_eoi(unsigned int virq) | 182 | static void socrates_fpga_pic_eoi(unsigned int virq) |
@@ -189,12 +189,12 @@ static void socrates_fpga_pic_eoi(unsigned int virq) | |||
189 | hwirq = socrates_fpga_irq_to_hw(virq); | 189 | hwirq = socrates_fpga_irq_to_hw(virq); |
190 | 190 | ||
191 | irq_line = fpga_irqs[hwirq].irq_line; | 191 | irq_line = fpga_irqs[hwirq].irq_line; |
192 | spin_lock_irqsave(&socrates_fpga_pic_lock, flags); | 192 | raw_spin_lock_irqsave(&socrates_fpga_pic_lock, flags); |
193 | mask = socrates_fpga_pic_read(FPGA_PIC_IRQMASK(irq_line)) | 193 | mask = socrates_fpga_pic_read(FPGA_PIC_IRQMASK(irq_line)) |
194 | & SOCRATES_FPGA_IRQ_MASK; | 194 | & SOCRATES_FPGA_IRQ_MASK; |
195 | mask |= (1 << (hwirq + 16)); | 195 | mask |= (1 << (hwirq + 16)); |
196 | socrates_fpga_pic_write(FPGA_PIC_IRQMASK(irq_line), mask); | 196 | socrates_fpga_pic_write(FPGA_PIC_IRQMASK(irq_line), mask); |
197 | spin_unlock_irqrestore(&socrates_fpga_pic_lock, flags); | 197 | raw_spin_unlock_irqrestore(&socrates_fpga_pic_lock, flags); |
198 | } | 198 | } |
199 | 199 | ||
200 | static int socrates_fpga_pic_set_type(unsigned int virq, | 200 | static int socrates_fpga_pic_set_type(unsigned int virq, |
@@ -220,14 +220,14 @@ static int socrates_fpga_pic_set_type(unsigned int virq, | |||
220 | default: | 220 | default: |
221 | return -EINVAL; | 221 | return -EINVAL; |
222 | } | 222 | } |
223 | spin_lock_irqsave(&socrates_fpga_pic_lock, flags); | 223 | raw_spin_lock_irqsave(&socrates_fpga_pic_lock, flags); |
224 | mask = socrates_fpga_pic_read(FPGA_PIC_IRQCFG); | 224 | mask = socrates_fpga_pic_read(FPGA_PIC_IRQCFG); |
225 | if (polarity) | 225 | if (polarity) |
226 | mask |= (1 << hwirq); | 226 | mask |= (1 << hwirq); |
227 | else | 227 | else |
228 | mask &= ~(1 << hwirq); | 228 | mask &= ~(1 << hwirq); |
229 | socrates_fpga_pic_write(FPGA_PIC_IRQCFG, mask); | 229 | socrates_fpga_pic_write(FPGA_PIC_IRQCFG, mask); |
230 | spin_unlock_irqrestore(&socrates_fpga_pic_lock, flags); | 230 | raw_spin_unlock_irqrestore(&socrates_fpga_pic_lock, flags); |
231 | return 0; | 231 | return 0; |
232 | } | 232 | } |
233 | 233 | ||
@@ -314,14 +314,14 @@ void socrates_fpga_pic_init(struct device_node *pic) | |||
314 | 314 | ||
315 | socrates_fpga_pic_iobase = of_iomap(pic, 0); | 315 | socrates_fpga_pic_iobase = of_iomap(pic, 0); |
316 | 316 | ||
317 | spin_lock_irqsave(&socrates_fpga_pic_lock, flags); | 317 | raw_spin_lock_irqsave(&socrates_fpga_pic_lock, flags); |
318 | socrates_fpga_pic_write(FPGA_PIC_IRQMASK(0), | 318 | socrates_fpga_pic_write(FPGA_PIC_IRQMASK(0), |
319 | SOCRATES_FPGA_IRQ_MASK << 16); | 319 | SOCRATES_FPGA_IRQ_MASK << 16); |
320 | socrates_fpga_pic_write(FPGA_PIC_IRQMASK(1), | 320 | socrates_fpga_pic_write(FPGA_PIC_IRQMASK(1), |
321 | SOCRATES_FPGA_IRQ_MASK << 16); | 321 | SOCRATES_FPGA_IRQ_MASK << 16); |
322 | socrates_fpga_pic_write(FPGA_PIC_IRQMASK(2), | 322 | socrates_fpga_pic_write(FPGA_PIC_IRQMASK(2), |
323 | SOCRATES_FPGA_IRQ_MASK << 16); | 323 | SOCRATES_FPGA_IRQ_MASK << 16); |
324 | spin_unlock_irqrestore(&socrates_fpga_pic_lock, flags); | 324 | raw_spin_unlock_irqrestore(&socrates_fpga_pic_lock, flags); |
325 | 325 | ||
326 | pr_info("FPGA PIC: Setting up Socrates FPGA PIC\n"); | 326 | pr_info("FPGA PIC: Setting up Socrates FPGA PIC\n"); |
327 | } | 327 | } |
diff --git a/arch/powerpc/platforms/86xx/Kconfig b/arch/powerpc/platforms/86xx/Kconfig index 2bbfd530d6d8..fbe9f3621424 100644 --- a/arch/powerpc/platforms/86xx/Kconfig +++ b/arch/powerpc/platforms/86xx/Kconfig | |||
@@ -33,32 +33,32 @@ config MPC8610_HPCD | |||
33 | This option enables support for the MPC8610 HPCD board. | 33 | This option enables support for the MPC8610 HPCD board. |
34 | 34 | ||
35 | config GEF_PPC9A | 35 | config GEF_PPC9A |
36 | bool "GE Fanuc PPC9A" | 36 | bool "GE PPC9A" |
37 | select DEFAULT_UIMAGE | 37 | select DEFAULT_UIMAGE |
38 | select MMIO_NVRAM | 38 | select MMIO_NVRAM |
39 | select GENERIC_GPIO | 39 | select GENERIC_GPIO |
40 | select ARCH_REQUIRE_GPIOLIB | 40 | select ARCH_REQUIRE_GPIOLIB |
41 | help | 41 | help |
42 | This option enables support for GE Fanuc's PPC9A. | 42 | This option enables support for the GE PPC9A. |
43 | 43 | ||
44 | config GEF_SBC310 | 44 | config GEF_SBC310 |
45 | bool "GE Fanuc SBC310" | 45 | bool "GE SBC310" |
46 | select DEFAULT_UIMAGE | 46 | select DEFAULT_UIMAGE |
47 | select MMIO_NVRAM | 47 | select MMIO_NVRAM |
48 | select GENERIC_GPIO | 48 | select GENERIC_GPIO |
49 | select ARCH_REQUIRE_GPIOLIB | 49 | select ARCH_REQUIRE_GPIOLIB |
50 | help | 50 | help |
51 | This option enables support for GE Fanuc's SBC310. | 51 | This option enables support for the GE SBC310. |
52 | 52 | ||
53 | config GEF_SBC610 | 53 | config GEF_SBC610 |
54 | bool "GE Fanuc SBC610" | 54 | bool "GE SBC610" |
55 | select DEFAULT_UIMAGE | 55 | select DEFAULT_UIMAGE |
56 | select MMIO_NVRAM | 56 | select MMIO_NVRAM |
57 | select GENERIC_GPIO | 57 | select GENERIC_GPIO |
58 | select ARCH_REQUIRE_GPIOLIB | 58 | select ARCH_REQUIRE_GPIOLIB |
59 | select HAS_RAPIDIO | 59 | select HAS_RAPIDIO |
60 | help | 60 | help |
61 | This option enables support for GE Fanuc's SBC610. | 61 | This option enables support for the GE SBC610. |
62 | 62 | ||
63 | endif | 63 | endif |
64 | 64 | ||
diff --git a/arch/powerpc/platforms/86xx/gef_gpio.c b/arch/powerpc/platforms/86xx/gef_gpio.c index b2ea8875adba..11f7b2b6f49e 100644 --- a/arch/powerpc/platforms/86xx/gef_gpio.c +++ b/arch/powerpc/platforms/86xx/gef_gpio.c | |||
@@ -1,9 +1,9 @@ | |||
1 | /* | 1 | /* |
2 | * Driver for GE Fanuc's FPGA based GPIO pins | 2 | * Driver for GE FPGA based GPIO |
3 | * | 3 | * |
4 | * Author: Martyn Welch <martyn.welch@gefanuc.com> | 4 | * Author: Martyn Welch <martyn.welch@ge.com> |
5 | * | 5 | * |
6 | * 2008 (c) GE Fanuc Intelligent Platforms Embedded Systems, Inc. | 6 | * 2008 (c) GE Intelligent Platforms Embedded Systems, Inc. |
7 | * | 7 | * |
8 | * This file is licensed under the terms of the GNU General Public License | 8 | * This file is licensed under the terms of the GNU General Public License |
9 | * version 2. This program is licensed "as is" without any warranty of any | 9 | * version 2. This program is licensed "as is" without any warranty of any |
@@ -164,6 +164,6 @@ static int __init gef_gpio_init(void) | |||
164 | }; | 164 | }; |
165 | arch_initcall(gef_gpio_init); | 165 | arch_initcall(gef_gpio_init); |
166 | 166 | ||
167 | MODULE_DESCRIPTION("GE Fanuc I/O FPGA GPIO driver"); | 167 | MODULE_DESCRIPTION("GE I/O FPGA GPIO driver"); |
168 | MODULE_AUTHOR("Martyn Welch <martyn.welch@gefanuc.com"); | 168 | MODULE_AUTHOR("Martyn Welch <martyn.welch@ge.com"); |
169 | MODULE_LICENSE("GPL"); | 169 | MODULE_LICENSE("GPL"); |
diff --git a/arch/powerpc/platforms/86xx/gef_pic.c b/arch/powerpc/platforms/86xx/gef_pic.c index 0110a8736d33..6df9e2561c06 100644 --- a/arch/powerpc/platforms/86xx/gef_pic.c +++ b/arch/powerpc/platforms/86xx/gef_pic.c | |||
@@ -1,9 +1,9 @@ | |||
1 | /* | 1 | /* |
2 | * Interrupt handling for GE Fanuc's FPGA based PIC | 2 | * Interrupt handling for GE FPGA based PIC |
3 | * | 3 | * |
4 | * Author: Martyn Welch <martyn.welch@gefanuc.com> | 4 | * Author: Martyn Welch <martyn.welch@ge.com> |
5 | * | 5 | * |
6 | * 2008 (c) GE Fanuc Intelligent Platforms Embedded Systems, Inc. | 6 | * 2008 (c) GE Intelligent Platforms Embedded Systems, Inc. |
7 | * | 7 | * |
8 | * This file is licensed under the terms of the GNU General Public License | 8 | * This file is licensed under the terms of the GNU General Public License |
9 | * version 2. This program is licensed "as is" without any warranty of any | 9 | * version 2. This program is licensed "as is" without any warranty of any |
@@ -49,7 +49,7 @@ | |||
49 | #define gef_irq_to_hw(virq) ((unsigned int)irq_map[virq].hwirq) | 49 | #define gef_irq_to_hw(virq) ((unsigned int)irq_map[virq].hwirq) |
50 | 50 | ||
51 | 51 | ||
52 | static DEFINE_SPINLOCK(gef_pic_lock); | 52 | static DEFINE_RAW_SPINLOCK(gef_pic_lock); |
53 | 53 | ||
54 | static void __iomem *gef_pic_irq_reg_base; | 54 | static void __iomem *gef_pic_irq_reg_base; |
55 | static struct irq_host *gef_pic_irq_host; | 55 | static struct irq_host *gef_pic_irq_host; |
@@ -118,11 +118,11 @@ static void gef_pic_mask(unsigned int virq) | |||
118 | 118 | ||
119 | hwirq = gef_irq_to_hw(virq); | 119 | hwirq = gef_irq_to_hw(virq); |
120 | 120 | ||
121 | spin_lock_irqsave(&gef_pic_lock, flags); | 121 | raw_spin_lock_irqsave(&gef_pic_lock, flags); |
122 | mask = in_be32(gef_pic_irq_reg_base + GEF_PIC_INTR_MASK(0)); | 122 | mask = in_be32(gef_pic_irq_reg_base + GEF_PIC_INTR_MASK(0)); |
123 | mask &= ~(1 << hwirq); | 123 | mask &= ~(1 << hwirq); |
124 | out_be32(gef_pic_irq_reg_base + GEF_PIC_INTR_MASK(0), mask); | 124 | out_be32(gef_pic_irq_reg_base + GEF_PIC_INTR_MASK(0), mask); |
125 | spin_unlock_irqrestore(&gef_pic_lock, flags); | 125 | raw_spin_unlock_irqrestore(&gef_pic_lock, flags); |
126 | } | 126 | } |
127 | 127 | ||
128 | static void gef_pic_mask_ack(unsigned int virq) | 128 | static void gef_pic_mask_ack(unsigned int virq) |
@@ -141,11 +141,11 @@ static void gef_pic_unmask(unsigned int virq) | |||
141 | 141 | ||
142 | hwirq = gef_irq_to_hw(virq); | 142 | hwirq = gef_irq_to_hw(virq); |
143 | 143 | ||
144 | spin_lock_irqsave(&gef_pic_lock, flags); | 144 | raw_spin_lock_irqsave(&gef_pic_lock, flags); |
145 | mask = in_be32(gef_pic_irq_reg_base + GEF_PIC_INTR_MASK(0)); | 145 | mask = in_be32(gef_pic_irq_reg_base + GEF_PIC_INTR_MASK(0)); |
146 | mask |= (1 << hwirq); | 146 | mask |= (1 << hwirq); |
147 | out_be32(gef_pic_irq_reg_base + GEF_PIC_INTR_MASK(0), mask); | 147 | out_be32(gef_pic_irq_reg_base + GEF_PIC_INTR_MASK(0), mask); |
148 | spin_unlock_irqrestore(&gef_pic_lock, flags); | 148 | raw_spin_unlock_irqrestore(&gef_pic_lock, flags); |
149 | } | 149 | } |
150 | 150 | ||
151 | static struct irq_chip gef_pic_chip = { | 151 | static struct irq_chip gef_pic_chip = { |
@@ -199,7 +199,7 @@ void __init gef_pic_init(struct device_node *np) | |||
199 | /* Map the devices registers into memory */ | 199 | /* Map the devices registers into memory */ |
200 | gef_pic_irq_reg_base = of_iomap(np, 0); | 200 | gef_pic_irq_reg_base = of_iomap(np, 0); |
201 | 201 | ||
202 | spin_lock_irqsave(&gef_pic_lock, flags); | 202 | raw_spin_lock_irqsave(&gef_pic_lock, flags); |
203 | 203 | ||
204 | /* Initialise everything as masked. */ | 204 | /* Initialise everything as masked. */ |
205 | out_be32(gef_pic_irq_reg_base + GEF_PIC_CPU0_INTR_MASK, 0); | 205 | out_be32(gef_pic_irq_reg_base + GEF_PIC_CPU0_INTR_MASK, 0); |
@@ -208,7 +208,7 @@ void __init gef_pic_init(struct device_node *np) | |||
208 | out_be32(gef_pic_irq_reg_base + GEF_PIC_CPU0_MCP_MASK, 0); | 208 | out_be32(gef_pic_irq_reg_base + GEF_PIC_CPU0_MCP_MASK, 0); |
209 | out_be32(gef_pic_irq_reg_base + GEF_PIC_CPU1_MCP_MASK, 0); | 209 | out_be32(gef_pic_irq_reg_base + GEF_PIC_CPU1_MCP_MASK, 0); |
210 | 210 | ||
211 | spin_unlock_irqrestore(&gef_pic_lock, flags); | 211 | raw_spin_unlock_irqrestore(&gef_pic_lock, flags); |
212 | 212 | ||
213 | /* Map controller */ | 213 | /* Map controller */ |
214 | gef_pic_cascade_irq = irq_of_parse_and_map(np, 0); | 214 | gef_pic_cascade_irq = irq_of_parse_and_map(np, 0); |
diff --git a/arch/powerpc/platforms/86xx/gef_ppc9a.c b/arch/powerpc/platforms/86xx/gef_ppc9a.c index a792e5d85813..60ce07e39100 100644 --- a/arch/powerpc/platforms/86xx/gef_ppc9a.c +++ b/arch/powerpc/platforms/86xx/gef_ppc9a.c | |||
@@ -1,9 +1,9 @@ | |||
1 | /* | 1 | /* |
2 | * GE Fanuc PPC9A board support | 2 | * GE PPC9A board support |
3 | * | 3 | * |
4 | * Author: Martyn Welch <martyn.welch@gefanuc.com> | 4 | * Author: Martyn Welch <martyn.welch@ge.com> |
5 | * | 5 | * |
6 | * Copyright 2008 GE Fanuc Intelligent Platforms Embedded Systems, Inc. | 6 | * Copyright 2008 GE Intelligent Platforms Embedded Systems, Inc. |
7 | * | 7 | * |
8 | * This program is free software; you can redistribute it and/or modify it | 8 | * This program is free software; you can redistribute it and/or modify it |
9 | * under the terms of the GNU General Public License as published by the | 9 | * under the terms of the GNU General Public License as published by the |
@@ -82,7 +82,7 @@ static void __init gef_ppc9a_setup_arch(void) | |||
82 | } | 82 | } |
83 | #endif | 83 | #endif |
84 | 84 | ||
85 | printk(KERN_INFO "GE Fanuc Intelligent Platforms PPC9A 6U VME SBC\n"); | 85 | printk(KERN_INFO "GE Intelligent Platforms PPC9A 6U VME SBC\n"); |
86 | 86 | ||
87 | #ifdef CONFIG_SMP | 87 | #ifdef CONFIG_SMP |
88 | mpc86xx_smp_init(); | 88 | mpc86xx_smp_init(); |
@@ -151,7 +151,7 @@ static void gef_ppc9a_show_cpuinfo(struct seq_file *m) | |||
151 | { | 151 | { |
152 | uint svid = mfspr(SPRN_SVR); | 152 | uint svid = mfspr(SPRN_SVR); |
153 | 153 | ||
154 | seq_printf(m, "Vendor\t\t: GE Fanuc Intelligent Platforms\n"); | 154 | seq_printf(m, "Vendor\t\t: GE Intelligent Platforms\n"); |
155 | 155 | ||
156 | seq_printf(m, "Revision\t: %u%c\n", gef_ppc9a_get_pcb_rev(), | 156 | seq_printf(m, "Revision\t: %u%c\n", gef_ppc9a_get_pcb_rev(), |
157 | ('A' + gef_ppc9a_get_board_rev())); | 157 | ('A' + gef_ppc9a_get_board_rev())); |
@@ -235,7 +235,7 @@ static int __init declare_of_platform_devices(void) | |||
235 | machine_device_initcall(gef_ppc9a, declare_of_platform_devices); | 235 | machine_device_initcall(gef_ppc9a, declare_of_platform_devices); |
236 | 236 | ||
237 | define_machine(gef_ppc9a) { | 237 | define_machine(gef_ppc9a) { |
238 | .name = "GE Fanuc PPC9A", | 238 | .name = "GE PPC9A", |
239 | .probe = gef_ppc9a_probe, | 239 | .probe = gef_ppc9a_probe, |
240 | .setup_arch = gef_ppc9a_setup_arch, | 240 | .setup_arch = gef_ppc9a_setup_arch, |
241 | .init_IRQ = gef_ppc9a_init_irq, | 241 | .init_IRQ = gef_ppc9a_init_irq, |
diff --git a/arch/powerpc/platforms/86xx/gef_sbc310.c b/arch/powerpc/platforms/86xx/gef_sbc310.c index 6a1a613836c2..3ecee25bf3ed 100644 --- a/arch/powerpc/platforms/86xx/gef_sbc310.c +++ b/arch/powerpc/platforms/86xx/gef_sbc310.c | |||
@@ -1,9 +1,9 @@ | |||
1 | /* | 1 | /* |
2 | * GE Fanuc SBC310 board support | 2 | * GE SBC310 board support |
3 | * | 3 | * |
4 | * Author: Martyn Welch <martyn.welch@gefanuc.com> | 4 | * Author: Martyn Welch <martyn.welch@ge.com> |
5 | * | 5 | * |
6 | * Copyright 2008 GE Fanuc Intelligent Platforms Embedded Systems, Inc. | 6 | * Copyright 2008 GE Intelligent Platforms Embedded Systems, Inc. |
7 | * | 7 | * |
8 | * This program is free software; you can redistribute it and/or modify it | 8 | * This program is free software; you can redistribute it and/or modify it |
9 | * under the terms of the GNU General Public License as published by the | 9 | * under the terms of the GNU General Public License as published by the |
@@ -82,7 +82,7 @@ static void __init gef_sbc310_setup_arch(void) | |||
82 | } | 82 | } |
83 | #endif | 83 | #endif |
84 | 84 | ||
85 | printk(KERN_INFO "GE Fanuc Intelligent Platforms SBC310 6U VPX SBC\n"); | 85 | printk(KERN_INFO "GE Intelligent Platforms SBC310 6U VPX SBC\n"); |
86 | 86 | ||
87 | #ifdef CONFIG_SMP | 87 | #ifdef CONFIG_SMP |
88 | mpc86xx_smp_init(); | 88 | mpc86xx_smp_init(); |
@@ -142,7 +142,7 @@ static void gef_sbc310_show_cpuinfo(struct seq_file *m) | |||
142 | { | 142 | { |
143 | uint svid = mfspr(SPRN_SVR); | 143 | uint svid = mfspr(SPRN_SVR); |
144 | 144 | ||
145 | seq_printf(m, "Vendor\t\t: GE Fanuc Intelligent Platforms\n"); | 145 | seq_printf(m, "Vendor\t\t: GE Intelligent Platforms\n"); |
146 | 146 | ||
147 | seq_printf(m, "Board ID\t: 0x%2.2x\n", gef_sbc310_get_board_id()); | 147 | seq_printf(m, "Board ID\t: 0x%2.2x\n", gef_sbc310_get_board_id()); |
148 | seq_printf(m, "Revision\t: %u%c\n", gef_sbc310_get_pcb_rev(), | 148 | seq_printf(m, "Revision\t: %u%c\n", gef_sbc310_get_pcb_rev(), |
@@ -223,7 +223,7 @@ static int __init declare_of_platform_devices(void) | |||
223 | machine_device_initcall(gef_sbc310, declare_of_platform_devices); | 223 | machine_device_initcall(gef_sbc310, declare_of_platform_devices); |
224 | 224 | ||
225 | define_machine(gef_sbc310) { | 225 | define_machine(gef_sbc310) { |
226 | .name = "GE Fanuc SBC310", | 226 | .name = "GE SBC310", |
227 | .probe = gef_sbc310_probe, | 227 | .probe = gef_sbc310_probe, |
228 | .setup_arch = gef_sbc310_setup_arch, | 228 | .setup_arch = gef_sbc310_setup_arch, |
229 | .init_IRQ = gef_sbc310_init_irq, | 229 | .init_IRQ = gef_sbc310_init_irq, |
diff --git a/arch/powerpc/platforms/86xx/gef_sbc610.c b/arch/powerpc/platforms/86xx/gef_sbc610.c index e10688a0fc4e..5090d608d9ee 100644 --- a/arch/powerpc/platforms/86xx/gef_sbc610.c +++ b/arch/powerpc/platforms/86xx/gef_sbc610.c | |||
@@ -1,9 +1,9 @@ | |||
1 | /* | 1 | /* |
2 | * GE Fanuc SBC610 board support | 2 | * GE SBC610 board support |
3 | * | 3 | * |
4 | * Author: Martyn Welch <martyn.welch@gefanuc.com> | 4 | * Author: Martyn Welch <martyn.welch@ge.com> |
5 | * | 5 | * |
6 | * Copyright 2008 GE Fanuc Intelligent Platforms Embedded Systems, Inc. | 6 | * Copyright 2008 GE Intelligent Platforms Embedded Systems, Inc. |
7 | * | 7 | * |
8 | * This program is free software; you can redistribute it and/or modify it | 8 | * This program is free software; you can redistribute it and/or modify it |
9 | * under the terms of the GNU General Public License as published by the | 9 | * under the terms of the GNU General Public License as published by the |
@@ -82,7 +82,7 @@ static void __init gef_sbc610_setup_arch(void) | |||
82 | } | 82 | } |
83 | #endif | 83 | #endif |
84 | 84 | ||
85 | printk(KERN_INFO "GE Fanuc Intelligent Platforms SBC610 6U VPX SBC\n"); | 85 | printk(KERN_INFO "GE Intelligent Platforms SBC610 6U VPX SBC\n"); |
86 | 86 | ||
87 | #ifdef CONFIG_SMP | 87 | #ifdef CONFIG_SMP |
88 | mpc86xx_smp_init(); | 88 | mpc86xx_smp_init(); |
@@ -133,7 +133,7 @@ static void gef_sbc610_show_cpuinfo(struct seq_file *m) | |||
133 | { | 133 | { |
134 | uint svid = mfspr(SPRN_SVR); | 134 | uint svid = mfspr(SPRN_SVR); |
135 | 135 | ||
136 | seq_printf(m, "Vendor\t\t: GE Fanuc Intelligent Platforms\n"); | 136 | seq_printf(m, "Vendor\t\t: GE Intelligent Platforms\n"); |
137 | 137 | ||
138 | seq_printf(m, "Revision\t: %u%c\n", gef_sbc610_get_pcb_rev(), | 138 | seq_printf(m, "Revision\t: %u%c\n", gef_sbc610_get_pcb_rev(), |
139 | ('A' + gef_sbc610_get_board_rev() - 1)); | 139 | ('A' + gef_sbc610_get_board_rev() - 1)); |
@@ -212,7 +212,7 @@ static int __init declare_of_platform_devices(void) | |||
212 | machine_device_initcall(gef_sbc610, declare_of_platform_devices); | 212 | machine_device_initcall(gef_sbc610, declare_of_platform_devices); |
213 | 213 | ||
214 | define_machine(gef_sbc610) { | 214 | define_machine(gef_sbc610) { |
215 | .name = "GE Fanuc SBC610", | 215 | .name = "GE SBC610", |
216 | .probe = gef_sbc610_probe, | 216 | .probe = gef_sbc610_probe, |
217 | .setup_arch = gef_sbc610_setup_arch, | 217 | .setup_arch = gef_sbc610_setup_arch, |
218 | .init_IRQ = gef_sbc610_init_irq, | 218 | .init_IRQ = gef_sbc610_init_irq, |
diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype index fa0f690d3867..a8aae0b54579 100644 --- a/arch/powerpc/platforms/Kconfig.cputype +++ b/arch/powerpc/platforms/Kconfig.cputype | |||
@@ -144,6 +144,16 @@ config FSL_EMB_PERFMON | |||
144 | and some e300 cores (c3 and c4). Select this only if your | 144 | and some e300 cores (c3 and c4). Select this only if your |
145 | core supports the Embedded Performance Monitor APU | 145 | core supports the Embedded Performance Monitor APU |
146 | 146 | ||
147 | config FSL_EMB_PERF_EVENT | ||
148 | bool | ||
149 | depends on FSL_EMB_PERFMON && PERF_EVENTS && !PPC_PERF_CTRS | ||
150 | default y | ||
151 | |||
152 | config FSL_EMB_PERF_EVENT_E500 | ||
153 | bool | ||
154 | depends on FSL_EMB_PERF_EVENT && E500 | ||
155 | default y | ||
156 | |||
147 | config 4xx | 157 | config 4xx |
148 | bool | 158 | bool |
149 | depends on 40x || 44x | 159 | depends on 40x || 44x |
diff --git a/arch/powerpc/platforms/iseries/exception.S b/arch/powerpc/platforms/iseries/exception.S index 5369653dcf6a..fba5bf915073 100644 --- a/arch/powerpc/platforms/iseries/exception.S +++ b/arch/powerpc/platforms/iseries/exception.S | |||
@@ -43,17 +43,14 @@ system_reset_iSeries: | |||
43 | LOAD_REG_ADDR(r23, alpaca) | 43 | LOAD_REG_ADDR(r23, alpaca) |
44 | li r0,ALPACA_SIZE | 44 | li r0,ALPACA_SIZE |
45 | sub r23,r13,r23 | 45 | sub r23,r13,r23 |
46 | divdu r23,r23,r0 /* r23 has cpu number */ | 46 | divdu r24,r23,r0 /* r24 has cpu number */ |
47 | LOAD_REG_ADDR(r13, paca) | ||
48 | mulli r0,r23,PACA_SIZE | ||
49 | add r13,r13,r0 | ||
50 | mtspr SPRN_SPRG_PACA,r13 /* Save it away for the future */ | ||
51 | mfmsr r24 | ||
52 | ori r24,r24,MSR_RI | ||
53 | mtmsrd r24 /* RI on */ | ||
54 | mr r24,r23 | ||
55 | cmpwi 0,r24,0 /* Are we processor 0? */ | 47 | cmpwi 0,r24,0 /* Are we processor 0? */ |
56 | bne 1f | 48 | bne 1f |
49 | LOAD_REG_ADDR(r13, boot_paca) | ||
50 | mtspr SPRN_SPRG_PACA,r13 /* Save it away for the future */ | ||
51 | mfmsr r23 | ||
52 | ori r23,r23,MSR_RI | ||
53 | mtmsrd r23 /* RI on */ | ||
57 | b .__start_initialization_iSeries /* Start up the first processor */ | 54 | b .__start_initialization_iSeries /* Start up the first processor */ |
58 | 1: mfspr r4,SPRN_CTRLF | 55 | 1: mfspr r4,SPRN_CTRLF |
59 | li r5,CTRL_RUNLATCH /* Turn off the run light */ | 56 | li r5,CTRL_RUNLATCH /* Turn off the run light */ |
@@ -86,6 +83,16 @@ system_reset_iSeries: | |||
86 | #endif | 83 | #endif |
87 | 84 | ||
88 | 2: | 85 | 2: |
86 | /* Load our paca now that it's been allocated */ | ||
87 | LOAD_REG_ADDR(r13, paca) | ||
88 | ld r13,0(r13) | ||
89 | mulli r0,r24,PACA_SIZE | ||
90 | add r13,r13,r0 | ||
91 | mtspr SPRN_SPRG_PACA,r13 /* Save it away for the future */ | ||
92 | mfmsr r23 | ||
93 | ori r23,r23,MSR_RI | ||
94 | mtmsrd r23 /* RI on */ | ||
95 | |||
89 | HMT_LOW | 96 | HMT_LOW |
90 | #ifdef CONFIG_SMP | 97 | #ifdef CONFIG_SMP |
91 | lbz r23,PACAPROCSTART(r13) /* Test if this processor | 98 | lbz r23,PACAPROCSTART(r13) /* Test if this processor |
diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c index d1b124e44d77..a8e1d5d17a28 100644 --- a/arch/powerpc/platforms/pseries/hotplug-cpu.c +++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c | |||
@@ -122,44 +122,32 @@ static void pseries_mach_cpu_die(void) | |||
122 | if (!get_lppaca()->shared_proc) | 122 | if (!get_lppaca()->shared_proc) |
123 | get_lppaca()->donate_dedicated_cpu = 1; | 123 | get_lppaca()->donate_dedicated_cpu = 1; |
124 | 124 | ||
125 | printk(KERN_INFO | ||
126 | "cpu %u (hwid %u) ceding for offline with hint %d\n", | ||
127 | cpu, hwcpu, cede_latency_hint); | ||
128 | while (get_preferred_offline_state(cpu) == CPU_STATE_INACTIVE) { | 125 | while (get_preferred_offline_state(cpu) == CPU_STATE_INACTIVE) { |
129 | extended_cede_processor(cede_latency_hint); | 126 | extended_cede_processor(cede_latency_hint); |
130 | printk(KERN_INFO "cpu %u (hwid %u) returned from cede.\n", | ||
131 | cpu, hwcpu); | ||
132 | printk(KERN_INFO | ||
133 | "Decrementer value = %x Timebase value = %llx\n", | ||
134 | get_dec(), get_tb()); | ||
135 | } | 127 | } |
136 | 128 | ||
137 | printk(KERN_INFO "cpu %u (hwid %u) got prodded to go online\n", | ||
138 | cpu, hwcpu); | ||
139 | |||
140 | if (!get_lppaca()->shared_proc) | 129 | if (!get_lppaca()->shared_proc) |
141 | get_lppaca()->donate_dedicated_cpu = 0; | 130 | get_lppaca()->donate_dedicated_cpu = 0; |
142 | get_lppaca()->idle = 0; | 131 | get_lppaca()->idle = 0; |
143 | } | ||
144 | 132 | ||
145 | if (get_preferred_offline_state(cpu) == CPU_STATE_ONLINE) { | 133 | if (get_preferred_offline_state(cpu) == CPU_STATE_ONLINE) { |
146 | unregister_slb_shadow(hwcpu, __pa(get_slb_shadow())); | 134 | unregister_slb_shadow(hwcpu, __pa(get_slb_shadow())); |
147 | 135 | ||
148 | /* | 136 | /* |
149 | * NOTE: Calling start_secondary() here for now to | 137 | * Call to start_secondary_resume() will not return. |
150 | * start new context. | 138 | * Kernel stack will be reset and start_secondary() |
151 | * However, need to do it cleanly by resetting the | 139 | * will be called to continue the online operation. |
152 | * stack pointer. | 140 | */ |
153 | */ | 141 | start_secondary_resume(); |
154 | start_secondary(); | 142 | } |
143 | } | ||
155 | 144 | ||
156 | } else if (get_preferred_offline_state(cpu) == CPU_STATE_OFFLINE) { | 145 | /* Requested state is CPU_STATE_OFFLINE at this point */ |
146 | WARN_ON(get_preferred_offline_state(cpu) != CPU_STATE_OFFLINE); | ||
157 | 147 | ||
158 | set_cpu_current_state(cpu, CPU_STATE_OFFLINE); | 148 | set_cpu_current_state(cpu, CPU_STATE_OFFLINE); |
159 | unregister_slb_shadow(hard_smp_processor_id(), | 149 | unregister_slb_shadow(hwcpu, __pa(get_slb_shadow())); |
160 | __pa(get_slb_shadow())); | 150 | rtas_stop_self(); |
161 | rtas_stop_self(); | ||
162 | } | ||
163 | 151 | ||
164 | /* Should never get here... */ | 152 | /* Should never get here... */ |
165 | BUG(); | 153 | BUG(); |
diff --git a/arch/powerpc/platforms/pseries/offline_states.h b/arch/powerpc/platforms/pseries/offline_states.h index 22574e0d9d91..75a6f480d931 100644 --- a/arch/powerpc/platforms/pseries/offline_states.h +++ b/arch/powerpc/platforms/pseries/offline_states.h | |||
@@ -9,10 +9,31 @@ enum cpu_state_vals { | |||
9 | CPU_MAX_OFFLINE_STATES | 9 | CPU_MAX_OFFLINE_STATES |
10 | }; | 10 | }; |
11 | 11 | ||
12 | #ifdef CONFIG_HOTPLUG_CPU | ||
12 | extern enum cpu_state_vals get_cpu_current_state(int cpu); | 13 | extern enum cpu_state_vals get_cpu_current_state(int cpu); |
13 | extern void set_cpu_current_state(int cpu, enum cpu_state_vals state); | 14 | extern void set_cpu_current_state(int cpu, enum cpu_state_vals state); |
14 | extern enum cpu_state_vals get_preferred_offline_state(int cpu); | ||
15 | extern void set_preferred_offline_state(int cpu, enum cpu_state_vals state); | 15 | extern void set_preferred_offline_state(int cpu, enum cpu_state_vals state); |
16 | extern void set_default_offline_state(int cpu); | 16 | extern void set_default_offline_state(int cpu); |
17 | #else | ||
18 | static inline enum cpu_state_vals get_cpu_current_state(int cpu) | ||
19 | { | ||
20 | return CPU_STATE_ONLINE; | ||
21 | } | ||
22 | |||
23 | static inline void set_cpu_current_state(int cpu, enum cpu_state_vals state) | ||
24 | { | ||
25 | } | ||
26 | |||
27 | static inline void set_preferred_offline_state(int cpu, enum cpu_state_vals state) | ||
28 | { | ||
29 | } | ||
30 | |||
31 | static inline void set_default_offline_state(int cpu) | ||
32 | { | ||
33 | } | ||
34 | #endif | ||
35 | |||
36 | extern enum cpu_state_vals get_preferred_offline_state(int cpu); | ||
17 | extern int start_secondary(void); | 37 | extern int start_secondary(void); |
38 | extern void start_secondary_resume(void); | ||
18 | #endif | 39 | #endif |
diff --git a/arch/powerpc/platforms/pseries/plpar_wrappers.h b/arch/powerpc/platforms/pseries/plpar_wrappers.h index 0603c91538ae..a05f8d427856 100644 --- a/arch/powerpc/platforms/pseries/plpar_wrappers.h +++ b/arch/powerpc/platforms/pseries/plpar_wrappers.h | |||
@@ -259,12 +259,12 @@ static inline long plpar_ipi(unsigned long servernum, unsigned long mfrr) | |||
259 | return plpar_hcall_norets(H_IPI, servernum, mfrr); | 259 | return plpar_hcall_norets(H_IPI, servernum, mfrr); |
260 | } | 260 | } |
261 | 261 | ||
262 | static inline long plpar_xirr(unsigned long *xirr_ret) | 262 | static inline long plpar_xirr(unsigned long *xirr_ret, unsigned char cppr) |
263 | { | 263 | { |
264 | long rc; | 264 | long rc; |
265 | unsigned long retbuf[PLPAR_HCALL_BUFSIZE]; | 265 | unsigned long retbuf[PLPAR_HCALL_BUFSIZE]; |
266 | 266 | ||
267 | rc = plpar_hcall(H_XIRR, retbuf); | 267 | rc = plpar_hcall(H_XIRR, retbuf, cppr); |
268 | 268 | ||
269 | *xirr_ret = retbuf[0]; | 269 | *xirr_ret = retbuf[0]; |
270 | 270 | ||
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c index 4ca641042ec3..1bcedd8b4616 100644 --- a/arch/powerpc/platforms/pseries/xics.c +++ b/arch/powerpc/platforms/pseries/xics.c | |||
@@ -120,12 +120,12 @@ static inline void direct_qirr_info(int n_cpu, u8 value) | |||
120 | 120 | ||
121 | /* LPAR low level accessors */ | 121 | /* LPAR low level accessors */ |
122 | 122 | ||
123 | static inline unsigned int lpar_xirr_info_get(void) | 123 | static inline unsigned int lpar_xirr_info_get(unsigned char cppr) |
124 | { | 124 | { |
125 | unsigned long lpar_rc; | 125 | unsigned long lpar_rc; |
126 | unsigned long return_value; | 126 | unsigned long return_value; |
127 | 127 | ||
128 | lpar_rc = plpar_xirr(&return_value); | 128 | lpar_rc = plpar_xirr(&return_value, cppr); |
129 | if (lpar_rc != H_SUCCESS) | 129 | if (lpar_rc != H_SUCCESS) |
130 | panic(" bad return code xirr - rc = %lx\n", lpar_rc); | 130 | panic(" bad return code xirr - rc = %lx\n", lpar_rc); |
131 | return (unsigned int)return_value; | 131 | return (unsigned int)return_value; |
@@ -331,7 +331,8 @@ static unsigned int xics_get_irq_direct(void) | |||
331 | 331 | ||
332 | static unsigned int xics_get_irq_lpar(void) | 332 | static unsigned int xics_get_irq_lpar(void) |
333 | { | 333 | { |
334 | unsigned int xirr = lpar_xirr_info_get(); | 334 | struct xics_cppr *os_cppr = &__get_cpu_var(xics_cppr); |
335 | unsigned int xirr = lpar_xirr_info_get(os_cppr->stack[os_cppr->index]); | ||
335 | unsigned int vec = xics_xirr_vector(xirr); | 336 | unsigned int vec = xics_xirr_vector(xirr); |
336 | unsigned int irq; | 337 | unsigned int irq; |
337 | 338 | ||