This should functionally be a no-op for us, since we are managing our
SMMU directly (dma_map_ops is NULL), but it populates the dma_len/
dma_address's so that we can use them for setting up pgtable mappings.

Signed-off-by: Rob Clark <[email protected]>
---
 drivers/gpu/drm/msm/msm_gem.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index 181b9ad32672..72e3cd8bb1e7 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -219,6 +219,15 @@ static struct page **get_pages(struct drm_gem_object *obj)
                        goto error;
                }
 
+               ret = dma_map_sgtable(drm_dev_dma_dev(obj->dev),
+                                     msm_obj->sgt,
+                                     DMA_BIDIRECTIONAL,
+                                     DMA_ATTR_SKIP_CPU_SYNC);
+               if (ret) {
+                       DRM_DEV_ERROR(dev->dev, "could not map sgtable: %d\n", 
ret);
+                       goto error;
+               }
+
                update_device_mem(dev->dev_private, obj->size);
 
                /* For non-cached buffers, ensure the new pages are clean
@@ -233,6 +242,8 @@ static struct page **get_pages(struct drm_gem_object *obj)
        return msm_obj->pages;
 
 error:
+       if (!IS_ERR(msm_obj->sgt))
+               drm_prime_gem_destroy(obj, msm_obj->sgt);
        msm_obj->sgt = NULL;
 
        drm_gem_put_pages(obj, msm_obj->pages, false, false);
@@ -260,6 +271,11 @@ static void put_pages(struct drm_gem_object *obj)
                if (msm_obj->flags & MSM_BO_WC)
                        sync_for_cpu(msm_obj);
 
+               dma_unmap_sgtable(drm_dev_dma_dev(obj->dev),
+                                 msm_obj->sgt,
+                                 DMA_BIDIRECTIONAL,
+                                 DMA_ATTR_SKIP_CPU_SYNC);
+
                sg_free_table(msm_obj->sgt);
                kfree(msm_obj->sgt);
                msm_obj->sgt = NULL;
-- 
2.55.0

Reply via email to