/* release the scatterlist cache */
        if (attach->dma_dir != DMA_NONE)
-               dma_unmap_sg(db_attach->dev, sgt->sgl, sgt->orig_nents,
-                       attach->dma_dir);
+               /*
+                * Cache sync can be skipped here, as the vb2_dc memory is
+                * allocated from device coherent memory, which means the
+                * memory locations do not require any explicit cache
+                * maintenance prior or after being used by the device.
+                */
+               dma_unmap_sg_attrs(db_attach->dev, sgt->sgl, sgt->orig_nents,
+                                  attach->dma_dir, DMA_ATTR_SKIP_CPU_SYNC);
        sg_free_table(sgt);
        kfree(attach);
        db_attach->priv = NULL;
 
        /* release any previous cache */
        if (attach->dma_dir != DMA_NONE) {
-               dma_unmap_sg(db_attach->dev, sgt->sgl, sgt->orig_nents,
-                       attach->dma_dir);
+               dma_unmap_sg_attrs(db_attach->dev, sgt->sgl, sgt->orig_nents,
+                                  attach->dma_dir, DMA_ATTR_SKIP_CPU_SYNC);
                attach->dma_dir = DMA_NONE;
        }
 
-       /* mapping to the client with new direction */
-       sgt->nents = dma_map_sg(db_attach->dev, sgt->sgl, sgt->orig_nents,
-                               dma_dir);
+       /*
+        * mapping to the client with new direction, no cache sync
+        * required see comment in vb2_dc_dmabuf_ops_detach()
+        */
+       sgt->nents = dma_map_sg_attrs(db_attach->dev, sgt->sgl, sgt->orig_nents,
+                                     dma_dir, DMA_ATTR_SKIP_CPU_SYNC);
        if (!sgt->nents) {
                pr_err("failed to map scatterlist\n");
                mutex_unlock(lock);