diff options
Diffstat (limited to 'arch/powerpc/sysdev')
-rw-r--r-- | arch/powerpc/sysdev/fsl_pci.c | 13 | ||||
-rw-r--r-- | arch/powerpc/sysdev/mpic_msgr.c | 3 | ||||
-rw-r--r-- | arch/powerpc/sysdev/xics/icp-hv.c | 6 |
3 files changed, 16 insertions, 6 deletions
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c index a7b2a600d0a4..c37f46136321 100644 --- a/arch/powerpc/sysdev/fsl_pci.c +++ b/arch/powerpc/sysdev/fsl_pci.c | |||
@@ -465,7 +465,7 @@ int __init fsl_add_bridge(struct device_node *dev, int is_primary) | |||
465 | iounmap(hose->cfg_data); | 465 | iounmap(hose->cfg_data); |
466 | iounmap(hose->cfg_addr); | 466 | iounmap(hose->cfg_addr); |
467 | pcibios_free_controller(hose); | 467 | pcibios_free_controller(hose); |
468 | return 0; | 468 | return -ENODEV; |
469 | } | 469 | } |
470 | 470 | ||
471 | setup_pci_cmd(hose); | 471 | setup_pci_cmd(hose); |
@@ -827,6 +827,7 @@ struct device_node *fsl_pci_primary; | |||
827 | 827 | ||
828 | void __devinit fsl_pci_init(void) | 828 | void __devinit fsl_pci_init(void) |
829 | { | 829 | { |
830 | int ret; | ||
830 | struct device_node *node; | 831 | struct device_node *node; |
831 | struct pci_controller *hose; | 832 | struct pci_controller *hose; |
832 | dma_addr_t max = 0xffffffff; | 833 | dma_addr_t max = 0xffffffff; |
@@ -855,10 +856,12 @@ void __devinit fsl_pci_init(void) | |||
855 | if (!fsl_pci_primary) | 856 | if (!fsl_pci_primary) |
856 | fsl_pci_primary = node; | 857 | fsl_pci_primary = node; |
857 | 858 | ||
858 | fsl_add_bridge(node, fsl_pci_primary == node); | 859 | ret = fsl_add_bridge(node, fsl_pci_primary == node); |
859 | hose = pci_find_hose_for_OF_device(node); | 860 | if (ret == 0) { |
860 | max = min(max, hose->dma_window_base_cur + | 861 | hose = pci_find_hose_for_OF_device(node); |
861 | hose->dma_window_size); | 862 | max = min(max, hose->dma_window_base_cur + |
863 | hose->dma_window_size); | ||
864 | } | ||
862 | } | 865 | } |
863 | } | 866 | } |
864 | 867 | ||
diff --git a/arch/powerpc/sysdev/mpic_msgr.c b/arch/powerpc/sysdev/mpic_msgr.c index 483d8fa72e8b..e961f8c4a8f0 100644 --- a/arch/powerpc/sysdev/mpic_msgr.c +++ b/arch/powerpc/sysdev/mpic_msgr.c | |||
@@ -14,6 +14,9 @@ | |||
14 | #include <linux/list.h> | 14 | #include <linux/list.h> |
15 | #include <linux/of_platform.h> | 15 | #include <linux/of_platform.h> |
16 | #include <linux/errno.h> | 16 | #include <linux/errno.h> |
17 | #include <linux/err.h> | ||
18 | #include <linux/export.h> | ||
19 | #include <linux/slab.h> | ||
17 | #include <asm/prom.h> | 20 | #include <asm/prom.h> |
18 | #include <asm/hw_irq.h> | 21 | #include <asm/hw_irq.h> |
19 | #include <asm/ppc-pci.h> | 22 | #include <asm/ppc-pci.h> |
diff --git a/arch/powerpc/sysdev/xics/icp-hv.c b/arch/powerpc/sysdev/xics/icp-hv.c index 14469cf9df68..df0fc5821469 100644 --- a/arch/powerpc/sysdev/xics/icp-hv.c +++ b/arch/powerpc/sysdev/xics/icp-hv.c | |||
@@ -65,7 +65,11 @@ static inline void icp_hv_set_xirr(unsigned int value) | |||
65 | static inline void icp_hv_set_qirr(int n_cpu , u8 value) | 65 | static inline void icp_hv_set_qirr(int n_cpu , u8 value) |
66 | { | 66 | { |
67 | int hw_cpu = get_hard_smp_processor_id(n_cpu); | 67 | int hw_cpu = get_hard_smp_processor_id(n_cpu); |
68 | long rc = plpar_hcall_norets(H_IPI, hw_cpu, value); | 68 | long rc; |
69 | |||
70 | /* Make sure all previous accesses are ordered before IPI sending */ | ||
71 | mb(); | ||
72 | rc = plpar_hcall_norets(H_IPI, hw_cpu, value); | ||
69 | if (rc != H_SUCCESS) { | 73 | if (rc != H_SUCCESS) { |
70 | pr_err("%s: bad return code qirr cpu=%d hw_cpu=%d mfrr=0x%x " | 74 | pr_err("%s: bad return code qirr cpu=%d hw_cpu=%d mfrr=0x%x " |
71 | "returned %ld\n", __func__, n_cpu, hw_cpu, value, rc); | 75 | "returned %ld\n", __func__, n_cpu, hw_cpu, value, rc); |