drm/rockchip: drm gem support flags ROCKCHIP_BO_DMA32

Userland can use the flag ROCKCHIP_BO_DMA32 to tell drm gem to get pages
limit to 4GiB memory.

Signed-off-by: Jianqun Xu <jay.xu@rock-chips.com>
Change-Id: Icdc77efae71ed6272f425ad93a07c8d3e98a9ca4
This commit is contained in:
Jianqun Xu
2022-06-24 09:27:50 +08:00
committed by Tao Huang
parent e5ce8d29d8
commit 54d5477652
2 changed files with 12 additions and 4 deletions

View File

@@ -606,7 +606,8 @@ static void rockchip_gem_release_object(struct rockchip_gem_object *rk_obj)
}
static struct rockchip_gem_object *
rockchip_gem_alloc_object(struct drm_device *drm, unsigned int size)
rockchip_gem_alloc_object(struct drm_device *drm, unsigned int size,
unsigned int flags)
{
struct address_space *mapping;
struct rockchip_gem_object *rk_obj;
@@ -617,6 +618,10 @@ static struct rockchip_gem_object *
#else
gfp_t gfp_mask = GFP_HIGHUSER | __GFP_RECLAIMABLE;
#endif
if (flags & ROCKCHIP_BO_DMA32)
gfp_mask |= __GFP_DMA32;
size = round_up(size, PAGE_SIZE);
rk_obj = kzalloc(sizeof(*rk_obj), GFP_KERNEL);
@@ -640,7 +645,7 @@ rockchip_gem_create_object(struct drm_device *drm, unsigned int size,
struct rockchip_gem_object *rk_obj;
int ret;
rk_obj = rockchip_gem_alloc_object(drm, size);
rk_obj = rockchip_gem_alloc_object(drm, size, flags);
if (IS_ERR(rk_obj))
return rk_obj;
rk_obj->flags = flags;
@@ -847,7 +852,7 @@ rockchip_gem_prime_import_sg_table(struct drm_device *drm,
struct rockchip_gem_object *rk_obj;
int ret;
rk_obj = rockchip_gem_alloc_object(drm, attach->dmabuf->size);
rk_obj = rockchip_gem_alloc_object(drm, attach->dmabuf->size, 0);
if (IS_ERR(rk_obj))
return ERR_CAST(rk_obj);

View File

@@ -36,8 +36,11 @@ enum drm_rockchip_gem_mem_type {
ROCKCHIP_BO_SECURE = 1 << 3,
/* keep kmap for cma buffer or alloc kmap for other type memory */
ROCKCHIP_BO_ALLOC_KMAP = 1 << 4,
/* alloc page with gfp_dma32 */
ROCKCHIP_BO_DMA32 = 1 << 5,
ROCKCHIP_BO_MASK = ROCKCHIP_BO_CONTIG | ROCKCHIP_BO_CACHABLE |
ROCKCHIP_BO_WC | ROCKCHIP_BO_SECURE | ROCKCHIP_BO_ALLOC_KMAP,
ROCKCHIP_BO_WC | ROCKCHIP_BO_SECURE | ROCKCHIP_BO_ALLOC_KMAP |
ROCKCHIP_BO_DMA32,
};
/**