Re: [PATCH v2] drm/i915/display: Ensure a non-zero safe window from PTL onwards

"Borah, Chaitanya Kumar" <[email protected]> Wed, 22 Jul 2026 12:16:35 +0530
Newsgroups org.freedesktop.lists.intel-gfx,org.freedesktop.lists.intel-xe
Message-ID <[email protected]>

On 7/22/2026 11:54 AM, Ankit Nautiyal wrote:
>  From PTL onwards, the set context latency can be in the vactive region,
> letting the safe window start some lines before the vblank start. The DSB
> waits on this safe window instead of vblank (bits [15:14] select the safe
> window signal from the DPT unit to start the DMA engine).
> 
> With modes that have a smaller vblank region, the computed guardband is
> clamped to the vblank length, making the undelayed and delayed vblank
> coincide. If the SCL is also 0, the 'safe window' becomes effectively 0,
> and the DSB configured to wait for it gets stalled, since the hardware
> never signals the safe window, leading to:
> 
>    *ERROR* [CRTC:159:pipe A] flip_done timed out
>    *ERROR* [CRTC:159:pipe A] DSB 0 timed out waiting for idle
> 
> Keep the set context latency at a minimum of 1 to avoid this.
> 
> v2: Fix the bit numbers and correct the commit message. (Chaitanya)
> 

It still looks *safe* to me ;) the commit message is good now.

Reviewed-by: Chaitanya Kumar Borah <[email protected]>

> Fixes: 4a68c7516c57 ("drm/i915/dsb: Use safe window path when VRR TG is used")
> Cc: Ville Syrjälä <[email protected]>
> Signed-off-by: Ankit Nautiyal <[email protected]>
> Assisted-by: GitHub-Copilot:Claude-Opus-4.8
> ---
>   drivers/gpu/drm/i915/display/intel_display.c | 13 +++++++++++++
>   1 file changed, 13 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 38763a6802c5..0822a2194c7f 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -2459,6 +2459,19 @@ static int intel_crtc_set_context_latency(struct intel_crtc_state *crtc_state)
>   	set_context_latency = max(set_context_latency,
>   				  intel_psr_min_set_context_latency(crtc_state));
>   
> +	/*
> +	 * From PTL onwards, the set context latency can be in the vactive
> +	 * region, letting the safe window start some lines before the vblank
> +	 * start. With modes that have a smaller vblank region, the computed
> +	 * guardband is clamped to the vblank length, making the undelayed and
> +	 * delayed vblank coincide. If the SCL is also 0, the 'safe window'
> +	 * becomes effectively 0, and the DSB configured to wait for it gets
> +	 * stalled, since the hardware never signals the safe window. Keep the
> +	 * set context latency at a minimum of 1 to avoid this.
> +	 */
> +	if (DISPLAY_VER(display) >= 30)
> +		set_context_latency = max(1, set_context_latency);
> +
>   	return set_context_latency;
>   }
>