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
