|
@@ -234,8 +234,17 @@ static int drm_gem_cma_mmap_obj(struct drm_gem_cma_object *cma_obj,
|
|
|
{
|
|
|
int ret;
|
|
|
|
|
|
- ret = remap_pfn_range(vma, vma->vm_start, cma_obj->paddr >> PAGE_SHIFT,
|
|
|
- vma->vm_end - vma->vm_start, vma->vm_page_prot);
|
|
|
+ /*
|
|
|
+ * Clear the VM_PFNMAP flag that was set by drm_gem_mmap(), and set the
|
|
|
+ * vm_pgoff (used as a fake buffer offset by DRM) to 0 as we want to map
|
|
|
+ * the whole buffer.
|
|
|
+ */
|
|
|
+ vma->vm_flags &= ~VM_PFNMAP;
|
|
|
+ vma->vm_pgoff = 0;
|
|
|
+
|
|
|
+ ret = dma_mmap_writecombine(cma_obj->base.dev->dev, vma,
|
|
|
+ cma_obj->vaddr, cma_obj->paddr,
|
|
|
+ vma->vm_end - vma->vm_start);
|
|
|
if (ret)
|
|
|
drm_gem_vm_close(vma);
|
|
|
|