summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
diff options
context:
space:
mode:
authorSolomon Chiu <solomon.chiu@amd.com>2021-07-28 00:20:30 +0800
committerAlex Deucher <alexander.deucher@amd.com>2021-08-05 21:18:00 -0400
commite88ebd83ed50aeaa46eb600ca3315c8eb2cdc4fb (patch)
tree909443c4298fad968d949f469c22dc135a396cca /drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
parenta5467ebd681fa2ba09cfa64689c5fc0773fd0634 (diff)
downloadlwn-e88ebd83ed50aeaa46eb600ca3315c8eb2cdc4fb.tar.gz
lwn-e88ebd83ed50aeaa46eb600ca3315c8eb2cdc4fb.zip
drm/amdgpu: Add preferred mode in modeset when freesync video mode's enabled.
[Why] With kernel module parameter "freesync_video" is enabled, if the mode is changed to preferred mode(the mode with highest rate), then Freesync fails because the preferred mode is treated as one of freesync video mode, and then be configurated as freesync video mode(fixed refresh rate). [How] Skip freesync fixed rate configurating when modeset to preferred mode. Signed-off-by: Solomon Chiu <solomon.chiu@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c')
-rw-r--r--drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c7
1 files changed, 6 insertions, 1 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 e4787934aa48..3e28f17c84fa 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -9616,7 +9616,12 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm,
} else if (amdgpu_freesync_vid_mode && aconnector &&
is_freesync_video_mode(&new_crtc_state->mode,
aconnector)) {
- set_freesync_fixed_config(dm_new_crtc_state);
+ struct drm_display_mode *high_mode;
+
+ high_mode = get_highest_refresh_rate_mode(aconnector, false);
+ if (!drm_mode_equal(&new_crtc_state->mode, high_mode)) {
+ set_freesync_fixed_config(dm_new_crtc_state);
+ }
}
ret = dm_atomic_get_state(state, &dm_state);