]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: support for DCC feature
authorLikun Gao <Likun.Gao@amd.com>
Thu, 11 Jan 2024 08:44:55 +0000 (16:44 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 14 Jun 2024 19:21:51 +0000 (15:21 -0400)
Deal with AMDGPU_GEM_CREATE_GFX12_DCC to set DCC bit
when needed.

Signed-off-by: Likun Gao <Likun.Gao@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c

index 3b67809a59bc6cbcb633f09e3f7cfcd3522eae30..1f22b4208729bf330096a7cdc6937541e26854c1 100644 (file)
@@ -334,6 +334,7 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
                      AMDGPU_GEM_CREATE_VM_ALWAYS_VALID |
                      AMDGPU_GEM_CREATE_EXPLICIT_SYNC |
                      AMDGPU_GEM_CREATE_ENCRYPTED |
+                     AMDGPU_GEM_CREATE_GFX12_DCC |
                      AMDGPU_GEM_CREATE_DISCARDABLE))
                return -EINVAL;
 
@@ -341,6 +342,11 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
        if (args->in.domains & ~AMDGPU_GEM_DOMAIN_MASK)
                return -EINVAL;
 
+       if ((flags & AMDGPU_GEM_CREATE_GFX12_DCC) &&
+           ((amdgpu_ip_version(adev, GC_HWIP, 0) < IP_VERSION(12, 0, 0)) ||
+            !(args->in.domains & AMDGPU_GEM_DOMAIN_VRAM)))
+               return -EINVAL;
+
        if (!amdgpu_is_tmz(adev) && (flags & AMDGPU_GEM_CREATE_ENCRYPTED)) {
                DRM_NOTE_ONCE("Cannot allocate secure buffer since TMZ is disabled\n");
                return -EINVAL;
index 16d3443f8a82b67763ca5bf21876e743a879ef65..be78507ec0d81bee4b42385d7ae7f98f3b3511ef 100644 (file)
@@ -532,6 +532,9 @@ static void gmc_v12_0_get_vm_pte(struct amdgpu_device *adev,
        is_system = (bo->tbo.resource->mem_type == TTM_PL_TT) ||
                (bo->tbo.resource->mem_type == AMDGPU_PL_PREEMPT);
 
+       if (bo && bo->flags & AMDGPU_GEM_CREATE_GFX12_DCC)
+               *flags |= AMDGPU_PTE_DCC;
+
        /* WA for HW bug */
        if (is_system || ((bo_adev != adev) && coherent))
                *flags = AMDGPU_PTE_MTYPE_GFX12(*flags, MTYPE_NC);