OSDN Git Service

drm/amdgpu: Set GTT_USWC flag to enable freesync v2
authorShashank Sharma <shashank.sharma@amd.com>
Sat, 13 Feb 2021 16:37:24 +0000 (22:07 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 24 Mar 2021 03:01:42 +0000 (23:01 -0400)
This patch sets 'AMDGPU_GEM_CREATE_CPU_GTT_USWC' as input
parameter flag, during object creation of an imported DMA
buffer.

In absence of this flag:
1. Function amdgpu_display_supported_domains() doesn't add
   AMDGPU_GEM_DOMAIN_GTT as supported domain.
2. Due to which, Function amdgpu_display_user_framebuffer_create()
   refuses to create framebuffer for imported DMA buffers.
3. Due to which, AddFB() IOCTL fails.
4. Due to which, amdgpu_present_check_flip() check fails in DDX
5. Due to which DDX driver doesn't allow flips (goes to blitting)
6. Due to which setting Freesync/VRR property fails for PRIME buffers.

So, this patch finally enables Freesync with PRIME buffer offloading.

v2 (chk): instead of just checking the flag we copy it over if the
          exporter is an amdgpu device as well.

Signed-off-by: Shashank Sharma <shashank.sharma@amd.com>
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c

index f813386..e0c4f7c 100644 (file)
@@ -429,14 +429,22 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
 {
        struct dma_resv *resv = dma_buf->resv;
        struct amdgpu_device *adev = drm_to_adev(dev);
-       struct amdgpu_bo *bo;
        struct drm_gem_object *gobj;
+       struct amdgpu_bo *bo;
+       uint64_t flags = 0;
        int ret;
 
        dma_resv_lock(resv, NULL);
+
+       if (dma_buf->ops == &amdgpu_dmabuf_ops) {
+               struct amdgpu_bo *other = gem_to_amdgpu_bo(dma_buf->priv);
+
+               flags |= other->flags & AMDGPU_GEM_CREATE_CPU_GTT_USWC;
+       }
+
        ret = amdgpu_gem_object_create(adev, dma_buf->size, PAGE_SIZE,
-                       AMDGPU_GEM_DOMAIN_CPU,
-                       0, ttm_bo_type_sg, resv, &gobj);
+                                      AMDGPU_GEM_DOMAIN_CPU, flags,
+                                      ttm_bo_type_sg, resv, &gobj);
        if (ret)
                goto error;