Commit 84631f37cc405dd6dcd566f9fa4e8a3ca2f03f76
Committed by
Paul Mackerras
1 parent
53024fe250
Exists in
master
and in
7 other branches
[POWERPC] Implement pci_set_dma_mask() in terms of the dma_ops
PowerPC currently doesn't implement pci_set_dma_mask(), which means drivers calling it will get the generic version in drivers/pci/pci.c. The powerpc dma mapping ops include a dma_set_mask() hook, which luckily is not implemented by anyone - so there is no bug in the fact that the hook is currently never called. However in future we'll add implementation(s) of dma_set_mask(), and so we need pci_set_dma_mask() to call the hook. To save adding a hook to the dma mapping ops, pci-set_consistent_dma_mask() simply calls the dma_set_mask() hook and then copies the new mask into dev.coherenet_dma_mask. Signed-off-by: Michael Ellerman <michael@ellerman.id.au> Signed-off-by: Paul Mackerras <paulus@samba.org>
Showing 2 changed files with 19 additions and 0 deletions Side-by-side Diff
arch/powerpc/kernel/pci_64.c
... | ... | @@ -69,6 +69,22 @@ |
69 | 69 | } |
70 | 70 | EXPORT_SYMBOL(get_pci_dma_ops); |
71 | 71 | |
72 | + | |
73 | +int pci_set_dma_mask(struct pci_dev *dev, u64 mask) | |
74 | +{ | |
75 | + return dma_set_mask(&dev->dev, mask); | |
76 | +} | |
77 | + | |
78 | +int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask) | |
79 | +{ | |
80 | + int rc; | |
81 | + | |
82 | + rc = dma_set_mask(&dev->dev, mask); | |
83 | + dev->dev.coherent_dma_mask = dev->dma_mask; | |
84 | + | |
85 | + return rc; | |
86 | +} | |
87 | + | |
72 | 88 | static void fixup_broken_pcnet32(struct pci_dev* dev) |
73 | 89 | { |
74 | 90 | if ((dev->class>>8 == PCI_CLASS_NETWORK_ETHERNET)) { |
include/asm-powerpc/dma-mapping.h
... | ... | @@ -87,6 +87,9 @@ |
87 | 87 | return dma_ops->dma_supported(dev, mask); |
88 | 88 | } |
89 | 89 | |
90 | +/* We have our own implementation of pci_set_dma_mask() */ | |
91 | +#define HAVE_ARCH_PCI_SET_DMA_MASK | |
92 | + | |
90 | 93 | static inline int dma_set_mask(struct device *dev, u64 dma_mask) |
91 | 94 | { |
92 | 95 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); |