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: Daniel Wheeler <daniel.wheeler@amd.com> Reviewed-by: Anthony Koo <Anthony.Koo@amd.com> Acked-by: Pavle Kotarac <Pavle.Kotarac@amd.com> Signed-off-by: Aric Cyr <aric.cyr@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
4bd09d7481
commit
34955a1e79
@ -7370,11 +7370,6 @@ static void update_freesync_state_on_stream(
|
||||
&vrr_infopacket,
|
||||
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 |=
|
||||
(memcmp(&new_crtc_state->vrr_infopacket,
|
||||
&vrr_infopacket,
|
||||
@ -7383,7 +7378,6 @@ static void update_freesync_state_on_stream(
|
||||
acrtc->dm_irq_params.vrr_params = vrr_params;
|
||||
new_crtc_state->vrr_infopacket = vrr_infopacket;
|
||||
|
||||
new_stream->adjust = acrtc->dm_irq_params.vrr_params.adjust;
|
||||
new_stream->vrr_infopacket = vrr_infopacket;
|
||||
|
||||
if (new_crtc_state->freesync_vrr_info_changed)
|
||||
@ -7446,10 +7440,6 @@ static void update_stream_irq_parameters(
|
||||
new_stream,
|
||||
&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;
|
||||
/* Copy state for access from DM IRQ handler */
|
||||
acrtc->dm_irq_params.freesync_config = config;
|
||||
|
@ -681,7 +681,6 @@ struct dm_crtc_state {
|
||||
|
||||
int crc_skip_count;
|
||||
|
||||
bool freesync_timing_changed;
|
||||
bool freesync_vrr_info_changed;
|
||||
|
||||
bool dsc_force_changed;
|
||||
|
@ -401,6 +401,9 @@ bool dc_stream_adjust_vmin_vmax(struct dc *dc,
|
||||
{
|
||||
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_mid = adjust->v_total_mid;
|
||||
stream->adjust.v_total_mid_frame_num = adjust->v_total_mid_frame_num;
|
||||
|
Loading…
x
Reference in New Issue
Block a user