Commit 34955a1e authored by Aric Cyr's avatar Aric Cyr Committed by Alex Deucher

drm/amd/display: Don't adjust VRR unnecessarily

[why]
Do not need to spend time reprogramming DRR if there were no updates to
the parameters.

[how]
Compare the current stream state to the requested one to determine if an
update is required.

In amdgpu_dm the timing_changed flag is set but never used so can remove it.
Similarly, the stream update for VRR is done after dc_commit and should
not update its adjust field until after the update is completed.  The
adjust field is managed by dc_stream_adjust_vmin_vmax and should not be
manually updated in amdgpu_dm.
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Reviewed-by: default avatarAnthony Koo <Anthony.Koo@amd.com>
Acked-by: default avatarPavle Kotarac <Pavle.Kotarac@amd.com>
Signed-off-by: default avatarAric Cyr <aric.cyr@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 4bd09d74
...@@ -7370,11 +7370,6 @@ static void update_freesync_state_on_stream( ...@@ -7370,11 +7370,6 @@ static void update_freesync_state_on_stream(
&vrr_infopacket, &vrr_infopacket,
pack_sdp_v1_3); pack_sdp_v1_3);
new_crtc_state->freesync_timing_changed |=
(memcmp(&acrtc->dm_irq_params.vrr_params.adjust,
&vrr_params.adjust,
sizeof(vrr_params.adjust)) != 0);
new_crtc_state->freesync_vrr_info_changed |= new_crtc_state->freesync_vrr_info_changed |=
(memcmp(&new_crtc_state->vrr_infopacket, (memcmp(&new_crtc_state->vrr_infopacket,
&vrr_infopacket, &vrr_infopacket,
...@@ -7383,7 +7378,6 @@ static void update_freesync_state_on_stream( ...@@ -7383,7 +7378,6 @@ static void update_freesync_state_on_stream(
acrtc->dm_irq_params.vrr_params = vrr_params; acrtc->dm_irq_params.vrr_params = vrr_params;
new_crtc_state->vrr_infopacket = vrr_infopacket; new_crtc_state->vrr_infopacket = vrr_infopacket;
new_stream->adjust = acrtc->dm_irq_params.vrr_params.adjust;
new_stream->vrr_infopacket = vrr_infopacket; new_stream->vrr_infopacket = vrr_infopacket;
if (new_crtc_state->freesync_vrr_info_changed) if (new_crtc_state->freesync_vrr_info_changed)
...@@ -7446,10 +7440,6 @@ static void update_stream_irq_parameters( ...@@ -7446,10 +7440,6 @@ static void update_stream_irq_parameters(
new_stream, new_stream,
&config, &vrr_params); &config, &vrr_params);
new_crtc_state->freesync_timing_changed |=
(memcmp(&acrtc->dm_irq_params.vrr_params.adjust,
&vrr_params.adjust, sizeof(vrr_params.adjust)) != 0);
new_crtc_state->freesync_config = config; new_crtc_state->freesync_config = config;
/* Copy state for access from DM IRQ handler */ /* Copy state for access from DM IRQ handler */
acrtc->dm_irq_params.freesync_config = config; acrtc->dm_irq_params.freesync_config = config;
......
...@@ -681,7 +681,6 @@ struct dm_crtc_state { ...@@ -681,7 +681,6 @@ struct dm_crtc_state {
int crc_skip_count; int crc_skip_count;
bool freesync_timing_changed;
bool freesync_vrr_info_changed; bool freesync_vrr_info_changed;
bool dsc_force_changed; bool dsc_force_changed;
......
...@@ -401,6 +401,9 @@ bool dc_stream_adjust_vmin_vmax(struct dc *dc, ...@@ -401,6 +401,9 @@ bool dc_stream_adjust_vmin_vmax(struct dc *dc,
{ {
int i; int i;
if (memcmp(adjust, &stream->adjust, sizeof(struct dc_crtc_timing_adjust)) == 0)
return true;
stream->adjust.v_total_max = adjust->v_total_max; stream->adjust.v_total_max = adjust->v_total_max;
stream->adjust.v_total_mid = adjust->v_total_mid; stream->adjust.v_total_mid = adjust->v_total_mid;
stream->adjust.v_total_mid_frame_num = adjust->v_total_mid_frame_num; stream->adjust.v_total_mid_frame_num = adjust->v_total_mid_frame_num;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment