On Fri, Jan 08, 2021 at 10:43:34AM +0100, Thomas Zimmermann wrote:
Damage handling in gm12u320 requires a short-term mapping of the source BO. Use drm_gem_shmem_vmap_local().
Signed-off-by: Thomas Zimmermann tzimmermann@suse.de
drivers/gpu/drm/tiny/gm12u320.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/tiny/gm12u320.c b/drivers/gpu/drm/tiny/gm12u320.c index 33f65f4626e5..b0c6e350f2b3 100644 --- a/drivers/gpu/drm/tiny/gm12u320.c +++ b/drivers/gpu/drm/tiny/gm12u320.c @@ -265,11 +265,16 @@ static void gm12u320_copy_fb_to_blocks(struct gm12u320_device *gm12u320) y1 = gm12u320->fb_update.rect.y1; y2 = gm12u320->fb_update.rect.y2;
- ret = drm_gem_shmem_vmap(fb->obj[0], &map);
- ret = dma_resv_lock(fb->obj[0]->resv, NULL); if (ret) {
GM12U320_ERR("failed to vmap fb: %d\n", ret);
goto put_fb; }GM12U320_ERR("failed to reserve fb: %d\n", ret);
- ret = drm_gem_shmem_vmap_local(fb->obj[0], &map);
- if (ret) {
GM12U320_ERR("failed to vmap fb: %d\n", ret);
goto unlock_resv;
- } vaddr = map.vaddr; /* TODO: Use mapping abstraction properly */
if (fb->obj[0]->import_attach) { @@ -321,8 +326,11 @@ static void gm12u320_copy_fb_to_blocks(struct gm12u320_device *gm12u320) if (ret) GM12U320_ERR("dma_buf_end_cpu_access err: %d\n", ret); }
+unlock_resv:
- dma_resv_unlock(fb->obj[0]->resv);
Unlock before vunmap. -Daniel
vunmap:
- drm_gem_shmem_vunmap(fb->obj[0], &map);
- drm_gem_shmem_vunmap_local(fb->obj[0], &map);
put_fb: drm_framebuffer_put(fb); gm12u320->fb_update.fb = NULL; -- 2.29.2