]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/amd/display: pause the workload setting in dm
authorKenneth Feng <kenneth.feng@amd.com>
Fri, 28 Mar 2025 02:34:57 +0000 (10:34 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 9 Apr 2025 14:53:11 +0000 (10:53 -0400)
Pause the workload setting in dm when doing idle optimization

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Kenneth Feng <kenneth.feng@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit b23f81c442ac33af0c808b4bb26333b881669bb7)

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c

index 87058271b00cc493737e60004ce3d5548f8c89b3..e8bdd7f0c4607999cbd0d6a55e839b550034c0da 100644 (file)
@@ -246,6 +246,8 @@ static void amdgpu_dm_crtc_vblank_control_worker(struct work_struct *work)
        struct vblank_control_work *vblank_work =
                container_of(work, struct vblank_control_work, work);
        struct amdgpu_display_manager *dm = vblank_work->dm;
+       struct amdgpu_device *adev = drm_to_adev(dm->ddev);
+       int r;
 
        mutex_lock(&dm->dc_lock);
 
@@ -273,8 +275,15 @@ static void amdgpu_dm_crtc_vblank_control_worker(struct work_struct *work)
                        vblank_work->acrtc->dm_irq_params.allow_sr_entry);
        }
 
-       if (dm->active_vblank_irq_count == 0)
+       if (dm->active_vblank_irq_count == 0) {
+               r = amdgpu_dpm_pause_power_profile(adev, true);
+               if (r)
+                       dev_warn(adev->dev, "failed to set default power profile mode\n");
                dc_allow_idle_optimizations(dm->dc, true);
+               r = amdgpu_dpm_pause_power_profile(adev, false);
+               if (r)
+                       dev_warn(adev->dev, "failed to restore the power profile mode\n");
+       }
 
        mutex_unlock(&dm->dc_lock);