When enabling LRR/seamless MN disable LOBF first and re-enable
afterwards.
- pre_plane_update: if LOBF was enabled, run pre even when new==old
  whenever update_lrr || update_m_n is set (to disable LOBF before the
  transition).
- post_plane_update: run post to re-enable LOBF after the transition.

Signed-off-by: Ankit Nautiyal <[email protected]>
---
 drivers/gpu/drm/i915/display/intel_alpm.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_alpm.c 
b/drivers/gpu/drm/i915/display/intel_alpm.c
index db2b9608f7f8..e3079cf7af9d 100644
--- a/drivers/gpu/drm/i915/display/intel_alpm.c
+++ b/drivers/gpu/drm/i915/display/intel_alpm.c
@@ -462,7 +462,9 @@ void intel_alpm_pre_plane_update(struct intel_atomic_state 
*state,
                return;
 
        if (!old_crtc_state->has_lobf ||
-           crtc_state->has_lobf == old_crtc_state->has_lobf)
+           (crtc_state->has_lobf == old_crtc_state->has_lobf &&
+            !crtc_state->update_lrr &&
+            !crtc_state->update_m_n))
                return;
 
        for_each_intel_encoder_mask(display->drm, encoder,
@@ -517,7 +519,9 @@ void intel_alpm_post_plane_update(struct intel_atomic_state 
*state,
                return;
 
        if (!crtc_state->has_lobf ||
-           crtc_state->has_lobf == old_crtc_state->has_lobf)
+           (crtc_state->has_lobf == old_crtc_state->has_lobf &&
+            !crtc_state->update_lrr &&
+            !crtc_state->update_m_n))
                return;
 
        for_each_intel_encoder_mask(display->drm, encoder,
-- 
2.45.2

Reply via email to