summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/powernv/powernv.h
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt2014-02-11 01:32:38 +0100
committerBenjamin Herrenschmidt2014-02-11 06:07:37 +0100
commitcd15b048445d0a54f7147c35a86c5a16ef231554 (patch)
tree80c7e63624143adc5d453106ec13f445438c6135 /arch/powerpc/platforms/powernv/powernv.h
parentpowerpc: Fix endian issues in kexec and crash dump code (diff)
downloadkernel-qcow2-linux-cd15b048445d0a54f7147c35a86c5a16ef231554.tar.gz
kernel-qcow2-linux-cd15b048445d0a54f7147c35a86c5a16ef231554.tar.xz
kernel-qcow2-linux-cd15b048445d0a54f7147c35a86c5a16ef231554.zip
powerpc/powernv: Add iommu DMA bypass support for IODA2
This patch adds the support for to create a direct iommu "bypass" window on IODA2 bridges (such as Power8) allowing to bypass iommu page translation completely for 64-bit DMA capable devices, thus significantly improving DMA performances. Additionally, this adds a hook to the struct iommu_table so that the IOMMU API / VFIO can disable the bypass when external ownership is requested, since in that case, the device will be used by an environment such as userspace or a KVM guest which must not be allowed to bypass translations. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/platforms/powernv/powernv.h')
-rw-r--r--arch/powerpc/platforms/powernv/powernv.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/powernv/powernv.h b/arch/powerpc/platforms/powernv/powernv.h
index de6819be1f95..0051e108ef0f 100644
--- a/arch/powerpc/platforms/powernv/powernv.h
+++ b/arch/powerpc/platforms/powernv/powernv.h
@@ -7,12 +7,20 @@ extern void pnv_smp_init(void);
static inline void pnv_smp_init(void) { }
#endif
+struct pci_dev;
+
#ifdef CONFIG_PCI
extern void pnv_pci_init(void);
extern void pnv_pci_shutdown(void);
+extern int pnv_pci_dma_set_mask(struct pci_dev *pdev, u64 dma_mask);
#else
static inline void pnv_pci_init(void) { }
static inline void pnv_pci_shutdown(void) { }
+
+static inline int pnv_pci_dma_set_mask(struct pci_dev *pdev, u64 dma_mask)
+{
+ return -ENODEV;
+}
#endif
extern void pnv_lpc_init(void);