[PATCH] drm/i915/fbc: fix the implementation of wa_18038517565

Hogander, Jouni jouni.hogander at intel.com
Wed Jul 30 06:30:17 UTC 2025


On Tue, 2025-07-29 at 15:46 +0300, Vinod Govindapillai wrote:
> As per the wa_18038517565, we need to disable FBC compressor
> clock gating before enabling FBC and enable after disabling
> FBC. Placing the enabling of clock gating in the fbc deactivate
> function can make the above wa logic go wrong in case of
> frontbuffer rendering FBC mechanism. FBC deactivate can get
> called during fb invalidate and then the corresponding FBC
> activate can get called without properly disabling the clock
> gating and can result in compression stalled. So move the
> enable clock gating at the end of one FBC session after FBC
> is completely disabled for a pipe.

Reviewed-by: Jouni Högander <jouni.hogander at intel.com>

> 
> Bspec: 74212, 72197, 69741, 65555
> Fixes: 010363c46189 ("drm/i915/display: implement wa_18038517565")
> Signed-off-by: Vinod Govindapillai <vinod.govindapillai at intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_fbc.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c
> b/drivers/gpu/drm/i915/display/intel_fbc.c
> index e2e03af520b2..f82d392f1e22 100644
> --- a/drivers/gpu/drm/i915/display/intel_fbc.c
> +++ b/drivers/gpu/drm/i915/display/intel_fbc.c
> @@ -552,10 +552,6 @@ static void ilk_fbc_deactivate(struct intel_fbc
> *fbc)
>  	if (dpfc_ctl & DPFC_CTL_EN) {
>  		dpfc_ctl &= ~DPFC_CTL_EN;
>  		intel_de_write(display, ILK_DPFC_CONTROL(fbc->id),
> dpfc_ctl);
> -
> -		/* wa_18038517565 Enable DPFC clock gating after FBC
> disable */
> -		if (display->platform.dg2 || DISPLAY_VER(display) >=
> 14)
> -			fbc_compressor_clkgate_disable_wa(fbc,
> false);
>  	}
>  }
>  
> @@ -1710,6 +1706,10 @@ static void __intel_fbc_disable(struct
> intel_fbc *fbc)
>  
>  	__intel_fbc_cleanup_cfb(fbc);
>  
> +	/* wa_18038517565 Enable DPFC clock gating after FBC disable
> */
> +	if (display->platform.dg2 || DISPLAY_VER(display) >= 14)
> +		fbc_compressor_clkgate_disable_wa(fbc, false);
> +
>  	fbc->state.plane = NULL;
>  	fbc->flip_pending = false;
>  	fbc->busy_bits = 0;



More information about the Intel-gfx mailing list