23 lines
1.0 KiB
Diff
23 lines
1.0 KiB
Diff
diff --git a/drivers/gpu/drm/i915/display/intel_dsb.c b/drivers/gpu/drm/i915/display/intel_dsb.c
|
|
--- a/drivers/gpu/drm/i915/display/intel_dsb.c
|
|
+++ b/drivers/gpu/drm/i915/display/intel_dsb.c
|
|
@@ -902,9 +902,17 @@ void intel_dsb_wait_for_delayed_vblank(struct intel_atomic_state *state,
|
|
* the hardware itself guarantees that we're SCL lines
|
|
* away from the delayed vblank, and we won't be inside
|
|
* the vmin safe window so this extra wait does nothing.
|
|
+ *
|
|
+ * Experimentally, DSB may observe a slightly stale
|
|
+ * PIPEDSL value. When the actual scanline has just reached
|
|
+ * safe_window_start, WAIT_DSL_OUT may complete immediately
|
|
+ * due to the stale value.
|
|
+ *
|
|
+ * Shift the start back by one scanline to ensure the wait
|
|
+ * window is entered reliably.
|
|
*/
|
|
intel_dsb_wait_scanline_out(state, dsb,
|
|
- intel_vrr_safe_window_start(crtc_state),
|
|
+ intel_vrr_safe_window_start(crtc_state) - 1,
|
|
intel_vrr_vmin_safe_window_end(crtc_state));
|
|
/*
|
|
* When the push is sent during vblank it will trigger
|