diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c index ef49d5e46736..fd98fc2443c1 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c @@ -721,8 +721,9 @@ rockchip_gem_create_with_handle(struct drm_file *file_priv, struct rockchip_gem_object *rk_obj; struct drm_gem_object *obj; int ret; + bool alloc_kmap = flags & ROCKCHIP_BO_ALLOC_KMAP ? true : false; - rk_obj = rockchip_gem_create_object(drm, size, false, flags); + rk_obj = rockchip_gem_create_object(drm, size, alloc_kmap, flags); if (IS_ERR(rk_obj)) return ERR_CAST(rk_obj); diff --git a/include/uapi/drm/rockchip_drm.h b/include/uapi/drm/rockchip_drm.h index 6b7fb33d6379..a4625642736d 100644 --- a/include/uapi/drm/rockchip_drm.h +++ b/include/uapi/drm/rockchip_drm.h @@ -26,6 +26,8 @@ enum drm_rockchip_gem_mem_type { /* write-combine mapping. */ ROCKCHIP_BO_WC = 1 << 2, ROCKCHIP_BO_SECURE = 1 << 3, + /* keep kmap for cma buffer or alloc kmap for other type memory */ + ROCKCHIP_BO_ALLOC_KMAP = 1 << 4, ROCKCHIP_BO_MASK = ROCKCHIP_BO_CONTIG | ROCKCHIP_BO_CACHABLE | ROCKCHIP_BO_WC };