]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
drm/amdgpu: handle default profile on on devices without fullscreen 3D
authorAlex Deucher <alexander.deucher@amd.com>
Fri, 18 Oct 2024 16:35:51 +0000 (12:35 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 22 Oct 2024 22:21:51 +0000 (18:21 -0400)
Some devices do not support fullscreen 3D.

v2: Make the check generic.

Fixes: ec1aab7816b0 ("drm/amdgpu/swsmu: default to fullscreen 3D profile for dGPUs")
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: Kenneth Feng <kenneth.feng@amd.com>
Cc: Lijo Lazar <lijo.lazar@amd.com>
(cherry picked from commit 1cdd67510e54e3832f14a885dbf5858584558650)

drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c

index 9ad9cf7a9c98663a3043aa3baecea6b83095f028..80e60ea2d11e3c6bbfc629edea9161627eec5f83 100644 (file)
@@ -1234,6 +1234,14 @@ static void smu_init_xgmi_plpd_mode(struct smu_context *smu)
        }
 }
 
+static bool smu_is_workload_profile_available(struct smu_context *smu,
+                                             u32 profile)
+{
+       if (profile >= PP_SMC_POWER_PROFILE_COUNT)
+               return false;
+       return smu->workload_map && smu->workload_map[profile].valid_mapping;
+}
+
 static int smu_sw_init(void *handle)
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
@@ -1265,7 +1273,8 @@ static int smu_sw_init(void *handle)
        smu->workload_prority[PP_SMC_POWER_PROFILE_COMPUTE] = 5;
        smu->workload_prority[PP_SMC_POWER_PROFILE_CUSTOM] = 6;
 
-       if (smu->is_apu)
+       if (smu->is_apu ||
+           !smu_is_workload_profile_available(smu, PP_SMC_POWER_PROFILE_FULLSCREEN3D))
                smu->workload_mask = 1 << smu->workload_prority[PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT];
        else
                smu->workload_mask = 1 << smu->workload_prority[PP_SMC_POWER_PROFILE_FULLSCREEN3D];