aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/include/asm/pci-bridge.h1
-rw-r--r--arch/powerpc/kernel/dma.c7
-rw-r--r--arch/powerpc/platforms/powernv/pci-ioda.c7
-rw-r--r--arch/powerpc/platforms/powernv/pci.c11
-rw-r--r--arch/powerpc/platforms/powernv/pci.h2
-rw-r--r--arch/powerpc/platforms/powernv/powernv.h6
-rw-r--r--arch/powerpc/platforms/powernv/setup.c9
7 files changed, 12 insertions, 31 deletions
diff --git a/arch/powerpc/include/asm/pci-bridge.h b/arch/powerpc/include/asm/pci-bridge.h
index 712add590445..37fc53587bb4 100644
--- a/arch/powerpc/include/asm/pci-bridge.h
+++ b/arch/powerpc/include/asm/pci-bridge.h
@@ -42,6 +42,7 @@ struct pci_controller_ops {
42#endif 42#endif
43 43
44 int (*dma_set_mask)(struct pci_dev *dev, u64 dma_mask); 44 int (*dma_set_mask)(struct pci_dev *dev, u64 dma_mask);
45 u64 (*dma_get_required_mask)(struct pci_dev *dev);
45 46
46 void (*shutdown)(struct pci_controller *); 47 void (*shutdown)(struct pci_controller *);
47}; 48};
diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c
index 1558f81ac1ff..59503ed98e5f 100644
--- a/arch/powerpc/kernel/dma.c
+++ b/arch/powerpc/kernel/dma.c
@@ -353,6 +353,13 @@ u64 dma_get_required_mask(struct device *dev)
353 if (ppc_md.dma_get_required_mask) 353 if (ppc_md.dma_get_required_mask)
354 return ppc_md.dma_get_required_mask(dev); 354 return ppc_md.dma_get_required_mask(dev);
355 355
356 if (dev_is_pci(dev)) {
357 struct pci_dev *pdev = to_pci_dev(dev);
358 struct pci_controller *phb = pci_bus_to_host(pdev->bus);
359 if (phb->controller_ops.dma_get_required_mask)
360 return phb->controller_ops.dma_get_required_mask(pdev);
361 }
362
356 return __dma_get_required_mask(dev); 363 return __dma_get_required_mask(dev);
357} 364}
358EXPORT_SYMBOL_GPL(dma_get_required_mask); 365EXPORT_SYMBOL_GPL(dma_get_required_mask);
diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
index fdafbaccafbe..528cd1e0b5ae 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -1597,9 +1597,10 @@ static int pnv_pci_ioda_dma_set_mask(struct pci_dev *pdev, u64 dma_mask)
1597 return 0; 1597 return 0;
1598} 1598}
1599 1599
1600static u64 pnv_pci_ioda_dma_get_required_mask(struct pnv_phb *phb, 1600static u64 pnv_pci_ioda_dma_get_required_mask(struct pci_dev *pdev)
1601 struct pci_dev *pdev)
1602{ 1601{
1602 struct pci_controller *hose = pci_bus_to_host(pdev->bus);
1603 struct pnv_phb *phb = hose->private_data;
1603 struct pci_dn *pdn = pci_get_pdn(pdev); 1604 struct pci_dn *pdn = pci_get_pdn(pdev);
1604 struct pnv_ioda_pe *pe; 1605 struct pnv_ioda_pe *pe;
1605 u64 end, mask; 1606 u64 end, mask;
@@ -3024,6 +3025,7 @@ static const struct pci_controller_ops pnv_pci_ioda_controller_ops = {
3024 .window_alignment = pnv_pci_window_alignment, 3025 .window_alignment = pnv_pci_window_alignment,
3025 .reset_secondary_bus = pnv_pci_reset_secondary_bus, 3026 .reset_secondary_bus = pnv_pci_reset_secondary_bus,
3026 .dma_set_mask = pnv_pci_ioda_dma_set_mask, 3027 .dma_set_mask = pnv_pci_ioda_dma_set_mask,
3028 .dma_get_required_mask = pnv_pci_ioda_dma_get_required_mask,
3027 .shutdown = pnv_pci_ioda_shutdown, 3029 .shutdown = pnv_pci_ioda_shutdown,
3028}; 3030};
3029 3031
@@ -3170,7 +3172,6 @@ static void __init pnv_pci_init_ioda_phb(struct device_node *np,
3170 3172
3171 /* Setup TCEs */ 3173 /* Setup TCEs */
3172 phb->dma_dev_setup = pnv_pci_ioda_dma_dev_setup; 3174 phb->dma_dev_setup = pnv_pci_ioda_dma_dev_setup;
3173 phb->dma_get_required_mask = pnv_pci_ioda_dma_get_required_mask;
3174 3175
3175 /* Setup MSI support */ 3176 /* Setup MSI support */
3176 pnv_pci_init_ioda_msis(phb); 3177 pnv_pci_init_ioda_msis(phb);
diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c
index 765d8ed558d0..3e7f6fda00cf 100644
--- a/arch/powerpc/platforms/powernv/pci.c
+++ b/arch/powerpc/platforms/powernv/pci.c
@@ -761,17 +761,6 @@ void pnv_pci_dma_dev_setup(struct pci_dev *pdev)
761 phb->dma_dev_setup(phb, pdev); 761 phb->dma_dev_setup(phb, pdev);
762} 762}
763 763
764u64 pnv_pci_dma_get_required_mask(struct pci_dev *pdev)
765{
766 struct pci_controller *hose = pci_bus_to_host(pdev->bus);
767 struct pnv_phb *phb = hose->private_data;
768
769 if (phb && phb->dma_get_required_mask)
770 return phb->dma_get_required_mask(phb, pdev);
771
772 return __dma_get_required_mask(&pdev->dev);
773}
774
775void pnv_pci_shutdown(void) 764void pnv_pci_shutdown(void)
776{ 765{
777 struct pci_controller *hose; 766 struct pci_controller *hose;
diff --git a/arch/powerpc/platforms/powernv/pci.h b/arch/powerpc/platforms/powernv/pci.h
index e891ff48d7e6..c8ff50e90766 100644
--- a/arch/powerpc/platforms/powernv/pci.h
+++ b/arch/powerpc/platforms/powernv/pci.h
@@ -105,8 +105,6 @@ struct pnv_phb {
105 unsigned int hwirq, unsigned int virq, 105 unsigned int hwirq, unsigned int virq,
106 unsigned int is_64, struct msi_msg *msg); 106 unsigned int is_64, struct msi_msg *msg);
107 void (*dma_dev_setup)(struct pnv_phb *phb, struct pci_dev *pdev); 107 void (*dma_dev_setup)(struct pnv_phb *phb, struct pci_dev *pdev);
108 u64 (*dma_get_required_mask)(struct pnv_phb *phb,
109 struct pci_dev *pdev);
110 void (*fixup_phb)(struct pci_controller *hose); 108 void (*fixup_phb)(struct pci_controller *hose);
111 u32 (*bdfn_to_pe)(struct pnv_phb *phb, struct pci_bus *bus, u32 devfn); 109 u32 (*bdfn_to_pe)(struct pnv_phb *phb, struct pci_bus *bus, u32 devfn);
112 int (*init_m64)(struct pnv_phb *phb); 110 int (*init_m64)(struct pnv_phb *phb);
diff --git a/arch/powerpc/platforms/powernv/powernv.h b/arch/powerpc/platforms/powernv/powernv.h
index 9269e30e4ca0..6dbc0a1da1f6 100644
--- a/arch/powerpc/platforms/powernv/powernv.h
+++ b/arch/powerpc/platforms/powernv/powernv.h
@@ -12,15 +12,9 @@ struct pci_dev;
12#ifdef CONFIG_PCI 12#ifdef CONFIG_PCI
13extern void pnv_pci_init(void); 13extern void pnv_pci_init(void);
14extern void pnv_pci_shutdown(void); 14extern void pnv_pci_shutdown(void);
15extern u64 pnv_pci_dma_get_required_mask(struct pci_dev *pdev);
16#else 15#else
17static inline void pnv_pci_init(void) { } 16static inline void pnv_pci_init(void) { }
18static inline void pnv_pci_shutdown(void) { } 17static inline void pnv_pci_shutdown(void) { }
19
20static inline u64 pnv_pci_dma_get_required_mask(struct pci_dev *pdev)
21{
22 return 0;
23}
24#endif 18#endif
25 19
26extern u32 pnv_get_supported_cpuidle_states(void); 20extern u32 pnv_get_supported_cpuidle_states(void);
diff --git a/arch/powerpc/platforms/powernv/setup.c b/arch/powerpc/platforms/powernv/setup.c
index 53737e019ae3..77a31c1474a5 100644
--- a/arch/powerpc/platforms/powernv/setup.c
+++ b/arch/powerpc/platforms/powernv/setup.c
@@ -165,14 +165,6 @@ static void pnv_progress(char *s, unsigned short hex)
165{ 165{
166} 166}
167 167
168static u64 pnv_dma_get_required_mask(struct device *dev)
169{
170 if (dev_is_pci(dev))
171 return pnv_pci_dma_get_required_mask(to_pci_dev(dev));
172
173 return __dma_get_required_mask(dev);
174}
175
176static void pnv_shutdown(void) 168static void pnv_shutdown(void)
177{ 169{
178 /* Let the PCI code clear up IODA tables */ 170 /* Let the PCI code clear up IODA tables */
@@ -314,7 +306,6 @@ define_machine(powernv) {
314 .machine_shutdown = pnv_shutdown, 306 .machine_shutdown = pnv_shutdown,
315 .power_save = power7_idle, 307 .power_save = power7_idle,
316 .calibrate_decr = generic_calibrate_decr, 308 .calibrate_decr = generic_calibrate_decr,
317 .dma_get_required_mask = pnv_dma_get_required_mask,
318#ifdef CONFIG_KEXEC 309#ifdef CONFIG_KEXEC
319 .kexec_cpu_down = pnv_kexec_cpu_down, 310 .kexec_cpu_down = pnv_kexec_cpu_down,
320#endif 311#endif