Commit 84631f37cc405dd6dcd566f9fa4e8a3ca2f03f76

Authored by Michael Ellerman
Committed by Paul Mackerras
1 parent 53024fe250

[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);