drm/rockchip: gem: add begin/end cpu access

Change-Id: Ie2c54addcf037cf501edcad76470e5e46c667b7e
Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
Signed-off-by: Sandy Huang <hjc@rock-chips.com>
This commit is contained in:
Mark Yao 2017-07-13 14:57:02 +08:00 committed by Tao Huang
parent 4b7491b317
commit c85af5021b
3 changed files with 37 additions and 1 deletions

View File

@ -990,6 +990,8 @@ static struct drm_driver rockchip_drm_driver = {
.gem_prime_vmap = rockchip_gem_prime_vmap,
.gem_prime_vunmap = rockchip_gem_prime_vunmap,
.gem_prime_mmap = rockchip_gem_mmap_buf,
.gem_prime_begin_cpu_access = rockchip_gem_prime_begin_cpu_access,
.gem_prime_end_cpu_access = rockchip_gem_prime_end_cpu_access,
.fops = &rockchip_drm_driver_fops,
.name = DRIVER_NAME,
.desc = DRIVER_DESC,

View File

@ -427,7 +427,7 @@ static void rockchip_gem_release_object(struct rockchip_gem_object *rk_obj)
kfree(rk_obj);
}
struct rockchip_gem_object *
static struct rockchip_gem_object *
rockchip_gem_alloc_object(struct drm_device *drm, unsigned int size)
{
struct rockchip_gem_object *rk_obj;
@ -697,3 +697,31 @@ void rockchip_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr)
/* Nothing to do if allocated by DMA mapping API. */
}
int rockchip_gem_prime_begin_cpu_access(struct drm_gem_object *obj,
enum dma_data_direction dir)
{
struct rockchip_gem_object *rk_obj = to_rockchip_obj(obj);
struct drm_device *drm = obj->dev;
if (!rk_obj->sgt)
return 0;
dma_sync_sg_for_cpu(drm->dev, rk_obj->sgt->sgl,
rk_obj->sgt->nents, dir);
return 0;
}
int rockchip_gem_prime_end_cpu_access(struct drm_gem_object *obj,
enum dma_data_direction dir)
{
struct rockchip_gem_object *rk_obj = to_rockchip_obj(obj);
struct drm_device *drm = obj->dev;
if (!rk_obj->sgt)
return 0;
dma_sync_sg_for_device(drm->dev, rk_obj->sgt->sgl,
rk_obj->sgt->nents, dir);
return 0;
}

View File

@ -58,4 +58,10 @@ void rockchip_gem_free_object(struct drm_gem_object *obj);
int rockchip_gem_dumb_create(struct drm_file *file_priv,
struct drm_device *dev,
struct drm_mode_create_dumb *args);
int rockchip_gem_prime_begin_cpu_access(struct drm_gem_object *obj,
enum dma_data_direction dir);
int rockchip_gem_prime_end_cpu_access(struct drm_gem_object *obj,
enum dma_data_direction dir);
#endif /* _ROCKCHIP_DRM_GEM_H */