diff options
author | Andrew Donnellan <andrew.donnellan@au1.ibm.com> | 2015-08-06 23:45:54 -0400 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2015-08-18 05:32:11 -0400 |
commit | 53522982fc3c254bb4444c336cb005c8636930c8 (patch) | |
tree | 84fb0123a17b688524736fa7e124dc4c1b87b06e | |
parent | 73b341efda6664afbb0b6884eae60f04208b4128 (diff) |
powerpc/powernv: move dma_get_required_mask from pnv_phb to pci_controller_ops
Simplify the dma_get_required_mask call chain by moving it from pnv_phb to
pci_controller_ops, similar to commit 763d2d8df1ee ("powerpc/powernv:
Move dma_set_mask from pnv_phb to pci_controller_ops").
Previous call chain:
0) call dma_get_required_mask() (kernel/dma.c)
1) call ppc_md.dma_get_required_mask, if it exists. On powernv, that
points to pnv_dma_get_required_mask() (platforms/powernv/setup.c)
2) device is PCI, therefore call pnv_pci_dma_get_required_mask()
(platforms/powernv/pci.c)
3) call phb->dma_get_required_mask if it exists
4) it only exists in the ioda case, where it points to
pnv_pci_ioda_dma_get_required_mask() (platforms/powernv/pci-ioda.c)
New call chain:
0) call dma_get_required_mask() (kernel/dma.c)
1) device is PCI, therefore call pci_controller_ops.dma_get_required_mask
if it exists
2) in the ioda case, that points to pnv_pci_ioda_dma_get_required_mask()
(platforms/powernv/pci-ioda.c)
In the p5ioc2 case, the call chain remains the same -
dma_get_required_mask() does not find either a ppc_md call or
pci_controller_ops call, so it calls __dma_get_required_mask().
Signed-off-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
-rw-r--r-- | arch/powerpc/include/asm/pci-bridge.h | 1 | ||||
-rw-r--r-- | arch/powerpc/kernel/dma.c | 7 | ||||
-rw-r--r-- | arch/powerpc/platforms/powernv/pci-ioda.c | 7 | ||||
-rw-r--r-- | arch/powerpc/platforms/powernv/pci.c | 11 | ||||
-rw-r--r-- | arch/powerpc/platforms/powernv/pci.h | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/powernv/powernv.h | 6 | ||||
-rw-r--r-- | arch/powerpc/platforms/powernv/setup.c | 9 |
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 | } |
358 | EXPORT_SYMBOL_GPL(dma_get_required_mask); | 365 | EXPORT_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 | ||
1600 | static u64 pnv_pci_ioda_dma_get_required_mask(struct pnv_phb *phb, | 1600 | static 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 | ||
764 | u64 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 | |||
775 | void pnv_pci_shutdown(void) | 764 | void 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 |
13 | extern void pnv_pci_init(void); | 13 | extern void pnv_pci_init(void); |
14 | extern void pnv_pci_shutdown(void); | 14 | extern void pnv_pci_shutdown(void); |
15 | extern u64 pnv_pci_dma_get_required_mask(struct pci_dev *pdev); | ||
16 | #else | 15 | #else |
17 | static inline void pnv_pci_init(void) { } | 16 | static inline void pnv_pci_init(void) { } |
18 | static inline void pnv_pci_shutdown(void) { } | 17 | static inline void pnv_pci_shutdown(void) { } |
19 | |||
20 | static inline u64 pnv_pci_dma_get_required_mask(struct pci_dev *pdev) | ||
21 | { | ||
22 | return 0; | ||
23 | } | ||
24 | #endif | 18 | #endif |
25 | 19 | ||
26 | extern u32 pnv_get_supported_cpuidle_states(void); | 20 | extern 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 | ||
168 | static 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 | |||
176 | static void pnv_shutdown(void) | 168 | static 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 |