Currently we are seeing these on PTL:

xe 0000:00:02.0: [drm] *ERROR* Timeout waiting for DDI BUF A to get active

These seem to be caused by writing ALPM registers while Panel Replay is
enabled.

Fix this by writing ALPM registers only when Panel Replay is about to be
enabled.

v2: take into account disabled hw in old_crtc_state

Fixes: 172757acd6f6 ("drm/i915/lobf: Add lobf enablement in post plane update")
Signed-off-by: Jouni Högander <[email protected]>
---
 drivers/gpu/drm/i915/display/intel_alpm.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_alpm.c 
b/drivers/gpu/drm/i915/display/intel_alpm.c
index 4d57bd517dfa..0d690d6716d8 100644
--- a/drivers/gpu/drm/i915/display/intel_alpm.c
+++ b/drivers/gpu/drm/i915/display/intel_alpm.c
@@ -472,10 +472,6 @@ void intel_alpm_post_plane_update(struct 
intel_atomic_state *state,
                intel_atomic_get_old_crtc_state(state, crtc);
        struct intel_encoder *encoder;
 
-       if ((!crtc_state->has_lobf ||
-            crtc_state->has_lobf == old_crtc_state->has_lobf) && 
!crtc_state->has_psr)
-               return;
-
        for_each_intel_encoder_mask(display->drm, encoder,
                                    crtc_state->uapi.encoder_mask) {
                struct intel_dp *intel_dp;
@@ -485,6 +481,11 @@ void intel_alpm_post_plane_update(struct 
intel_atomic_state *state,
 
                intel_dp = enc_to_intel_dp(encoder);
 
+               if ((!crtc_state->has_lobf && !intel_psr_needs_alpm(intel_dp, 
crtc_state)) ||
+                   ((old_crtc_state->has_lobf || 
intel_psr_needs_alpm(intel_dp, old_crtc_state)) &&
+                    old_crtc_state->hw.active))
+                       continue;
+
                if (intel_dp_is_edp(intel_dp)) {
                        intel_alpm_enable_sink(intel_dp, crtc_state);
                        intel_alpm_configure(intel_dp, crtc_state);
-- 
2.43.0

Reply via email to