aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/rockchip
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 /drivers/gpu/drm/rockchip
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 'drivers/gpu/drm/rockchip')
-rw-r--r--drivers/gpu/drm/rockchip/rockchip_drm_gem.c17
-rw-r--r--drivers/gpu/drm/rockchip/rockchip_drm_gem.h2
2 files changed, 8 insertions, 11 deletions
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
index 059e902f872d..b70f9423379c 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
@@ -17,8 +17,6 @@
17#include <drm/drm_gem.h> 17#include <drm/drm_gem.h>
18#include <drm/drm_vma_manager.h> 18#include <drm/drm_vma_manager.h>
19 19
20#include <linux/dma-attrs.h>
21
22#include "rockchip_drm_drv.h" 20#include "rockchip_drm_drv.h"
23#include "rockchip_drm_gem.h" 21#include "rockchip_drm_gem.h"
24 22
@@ -28,15 +26,14 @@ static int rockchip_gem_alloc_buf(struct rockchip_gem_object *rk_obj,
28 struct drm_gem_object *obj = &rk_obj->base; 26 struct drm_gem_object *obj = &rk_obj->base;
29 struct drm_device *drm = obj->dev; 27 struct drm_device *drm = obj->dev;
30 28
31 init_dma_attrs(&rk_obj->dma_attrs); 29 rk_obj->dma_attrs = DMA_ATTR_WRITE_COMBINE;
32 dma_set_attr(DMA_ATTR_WRITE_COMBINE, &rk_obj->dma_attrs);
33 30
34 if (!alloc_kmap) 31 if (!alloc_kmap)
35 dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, &rk_obj->dma_attrs); 32 rk_obj->dma_attrs |= DMA_ATTR_NO_KERNEL_MAPPING;
36 33
37 rk_obj->kvaddr = dma_alloc_attrs(drm->dev, obj->size, 34 rk_obj->kvaddr = dma_alloc_attrs(drm->dev, obj->size,
38 &rk_obj->dma_addr, GFP_KERNEL, 35 &rk_obj->dma_addr, GFP_KERNEL,
39 &rk_obj->dma_attrs); 36 rk_obj->dma_attrs);
40 if (!rk_obj->kvaddr) { 37 if (!rk_obj->kvaddr) {
41 DRM_ERROR("failed to allocate %zu byte dma buffer", obj->size); 38 DRM_ERROR("failed to allocate %zu byte dma buffer", obj->size);
42 return -ENOMEM; 39 return -ENOMEM;
@@ -51,7 +48,7 @@ static void rockchip_gem_free_buf(struct rockchip_gem_object *rk_obj)
51 struct drm_device *drm = obj->dev; 48 struct drm_device *drm = obj->dev;
52 49
53 dma_free_attrs(drm->dev, obj->size, rk_obj->kvaddr, rk_obj->dma_addr, 50 dma_free_attrs(drm->dev, obj->size, rk_obj->kvaddr, rk_obj->dma_addr,
54 &rk_obj->dma_attrs); 51 rk_obj->dma_attrs);
55} 52}
56 53
57static int rockchip_drm_gem_object_mmap(struct drm_gem_object *obj, 54static int rockchip_drm_gem_object_mmap(struct drm_gem_object *obj,
@@ -70,7 +67,7 @@ static int rockchip_drm_gem_object_mmap(struct drm_gem_object *obj,
70 vma->vm_pgoff = 0; 67 vma->vm_pgoff = 0;
71 68
72 ret = dma_mmap_attrs(drm->dev, vma, rk_obj->kvaddr, rk_obj->dma_addr, 69 ret = dma_mmap_attrs(drm->dev, vma, rk_obj->kvaddr, rk_obj->dma_addr,
73 obj->size, &rk_obj->dma_attrs); 70 obj->size, rk_obj->dma_attrs);
74 if (ret) 71 if (ret)
75 drm_gem_vm_close(vma); 72 drm_gem_vm_close(vma);
76 73
@@ -262,7 +259,7 @@ struct sg_table *rockchip_gem_prime_get_sg_table(struct drm_gem_object *obj)
262 259
263 ret = dma_get_sgtable_attrs(drm->dev, sgt, rk_obj->kvaddr, 260 ret = dma_get_sgtable_attrs(drm->dev, sgt, rk_obj->kvaddr,
264 rk_obj->dma_addr, obj->size, 261 rk_obj->dma_addr, obj->size,
265 &rk_obj->dma_attrs); 262 rk_obj->dma_attrs);
266 if (ret) { 263 if (ret) {
267 DRM_ERROR("failed to allocate sgt, %d\n", ret); 264 DRM_ERROR("failed to allocate sgt, %d\n", ret);
268 kfree(sgt); 265 kfree(sgt);
@@ -276,7 +273,7 @@ void *rockchip_gem_prime_vmap(struct drm_gem_object *obj)
276{ 273{
277 struct rockchip_gem_object *rk_obj = to_rockchip_obj(obj); 274 struct rockchip_gem_object *rk_obj = to_rockchip_obj(obj);
278 275
279 if (dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, &rk_obj->dma_attrs)) 276 if (rk_obj->dma_attrs & DMA_ATTR_NO_KERNEL_MAPPING)
280 return NULL; 277 return NULL;
281 278
282 return rk_obj->kvaddr; 279 return rk_obj->kvaddr;
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.h b/drivers/gpu/drm/rockchip/rockchip_drm_gem.h
index ad22618473a4..18b3488db4ec 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.h
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.h
@@ -23,7 +23,7 @@ struct rockchip_gem_object {
23 23
24 void *kvaddr; 24 void *kvaddr;
25 dma_addr_t dma_addr; 25 dma_addr_t dma_addr;
26 struct dma_attrs dma_attrs; 26 unsigned long dma_attrs;
27}; 27};
28 28
29struct sg_table *rockchip_gem_prime_get_sg_table(struct drm_gem_object *obj); 29struct sg_table *rockchip_gem_prime_get_sg_table(struct drm_gem_object *obj);