aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorKrzysztof Kozlowski <k.kozlowski@samsung.com>2016-08-03 16:46:00 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2016-08-04 08:50:07 -0400
commit00085f1efa387a8ce100e3734920f7639c80caa3 (patch)
tree41ff3d6e6884918b4fc4f1ae96a284098167c5b0 /arch/powerpc
parent1605d2715ad2e67ddd0485a26e05ed670a4285ca (diff)
dma-mapping: use unsigned long for dma_attrs
The dma-mapping core and the implementations do not change the DMA attributes passed by pointer. Thus the pointer can point to const data. However the attributes do not have to be a bitfield. Instead unsigned long will do fine: 1. This is just simpler. Both in terms of reading the code and setting attributes. Instead of initializing local attributes on the stack and passing pointer to it to dma_set_attr(), just set the bits. 2. It brings safeness and checking for const correctness because the attributes are passed by value. Semantic patches for this change (at least most of them): virtual patch virtual context @r@ identifier f, attrs; @@ f(..., - struct dma_attrs *attrs + unsigned long attrs , ...) { ... } @@ identifier r.f; @@ f(..., - NULL + 0 ) and // Options: --all-includes virtual patch virtual context @r@ identifier f, attrs; type t; @@ t f(..., struct dma_attrs *attrs); @@ identifier r.f; @@ f(..., - NULL + 0 ) Link: http://lkml.kernel.org/r/1468399300-5399-2-git-send-email-k.kozlowski@samsung.com Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Acked-by: Vineet Gupta <vgupta@synopsys.com> Acked-by: Robin Murphy <robin.murphy@arm.com> Acked-by: Hans-Christian Noren Egtvedt <egtvedt@samfundet.no> Acked-by: Mark Salter <msalter@redhat.com> [c6x] Acked-by: Jesper Nilsson <jesper.nilsson@axis.com> [cris] Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> [drm] Reviewed-by: Bart Van Assche <bart.vanassche@sandisk.com> Acked-by: Joerg Roedel <jroedel@suse.de> [iommu] Acked-by: Fabien Dessenne <fabien.dessenne@st.com> [bdisp] Reviewed-by: Marek Szyprowski <m.szyprowski@samsung.com> [vb2-core] Acked-by: David Vrabel <david.vrabel@citrix.com> [xen] Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> [xen swiotlb] Acked-by: Joerg Roedel <jroedel@suse.de> [iommu] Acked-by: Richard Kuo <rkuo@codeaurora.org> [hexagon] Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> [m68k] Acked-by: Gerald Schaefer <gerald.schaefer@de.ibm.com> [s390] Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org> Acked-by: Hans-Christian Noren Egtvedt <egtvedt@samfundet.no> [avr32] Acked-by: Vineet Gupta <vgupta@synopsys.com> [arc] Acked-by: Robin Murphy <robin.murphy@arm.com> [arm64 and dma-iommu] Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/include/asm/dma-mapping.h7
-rw-r--r--arch/powerpc/include/asm/iommu.h10
-rw-r--r--arch/powerpc/kernel/dma-iommu.c12
-rw-r--r--arch/powerpc/kernel/dma.c18
-rw-r--r--arch/powerpc/kernel/ibmebus.c12
-rw-r--r--arch/powerpc/kernel/iommu.c12
-rw-r--r--arch/powerpc/kernel/vio.c12
-rw-r--r--arch/powerpc/platforms/cell/iommu.c28
-rw-r--r--arch/powerpc/platforms/pasemi/iommu.c2
-rw-r--r--arch/powerpc/platforms/powernv/npu-dma.c8
-rw-r--r--arch/powerpc/platforms/powernv/pci-ioda.c4
-rw-r--r--arch/powerpc/platforms/powernv/pci.c2
-rw-r--r--arch/powerpc/platforms/powernv/pci.h2
-rw-r--r--arch/powerpc/platforms/ps3/system-bus.c18
-rw-r--r--arch/powerpc/platforms/pseries/iommu.c6
-rw-r--r--arch/powerpc/sysdev/dart_iommu.c2
16 files changed, 77 insertions, 78 deletions
diff --git a/arch/powerpc/include/asm/dma-mapping.h b/arch/powerpc/include/asm/dma-mapping.h
index 77816acd4fd9..84e3f8dd5e4f 100644
--- a/arch/powerpc/include/asm/dma-mapping.h
+++ b/arch/powerpc/include/asm/dma-mapping.h
@@ -13,7 +13,6 @@
13/* need struct page definitions */ 13/* need struct page definitions */
14#include <linux/mm.h> 14#include <linux/mm.h>
15#include <linux/scatterlist.h> 15#include <linux/scatterlist.h>
16#include <linux/dma-attrs.h>
17#include <linux/dma-debug.h> 16#include <linux/dma-debug.h>
18#include <asm/io.h> 17#include <asm/io.h>
19#include <asm/swiotlb.h> 18#include <asm/swiotlb.h>
@@ -25,14 +24,14 @@
25/* Some dma direct funcs must be visible for use in other dma_ops */ 24/* Some dma direct funcs must be visible for use in other dma_ops */
26extern void *__dma_direct_alloc_coherent(struct device *dev, size_t size, 25extern void *__dma_direct_alloc_coherent(struct device *dev, size_t size,
27 dma_addr_t *dma_handle, gfp_t flag, 26 dma_addr_t *dma_handle, gfp_t flag,
28 struct dma_attrs *attrs); 27 unsigned long attrs);
29extern void __dma_direct_free_coherent(struct device *dev, size_t size, 28extern void __dma_direct_free_coherent(struct device *dev, size_t size,
30 void *vaddr, dma_addr_t dma_handle, 29 void *vaddr, dma_addr_t dma_handle,
31 struct dma_attrs *attrs); 30 unsigned long attrs);
32extern int dma_direct_mmap_coherent(struct device *dev, 31extern int dma_direct_mmap_coherent(struct device *dev,
33 struct vm_area_struct *vma, 32 struct vm_area_struct *vma,
34 void *cpu_addr, dma_addr_t handle, 33 void *cpu_addr, dma_addr_t handle,
35 size_t size, struct dma_attrs *attrs); 34 size_t size, unsigned long attrs);
36 35
37#ifdef CONFIG_NOT_COHERENT_CACHE 36#ifdef CONFIG_NOT_COHERENT_CACHE
38/* 37/*
diff --git a/arch/powerpc/include/asm/iommu.h b/arch/powerpc/include/asm/iommu.h
index f49a72a9062d..2c1d50792944 100644
--- a/arch/powerpc/include/asm/iommu.h
+++ b/arch/powerpc/include/asm/iommu.h
@@ -53,7 +53,7 @@ struct iommu_table_ops {
53 long index, long npages, 53 long index, long npages,
54 unsigned long uaddr, 54 unsigned long uaddr,
55 enum dma_data_direction direction, 55 enum dma_data_direction direction,
56 struct dma_attrs *attrs); 56 unsigned long attrs);
57#ifdef CONFIG_IOMMU_API 57#ifdef CONFIG_IOMMU_API
58 /* 58 /*
59 * Exchanges existing TCE with new TCE plus direction bits; 59 * Exchanges existing TCE with new TCE plus direction bits;
@@ -248,12 +248,12 @@ extern int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl,
248 struct scatterlist *sglist, int nelems, 248 struct scatterlist *sglist, int nelems,
249 unsigned long mask, 249 unsigned long mask,
250 enum dma_data_direction direction, 250 enum dma_data_direction direction,
251 struct dma_attrs *attrs); 251 unsigned long attrs);
252extern void ppc_iommu_unmap_sg(struct iommu_table *tbl, 252extern void ppc_iommu_unmap_sg(struct iommu_table *tbl,
253 struct scatterlist *sglist, 253 struct scatterlist *sglist,
254 int nelems, 254 int nelems,
255 enum dma_data_direction direction, 255 enum dma_data_direction direction,
256 struct dma_attrs *attrs); 256 unsigned long attrs);
257 257
258extern void *iommu_alloc_coherent(struct device *dev, struct iommu_table *tbl, 258extern void *iommu_alloc_coherent(struct device *dev, struct iommu_table *tbl,
259 size_t size, dma_addr_t *dma_handle, 259 size_t size, dma_addr_t *dma_handle,
@@ -264,10 +264,10 @@ extern dma_addr_t iommu_map_page(struct device *dev, struct iommu_table *tbl,
264 struct page *page, unsigned long offset, 264 struct page *page, unsigned long offset,
265 size_t size, unsigned long mask, 265 size_t size, unsigned long mask,
266 enum dma_data_direction direction, 266 enum dma_data_direction direction,
267 struct dma_attrs *attrs); 267 unsigned long attrs);
268extern void iommu_unmap_page(struct iommu_table *tbl, dma_addr_t dma_handle, 268extern void iommu_unmap_page(struct iommu_table *tbl, dma_addr_t dma_handle,
269 size_t size, enum dma_data_direction direction, 269 size_t size, enum dma_data_direction direction,
270 struct dma_attrs *attrs); 270 unsigned long attrs);
271 271
272extern void iommu_init_early_pSeries(void); 272extern void iommu_init_early_pSeries(void);
273extern void iommu_init_early_dart(struct pci_controller_ops *controller_ops); 273extern void iommu_init_early_dart(struct pci_controller_ops *controller_ops);
diff --git a/arch/powerpc/kernel/dma-iommu.c b/arch/powerpc/kernel/dma-iommu.c
index 41a7d9d49a5a..fb7cbaa37658 100644
--- a/arch/powerpc/kernel/dma-iommu.c
+++ b/arch/powerpc/kernel/dma-iommu.c
@@ -18,7 +18,7 @@
18 */ 18 */
19static void *dma_iommu_alloc_coherent(struct device *dev, size_t size, 19static void *dma_iommu_alloc_coherent(struct device *dev, size_t size,
20 dma_addr_t *dma_handle, gfp_t flag, 20 dma_addr_t *dma_handle, gfp_t flag,
21 struct dma_attrs *attrs) 21 unsigned long attrs)
22{ 22{
23 return iommu_alloc_coherent(dev, get_iommu_table_base(dev), size, 23 return iommu_alloc_coherent(dev, get_iommu_table_base(dev), size,
24 dma_handle, dev->coherent_dma_mask, flag, 24 dma_handle, dev->coherent_dma_mask, flag,
@@ -27,7 +27,7 @@ static void *dma_iommu_alloc_coherent(struct device *dev, size_t size,
27 27
28static void dma_iommu_free_coherent(struct device *dev, size_t size, 28static void dma_iommu_free_coherent(struct device *dev, size_t size,
29 void *vaddr, dma_addr_t dma_handle, 29 void *vaddr, dma_addr_t dma_handle,
30 struct dma_attrs *attrs) 30 unsigned long attrs)
31{ 31{
32 iommu_free_coherent(get_iommu_table_base(dev), size, vaddr, dma_handle); 32 iommu_free_coherent(get_iommu_table_base(dev), size, vaddr, dma_handle);
33} 33}
@@ -40,7 +40,7 @@ static void dma_iommu_free_coherent(struct device *dev, size_t size,
40static dma_addr_t dma_iommu_map_page(struct device *dev, struct page *page, 40static dma_addr_t dma_iommu_map_page(struct device *dev, struct page *page,
41 unsigned long offset, size_t size, 41 unsigned long offset, size_t size,
42 enum dma_data_direction direction, 42 enum dma_data_direction direction,
43 struct dma_attrs *attrs) 43 unsigned long attrs)
44{ 44{
45 return iommu_map_page(dev, get_iommu_table_base(dev), page, offset, 45 return iommu_map_page(dev, get_iommu_table_base(dev), page, offset,
46 size, device_to_mask(dev), direction, attrs); 46 size, device_to_mask(dev), direction, attrs);
@@ -49,7 +49,7 @@ static dma_addr_t dma_iommu_map_page(struct device *dev, struct page *page,
49 49
50static void dma_iommu_unmap_page(struct device *dev, dma_addr_t dma_handle, 50static void dma_iommu_unmap_page(struct device *dev, dma_addr_t dma_handle,
51 size_t size, enum dma_data_direction direction, 51 size_t size, enum dma_data_direction direction,
52 struct dma_attrs *attrs) 52 unsigned long attrs)
53{ 53{
54 iommu_unmap_page(get_iommu_table_base(dev), dma_handle, size, direction, 54 iommu_unmap_page(get_iommu_table_base(dev), dma_handle, size, direction,
55 attrs); 55 attrs);
@@ -58,7 +58,7 @@ static void dma_iommu_unmap_page(struct device *dev, dma_addr_t dma_handle,
58 58
59static int dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist, 59static int dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist,
60 int nelems, enum dma_data_direction direction, 60 int nelems, enum dma_data_direction direction,
61 struct dma_attrs *attrs) 61 unsigned long attrs)
62{ 62{
63 return ppc_iommu_map_sg(dev, get_iommu_table_base(dev), sglist, nelems, 63 return ppc_iommu_map_sg(dev, get_iommu_table_base(dev), sglist, nelems,
64 device_to_mask(dev), direction, attrs); 64 device_to_mask(dev), direction, attrs);
@@ -66,7 +66,7 @@ static int dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist,
66 66
67static void dma_iommu_unmap_sg(struct device *dev, struct scatterlist *sglist, 67static void dma_iommu_unmap_sg(struct device *dev, struct scatterlist *sglist,
68 int nelems, enum dma_data_direction direction, 68 int nelems, enum dma_data_direction direction,
69 struct dma_attrs *attrs) 69 unsigned long attrs)
70{ 70{
71 ppc_iommu_unmap_sg(get_iommu_table_base(dev), sglist, nelems, 71 ppc_iommu_unmap_sg(get_iommu_table_base(dev), sglist, nelems,
72 direction, attrs); 72 direction, attrs);
diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c
index 3f1472a78f39..e64a6016fba7 100644
--- a/arch/powerpc/kernel/dma.c
+++ b/arch/powerpc/kernel/dma.c
@@ -64,7 +64,7 @@ static int dma_direct_dma_supported(struct device *dev, u64 mask)
64 64
65void *__dma_direct_alloc_coherent(struct device *dev, size_t size, 65void *__dma_direct_alloc_coherent(struct device *dev, size_t size,
66 dma_addr_t *dma_handle, gfp_t flag, 66 dma_addr_t *dma_handle, gfp_t flag,
67 struct dma_attrs *attrs) 67 unsigned long attrs)
68{ 68{
69 void *ret; 69 void *ret;
70#ifdef CONFIG_NOT_COHERENT_CACHE 70#ifdef CONFIG_NOT_COHERENT_CACHE
@@ -121,7 +121,7 @@ void *__dma_direct_alloc_coherent(struct device *dev, size_t size,
121 121
122void __dma_direct_free_coherent(struct device *dev, size_t size, 122void __dma_direct_free_coherent(struct device *dev, size_t size,
123 void *vaddr, dma_addr_t dma_handle, 123 void *vaddr, dma_addr_t dma_handle,
124 struct dma_attrs *attrs) 124 unsigned long attrs)
125{ 125{
126#ifdef CONFIG_NOT_COHERENT_CACHE 126#ifdef CONFIG_NOT_COHERENT_CACHE
127 __dma_free_coherent(size, vaddr); 127 __dma_free_coherent(size, vaddr);
@@ -132,7 +132,7 @@ void __dma_direct_free_coherent(struct device *dev, size_t size,
132 132
133static void *dma_direct_alloc_coherent(struct device *dev, size_t size, 133static void *dma_direct_alloc_coherent(struct device *dev, size_t size,
134 dma_addr_t *dma_handle, gfp_t flag, 134 dma_addr_t *dma_handle, gfp_t flag,
135 struct dma_attrs *attrs) 135 unsigned long attrs)
136{ 136{
137 struct iommu_table *iommu; 137 struct iommu_table *iommu;
138 138
@@ -156,7 +156,7 @@ static void *dma_direct_alloc_coherent(struct device *dev, size_t size,
156 156
157static void dma_direct_free_coherent(struct device *dev, size_t size, 157static void dma_direct_free_coherent(struct device *dev, size_t size,
158 void *vaddr, dma_addr_t dma_handle, 158 void *vaddr, dma_addr_t dma_handle,
159 struct dma_attrs *attrs) 159 unsigned long attrs)
160{ 160{
161 struct iommu_table *iommu; 161 struct iommu_table *iommu;
162 162
@@ -177,7 +177,7 @@ static void dma_direct_free_coherent(struct device *dev, size_t size,
177 177
178int dma_direct_mmap_coherent(struct device *dev, struct vm_area_struct *vma, 178int dma_direct_mmap_coherent(struct device *dev, struct vm_area_struct *vma,
179 void *cpu_addr, dma_addr_t handle, size_t size, 179 void *cpu_addr, dma_addr_t handle, size_t size,
180 struct dma_attrs *attrs) 180 unsigned long attrs)
181{ 181{
182 unsigned long pfn; 182 unsigned long pfn;
183 183
@@ -195,7 +195,7 @@ int dma_direct_mmap_coherent(struct device *dev, struct vm_area_struct *vma,
195 195
196static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, 196static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl,
197 int nents, enum dma_data_direction direction, 197 int nents, enum dma_data_direction direction,
198 struct dma_attrs *attrs) 198 unsigned long attrs)
199{ 199{
200 struct scatterlist *sg; 200 struct scatterlist *sg;
201 int i; 201 int i;
@@ -211,7 +211,7 @@ static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl,
211 211
212static void dma_direct_unmap_sg(struct device *dev, struct scatterlist *sg, 212static void dma_direct_unmap_sg(struct device *dev, struct scatterlist *sg,
213 int nents, enum dma_data_direction direction, 213 int nents, enum dma_data_direction direction,
214 struct dma_attrs *attrs) 214 unsigned long attrs)
215{ 215{
216} 216}
217 217
@@ -232,7 +232,7 @@ static inline dma_addr_t dma_direct_map_page(struct device *dev,
232 unsigned long offset, 232 unsigned long offset,
233 size_t size, 233 size_t size,
234 enum dma_data_direction dir, 234 enum dma_data_direction dir,
235 struct dma_attrs *attrs) 235 unsigned long attrs)
236{ 236{
237 BUG_ON(dir == DMA_NONE); 237 BUG_ON(dir == DMA_NONE);
238 __dma_sync_page(page, offset, size, dir); 238 __dma_sync_page(page, offset, size, dir);
@@ -243,7 +243,7 @@ static inline void dma_direct_unmap_page(struct device *dev,
243 dma_addr_t dma_address, 243 dma_addr_t dma_address,
244 size_t size, 244 size_t size,
245 enum dma_data_direction direction, 245 enum dma_data_direction direction,
246 struct dma_attrs *attrs) 246 unsigned long attrs)
247{ 247{
248} 248}
249 249
diff --git a/arch/powerpc/kernel/ibmebus.c b/arch/powerpc/kernel/ibmebus.c
index a89f4f7a66bd..c1ca9282f4a0 100644
--- a/arch/powerpc/kernel/ibmebus.c
+++ b/arch/powerpc/kernel/ibmebus.c
@@ -65,7 +65,7 @@ static void *ibmebus_alloc_coherent(struct device *dev,
65 size_t size, 65 size_t size,
66 dma_addr_t *dma_handle, 66 dma_addr_t *dma_handle,
67 gfp_t flag, 67 gfp_t flag,
68 struct dma_attrs *attrs) 68 unsigned long attrs)
69{ 69{
70 void *mem; 70 void *mem;
71 71
@@ -78,7 +78,7 @@ static void *ibmebus_alloc_coherent(struct device *dev,
78static void ibmebus_free_coherent(struct device *dev, 78static void ibmebus_free_coherent(struct device *dev,
79 size_t size, void *vaddr, 79 size_t size, void *vaddr,
80 dma_addr_t dma_handle, 80 dma_addr_t dma_handle,
81 struct dma_attrs *attrs) 81 unsigned long attrs)
82{ 82{
83 kfree(vaddr); 83 kfree(vaddr);
84} 84}
@@ -88,7 +88,7 @@ static dma_addr_t ibmebus_map_page(struct device *dev,
88 unsigned long offset, 88 unsigned long offset,
89 size_t size, 89 size_t size,
90 enum dma_data_direction direction, 90 enum dma_data_direction direction,
91 struct dma_attrs *attrs) 91 unsigned long attrs)
92{ 92{
93 return (dma_addr_t)(page_address(page) + offset); 93 return (dma_addr_t)(page_address(page) + offset);
94} 94}
@@ -97,7 +97,7 @@ static void ibmebus_unmap_page(struct device *dev,
97 dma_addr_t dma_addr, 97 dma_addr_t dma_addr,
98 size_t size, 98 size_t size,
99 enum dma_data_direction direction, 99 enum dma_data_direction direction,
100 struct dma_attrs *attrs) 100 unsigned long attrs)
101{ 101{
102 return; 102 return;
103} 103}
@@ -105,7 +105,7 @@ static void ibmebus_unmap_page(struct device *dev,
105static int ibmebus_map_sg(struct device *dev, 105static int ibmebus_map_sg(struct device *dev,
106 struct scatterlist *sgl, 106 struct scatterlist *sgl,
107 int nents, enum dma_data_direction direction, 107 int nents, enum dma_data_direction direction,
108 struct dma_attrs *attrs) 108 unsigned long attrs)
109{ 109{
110 struct scatterlist *sg; 110 struct scatterlist *sg;
111 int i; 111 int i;
@@ -121,7 +121,7 @@ static int ibmebus_map_sg(struct device *dev,
121static void ibmebus_unmap_sg(struct device *dev, 121static void ibmebus_unmap_sg(struct device *dev,
122 struct scatterlist *sg, 122 struct scatterlist *sg,
123 int nents, enum dma_data_direction direction, 123 int nents, enum dma_data_direction direction,
124 struct dma_attrs *attrs) 124 unsigned long attrs)
125{ 125{
126 return; 126 return;
127} 127}
diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
index a8e3490b54e3..37d6e741be82 100644
--- a/arch/powerpc/kernel/iommu.c
+++ b/arch/powerpc/kernel/iommu.c
@@ -307,7 +307,7 @@ static dma_addr_t iommu_alloc(struct device *dev, struct iommu_table *tbl,
307 void *page, unsigned int npages, 307 void *page, unsigned int npages,
308 enum dma_data_direction direction, 308 enum dma_data_direction direction,
309 unsigned long mask, unsigned int align_order, 309 unsigned long mask, unsigned int align_order,
310 struct dma_attrs *attrs) 310 unsigned long attrs)
311{ 311{
312 unsigned long entry; 312 unsigned long entry;
313 dma_addr_t ret = DMA_ERROR_CODE; 313 dma_addr_t ret = DMA_ERROR_CODE;
@@ -431,7 +431,7 @@ static void iommu_free(struct iommu_table *tbl, dma_addr_t dma_addr,
431int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl, 431int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl,
432 struct scatterlist *sglist, int nelems, 432 struct scatterlist *sglist, int nelems,
433 unsigned long mask, enum dma_data_direction direction, 433 unsigned long mask, enum dma_data_direction direction,
434 struct dma_attrs *attrs) 434 unsigned long attrs)
435{ 435{
436 dma_addr_t dma_next = 0, dma_addr; 436 dma_addr_t dma_next = 0, dma_addr;
437 struct scatterlist *s, *outs, *segstart; 437 struct scatterlist *s, *outs, *segstart;
@@ -574,7 +574,7 @@ int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl,
574 574
575void ppc_iommu_unmap_sg(struct iommu_table *tbl, struct scatterlist *sglist, 575void ppc_iommu_unmap_sg(struct iommu_table *tbl, struct scatterlist *sglist,
576 int nelems, enum dma_data_direction direction, 576 int nelems, enum dma_data_direction direction,
577 struct dma_attrs *attrs) 577 unsigned long attrs)
578{ 578{
579 struct scatterlist *sg; 579 struct scatterlist *sg;
580 580
@@ -753,7 +753,7 @@ void iommu_free_table(struct iommu_table *tbl, const char *node_name)
753dma_addr_t iommu_map_page(struct device *dev, struct iommu_table *tbl, 753dma_addr_t iommu_map_page(struct device *dev, struct iommu_table *tbl,
754 struct page *page, unsigned long offset, size_t size, 754 struct page *page, unsigned long offset, size_t size,
755 unsigned long mask, enum dma_data_direction direction, 755 unsigned long mask, enum dma_data_direction direction,
756 struct dma_attrs *attrs) 756 unsigned long attrs)
757{ 757{
758 dma_addr_t dma_handle = DMA_ERROR_CODE; 758 dma_addr_t dma_handle = DMA_ERROR_CODE;
759 void *vaddr; 759 void *vaddr;
@@ -790,7 +790,7 @@ dma_addr_t iommu_map_page(struct device *dev, struct iommu_table *tbl,
790 790
791void iommu_unmap_page(struct iommu_table *tbl, dma_addr_t dma_handle, 791void iommu_unmap_page(struct iommu_table *tbl, dma_addr_t dma_handle,
792 size_t size, enum dma_data_direction direction, 792 size_t size, enum dma_data_direction direction,
793 struct dma_attrs *attrs) 793 unsigned long attrs)
794{ 794{
795 unsigned int npages; 795 unsigned int npages;
796 796
@@ -845,7 +845,7 @@ void *iommu_alloc_coherent(struct device *dev, struct iommu_table *tbl,
845 nio_pages = size >> tbl->it_page_shift; 845 nio_pages = size >> tbl->it_page_shift;
846 io_order = get_iommu_order(size, tbl); 846 io_order = get_iommu_order(size, tbl);
847 mapping = iommu_alloc(dev, tbl, ret, nio_pages, DMA_BIDIRECTIONAL, 847 mapping = iommu_alloc(dev, tbl, ret, nio_pages, DMA_BIDIRECTIONAL,
848 mask >> tbl->it_page_shift, io_order, NULL); 848 mask >> tbl->it_page_shift, io_order, 0);
849 if (mapping == DMA_ERROR_CODE) { 849 if (mapping == DMA_ERROR_CODE) {
850 free_pages((unsigned long)ret, order); 850 free_pages((unsigned long)ret, order);
851 return NULL; 851 return NULL;
diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c
index 8d7358f3a273..b3813ddb2fb4 100644
--- a/arch/powerpc/kernel/vio.c
+++ b/arch/powerpc/kernel/vio.c
@@ -482,7 +482,7 @@ static void vio_cmo_balance(struct work_struct *work)
482 482
483static void *vio_dma_iommu_alloc_coherent(struct device *dev, size_t size, 483static void *vio_dma_iommu_alloc_coherent(struct device *dev, size_t size,
484 dma_addr_t *dma_handle, gfp_t flag, 484 dma_addr_t *dma_handle, gfp_t flag,
485 struct dma_attrs *attrs) 485 unsigned long attrs)
486{ 486{
487 struct vio_dev *viodev = to_vio_dev(dev); 487 struct vio_dev *viodev = to_vio_dev(dev);
488 void *ret; 488 void *ret;
@@ -503,7 +503,7 @@ static void *vio_dma_iommu_alloc_coherent(struct device *dev, size_t size,
503 503
504static void vio_dma_iommu_free_coherent(struct device *dev, size_t size, 504static void vio_dma_iommu_free_coherent(struct device *dev, size_t size,
505 void *vaddr, dma_addr_t dma_handle, 505 void *vaddr, dma_addr_t dma_handle,
506 struct dma_attrs *attrs) 506 unsigned long attrs)
507{ 507{
508 struct vio_dev *viodev = to_vio_dev(dev); 508 struct vio_dev *viodev = to_vio_dev(dev);
509 509
@@ -515,7 +515,7 @@ static void vio_dma_iommu_free_coherent(struct device *dev, size_t size,
515static dma_addr_t vio_dma_iommu_map_page(struct device *dev, struct page *page, 515static dma_addr_t vio_dma_iommu_map_page(struct device *dev, struct page *page,
516 unsigned long offset, size_t size, 516 unsigned long offset, size_t size,
517 enum dma_data_direction direction, 517 enum dma_data_direction direction,
518 struct dma_attrs *attrs) 518 unsigned long attrs)
519{ 519{
520 struct vio_dev *viodev = to_vio_dev(dev); 520 struct vio_dev *viodev = to_vio_dev(dev);
521 struct iommu_table *tbl; 521 struct iommu_table *tbl;
@@ -539,7 +539,7 @@ static dma_addr_t vio_dma_iommu_map_page(struct device *dev, struct page *page,
539static void vio_dma_iommu_unmap_page(struct device *dev, dma_addr_t dma_handle, 539static void vio_dma_iommu_unmap_page(struct device *dev, dma_addr_t dma_handle,
540 size_t size, 540 size_t size,
541 enum dma_data_direction direction, 541 enum dma_data_direction direction,
542 struct dma_attrs *attrs) 542 unsigned long attrs)
543{ 543{
544 struct vio_dev *viodev = to_vio_dev(dev); 544 struct vio_dev *viodev = to_vio_dev(dev);
545 struct iommu_table *tbl; 545 struct iommu_table *tbl;
@@ -552,7 +552,7 @@ static void vio_dma_iommu_unmap_page(struct device *dev, dma_addr_t dma_handle,
552 552
553static int vio_dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist, 553static int vio_dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist,
554 int nelems, enum dma_data_direction direction, 554 int nelems, enum dma_data_direction direction,
555 struct dma_attrs *attrs) 555 unsigned long attrs)
556{ 556{
557 struct vio_dev *viodev = to_vio_dev(dev); 557 struct vio_dev *viodev = to_vio_dev(dev);
558 struct iommu_table *tbl; 558 struct iommu_table *tbl;
@@ -588,7 +588,7 @@ static int vio_dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist,
588static void vio_dma_iommu_unmap_sg(struct device *dev, 588static void vio_dma_iommu_unmap_sg(struct device *dev,
589 struct scatterlist *sglist, int nelems, 589 struct scatterlist *sglist, int nelems,
590 enum dma_data_direction direction, 590 enum dma_data_direction direction,
591 struct dma_attrs *attrs) 591 unsigned long attrs)
592{ 592{
593 struct vio_dev *viodev = to_vio_dev(dev); 593 struct vio_dev *viodev = to_vio_dev(dev);
594 struct iommu_table *tbl; 594 struct iommu_table *tbl;
diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c
index 9027d7c48507..f7d1a4953ea0 100644
--- a/arch/powerpc/platforms/cell/iommu.c
+++ b/arch/powerpc/platforms/cell/iommu.c
@@ -166,7 +166,7 @@ static void invalidate_tce_cache(struct cbe_iommu *iommu, unsigned long *pte,
166 166
167static int tce_build_cell(struct iommu_table *tbl, long index, long npages, 167static int tce_build_cell(struct iommu_table *tbl, long index, long npages,
168 unsigned long uaddr, enum dma_data_direction direction, 168 unsigned long uaddr, enum dma_data_direction direction,
169 struct dma_attrs *attrs) 169 unsigned long attrs)
170{ 170{
171 int i; 171 int i;
172 unsigned long *io_pte, base_pte; 172 unsigned long *io_pte, base_pte;
@@ -193,7 +193,7 @@ static int tce_build_cell(struct iommu_table *tbl, long index, long npages,
193 base_pte = CBE_IOPTE_PP_W | CBE_IOPTE_PP_R | CBE_IOPTE_M | 193 base_pte = CBE_IOPTE_PP_W | CBE_IOPTE_PP_R | CBE_IOPTE_M |
194 CBE_IOPTE_SO_RW | (window->ioid & CBE_IOPTE_IOID_Mask); 194 CBE_IOPTE_SO_RW | (window->ioid & CBE_IOPTE_IOID_Mask);
195#endif 195#endif
196 if (unlikely(dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs))) 196 if (unlikely(attrs & DMA_ATTR_WEAK_ORDERING))
197 base_pte &= ~CBE_IOPTE_SO_RW; 197 base_pte &= ~CBE_IOPTE_SO_RW;
198 198
199 io_pte = (unsigned long *)tbl->it_base + (index - tbl->it_offset); 199 io_pte = (unsigned long *)tbl->it_base + (index - tbl->it_offset);
@@ -526,7 +526,7 @@ cell_iommu_setup_window(struct cbe_iommu *iommu, struct device_node *np,
526 526
527 __set_bit(0, window->table.it_map); 527 __set_bit(0, window->table.it_map);
528 tce_build_cell(&window->table, window->table.it_offset, 1, 528 tce_build_cell(&window->table, window->table.it_offset, 1,
529 (unsigned long)iommu->pad_page, DMA_TO_DEVICE, NULL); 529 (unsigned long)iommu->pad_page, DMA_TO_DEVICE, 0);
530 530
531 return window; 531 return window;
532} 532}
@@ -572,7 +572,7 @@ static struct iommu_table *cell_get_iommu_table(struct device *dev)
572 572
573static void *dma_fixed_alloc_coherent(struct device *dev, size_t size, 573static void *dma_fixed_alloc_coherent(struct device *dev, size_t size,
574 dma_addr_t *dma_handle, gfp_t flag, 574 dma_addr_t *dma_handle, gfp_t flag,
575 struct dma_attrs *attrs) 575 unsigned long attrs)
576{ 576{
577 if (iommu_fixed_is_weak) 577 if (iommu_fixed_is_weak)
578 return iommu_alloc_coherent(dev, cell_get_iommu_table(dev), 578 return iommu_alloc_coherent(dev, cell_get_iommu_table(dev),
@@ -586,7 +586,7 @@ static void *dma_fixed_alloc_coherent(struct device *dev, size_t size,
586 586
587static void dma_fixed_free_coherent(struct device *dev, size_t size, 587static void dma_fixed_free_coherent(struct device *dev, size_t size,
588 void *vaddr, dma_addr_t dma_handle, 588 void *vaddr, dma_addr_t dma_handle,
589 struct dma_attrs *attrs) 589 unsigned long attrs)
590{ 590{
591 if (iommu_fixed_is_weak) 591 if (iommu_fixed_is_weak)
592 iommu_free_coherent(cell_get_iommu_table(dev), size, vaddr, 592 iommu_free_coherent(cell_get_iommu_table(dev), size, vaddr,
@@ -598,9 +598,9 @@ static void dma_fixed_free_coherent(struct device *dev, size_t size,
598static dma_addr_t dma_fixed_map_page(struct device *dev, struct page *page, 598static dma_addr_t dma_fixed_map_page(struct device *dev, struct page *page,
599 unsigned long offset, size_t size, 599 unsigned long offset, size_t size,
600 enum dma_data_direction direction, 600 enum dma_data_direction direction,
601 struct dma_attrs *attrs) 601 unsigned long attrs)
602{ 602{
603 if (iommu_fixed_is_weak == dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs)) 603 if (iommu_fixed_is_weak == (attrs & DMA_ATTR_WEAK_ORDERING))
604 return dma_direct_ops.map_page(dev, page, offset, size, 604 return dma_direct_ops.map_page(dev, page, offset, size,
605 direction, attrs); 605 direction, attrs);
606 else 606 else
@@ -611,9 +611,9 @@ static dma_addr_t dma_fixed_map_page(struct device *dev, struct page *page,
611 611
612static void dma_fixed_unmap_page(struct device *dev, dma_addr_t dma_addr, 612static void dma_fixed_unmap_page(struct device *dev, dma_addr_t dma_addr,
613 size_t size, enum dma_data_direction direction, 613 size_t size, enum dma_data_direction direction,
614 struct dma_attrs *attrs) 614 unsigned long attrs)
615{ 615{
616 if (iommu_fixed_is_weak == dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs)) 616 if (iommu_fixed_is_weak == (attrs & DMA_ATTR_WEAK_ORDERING))
617 dma_direct_ops.unmap_page(dev, dma_addr, size, direction, 617 dma_direct_ops.unmap_page(dev, dma_addr, size, direction,
618 attrs); 618 attrs);
619 else 619 else
@@ -623,9 +623,9 @@ static void dma_fixed_unmap_page(struct device *dev, dma_addr_t dma_addr,
623 623
624static int dma_fixed_map_sg(struct device *dev, struct scatterlist *sg, 624static int dma_fixed_map_sg(struct device *dev, struct scatterlist *sg,
625 int nents, enum dma_data_direction direction, 625 int nents, enum dma_data_direction direction,
626 struct dma_attrs *attrs) 626 unsigned long attrs)
627{ 627{
628 if (iommu_fixed_is_weak == dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs)) 628 if (iommu_fixed_is_weak == (attrs & DMA_ATTR_WEAK_ORDERING))
629 return dma_direct_ops.map_sg(dev, sg, nents, direction, attrs); 629 return dma_direct_ops.map_sg(dev, sg, nents, direction, attrs);
630 else 630 else
631 return ppc_iommu_map_sg(dev, cell_get_iommu_table(dev), sg, 631 return ppc_iommu_map_sg(dev, cell_get_iommu_table(dev), sg,
@@ -635,9 +635,9 @@ static int dma_fixed_map_sg(struct device *dev, struct scatterlist *sg,
635 635
636static void dma_fixed_unmap_sg(struct device *dev, struct scatterlist *sg, 636static void dma_fixed_unmap_sg(struct device *dev, struct scatterlist *sg,
637 int nents, enum dma_data_direction direction, 637 int nents, enum dma_data_direction direction,
638 struct dma_attrs *attrs) 638 unsigned long attrs)
639{ 639{
640 if (iommu_fixed_is_weak == dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs)) 640 if (iommu_fixed_is_weak == (attrs & DMA_ATTR_WEAK_ORDERING))
641 dma_direct_ops.unmap_sg(dev, sg, nents, direction, attrs); 641 dma_direct_ops.unmap_sg(dev, sg, nents, direction, attrs);
642 else 642 else
643 ppc_iommu_unmap_sg(cell_get_iommu_table(dev), sg, nents, 643 ppc_iommu_unmap_sg(cell_get_iommu_table(dev), sg, nents,
@@ -1162,7 +1162,7 @@ static int __init setup_iommu_fixed(char *str)
1162 pciep = of_find_node_by_type(NULL, "pcie-endpoint"); 1162 pciep = of_find_node_by_type(NULL, "pcie-endpoint");
1163 1163
1164 if (strcmp(str, "weak") == 0 || (pciep && strcmp(str, "strong") != 0)) 1164 if (strcmp(str, "weak") == 0 || (pciep && strcmp(str, "strong") != 0))
1165 iommu_fixed_is_weak = 1; 1165 iommu_fixed_is_weak = DMA_ATTR_WEAK_ORDERING;
1166 1166
1167 of_node_put(pciep); 1167 of_node_put(pciep);
1168 1168
diff --git a/arch/powerpc/platforms/pasemi/iommu.c b/arch/powerpc/platforms/pasemi/iommu.c
index 43dd3fb514e0..309d9ccccd50 100644
--- a/arch/powerpc/platforms/pasemi/iommu.c
+++ b/arch/powerpc/platforms/pasemi/iommu.c
@@ -88,7 +88,7 @@ static int iommu_table_iobmap_inited;
88static int iobmap_build(struct iommu_table *tbl, long index, 88static int iobmap_build(struct iommu_table *tbl, long index,
89 long npages, unsigned long uaddr, 89 long npages, unsigned long uaddr,
90 enum dma_data_direction direction, 90 enum dma_data_direction direction,
91 struct dma_attrs *attrs) 91 unsigned long attrs)
92{ 92{
93 u32 *ip; 93 u32 *ip;
94 u32 rpn; 94 u32 rpn;
diff --git a/arch/powerpc/platforms/powernv/npu-dma.c b/arch/powerpc/platforms/powernv/npu-dma.c
index 4383a5ff82ba..00e1a0195c78 100644
--- a/arch/powerpc/platforms/powernv/npu-dma.c
+++ b/arch/powerpc/platforms/powernv/npu-dma.c
@@ -73,7 +73,7 @@ EXPORT_SYMBOL(pnv_pci_get_npu_dev);
73 73
74static void *dma_npu_alloc(struct device *dev, size_t size, 74static void *dma_npu_alloc(struct device *dev, size_t size,
75 dma_addr_t *dma_handle, gfp_t flag, 75 dma_addr_t *dma_handle, gfp_t flag,
76 struct dma_attrs *attrs) 76 unsigned long attrs)
77{ 77{
78 NPU_DMA_OP_UNSUPPORTED(); 78 NPU_DMA_OP_UNSUPPORTED();
79 return NULL; 79 return NULL;
@@ -81,7 +81,7 @@ static void *dma_npu_alloc(struct device *dev, size_t size,
81 81
82static void dma_npu_free(struct device *dev, size_t size, 82static void dma_npu_free(struct device *dev, size_t size,
83 void *vaddr, dma_addr_t dma_handle, 83 void *vaddr, dma_addr_t dma_handle,
84 struct dma_attrs *attrs) 84 unsigned long attrs)
85{ 85{
86 NPU_DMA_OP_UNSUPPORTED(); 86 NPU_DMA_OP_UNSUPPORTED();
87} 87}
@@ -89,7 +89,7 @@ static void dma_npu_free(struct device *dev, size_t size,
89static dma_addr_t dma_npu_map_page(struct device *dev, struct page *page, 89static dma_addr_t dma_npu_map_page(struct device *dev, struct page *page,
90 unsigned long offset, size_t size, 90 unsigned long offset, size_t size,
91 enum dma_data_direction direction, 91 enum dma_data_direction direction,
92 struct dma_attrs *attrs) 92 unsigned long attrs)
93{ 93{
94 NPU_DMA_OP_UNSUPPORTED(); 94 NPU_DMA_OP_UNSUPPORTED();
95 return 0; 95 return 0;
@@ -97,7 +97,7 @@ static dma_addr_t dma_npu_map_page(struct device *dev, struct page *page,
97 97
98static int dma_npu_map_sg(struct device *dev, struct scatterlist *sglist, 98static int dma_npu_map_sg(struct device *dev, struct scatterlist *sglist,
99 int nelems, enum dma_data_direction direction, 99 int nelems, enum dma_data_direction direction,
100 struct dma_attrs *attrs) 100 unsigned long attrs)
101{ 101{
102 NPU_DMA_OP_UNSUPPORTED(); 102 NPU_DMA_OP_UNSUPPORTED();
103 return 0; 103 return 0;
diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
index 891fc4a453df..6b9528307f62 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -1806,7 +1806,7 @@ static void pnv_pci_p7ioc_tce_invalidate(struct iommu_table *tbl,
1806static int pnv_ioda1_tce_build(struct iommu_table *tbl, long index, 1806static int pnv_ioda1_tce_build(struct iommu_table *tbl, long index,
1807 long npages, unsigned long uaddr, 1807 long npages, unsigned long uaddr,
1808 enum dma_data_direction direction, 1808 enum dma_data_direction direction,
1809 struct dma_attrs *attrs) 1809 unsigned long attrs)
1810{ 1810{
1811 int ret = pnv_tce_build(tbl, index, npages, uaddr, direction, 1811 int ret = pnv_tce_build(tbl, index, npages, uaddr, direction,
1812 attrs); 1812 attrs);
@@ -1950,7 +1950,7 @@ static void pnv_pci_ioda2_tce_invalidate(struct iommu_table *tbl,
1950static int pnv_ioda2_tce_build(struct iommu_table *tbl, long index, 1950static int pnv_ioda2_tce_build(struct iommu_table *tbl, long index,
1951 long npages, unsigned long uaddr, 1951 long npages, unsigned long uaddr,
1952 enum dma_data_direction direction, 1952 enum dma_data_direction direction,
1953 struct dma_attrs *attrs) 1953 unsigned long attrs)
1954{ 1954{
1955 int ret = pnv_tce_build(tbl, index, npages, uaddr, direction, 1955 int ret = pnv_tce_build(tbl, index, npages, uaddr, direction,
1956 attrs); 1956 attrs);
diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c
index 6701dd5ded20..a21d831c1114 100644
--- a/arch/powerpc/platforms/powernv/pci.c
+++ b/arch/powerpc/platforms/powernv/pci.c
@@ -704,7 +704,7 @@ static __be64 *pnv_tce(struct iommu_table *tbl, long idx)
704 704
705int pnv_tce_build(struct iommu_table *tbl, long index, long npages, 705int pnv_tce_build(struct iommu_table *tbl, long index, long npages,
706 unsigned long uaddr, enum dma_data_direction direction, 706 unsigned long uaddr, enum dma_data_direction direction,
707 struct dma_attrs *attrs) 707 unsigned long attrs)
708{ 708{
709 u64 proto_tce = iommu_direction_to_tce_perm(direction); 709 u64 proto_tce = iommu_direction_to_tce_perm(direction);
710 u64 rpn = __pa(uaddr) >> tbl->it_page_shift; 710 u64 rpn = __pa(uaddr) >> tbl->it_page_shift;
diff --git a/arch/powerpc/platforms/powernv/pci.h b/arch/powerpc/platforms/powernv/pci.h
index d088d4f06116..e64df7894d6e 100644
--- a/arch/powerpc/platforms/powernv/pci.h
+++ b/arch/powerpc/platforms/powernv/pci.h
@@ -181,7 +181,7 @@ struct pnv_phb {
181extern struct pci_ops pnv_pci_ops; 181extern struct pci_ops pnv_pci_ops;
182extern int pnv_tce_build(struct iommu_table *tbl, long index, long npages, 182extern int pnv_tce_build(struct iommu_table *tbl, long index, long npages,
183 unsigned long uaddr, enum dma_data_direction direction, 183 unsigned long uaddr, enum dma_data_direction direction,
184 struct dma_attrs *attrs); 184 unsigned long attrs);
185extern void pnv_tce_free(struct iommu_table *tbl, long index, long npages); 185extern void pnv_tce_free(struct iommu_table *tbl, long index, long npages);
186extern int pnv_tce_xchg(struct iommu_table *tbl, long index, 186extern int pnv_tce_xchg(struct iommu_table *tbl, long index,
187 unsigned long *hpa, enum dma_data_direction *direction); 187 unsigned long *hpa, enum dma_data_direction *direction);
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c
index 5606fe36faf2..8af1c15aef85 100644
--- a/arch/powerpc/platforms/ps3/system-bus.c
+++ b/arch/powerpc/platforms/ps3/system-bus.c
@@ -516,7 +516,7 @@ core_initcall(ps3_system_bus_init);
516 */ 516 */
517static void * ps3_alloc_coherent(struct device *_dev, size_t size, 517static void * ps3_alloc_coherent(struct device *_dev, size_t size,
518 dma_addr_t *dma_handle, gfp_t flag, 518 dma_addr_t *dma_handle, gfp_t flag,
519 struct dma_attrs *attrs) 519 unsigned long attrs)
520{ 520{
521 int result; 521 int result;
522 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); 522 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
@@ -553,7 +553,7 @@ clean_none:
553} 553}
554 554
555static void ps3_free_coherent(struct device *_dev, size_t size, void *vaddr, 555static void ps3_free_coherent(struct device *_dev, size_t size, void *vaddr,
556 dma_addr_t dma_handle, struct dma_attrs *attrs) 556 dma_addr_t dma_handle, unsigned long attrs)
557{ 557{
558 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); 558 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
559 559
@@ -569,7 +569,7 @@ static void ps3_free_coherent(struct device *_dev, size_t size, void *vaddr,
569 569
570static dma_addr_t ps3_sb_map_page(struct device *_dev, struct page *page, 570static dma_addr_t ps3_sb_map_page(struct device *_dev, struct page *page,
571 unsigned long offset, size_t size, enum dma_data_direction direction, 571 unsigned long offset, size_t size, enum dma_data_direction direction,
572 struct dma_attrs *attrs) 572 unsigned long attrs)
573{ 573{
574 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); 574 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
575 int result; 575 int result;
@@ -592,7 +592,7 @@ static dma_addr_t ps3_sb_map_page(struct device *_dev, struct page *page,
592static dma_addr_t ps3_ioc0_map_page(struct device *_dev, struct page *page, 592static dma_addr_t ps3_ioc0_map_page(struct device *_dev, struct page *page,
593 unsigned long offset, size_t size, 593 unsigned long offset, size_t size,
594 enum dma_data_direction direction, 594 enum dma_data_direction direction,
595 struct dma_attrs *attrs) 595 unsigned long attrs)
596{ 596{
597 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); 597 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
598 int result; 598 int result;
@@ -626,7 +626,7 @@ static dma_addr_t ps3_ioc0_map_page(struct device *_dev, struct page *page,
626} 626}
627 627
628static void ps3_unmap_page(struct device *_dev, dma_addr_t dma_addr, 628static void ps3_unmap_page(struct device *_dev, dma_addr_t dma_addr,
629 size_t size, enum dma_data_direction direction, struct dma_attrs *attrs) 629 size_t size, enum dma_data_direction direction, unsigned long attrs)
630{ 630{
631 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); 631 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
632 int result; 632 int result;
@@ -640,7 +640,7 @@ static void ps3_unmap_page(struct device *_dev, dma_addr_t dma_addr,
640} 640}
641 641
642static int ps3_sb_map_sg(struct device *_dev, struct scatterlist *sgl, 642static int ps3_sb_map_sg(struct device *_dev, struct scatterlist *sgl,
643 int nents, enum dma_data_direction direction, struct dma_attrs *attrs) 643 int nents, enum dma_data_direction direction, unsigned long attrs)
644{ 644{
645#if defined(CONFIG_PS3_DYNAMIC_DMA) 645#if defined(CONFIG_PS3_DYNAMIC_DMA)
646 BUG_ON("do"); 646 BUG_ON("do");
@@ -670,14 +670,14 @@ static int ps3_sb_map_sg(struct device *_dev, struct scatterlist *sgl,
670static int ps3_ioc0_map_sg(struct device *_dev, struct scatterlist *sg, 670static int ps3_ioc0_map_sg(struct device *_dev, struct scatterlist *sg,
671 int nents, 671 int nents,
672 enum dma_data_direction direction, 672 enum dma_data_direction direction,
673 struct dma_attrs *attrs) 673 unsigned long attrs)
674{ 674{
675 BUG(); 675 BUG();
676 return 0; 676 return 0;
677} 677}
678 678
679static void ps3_sb_unmap_sg(struct device *_dev, struct scatterlist *sg, 679static void ps3_sb_unmap_sg(struct device *_dev, struct scatterlist *sg,
680 int nents, enum dma_data_direction direction, struct dma_attrs *attrs) 680 int nents, enum dma_data_direction direction, unsigned long attrs)
681{ 681{
682#if defined(CONFIG_PS3_DYNAMIC_DMA) 682#if defined(CONFIG_PS3_DYNAMIC_DMA)
683 BUG_ON("do"); 683 BUG_ON("do");
@@ -686,7 +686,7 @@ static void ps3_sb_unmap_sg(struct device *_dev, struct scatterlist *sg,
686 686
687static void ps3_ioc0_unmap_sg(struct device *_dev, struct scatterlist *sg, 687static void ps3_ioc0_unmap_sg(struct device *_dev, struct scatterlist *sg,
688 int nents, enum dma_data_direction direction, 688 int nents, enum dma_data_direction direction,
689 struct dma_attrs *attrs) 689 unsigned long attrs)
690{ 690{
691 BUG(); 691 BUG();
692} 692}
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c
index 770a753b52c9..0024e451bb36 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -123,7 +123,7 @@ static void iommu_pseries_free_group(struct iommu_table_group *table_group,
123static int tce_build_pSeries(struct iommu_table *tbl, long index, 123static int tce_build_pSeries(struct iommu_table *tbl, long index,
124 long npages, unsigned long uaddr, 124 long npages, unsigned long uaddr,
125 enum dma_data_direction direction, 125 enum dma_data_direction direction,
126 struct dma_attrs *attrs) 126 unsigned long attrs)
127{ 127{
128 u64 proto_tce; 128 u64 proto_tce;
129 __be64 *tcep, *tces; 129 __be64 *tcep, *tces;
@@ -173,7 +173,7 @@ static void tce_freemulti_pSeriesLP(struct iommu_table*, long, long);
173static int tce_build_pSeriesLP(struct iommu_table *tbl, long tcenum, 173static int tce_build_pSeriesLP(struct iommu_table *tbl, long tcenum,
174 long npages, unsigned long uaddr, 174 long npages, unsigned long uaddr,
175 enum dma_data_direction direction, 175 enum dma_data_direction direction,
176 struct dma_attrs *attrs) 176 unsigned long attrs)
177{ 177{
178 u64 rc = 0; 178 u64 rc = 0;
179 u64 proto_tce, tce; 179 u64 proto_tce, tce;
@@ -216,7 +216,7 @@ static DEFINE_PER_CPU(__be64 *, tce_page);
216static int tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum, 216static int tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum,
217 long npages, unsigned long uaddr, 217 long npages, unsigned long uaddr,
218 enum dma_data_direction direction, 218 enum dma_data_direction direction,
219 struct dma_attrs *attrs) 219 unsigned long attrs)
220{ 220{
221 u64 rc = 0; 221 u64 rc = 0;
222 u64 proto_tce; 222 u64 proto_tce;
diff --git a/arch/powerpc/sysdev/dart_iommu.c b/arch/powerpc/sysdev/dart_iommu.c
index 26904f4879ec..3573d54b2770 100644
--- a/arch/powerpc/sysdev/dart_iommu.c
+++ b/arch/powerpc/sysdev/dart_iommu.c
@@ -185,7 +185,7 @@ static void dart_flush(struct iommu_table *tbl)
185static int dart_build(struct iommu_table *tbl, long index, 185static int dart_build(struct iommu_table *tbl, long index,
186 long npages, unsigned long uaddr, 186 long npages, unsigned long uaddr,
187 enum dma_data_direction direction, 187 enum dma_data_direction direction,
188 struct dma_attrs *attrs) 188 unsigned long attrs)
189{ 189{
190 unsigned int *dp, *orig_dp; 190 unsigned int *dp, *orig_dp;
191 unsigned int rpn; 191 unsigned int rpn;