aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/include/asm/device.h
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2015-06-24 15:25:22 +1000
committerMichael Ellerman <mpe@ellerman.id.au>2015-07-13 10:10:54 +1000
commit2db4928bb559f8b43ca75879548111dc13a7de31 (patch)
tree8ce6264c97956c84ad19c43786729b04ae2ffd2d /arch/powerpc/include/asm/device.h
parentcxl: use more common format specifier (diff)
downloadlinux-dev-2db4928bb559f8b43ca75879548111dc13a7de31.tar.xz
linux-dev-2db4928bb559f8b43ca75879548111dc13a7de31.zip
powerpc/iommu: Remove dma_data union
To support "hybrid" DMA ops in a subsequent patch, we will need both a direct DMA offset and an iommu pointer. Those are currently exclusive (a union), so change them to be separate fields. While there, also type iommu_table_base properly and make exist only on CONFIG_PPC64 since it's not referenced on 32-bit at all. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/include/asm/device.h')
-rw-r--r--arch/powerpc/include/asm/device.h15
1 files changed, 9 insertions, 6 deletions
diff --git a/arch/powerpc/include/asm/device.h b/arch/powerpc/include/asm/device.h
index e9bdda88f1fb..406c2b1ff82d 100644
--- a/arch/powerpc/include/asm/device.h
+++ b/arch/powerpc/include/asm/device.h
@@ -10,6 +10,7 @@ struct dma_map_ops;
struct device_node;
#ifdef CONFIG_PPC64
struct pci_dn;
+struct iommu_table;
#endif
/*
@@ -23,13 +24,15 @@ struct dev_archdata {
struct dma_map_ops *dma_ops;
/*
- * When an iommu is in use, dma_data is used as a ptr to the base of the
- * iommu_table. Otherwise, it is a simple numerical offset.
+ * These two used to be a union. However, with the hybrid ops we need
+ * both so here we store both a DMA offset for direct mappings and
+ * an iommu_table for remapped DMA.
*/
- union {
- dma_addr_t dma_offset;
- void *iommu_table_base;
- } dma_data;
+ dma_addr_t dma_offset;
+
+#ifdef CONFIG_PPC64
+ struct iommu_table *iommu_table_base;
+#endif
#ifdef CONFIG_IOMMU_API
void *iommu_domain;