On 2026. szeptember 30., szerda 12:30:52 keleti államokbeli nyári idő [email protected] wrote: > From: Leo Li <[email protected]> > > [Why & How] > > Immediate (tearing) flips breaks self refresh state machine assumptions, > so disable PSR/Replay for them. > > Cc: [email protected] > Signed-off-by: Leo Li <[email protected]>
Patch fixes tearing updates on Strix Halo. Tested-by: Timur Kristóf <[email protected]> > --- > .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > 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 > 6e5dbe0bd82e5..d4c814eeb56d6 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > @@ -3764,6 +3764,13 @@ VISIBLE_IF_KUNIT void > amdgpu_dm_enable_self_refresh(struct amdgpu_display_manage struct > amdgpu_dm_connector *aconn = > (struct amdgpu_dm_connector *)acrtc_state->stream- >dm_stream_context; > > + if (!acrtc_state->base.async_flip) { > + amdgpu_dm_psr_set_event(dm, acrtc_state->stream, false, > + psr_event_immediate_flip, false); > + amdgpu_dm_replay_set_event(dm, acrtc_state->stream, false, > + replay_event_immediate_flip, false); > + } > + > /* Decrement skip count when SR is enabled and we're doing fast updates. > */ if (acrtc_state->update_type == UPDATE_TYPE_FAST && > (psr->psr_feature_enabled || pr->replay_feature_enabled)) { > @@ -4218,6 +4225,18 @@ static void amdgpu_dm_commit_planes(struct > drm_atomic_commit *state, spin_unlock_irqrestore(&pcrtc->dev->event_lock, > flags); > } > mutex_lock(&dm->dc_lock); > + /* > + * Tearing (immediate) flips cannot work with panel self- refresh > + * features. The event is cleared by > + * amdgpu_dm_enable_self_refresh() once async flips stop. > + */ > + if (immediate_flip) { > + dc_exit_ips_for_hw_access(dm->dc); > + amdgpu_dm_psr_set_event(dm, acrtc_state- >stream, true, > + psr_event_immediate_flip, true); > + amdgpu_dm_replay_set_event(dm, acrtc_state- >stream, true, > + replay_event_immediate_flip, true); > + } > update_planes_and_stream_adapter(dm->dc, > planes_count, > acrtc_state->stream,
