From 51ca868e056af233abc58fa0626815d1d7426400 Mon Sep 17 00:00:00 2001 From: Mark Yao Date: Wed, 26 Jul 2017 15:44:54 +0800 Subject: [PATCH] drm/rockchip: gem: support force alloc cma buffer with flags Change-Id: I4749eac53609f865d0d4230364b1cbaf39ee0955 Signed-off-by: Mark Yao Signed-off-by: Sandy Huang --- drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c | 2 +- drivers/gpu/drm/rockchip/rockchip_drm_gem.c | 11 ++++++----- drivers/gpu/drm/rockchip/rockchip_drm_gem.h | 4 ++-- include/uapi/drm/rockchip_drm.h | 2 +- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c b/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c index 16f88339866f..065fa7fde336 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c @@ -58,7 +58,7 @@ static int rockchip_drm_fbdev_create(struct drm_fb_helper *helper, size = mode_cmd.pitches[0] * mode_cmd.height; - rk_obj = rockchip_gem_create_object(dev, size, true); + rk_obj = rockchip_gem_create_object(dev, size, true, 0); if (IS_ERR(rk_obj)) return -ENOMEM; diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c index 71c428e2d8f2..c508e10c76b2 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c @@ -619,7 +619,7 @@ static struct rockchip_gem_object * struct rockchip_gem_object * rockchip_gem_create_object(struct drm_device *drm, unsigned int size, - bool alloc_kmap) + bool alloc_kmap, unsigned int flags) { struct rockchip_gem_object *rk_obj; int ret; @@ -627,6 +627,7 @@ rockchip_gem_create_object(struct drm_device *drm, unsigned int size, rk_obj = rockchip_gem_alloc_object(drm, size); if (IS_ERR(rk_obj)) return rk_obj; + rk_obj->flags = flags; ret = rockchip_gem_alloc_buf(rk_obj, alloc_kmap); if (ret) @@ -675,13 +676,13 @@ void rockchip_gem_free_object(struct drm_gem_object *obj) static struct rockchip_gem_object * rockchip_gem_create_with_handle(struct drm_file *file_priv, struct drm_device *drm, unsigned int size, - unsigned int *handle) + unsigned int *handle, unsigned int flags) { struct rockchip_gem_object *rk_obj; struct drm_gem_object *obj; int ret; - rk_obj = rockchip_gem_create_object(drm, size, false); + rk_obj = rockchip_gem_create_object(drm, size, false, flags); if (IS_ERR(rk_obj)) return ERR_CAST(rk_obj); @@ -727,7 +728,7 @@ int rockchip_gem_dumb_create(struct drm_file *file_priv, args->size = args->pitch * args->height; rk_obj = rockchip_gem_create_with_handle(file_priv, dev, args->size, - &args->handle); + &args->handle, args->flags); return PTR_ERR_OR_ZERO(rk_obj); } @@ -873,7 +874,7 @@ int rockchip_gem_create_ioctl(struct drm_device *dev, void *data, struct rockchip_gem_object *rk_obj; rk_obj = rockchip_gem_create_with_handle(file_priv, dev, args->size, - &args->handle); + &args->handle, args->flags); return PTR_ERR_OR_ZERO(rk_obj); } diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.h b/drivers/gpu/drm/rockchip/rockchip_drm_gem.h index 1e666297dc71..e288890d609d 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.h @@ -52,8 +52,8 @@ int rockchip_gem_mmap_buf(struct drm_gem_object *obj, struct vm_area_struct *vma); struct rockchip_gem_object * - rockchip_gem_create_object(struct drm_device *drm, unsigned int size, - bool alloc_kmap); +rockchip_gem_create_object(struct drm_device *drm, unsigned int size, + bool alloc_kmap, unsigned int flags); void rockchip_gem_free_object(struct drm_gem_object *obj); diff --git a/include/uapi/drm/rockchip_drm.h b/include/uapi/drm/rockchip_drm.h index 27f4e2c8b7f5..089525dc47e3 100644 --- a/include/uapi/drm/rockchip_drm.h +++ b/include/uapi/drm/rockchip_drm.h @@ -35,7 +35,7 @@ enum drm_rockchip_gem_mem_type { ROCKCHIP_BO_WC = 1 << 2, ROCKCHIP_BO_SECURE = 1 << 3, ROCKCHIP_BO_MASK = ROCKCHIP_BO_CONTIG | ROCKCHIP_BO_CACHABLE | - ROCKCHIP_BO_WC + ROCKCHIP_BO_WC | ROCKCHIP_BO_SECURE, }; /**