aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/platforms')
-rw-r--r--arch/powerpc/platforms/83xx/mpc834x_sys.c40
-rw-r--r--arch/powerpc/platforms/85xx/mpc85xx_ads.c40
-rw-r--r--arch/powerpc/platforms/cell/spu_callbacks.c1
-rw-r--r--arch/powerpc/platforms/cell/spufs/run.c1
-rw-r--r--arch/powerpc/platforms/pseries/eeh.c62
-rw-r--r--arch/powerpc/platforms/pseries/eeh_driver.c19
-rw-r--r--arch/powerpc/platforms/pseries/eeh_event.c30
-rw-r--r--arch/powerpc/platforms/pseries/hvCall.S100
-rw-r--r--arch/powerpc/platforms/pseries/hvconsole.c6
-rw-r--r--arch/powerpc/platforms/pseries/hvcserver.c22
-rw-r--r--arch/powerpc/platforms/pseries/lpar.c31
-rw-r--r--arch/powerpc/platforms/pseries/setup.c2
-rw-r--r--arch/powerpc/platforms/pseries/vio.c4
-rw-r--r--arch/powerpc/platforms/pseries/xics.c8
14 files changed, 241 insertions, 125 deletions
diff --git a/arch/powerpc/platforms/83xx/mpc834x_sys.c b/arch/powerpc/platforms/83xx/mpc834x_sys.c
index 7c18b4cd5db4..7e789d2420ba 100644
--- a/arch/powerpc/platforms/83xx/mpc834x_sys.c
+++ b/arch/powerpc/platforms/83xx/mpc834x_sys.c
@@ -158,25 +158,25 @@ static int __init mpc834x_rtc_hookup(void)
158late_initcall(mpc834x_rtc_hookup); 158late_initcall(mpc834x_rtc_hookup);
159#endif 159#endif
160 160
161void __init platform_init(void) 161/*
162 * Called very early, MMU is off, device-tree isn't unflattened
163 */
164static int __init mpc834x_sys_probe(void)
162{ 165{
163 /* setup the PowerPC module struct */ 166 /* We always match for now, eventually we should look at the flat
164 ppc_md.setup_arch = mpc834x_sys_setup_arch; 167 dev tree to ensure this is the board we are suppose to run on
165 168 */
166 ppc_md.init_IRQ = mpc834x_sys_init_IRQ; 169 return 1;
167 ppc_md.get_irq = ipic_get_irq;
168
169 ppc_md.restart = mpc83xx_restart;
170
171 ppc_md.time_init = mpc83xx_time_init;
172 ppc_md.set_rtc_time = NULL;
173 ppc_md.get_rtc_time = NULL;
174 ppc_md.calibrate_decr = generic_calibrate_decr;
175
176 ppc_md.progress = udbg_progress;
177
178 if (ppc_md.progress)
179 ppc_md.progress("mpc834x_sys_init(): exit", 0);
180
181 return;
182} 170}
171
172define_machine(mpc834x_sys) {
173 .name = "MPC834x SYS",
174 .probe = mpc834x_sys_probe,
175 .setup_arch = mpc834x_sys_setup_arch,
176 .init_IRQ = mpc834x_sys_init_IRQ,
177 .get_irq = ipic_get_irq,
178 .restart = mpc83xx_restart,
179 .time_init = mpc83xx_time_init,
180 .calibrate_decr = generic_calibrate_decr,
181 .progress = udbg_progress,
182};
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ads.c b/arch/powerpc/platforms/85xx/mpc85xx_ads.c
index b7821dbae00d..5eeff370f5fc 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_ads.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_ads.c
@@ -220,25 +220,25 @@ void mpc85xx_ads_show_cpuinfo(struct seq_file *m)
220 seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024)); 220 seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024));
221} 221}
222 222
223void __init platform_init(void) 223/*
224 * Called very early, device-tree isn't unflattened
225 */
226static int __init mpc85xx_ads_probe(void)
224{ 227{
225 ppc_md.setup_arch = mpc85xx_ads_setup_arch; 228 /* We always match for now, eventually we should look at the flat
226 ppc_md.show_cpuinfo = mpc85xx_ads_show_cpuinfo; 229 dev tree to ensure this is the board we are suppose to run on
227 230 */
228 ppc_md.init_IRQ = mpc85xx_ads_pic_init; 231 return 1;
229 ppc_md.get_irq = mpic_get_irq;
230
231 ppc_md.restart = mpc85xx_restart;
232 ppc_md.power_off = NULL;
233 ppc_md.halt = NULL;
234
235 ppc_md.time_init = NULL;
236 ppc_md.set_rtc_time = NULL;
237 ppc_md.get_rtc_time = NULL;
238 ppc_md.calibrate_decr = generic_calibrate_decr;
239
240 ppc_md.progress = udbg_progress;
241
242 if (ppc_md.progress)
243 ppc_md.progress("mpc85xx_ads platform_init(): exit", 0);
244} 232}
233
234define_machine(mpc85xx_ads) {
235 .name = "MPC85xx ADS",
236 .probe = mpc85xx_ads_probe,
237 .setup_arch = mpc85xx_ads_setup_arch,
238 .init_IRQ = mpc85xx_ads_pic_init,
239 .show_cpuinfo = mpc85xx_ads_show_cpuinfo,
240 .get_irq = mpic_get_irq,
241 .restart = mpc85xx_restart,
242 .calibrate_decr = generic_calibrate_decr,
243 .progress = udbg_progress,
244};
diff --git a/arch/powerpc/platforms/cell/spu_callbacks.c b/arch/powerpc/platforms/cell/spu_callbacks.c
index 3a4245c926ad..6594bec73882 100644
--- a/arch/powerpc/platforms/cell/spu_callbacks.c
+++ b/arch/powerpc/platforms/cell/spu_callbacks.c
@@ -316,6 +316,7 @@ void *spu_syscall_table[] = {
316 [__NR_pselect6] sys_ni_syscall, /* sys_pselect */ 316 [__NR_pselect6] sys_ni_syscall, /* sys_pselect */
317 [__NR_ppoll] sys_ni_syscall, /* sys_ppoll */ 317 [__NR_ppoll] sys_ni_syscall, /* sys_ppoll */
318 [__NR_unshare] sys_unshare, 318 [__NR_unshare] sys_unshare,
319 [__NR_splice] sys_splice,
319}; 320};
320 321
321long spu_sys_callback(struct spu_syscall_block *s) 322long spu_sys_callback(struct spu_syscall_block *s)
diff --git a/arch/powerpc/platforms/cell/spufs/run.c b/arch/powerpc/platforms/cell/spufs/run.c
index c04e078c0fe5..483c8b76232c 100644
--- a/arch/powerpc/platforms/cell/spufs/run.c
+++ b/arch/powerpc/platforms/cell/spufs/run.c
@@ -2,6 +2,7 @@
2#include <linux/ptrace.h> 2#include <linux/ptrace.h>
3 3
4#include <asm/spu.h> 4#include <asm/spu.h>
5#include <asm/unistd.h>
5 6
6#include "spufs.h" 7#include "spufs.h"
7 8
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c
index 9b2b1cb117b3..780fb27a0099 100644
--- a/arch/powerpc/platforms/pseries/eeh.c
+++ b/arch/powerpc/platforms/pseries/eeh.c
@@ -865,7 +865,7 @@ void __init eeh_init(void)
865 * on the CEC architecture, type of the device, on earlier boot 865 * on the CEC architecture, type of the device, on earlier boot
866 * command-line arguments & etc. 866 * command-line arguments & etc.
867 */ 867 */
868void eeh_add_device_early(struct device_node *dn) 868static void eeh_add_device_early(struct device_node *dn)
869{ 869{
870 struct pci_controller *phb; 870 struct pci_controller *phb;
871 struct eeh_early_enable_info info; 871 struct eeh_early_enable_info info;
@@ -882,7 +882,6 @@ void eeh_add_device_early(struct device_node *dn)
882 info.buid_lo = BUID_LO(phb->buid); 882 info.buid_lo = BUID_LO(phb->buid);
883 early_enable_eeh(dn, &info); 883 early_enable_eeh(dn, &info);
884} 884}
885EXPORT_SYMBOL_GPL(eeh_add_device_early);
886 885
887void eeh_add_device_tree_early(struct device_node *dn) 886void eeh_add_device_tree_early(struct device_node *dn)
888{ 887{
@@ -893,20 +892,6 @@ void eeh_add_device_tree_early(struct device_node *dn)
893} 892}
894EXPORT_SYMBOL_GPL(eeh_add_device_tree_early); 893EXPORT_SYMBOL_GPL(eeh_add_device_tree_early);
895 894
896void eeh_add_device_tree_late(struct pci_bus *bus)
897{
898 struct pci_dev *dev;
899
900 list_for_each_entry(dev, &bus->devices, bus_list) {
901 eeh_add_device_late(dev);
902 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
903 struct pci_bus *subbus = dev->subordinate;
904 if (subbus)
905 eeh_add_device_tree_late(subbus);
906 }
907 }
908}
909
910/** 895/**
911 * eeh_add_device_late - perform EEH initialization for the indicated pci device 896 * eeh_add_device_late - perform EEH initialization for the indicated pci device
912 * @dev: pci device for which to set up EEH 897 * @dev: pci device for which to set up EEH
@@ -914,7 +899,7 @@ void eeh_add_device_tree_late(struct pci_bus *bus)
914 * This routine must be used to complete EEH initialization for PCI 899 * This routine must be used to complete EEH initialization for PCI
915 * devices that were added after system boot (e.g. hotplug, dlpar). 900 * devices that were added after system boot (e.g. hotplug, dlpar).
916 */ 901 */
917void eeh_add_device_late(struct pci_dev *dev) 902static void eeh_add_device_late(struct pci_dev *dev)
918{ 903{
919 struct device_node *dn; 904 struct device_node *dn;
920 struct pci_dn *pdn; 905 struct pci_dn *pdn;
@@ -933,16 +918,33 @@ void eeh_add_device_late(struct pci_dev *dev)
933 918
934 pci_addr_cache_insert_device (dev); 919 pci_addr_cache_insert_device (dev);
935} 920}
936EXPORT_SYMBOL_GPL(eeh_add_device_late); 921
922void eeh_add_device_tree_late(struct pci_bus *bus)
923{
924 struct pci_dev *dev;
925
926 list_for_each_entry(dev, &bus->devices, bus_list) {
927 eeh_add_device_late(dev);
928 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
929 struct pci_bus *subbus = dev->subordinate;
930 if (subbus)
931 eeh_add_device_tree_late(subbus);
932 }
933 }
934}
935EXPORT_SYMBOL_GPL(eeh_add_device_tree_late);
937 936
938/** 937/**
939 * eeh_remove_device - undo EEH setup for the indicated pci device 938 * eeh_remove_device - undo EEH setup for the indicated pci device
940 * @dev: pci device to be removed 939 * @dev: pci device to be removed
941 * 940 *
942 * This routine should be when a device is removed from a running 941 * This routine should be called when a device is removed from
943 * system (e.g. by hotplug or dlpar). 942 * a running system (e.g. by hotplug or dlpar). It unregisters
943 * the PCI device from the EEH subsystem. I/O errors affecting
944 * this device will no longer be detected after this call; thus,
945 * i/o errors affecting this slot may leave this device unusable.
944 */ 946 */
945void eeh_remove_device(struct pci_dev *dev) 947static void eeh_remove_device(struct pci_dev *dev)
946{ 948{
947 struct device_node *dn; 949 struct device_node *dn;
948 if (!dev || !eeh_subsystem_enabled) 950 if (!dev || !eeh_subsystem_enabled)
@@ -958,21 +960,17 @@ void eeh_remove_device(struct pci_dev *dev)
958 PCI_DN(dn)->pcidev = NULL; 960 PCI_DN(dn)->pcidev = NULL;
959 pci_dev_put (dev); 961 pci_dev_put (dev);
960} 962}
961EXPORT_SYMBOL_GPL(eeh_remove_device);
962 963
963void eeh_remove_bus_device(struct pci_dev *dev) 964void eeh_remove_bus_device(struct pci_dev *dev)
964{ 965{
966 struct pci_bus *bus = dev->subordinate;
967 struct pci_dev *child, *tmp;
968
965 eeh_remove_device(dev); 969 eeh_remove_device(dev);
966 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) { 970
967 struct pci_bus *bus = dev->subordinate; 971 if (bus && dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
968 struct list_head *ln; 972 list_for_each_entry_safe(child, tmp, &bus->devices, bus_list)
969 if (!bus) 973 eeh_remove_bus_device(child);
970 return;
971 for (ln = bus->devices.next; ln != &bus->devices; ln = ln->next) {
972 struct pci_dev *pdev = pci_dev_b(ln);
973 if (pdev)
974 eeh_remove_bus_device(pdev);
975 }
976 } 974 }
977} 975}
978EXPORT_SYMBOL_GPL(eeh_remove_bus_device); 976EXPORT_SYMBOL_GPL(eeh_remove_bus_device);
diff --git a/arch/powerpc/platforms/pseries/eeh_driver.c b/arch/powerpc/platforms/pseries/eeh_driver.c
index cc2495a0cdd5..1fba695e32e8 100644
--- a/arch/powerpc/platforms/pseries/eeh_driver.c
+++ b/arch/powerpc/platforms/pseries/eeh_driver.c
@@ -293,15 +293,16 @@ void handle_eeh_events (struct eeh_event *event)
293 frozen_pdn = PCI_DN(frozen_dn); 293 frozen_pdn = PCI_DN(frozen_dn);
294 frozen_pdn->eeh_freeze_count++; 294 frozen_pdn->eeh_freeze_count++;
295 295
296 pci_str = pci_name (frozen_pdn->pcidev); 296 if (frozen_pdn->pcidev) {
297 drv_str = pcid_name (frozen_pdn->pcidev); 297 pci_str = pci_name (frozen_pdn->pcidev);
298 if (!pci_str) { 298 drv_str = pcid_name (frozen_pdn->pcidev);
299 } else {
299 pci_str = pci_name (event->dev); 300 pci_str = pci_name (event->dev);
300 drv_str = pcid_name (event->dev); 301 drv_str = pcid_name (event->dev);
301 } 302 }
302 303
303 if (frozen_pdn->eeh_freeze_count > EEH_MAX_ALLOWED_FREEZES) 304 if (frozen_pdn->eeh_freeze_count > EEH_MAX_ALLOWED_FREEZES)
304 goto hard_fail; 305 goto excess_failures;
305 306
306 /* If the reset state is a '5' and the time to reset is 0 (infinity) 307 /* If the reset state is a '5' and the time to reset is 0 (infinity)
307 * or is more then 15 seconds, then mark this as a permanent failure. 308 * or is more then 15 seconds, then mark this as a permanent failure.
@@ -356,7 +357,7 @@ void handle_eeh_events (struct eeh_event *event)
356 357
357 return; 358 return;
358 359
359hard_fail: 360excess_failures:
360 /* 361 /*
361 * About 90% of all real-life EEH failures in the field 362 * About 90% of all real-life EEH failures in the field
362 * are due to poorly seated PCI cards. Only 10% or so are 363 * are due to poorly seated PCI cards. Only 10% or so are
@@ -367,7 +368,15 @@ hard_fail:
367 "and has been permanently disabled. Please try reseating\n" 368 "and has been permanently disabled. Please try reseating\n"
368 "this device or replacing it.\n", 369 "this device or replacing it.\n",
369 drv_str, pci_str, frozen_pdn->eeh_freeze_count); 370 drv_str, pci_str, frozen_pdn->eeh_freeze_count);
371 goto perm_error;
372
373hard_fail:
374 printk(KERN_ERR
375 "EEH: Unable to recover from failure of PCI device %s - %s\n"
376 "Please try reseating this device or replacing it.\n",
377 drv_str, pci_str);
370 378
379perm_error:
371 eeh_slot_error_detail(frozen_pdn, 2 /* Permanent Error */); 380 eeh_slot_error_detail(frozen_pdn, 2 /* Permanent Error */);
372 381
373 /* Notify all devices that they're about to go down. */ 382 /* Notify all devices that they're about to go down. */
diff --git a/arch/powerpc/platforms/pseries/eeh_event.c b/arch/powerpc/platforms/pseries/eeh_event.c
index 9a9961f27480..a1bda6f96fd1 100644
--- a/arch/powerpc/platforms/pseries/eeh_event.c
+++ b/arch/powerpc/platforms/pseries/eeh_event.c
@@ -19,7 +19,9 @@
19 */ 19 */
20 20
21#include <linux/list.h> 21#include <linux/list.h>
22#include <linux/mutex.h>
22#include <linux/pci.h> 23#include <linux/pci.h>
24#include <linux/workqueue.h>
23#include <asm/eeh_event.h> 25#include <asm/eeh_event.h>
24#include <asm/ppc-pci.h> 26#include <asm/ppc-pci.h>
25 27
@@ -37,14 +39,18 @@ LIST_HEAD(eeh_eventlist);
37static void eeh_thread_launcher(void *); 39static void eeh_thread_launcher(void *);
38DECLARE_WORK(eeh_event_wq, eeh_thread_launcher, NULL); 40DECLARE_WORK(eeh_event_wq, eeh_thread_launcher, NULL);
39 41
42/* Serialize reset sequences for a given pci device */
43DEFINE_MUTEX(eeh_event_mutex);
44
40/** 45/**
41 * eeh_event_handler - dispatch EEH events. The detection of a frozen 46 * eeh_event_handler - dispatch EEH events.
42 * slot can occur inside an interrupt, where it can be hard to do
43 * anything about it. The goal of this routine is to pull these
44 * detection events out of the context of the interrupt handler, and
45 * re-dispatch them for processing at a later time in a normal context.
46 *
47 * @dummy - unused 47 * @dummy - unused
48 *
49 * The detection of a frozen slot can occur inside an interrupt,
50 * where it can be hard to do anything about it. The goal of this
51 * routine is to pull these detection events out of the context
52 * of the interrupt handler, and re-dispatch them for processing
53 * at a later time in a normal context.
48 */ 54 */
49static int eeh_event_handler(void * dummy) 55static int eeh_event_handler(void * dummy)
50{ 56{
@@ -64,23 +70,24 @@ static int eeh_event_handler(void * dummy)
64 event = list_entry(eeh_eventlist.next, struct eeh_event, list); 70 event = list_entry(eeh_eventlist.next, struct eeh_event, list);
65 list_del(&event->list); 71 list_del(&event->list);
66 } 72 }
67
68 if (event)
69 eeh_mark_slot(event->dn, EEH_MODE_RECOVERING);
70
71 spin_unlock_irqrestore(&eeh_eventlist_lock, flags); 73 spin_unlock_irqrestore(&eeh_eventlist_lock, flags);
74
72 if (event == NULL) 75 if (event == NULL)
73 break; 76 break;
74 77
78 /* Serialize processing of EEH events */
79 mutex_lock(&eeh_event_mutex);
80 eeh_mark_slot(event->dn, EEH_MODE_RECOVERING);
81
75 printk(KERN_INFO "EEH: Detected PCI bus error on device %s\n", 82 printk(KERN_INFO "EEH: Detected PCI bus error on device %s\n",
76 pci_name(event->dev)); 83 pci_name(event->dev));
77 84
78 handle_eeh_events(event); 85 handle_eeh_events(event);
79 86
80 eeh_clear_slot(event->dn, EEH_MODE_RECOVERING); 87 eeh_clear_slot(event->dn, EEH_MODE_RECOVERING);
81
82 pci_dev_put(event->dev); 88 pci_dev_put(event->dev);
83 kfree(event); 89 kfree(event);
90 mutex_unlock(&eeh_event_mutex);
84 } 91 }
85 92
86 return 0; 93 return 0;
@@ -88,7 +95,6 @@ static int eeh_event_handler(void * dummy)
88 95
89/** 96/**
90 * eeh_thread_launcher 97 * eeh_thread_launcher
91 *
92 * @dummy - unused 98 * @dummy - unused
93 */ 99 */
94static void eeh_thread_launcher(void *dummy) 100static void eeh_thread_launcher(void *dummy)
diff --git a/arch/powerpc/platforms/pseries/hvCall.S b/arch/powerpc/platforms/pseries/hvCall.S
index db7c19fe9297..c9ff547f9d25 100644
--- a/arch/powerpc/platforms/pseries/hvCall.S
+++ b/arch/powerpc/platforms/pseries/hvCall.S
@@ -127,3 +127,103 @@ _GLOBAL(plpar_hcall_4out)
127 127
128 mtcrf 0xff,r0 128 mtcrf 0xff,r0
129 blr /* return r3 = status */ 129 blr /* return r3 = status */
130
131/* plpar_hcall_7arg_7ret(unsigned long opcode, R3
132 unsigned long arg1, R4
133 unsigned long arg2, R5
134 unsigned long arg3, R6
135 unsigned long arg4, R7
136 unsigned long arg5, R8
137 unsigned long arg6, R9
138 unsigned long arg7, R10
139 unsigned long *out1, 112(R1)
140 unsigned long *out2, 110(R1)
141 unsigned long *out3, 108(R1)
142 unsigned long *out4, 106(R1)
143 unsigned long *out5, 104(R1)
144 unsigned long *out6, 102(R1)
145 unsigned long *out7); 100(R1)
146*/
147_GLOBAL(plpar_hcall_7arg_7ret)
148 HMT_MEDIUM
149
150 mfcr r0
151 stw r0,8(r1)
152
153 HVSC /* invoke the hypervisor */
154
155 lwz r0,8(r1)
156
157 ld r11,STK_PARM(r11)(r1) /* Fetch r4 ret arg */
158 std r4,0(r11)
159 ld r11,STK_PARM(r12)(r1) /* Fetch r5 ret arg */
160 std r5,0(r11)
161 ld r11,STK_PARM(r13)(r1) /* Fetch r6 ret arg */
162 std r6,0(r11)
163 ld r11,STK_PARM(r14)(r1) /* Fetch r7 ret arg */
164 std r7,0(r11)
165 ld r11,STK_PARM(r15)(r1) /* Fetch r8 ret arg */
166 std r8,0(r11)
167 ld r11,STK_PARM(r16)(r1) /* Fetch r9 ret arg */
168 std r9,0(r11)
169 ld r11,STK_PARM(r17)(r1) /* Fetch r10 ret arg */
170 std r10,0(r11)
171
172 mtcrf 0xff,r0
173
174 blr /* return r3 = status */
175
176/* plpar_hcall_9arg_9ret(unsigned long opcode, R3
177 unsigned long arg1, R4
178 unsigned long arg2, R5
179 unsigned long arg3, R6
180 unsigned long arg4, R7
181 unsigned long arg5, R8
182 unsigned long arg6, R9
183 unsigned long arg7, R10
184 unsigned long arg8, 112(R1)
185 unsigned long arg9, 110(R1)
186 unsigned long *out1, 108(R1)
187 unsigned long *out2, 106(R1)
188 unsigned long *out3, 104(R1)
189 unsigned long *out4, 102(R1)
190 unsigned long *out5, 100(R1)
191 unsigned long *out6, 98(R1)
192 unsigned long *out7); 96(R1)
193 unsigned long *out8, 94(R1)
194 unsigned long *out9, 92(R1)
195*/
196_GLOBAL(plpar_hcall_9arg_9ret)
197 HMT_MEDIUM
198
199 mfcr r0
200 stw r0,8(r1)
201
202 ld r11,STK_PARM(r11)(r1) /* put arg8 in R11 */
203 ld r12,STK_PARM(r12)(r1) /* put arg9 in R12 */
204
205 HVSC /* invoke the hypervisor */
206
207 ld r0,STK_PARM(r13)(r1) /* Fetch r4 ret arg */
208 stdx r4,r0,r0
209 ld r0,STK_PARM(r14)(r1) /* Fetch r5 ret arg */
210 stdx r5,r0,r0
211 ld r0,STK_PARM(r15)(r1) /* Fetch r6 ret arg */
212 stdx r6,r0,r0
213 ld r0,STK_PARM(r16)(r1) /* Fetch r7 ret arg */
214 stdx r7,r0,r0
215 ld r0,STK_PARM(r17)(r1) /* Fetch r8 ret arg */
216 stdx r8,r0,r0
217 ld r0,STK_PARM(r18)(r1) /* Fetch r9 ret arg */
218 stdx r9,r0,r0
219 ld r0,STK_PARM(r19)(r1) /* Fetch r10 ret arg */
220 stdx r10,r0,r0
221 ld r0,STK_PARM(r20)(r1) /* Fetch r11 ret arg */
222 stdx r11,r0,r0
223 ld r0,STK_PARM(r21)(r1) /* Fetch r12 ret arg */
224 stdx r12,r0,r0
225
226 lwz r0,8(r1)
227 mtcrf 0xff,r0
228
229 blr /* return r3 = status */
diff --git a/arch/powerpc/platforms/pseries/hvconsole.c b/arch/powerpc/platforms/pseries/hvconsole.c
index ba6befd96636..a72a987f1d4d 100644
--- a/arch/powerpc/platforms/pseries/hvconsole.c
+++ b/arch/powerpc/platforms/pseries/hvconsole.c
@@ -41,7 +41,7 @@ int hvc_get_chars(uint32_t vtermno, char *buf, int count)
41 unsigned long got; 41 unsigned long got;
42 42
43 if (plpar_hcall(H_GET_TERM_CHAR, vtermno, 0, 0, 0, &got, 43 if (plpar_hcall(H_GET_TERM_CHAR, vtermno, 0, 0, 0, &got,
44 (unsigned long *)buf, (unsigned long *)buf+1) == H_Success) 44 (unsigned long *)buf, (unsigned long *)buf+1) == H_SUCCESS)
45 return got; 45 return got;
46 return 0; 46 return 0;
47} 47}
@@ -69,9 +69,9 @@ int hvc_put_chars(uint32_t vtermno, const char *buf, int count)
69 69
70 ret = plpar_hcall_norets(H_PUT_TERM_CHAR, vtermno, count, lbuf[0], 70 ret = plpar_hcall_norets(H_PUT_TERM_CHAR, vtermno, count, lbuf[0],
71 lbuf[1]); 71 lbuf[1]);
72 if (ret == H_Success) 72 if (ret == H_SUCCESS)
73 return count; 73 return count;
74 if (ret == H_Busy) 74 if (ret == H_BUSY)
75 return 0; 75 return 0;
76 return -EIO; 76 return -EIO;
77} 77}
diff --git a/arch/powerpc/platforms/pseries/hvcserver.c b/arch/powerpc/platforms/pseries/hvcserver.c
index 22bfb5c89db9..fcf4b4cbeaf3 100644
--- a/arch/powerpc/platforms/pseries/hvcserver.c
+++ b/arch/powerpc/platforms/pseries/hvcserver.c
@@ -43,21 +43,21 @@ MODULE_VERSION(HVCS_ARCH_VERSION);
43static int hvcs_convert(long to_convert) 43static int hvcs_convert(long to_convert)
44{ 44{
45 switch (to_convert) { 45 switch (to_convert) {
46 case H_Success: 46 case H_SUCCESS:
47 return 0; 47 return 0;
48 case H_Parameter: 48 case H_PARAMETER:
49 return -EINVAL; 49 return -EINVAL;
50 case H_Hardware: 50 case H_HARDWARE:
51 return -EIO; 51 return -EIO;
52 case H_Busy: 52 case H_BUSY:
53 case H_LongBusyOrder1msec: 53 case H_LONG_BUSY_ORDER_1_MSEC:
54 case H_LongBusyOrder10msec: 54 case H_LONG_BUSY_ORDER_10_MSEC:
55 case H_LongBusyOrder100msec: 55 case H_LONG_BUSY_ORDER_100_MSEC:
56 case H_LongBusyOrder1sec: 56 case H_LONG_BUSY_ORDER_1_SEC:
57 case H_LongBusyOrder10sec: 57 case H_LONG_BUSY_ORDER_10_SEC:
58 case H_LongBusyOrder100sec: 58 case H_LONG_BUSY_ORDER_100_SEC:
59 return -EBUSY; 59 return -EBUSY;
60 case H_Function: /* fall through */ 60 case H_FUNCTION: /* fall through */
61 default: 61 default:
62 return -EPERM; 62 return -EPERM;
63 } 63 }
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
index 8952528d31ac..634b7d06d3cc 100644
--- a/arch/powerpc/platforms/pseries/lpar.c
+++ b/arch/powerpc/platforms/pseries/lpar.c
@@ -54,7 +54,8 @@ EXPORT_SYMBOL(plpar_hcall);
54EXPORT_SYMBOL(plpar_hcall_4out); 54EXPORT_SYMBOL(plpar_hcall_4out);
55EXPORT_SYMBOL(plpar_hcall_norets); 55EXPORT_SYMBOL(plpar_hcall_norets);
56EXPORT_SYMBOL(plpar_hcall_8arg_2ret); 56EXPORT_SYMBOL(plpar_hcall_8arg_2ret);
57 57EXPORT_SYMBOL(plpar_hcall_7arg_7ret);
58EXPORT_SYMBOL(plpar_hcall_9arg_9ret);
58extern void pSeries_find_serial_port(void); 59extern void pSeries_find_serial_port(void);
59 60
60 61
@@ -72,7 +73,7 @@ static void udbg_hvsi_putc(char c)
72 73
73 do { 74 do {
74 rc = plpar_put_term_char(vtermno, sizeof(packet), packet); 75 rc = plpar_put_term_char(vtermno, sizeof(packet), packet);
75 } while (rc == H_Busy); 76 } while (rc == H_BUSY);
76} 77}
77 78
78static long hvsi_udbg_buf_len; 79static long hvsi_udbg_buf_len;
@@ -85,7 +86,7 @@ static int udbg_hvsi_getc_poll(void)
85 86
86 if (hvsi_udbg_buf_len == 0) { 87 if (hvsi_udbg_buf_len == 0) {
87 rc = plpar_get_term_char(vtermno, &hvsi_udbg_buf_len, hvsi_udbg_buf); 88 rc = plpar_get_term_char(vtermno, &hvsi_udbg_buf_len, hvsi_udbg_buf);
88 if (rc != H_Success || hvsi_udbg_buf[0] != 0xff) { 89 if (rc != H_SUCCESS || hvsi_udbg_buf[0] != 0xff) {
89 /* bad read or non-data packet */ 90 /* bad read or non-data packet */
90 hvsi_udbg_buf_len = 0; 91 hvsi_udbg_buf_len = 0;
91 } else { 92 } else {
@@ -139,7 +140,7 @@ static void udbg_putcLP(char c)
139 buf[0] = c; 140 buf[0] = c;
140 do { 141 do {
141 rc = plpar_put_term_char(vtermno, 1, buf); 142 rc = plpar_put_term_char(vtermno, 1, buf);
142 } while(rc == H_Busy); 143 } while(rc == H_BUSY);
143} 144}
144 145
145/* Buffered chars getc */ 146/* Buffered chars getc */
@@ -158,7 +159,7 @@ static int udbg_getc_pollLP(void)
158 /* get some more chars. */ 159 /* get some more chars. */
159 inbuflen = 0; 160 inbuflen = 0;
160 rc = plpar_get_term_char(vtermno, &inbuflen, buf); 161 rc = plpar_get_term_char(vtermno, &inbuflen, buf);
161 if (rc != H_Success) 162 if (rc != H_SUCCESS)
162 inbuflen = 0; /* otherwise inbuflen is garbage */ 163 inbuflen = 0; /* otherwise inbuflen is garbage */
163 } 164 }
164 if (inbuflen <= 0 || inbuflen > 16) { 165 if (inbuflen <= 0 || inbuflen > 16) {
@@ -304,7 +305,7 @@ long pSeries_lpar_hpte_insert(unsigned long hpte_group,
304 305
305 lpar_rc = plpar_hcall(H_ENTER, flags, hpte_group, hpte_v, 306 lpar_rc = plpar_hcall(H_ENTER, flags, hpte_group, hpte_v,
306 hpte_r, &slot, &dummy0, &dummy1); 307 hpte_r, &slot, &dummy0, &dummy1);
307 if (unlikely(lpar_rc == H_PTEG_Full)) { 308 if (unlikely(lpar_rc == H_PTEG_FULL)) {
308 if (!(vflags & HPTE_V_BOLTED)) 309 if (!(vflags & HPTE_V_BOLTED))
309 DBG_LOW(" full\n"); 310 DBG_LOW(" full\n");
310 return -1; 311 return -1;
@@ -315,7 +316,7 @@ long pSeries_lpar_hpte_insert(unsigned long hpte_group,
315 * will fail. However we must catch the failure in hash_page 316 * will fail. However we must catch the failure in hash_page
316 * or we will loop forever, so return -2 in this case. 317 * or we will loop forever, so return -2 in this case.
317 */ 318 */
318 if (unlikely(lpar_rc != H_Success)) { 319 if (unlikely(lpar_rc != H_SUCCESS)) {
319 if (!(vflags & HPTE_V_BOLTED)) 320 if (!(vflags & HPTE_V_BOLTED))
320 DBG_LOW(" lpar err %d\n", lpar_rc); 321 DBG_LOW(" lpar err %d\n", lpar_rc);
321 return -2; 322 return -2;
@@ -346,9 +347,9 @@ static long pSeries_lpar_hpte_remove(unsigned long hpte_group)
346 /* don't remove a bolted entry */ 347 /* don't remove a bolted entry */
347 lpar_rc = plpar_pte_remove(H_ANDCOND, hpte_group + slot_offset, 348 lpar_rc = plpar_pte_remove(H_ANDCOND, hpte_group + slot_offset,
348 (0x1UL << 4), &dummy1, &dummy2); 349 (0x1UL << 4), &dummy1, &dummy2);
349 if (lpar_rc == H_Success) 350 if (lpar_rc == H_SUCCESS)
350 return i; 351 return i;
351 BUG_ON(lpar_rc != H_Not_Found); 352 BUG_ON(lpar_rc != H_NOT_FOUND);
352 353
353 slot_offset++; 354 slot_offset++;
354 slot_offset &= 0x7; 355 slot_offset &= 0x7;
@@ -391,14 +392,14 @@ static long pSeries_lpar_hpte_updatepp(unsigned long slot,
391 392
392 lpar_rc = plpar_pte_protect(flags, slot, want_v & HPTE_V_AVPN); 393 lpar_rc = plpar_pte_protect(flags, slot, want_v & HPTE_V_AVPN);
393 394
394 if (lpar_rc == H_Not_Found) { 395 if (lpar_rc == H_NOT_FOUND) {
395 DBG_LOW("not found !\n"); 396 DBG_LOW("not found !\n");
396 return -1; 397 return -1;
397 } 398 }
398 399
399 DBG_LOW("ok\n"); 400 DBG_LOW("ok\n");
400 401
401 BUG_ON(lpar_rc != H_Success); 402 BUG_ON(lpar_rc != H_SUCCESS);
402 403
403 return 0; 404 return 0;
404} 405}
@@ -417,7 +418,7 @@ static unsigned long pSeries_lpar_hpte_getword0(unsigned long slot)
417 418
418 lpar_rc = plpar_pte_read(flags, slot, &dword0, &dummy_word1); 419 lpar_rc = plpar_pte_read(flags, slot, &dword0, &dummy_word1);
419 420
420 BUG_ON(lpar_rc != H_Success); 421 BUG_ON(lpar_rc != H_SUCCESS);
421 422
422 return dword0; 423 return dword0;
423} 424}
@@ -468,7 +469,7 @@ static void pSeries_lpar_hpte_updateboltedpp(unsigned long newpp,
468 flags = newpp & 7; 469 flags = newpp & 7;
469 lpar_rc = plpar_pte_protect(flags, slot, 0); 470 lpar_rc = plpar_pte_protect(flags, slot, 0);
470 471
471 BUG_ON(lpar_rc != H_Success); 472 BUG_ON(lpar_rc != H_SUCCESS);
472} 473}
473 474
474static void pSeries_lpar_hpte_invalidate(unsigned long slot, unsigned long va, 475static void pSeries_lpar_hpte_invalidate(unsigned long slot, unsigned long va,
@@ -484,10 +485,10 @@ static void pSeries_lpar_hpte_invalidate(unsigned long slot, unsigned long va,
484 want_v = hpte_encode_v(va, psize); 485 want_v = hpte_encode_v(va, psize);
485 lpar_rc = plpar_pte_remove(H_AVPN, slot, want_v & HPTE_V_AVPN, 486 lpar_rc = plpar_pte_remove(H_AVPN, slot, want_v & HPTE_V_AVPN,
486 &dummy1, &dummy2); 487 &dummy1, &dummy2);
487 if (lpar_rc == H_Not_Found) 488 if (lpar_rc == H_NOT_FOUND)
488 return; 489 return;
489 490
490 BUG_ON(lpar_rc != H_Success); 491 BUG_ON(lpar_rc != H_SUCCESS);
491} 492}
492 493
493/* 494/*
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index b2fbf8ba8fbb..5eb55ef1c91c 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -463,7 +463,7 @@ static void pseries_dedicated_idle_sleep(void)
463 * very low priority. The cede enables interrupts, which 463 * very low priority. The cede enables interrupts, which
464 * doesn't matter here. 464 * doesn't matter here.
465 */ 465 */
466 if (!lppaca[cpu ^ 1].idle || poll_pending() == H_Pending) 466 if (!lppaca[cpu ^ 1].idle || poll_pending() == H_PENDING)
467 cede_processor(); 467 cede_processor();
468 468
469out: 469out:
diff --git a/arch/powerpc/platforms/pseries/vio.c b/arch/powerpc/platforms/pseries/vio.c
index 866379b80c09..8e53e04ada8b 100644
--- a/arch/powerpc/platforms/pseries/vio.c
+++ b/arch/powerpc/platforms/pseries/vio.c
@@ -258,7 +258,7 @@ EXPORT_SYMBOL(vio_find_node);
258int vio_enable_interrupts(struct vio_dev *dev) 258int vio_enable_interrupts(struct vio_dev *dev)
259{ 259{
260 int rc = h_vio_signal(dev->unit_address, VIO_IRQ_ENABLE); 260 int rc = h_vio_signal(dev->unit_address, VIO_IRQ_ENABLE);
261 if (rc != H_Success) 261 if (rc != H_SUCCESS)
262 printk(KERN_ERR "vio: Error 0x%x enabling interrupts\n", rc); 262 printk(KERN_ERR "vio: Error 0x%x enabling interrupts\n", rc);
263 return rc; 263 return rc;
264} 264}
@@ -267,7 +267,7 @@ EXPORT_SYMBOL(vio_enable_interrupts);
267int vio_disable_interrupts(struct vio_dev *dev) 267int vio_disable_interrupts(struct vio_dev *dev)
268{ 268{
269 int rc = h_vio_signal(dev->unit_address, VIO_IRQ_DISABLE); 269 int rc = h_vio_signal(dev->unit_address, VIO_IRQ_DISABLE);
270 if (rc != H_Success) 270 if (rc != H_SUCCESS)
271 printk(KERN_ERR "vio: Error 0x%x disabling interrupts\n", rc); 271 printk(KERN_ERR "vio: Error 0x%x disabling interrupts\n", rc);
272 return rc; 272 return rc;
273} 273}
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c
index 4864cb32be25..2d60ea30fed6 100644
--- a/arch/powerpc/platforms/pseries/xics.c
+++ b/arch/powerpc/platforms/pseries/xics.c
@@ -168,7 +168,7 @@ static int pSeriesLP_xirr_info_get(int n_cpu)
168 unsigned long return_value; 168 unsigned long return_value;
169 169
170 lpar_rc = plpar_xirr(&return_value); 170 lpar_rc = plpar_xirr(&return_value);
171 if (lpar_rc != H_Success) 171 if (lpar_rc != H_SUCCESS)
172 panic(" bad return code xirr - rc = %lx \n", lpar_rc); 172 panic(" bad return code xirr - rc = %lx \n", lpar_rc);
173 return (int)return_value; 173 return (int)return_value;
174} 174}
@@ -179,7 +179,7 @@ static void pSeriesLP_xirr_info_set(int n_cpu, int value)
179 unsigned long val64 = value & 0xffffffff; 179 unsigned long val64 = value & 0xffffffff;
180 180
181 lpar_rc = plpar_eoi(val64); 181 lpar_rc = plpar_eoi(val64);
182 if (lpar_rc != H_Success) 182 if (lpar_rc != H_SUCCESS)
183 panic("bad return code EOI - rc = %ld, value=%lx\n", lpar_rc, 183 panic("bad return code EOI - rc = %ld, value=%lx\n", lpar_rc,
184 val64); 184 val64);
185} 185}
@@ -189,7 +189,7 @@ void pSeriesLP_cppr_info(int n_cpu, u8 value)
189 unsigned long lpar_rc; 189 unsigned long lpar_rc;
190 190
191 lpar_rc = plpar_cppr(value); 191 lpar_rc = plpar_cppr(value);
192 if (lpar_rc != H_Success) 192 if (lpar_rc != H_SUCCESS)
193 panic("bad return code cppr - rc = %lx\n", lpar_rc); 193 panic("bad return code cppr - rc = %lx\n", lpar_rc);
194} 194}
195 195
@@ -198,7 +198,7 @@ static void pSeriesLP_qirr_info(int n_cpu , u8 value)
198 unsigned long lpar_rc; 198 unsigned long lpar_rc;
199 199
200 lpar_rc = plpar_ipi(get_hard_smp_processor_id(n_cpu), value); 200 lpar_rc = plpar_ipi(get_hard_smp_processor_id(n_cpu), value);
201 if (lpar_rc != H_Success) 201 if (lpar_rc != H_SUCCESS)
202 panic("bad return code qirr - rc = %lx\n", lpar_rc); 202 panic("bad return code qirr - rc = %lx\n", lpar_rc);
203} 203}
204 204