diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c index c508e10c76b2..c945597253cc 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c @@ -681,8 +681,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 089525dc47e3..aff0e49fb682 100644 --- a/include/uapi/drm/rockchip_drm.h +++ b/include/uapi/drm/rockchip_drm.h @@ -34,8 +34,10 @@ 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 | ROCKCHIP_BO_SECURE, + ROCKCHIP_BO_WC | ROCKCHIP_BO_SECURE | ROCKCHIP_BO_ALLOC_KMAP, }; /**