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
