From: Aurabindo Pillai <aurabindo.pil...@amd.com>

[Why]
FAMS2 expects vmin/vmax to be updated in the case when freesync is
off, but supported. But we only update it when freesync is enabled.

[How]
Change the vsync handler such that dc_stream_adjust_vmin_vmax() its called
irrespective of whether freesync is enabled. If freesync is supported,
then there is no harm in updating vmin/vmax registers.

Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3546

Reviewed-by: ChiaHsuan Chung <chiahsuan.ch...@amd.com>
Signed-off-by: Aurabindo Pillai <aurabindo.pil...@amd.com>
Signed-off-by: Ray Wu <ray...@amd.com>
---
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c    | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index 6cf02d2f536f..bd71f911e279 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -675,15 +675,21 @@ static void dm_crtc_high_irq(void *interrupt_params)
        spin_lock_irqsave(&adev_to_drm(adev)->event_lock, flags);
 
        if (acrtc->dm_irq_params.stream &&
-           acrtc->dm_irq_params.vrr_params.supported &&
-           acrtc->dm_irq_params.freesync_config.state ==
-                   VRR_STATE_ACTIVE_VARIABLE) {
+               acrtc->dm_irq_params.vrr_params.supported) {
+               bool replay_en = 
acrtc->dm_irq_params.stream->link->replay_settings.replay_feature_enabled;
+               bool psr_en = 
acrtc->dm_irq_params.stream->link->psr_settings.psr_feature_enabled;
+               bool fs_active_var_en = 
acrtc->dm_irq_params.freesync_config.state == VRR_STATE_ACTIVE_VARIABLE;
+
                mod_freesync_handle_v_update(adev->dm.freesync_module,
                                             acrtc->dm_irq_params.stream,
                                             &acrtc->dm_irq_params.vrr_params);
 
-               dc_stream_adjust_vmin_vmax(adev->dm.dc, 
acrtc->dm_irq_params.stream,
-                                          
&acrtc->dm_irq_params.vrr_params.adjust);
+               /* update vmin_vmax only if freesync is enabled, or only if PSR 
and REPLAY are disabled */
+               if (fs_active_var_en || (!fs_active_var_en && !replay_en && 
!psr_en)) {
+                       dc_stream_adjust_vmin_vmax(adev->dm.dc,
+                                       acrtc->dm_irq_params.stream,
+                                       
&acrtc->dm_irq_params.vrr_params.adjust);
+               }
        }
 
        /*
-- 
2.43.0

Reply via email to