summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKalyan Thota <quic_kalyant@quicinc.com>2022-10-17 02:03:14 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2022-10-24 20:43:03 -0700
commit7fed172d015eb78efa3d1f9f6b7d7ba05a4a72e5 (patch)
treed46045207aa464d96d1976cefdb23ca94d131dcf
parentfea6946acde2fbe8575e4c6f57b285ebf277658f (diff)
downloaddisplay-drivers-7fed172d015eb78efa3d1f9f6b7d7ba05a4a72e5.tar.gz
disp: msm: sync pages for buffer of type cached
synchronize scatter/gather mapping for CPU and device for CACHED msm_objs. Change-Id: I6d653e05afbec24537a61bbd304b32fa0d07813c Signed-off-by: Kalyan Thota <quic_kalyant@quicinc.com>
-rw-r--r--msm/msm_gem.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/msm/msm_gem.c b/msm/msm_gem.c
index 99e2ca2c..cda2fd20 100644
--- a/msm/msm_gem.c
+++ b/msm/msm_gem.c
@@ -435,20 +435,20 @@ static int msm_gem_get_iova_locked(struct drm_gem_object *obj,
{
struct msm_gem_object *msm_obj = to_msm_bo(obj);
struct msm_gem_vma *vma;
+ struct device *dev;
int ret = 0;
WARN_ON(!mutex_is_locked(&msm_obj->lock));
vma = lookup_vma(obj, aspace);
+ dev = msm_gem_get_aspace_device(aspace);
if (!vma) {
struct page **pages;
- struct device *dev;
struct dma_buf *dmabuf;
bool reattach = false;
unsigned long dma_map_attrs;
- dev = msm_gem_get_aspace_device(aspace);
if ((dev && obj->import_attach) &&
((dev != obj->import_attach->dev) ||
msm_obj->obj_dirty)) {
@@ -531,6 +531,10 @@ static int msm_gem_get_iova_locked(struct drm_gem_object *obj,
msm_gem_add_obj_to_aspace_active_list(aspace, obj);
mutex_unlock(&aspace->list_lock);
}
+ if (dev && !dev_is_dma_coherent(dev) && (msm_obj->flags & MSM_BO_CACHED)){
+ dma_sync_sg_for_device(dev, msm_obj->sgt->sgl,
+ msm_obj->sgt->nents, DMA_BIDIRECTIONAL);
+ }
return 0;