Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/i915/display: update the wa_22014263786
@ 2025-12-16 14:05 Vinod Govindapillai
  2025-12-16 16:04 ` ✗ i915.CI.BAT: failure for " Patchwork
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Vinod Govindapillai @ 2025-12-16 14:05 UTC (permalink / raw)
  To: intel-xe, intel-gfx; +Cc: vinod.govindapillai, matthew.d.roper, ville.syrjala

For DG2, wa_22014263786 is applicable only if the number of active
planes is greater than 1 in pipe A and pipe B. Cursor planes and
any planes on pipe C or pipe D are not considered for this.

Bspec: 54077, 72197
Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
---
 .../gpu/drm/i915/display/intel_display_wa.c   | 29 ++++++++++++++++++-
 drivers/gpu/drm/i915/display/intel_fbc.c      |  6 ++++
 2 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
index a00af39f7538..ffc2356283aa 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.c
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
@@ -7,6 +7,7 @@
 
 #include "i915_reg.h"
 #include "intel_de.h"
+#include "intel_display_types.h"
 #include "intel_display_core.h"
 #include "intel_display_regs.h"
 #include "intel_display_wa.h"
@@ -53,6 +54,32 @@ static bool intel_display_needs_wa_16025573575(struct intel_display *display)
 		DISPLAY_VERx100(display) == 3500;
 }
 
+static bool intel_display_needs_wa_22014263786(struct intel_display *display)
+{
+	if (!IS_DISPLAY_VERx100(display, 1100, 1400))
+		return false;
+
+	if (display->platform.dg2) {
+		u8 pipe_mask = PIPE_A | PIPE_B;
+		int num_active_planes = 0;
+		struct intel_crtc *crtc;
+
+		for_each_intel_crtc_in_pipe_mask(display->drm, crtc, pipe_mask) {
+			const struct intel_crtc_state *crtc_state =
+				to_intel_crtc_state(crtc->base.state);
+			u8 active_planes =
+				crtc_state->active_planes & ~BIT(PLANE_CURSOR);
+
+			num_active_planes += hweight8(active_planes);
+		}
+
+		if (num_active_planes <= 1)
+			return false;
+	}
+
+	return true;
+}
+
 /*
  * Wa_14011503117:
  * Fixes: Before enabling the scaler DE fatal error is masked
@@ -69,7 +96,7 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
 	case INTEL_DISPLAY_WA_14011503117:
 		return DISPLAY_VER(display) == 13;
 	case INTEL_DISPLAY_WA_22014263786:
-		return IS_DISPLAY_VERx100(display, 1100, 1400);
+		return intel_display_needs_wa_22014263786(display);
 	case INTEL_DISPLAY_WA_15018326506:
 		return display->platform.battlemage;
 	case INTEL_DISPLAY_WA_14025769978:
diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c
index fef2f35ff1e9..5b0a83cb5386 100644
--- a/drivers/gpu/drm/i915/display/intel_fbc.c
+++ b/drivers/gpu/drm/i915/display/intel_fbc.c
@@ -944,10 +944,16 @@ static void intel_fbc_program_workarounds(struct intel_fbc *fbc)
 	 * Wa_22014263786
 	 * Fixes: Screen flicker with FBC and Package C state enabled
 	 * Workaround: Forced SLB invalidation before start of new frame.
+	 *             For DG2, wa is applied only if the number of planes
+	 *             in PIPE A and PIPE B is > 1. If the wa condition is
+	 *             not met, this chicken bit must be unset for DG2.
 	 */
 	if (intel_display_wa(display, 22014263786))
 		intel_de_rmw(display, ILK_DPFC_CHICKEN(fbc->id),
 			     0, DPFC_CHICKEN_FORCE_SLB_INVALIDATION);
+	else if (display->platform.dg2)
+		intel_de_rmw(display, ILK_DPFC_CHICKEN(fbc->id),
+			     DPFC_CHICKEN_FORCE_SLB_INVALIDATION, 0);
 
 	/* wa_18038517565 Disable DPFC clock gating before FBC enable */
 	if (display->platform.dg2 || DISPLAY_VER(display) >= 14)
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* ✗ i915.CI.BAT: failure for drm/i915/display: update the wa_22014263786
  2025-12-16 14:05 [PATCH] drm/i915/display: update the wa_22014263786 Vinod Govindapillai
@ 2025-12-16 16:04 ` Patchwork
  2025-12-16 23:44 ` [PATCH] " Matt Roper
  2025-12-17 14:45 ` ✗ Fi.CI.BUILD: failure for drm/i915/display: update the wa_22014263786 (rev2) Patchwork
  2 siblings, 0 replies; 5+ messages in thread
From: Patchwork @ 2025-12-16 16:04 UTC (permalink / raw)
  To: Vinod Govindapillai; +Cc: intel-gfx

[-- Attachment #1: Type: text/plain, Size: 7280 bytes --]

== Series Details ==

Series: drm/i915/display: update the wa_22014263786
URL   : https://patchwork.freedesktop.org/series/159109/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_17692 -> Patchwork_159109v1
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_159109v1 absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_159109v1, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/index.html

Participating hosts (42 -> 41)
------------------------------

  Additional (1): bat-adls-6 
  Missing    (2): bat-dg2-13 fi-snb-2520m 

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in Patchwork_159109v1:

### IGT changes ###

#### Possible regressions ####

  * igt@i915_pm_rpm@module-reload:
    - bat-arlh-2:         [PASS][1] -> [INCOMPLETE][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17692/bat-arlh-2/igt@i915_pm_rpm@module-reload.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/bat-arlh-2/igt@i915_pm_rpm@module-reload.html

  
Known issues
------------

  Here are the changes found in Patchwork_159109v1 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_lmem_swapping@parallel-random-engines:
    - bat-adls-6:         NOTRUN -> [SKIP][3] ([i915#4613]) +3 other tests skip
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/bat-adls-6/igt@gem_lmem_swapping@parallel-random-engines.html

  * igt@gem_tiled_pread_basic:
    - bat-adls-6:         NOTRUN -> [SKIP][4] ([i915#3282])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/bat-adls-6/igt@gem_tiled_pread_basic.html

  * igt@i915_selftest@live@guc:
    - bat-twl-1:          [PASS][5] -> [ABORT][6] ([i915#14365])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17692/bat-twl-1/igt@i915_selftest@live@guc.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/bat-twl-1/igt@i915_selftest@live@guc.html

  * igt@intel_hwmon@hwmon-read:
    - bat-adls-6:         NOTRUN -> [SKIP][7] ([i915#7707]) +1 other test skip
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/bat-adls-6/igt@intel_hwmon@hwmon-read.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - bat-adls-6:         NOTRUN -> [SKIP][8] ([i915#4103]) +1 other test skip
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/bat-adls-6/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_dsc@dsc-basic:
    - bat-adls-6:         NOTRUN -> [SKIP][9] ([i915#3555] / [i915#3840])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/bat-adls-6/igt@kms_dsc@dsc-basic.html

  * igt@kms_force_connector_basic@force-load-detect:
    - bat-adls-6:         NOTRUN -> [SKIP][10]
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/bat-adls-6/igt@kms_force_connector_basic@force-load-detect.html

  * igt@kms_pm_backlight@basic-brightness:
    - bat-adls-6:         NOTRUN -> [SKIP][11] ([i915#5354])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/bat-adls-6/igt@kms_pm_backlight@basic-brightness.html

  * igt@kms_psr@psr-primary-mmap-gtt:
    - bat-adls-6:         NOTRUN -> [SKIP][12] ([i915#1072] / [i915#9732]) +3 other tests skip
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/bat-adls-6/igt@kms_psr@psr-primary-mmap-gtt.html

  * igt@kms_setmode@basic-clone-single-crtc:
    - bat-adls-6:         NOTRUN -> [SKIP][13] ([i915#3555])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/bat-adls-6/igt@kms_setmode@basic-clone-single-crtc.html

  * igt@prime_vgem@basic-fence-read:
    - bat-adls-6:         NOTRUN -> [SKIP][14] ([i915#3291]) +2 other tests skip
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/bat-adls-6/igt@prime_vgem@basic-fence-read.html

  
#### Possible fixes ####

  * igt@i915_selftest@live@workarounds:
    - bat-dg2-14:         [DMESG-FAIL][15] ([i915#12061]) -> [PASS][16] +1 other test pass
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17692/bat-dg2-14/igt@i915_selftest@live@workarounds.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/bat-dg2-14/igt@i915_selftest@live@workarounds.html
    - bat-mtlp-9:         [DMESG-FAIL][17] ([i915#12061]) -> [PASS][18] +1 other test pass
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17692/bat-mtlp-9/igt@i915_selftest@live@workarounds.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/bat-mtlp-9/igt@i915_selftest@live@workarounds.html

  
#### Warnings ####

  * igt@i915_selftest@live:
    - bat-atsm-1:         [DMESG-FAIL][19] ([i915#12061] / [i915#14204]) -> [DMESG-FAIL][20] ([i915#12061] / [i915#13929])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17692/bat-atsm-1/igt@i915_selftest@live.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/bat-atsm-1/igt@i915_selftest@live.html

  * igt@i915_selftest@live@mman:
    - bat-atsm-1:         [DMESG-FAIL][21] ([i915#14204]) -> [DMESG-FAIL][22] ([i915#13929])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17692/bat-atsm-1/igt@i915_selftest@live@mman.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/bat-atsm-1/igt@i915_selftest@live@mman.html

  
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
  [i915#13929]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13929
  [i915#14204]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14204
  [i915#14365]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14365
  [i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
  [i915#3291]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3291
  [i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
  [i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840
  [i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
  [i915#7707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7707
  [i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732


Build changes
-------------

  * Linux: CI_DRM_17692 -> Patchwork_159109v1

  CI-20190529: 20190529
  CI_DRM_17692: 2dc4a4ece453df925f995df5eac747a29081c180 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_8667: 2d7ec9a36c550c48af4bdd6e748f6753369ab8ff @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_159109v1: 2dc4a4ece453df925f995df5eac747a29081c180 @ git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_159109v1/index.html

[-- Attachment #2: Type: text/html, Size: 8713 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] drm/i915/display: update the wa_22014263786
  2025-12-16 14:05 [PATCH] drm/i915/display: update the wa_22014263786 Vinod Govindapillai
  2025-12-16 16:04 ` ✗ i915.CI.BAT: failure for " Patchwork
@ 2025-12-16 23:44 ` Matt Roper
  2025-12-17 14:31   ` Govindapillai, Vinod
  2025-12-17 14:45 ` ✗ Fi.CI.BUILD: failure for drm/i915/display: update the wa_22014263786 (rev2) Patchwork
  2 siblings, 1 reply; 5+ messages in thread
From: Matt Roper @ 2025-12-16 23:44 UTC (permalink / raw)
  To: Vinod Govindapillai; +Cc: intel-xe, intel-gfx, ville.syrjala

On Tue, Dec 16, 2025 at 04:05:08PM +0200, Vinod Govindapillai wrote:
> For DG2, wa_22014263786 is applicable only if the number of active
> planes is greater than 1 in pipe A and pipe B. Cursor planes and
> any planes on pipe C or pipe D are not considered for this.
> 
> Bspec: 54077, 72197
> Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
> ---
>  .../gpu/drm/i915/display/intel_display_wa.c   | 29 ++++++++++++++++++-
>  drivers/gpu/drm/i915/display/intel_fbc.c      |  6 ++++
>  2 files changed, 34 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
> index a00af39f7538..ffc2356283aa 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> @@ -7,6 +7,7 @@
>  
>  #include "i915_reg.h"
>  #include "intel_de.h"
> +#include "intel_display_types.h"
>  #include "intel_display_core.h"
>  #include "intel_display_regs.h"
>  #include "intel_display_wa.h"
> @@ -53,6 +54,32 @@ static bool intel_display_needs_wa_16025573575(struct intel_display *display)
>  		DISPLAY_VERx100(display) == 3500;
>  }
>  
> +static bool intel_display_needs_wa_22014263786(struct intel_display *display)
> +{
> +	if (!IS_DISPLAY_VERx100(display, 1100, 1400))
> +		return false;
> +
> +	if (display->platform.dg2) {
> +		u8 pipe_mask = PIPE_A | PIPE_B;
> +		int num_active_planes = 0;
> +		struct intel_crtc *crtc;
> +
> +		for_each_intel_crtc_in_pipe_mask(display->drm, crtc, pipe_mask) {
> +			const struct intel_crtc_state *crtc_state =
> +				to_intel_crtc_state(crtc->base.state);
> +			u8 active_planes =
> +				crtc_state->active_planes & ~BIT(PLANE_CURSOR);
> +
> +			num_active_planes += hweight8(active_planes);
> +		}
> +
> +		if (num_active_planes <= 1)
> +			return false;
> +	}
> +
> +	return true;
> +}
> +
>  /*
>   * Wa_14011503117:
>   * Fixes: Before enabling the scaler DE fatal error is masked
> @@ -69,7 +96,7 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
>  	case INTEL_DISPLAY_WA_14011503117:
>  		return DISPLAY_VER(display) == 13;
>  	case INTEL_DISPLAY_WA_22014263786:
> -		return IS_DISPLAY_VERx100(display, 1100, 1400);
> +		return intel_display_needs_wa_22014263786(display);
>  	case INTEL_DISPLAY_WA_15018326506:
>  		return display->platform.battlemage;
>  	case INTEL_DISPLAY_WA_14025769978:
> diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c
> index fef2f35ff1e9..5b0a83cb5386 100644
> --- a/drivers/gpu/drm/i915/display/intel_fbc.c
> +++ b/drivers/gpu/drm/i915/display/intel_fbc.c
> @@ -944,10 +944,16 @@ static void intel_fbc_program_workarounds(struct intel_fbc *fbc)
>  	 * Wa_22014263786
>  	 * Fixes: Screen flicker with FBC and Package C state enabled
>  	 * Workaround: Forced SLB invalidation before start of new frame.
> +	 *             For DG2, wa is applied only if the number of planes
> +	 *             in PIPE A and PIPE B is > 1. If the wa condition is
> +	 *             not met, this chicken bit must be unset for DG2.

I might be misremembering the FBC flows in the driver now, but I don't
think we come back to this point and re-evaluate the workaround once FBC
has been enabled as other planes get enabled/disabled by later atomic
transactions do we?  E.g., if we initially just have a single plane
enabled on pipes A/B, we'll apply the workaround as expected.  But then
if we later turn on an additional plane are we going to notice that the
conditions have changed and that we now need to disable the workaround?
Or alternatively if we have two planes turned on initially (so
workaround not applied), but then we disable the one that FBC isn't
bound to are we going to notice that we need to come back and apply the
workaround?


Matt

>  	 */
>  	if (intel_display_wa(display, 22014263786))
>  		intel_de_rmw(display, ILK_DPFC_CHICKEN(fbc->id),
>  			     0, DPFC_CHICKEN_FORCE_SLB_INVALIDATION);
> +	else if (display->platform.dg2)
> +		intel_de_rmw(display, ILK_DPFC_CHICKEN(fbc->id),
> +			     DPFC_CHICKEN_FORCE_SLB_INVALIDATION, 0);
>  
>  	/* wa_18038517565 Disable DPFC clock gating before FBC enable */
>  	if (display->platform.dg2 || DISPLAY_VER(display) >= 14)
> -- 
> 2.43.0
> 

-- 
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] drm/i915/display: update the wa_22014263786
  2025-12-16 23:44 ` [PATCH] " Matt Roper
@ 2025-12-17 14:31   ` Govindapillai, Vinod
  0 siblings, 0 replies; 5+ messages in thread
From: Govindapillai, Vinod @ 2025-12-17 14:31 UTC (permalink / raw)
  To: Roper, Matthew D
  Cc: intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	Syrjala, Ville

On Tue, 2025-12-16 at 15:44 -0800, Matt Roper wrote:
> On Tue, Dec 16, 2025 at 04:05:08PM +0200, Vinod Govindapillai wrote:
> > For DG2, wa_22014263786 is applicable only if the number of active
> > planes is greater than 1 in pipe A and pipe B. Cursor planes and
> > any planes on pipe C or pipe D are not considered for this.
> > 
> > Bspec: 54077, 72197
> > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
> > ---
> >  .../gpu/drm/i915/display/intel_display_wa.c   | 29
> > ++++++++++++++++++-
> >  drivers/gpu/drm/i915/display/intel_fbc.c      |  6 ++++
> >  2 files changed, 34 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c
> > b/drivers/gpu/drm/i915/display/intel_display_wa.c
> > index a00af39f7538..ffc2356283aa 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> > @@ -7,6 +7,7 @@
> >  
> >  #include "i915_reg.h"
> >  #include "intel_de.h"
> > +#include "intel_display_types.h"
> >  #include "intel_display_core.h"
> >  #include "intel_display_regs.h"
> >  #include "intel_display_wa.h"
> > @@ -53,6 +54,32 @@ static bool
> > intel_display_needs_wa_16025573575(struct intel_display *display)
> >  		DISPLAY_VERx100(display) == 3500;
> >  }
> >  
> > +static bool intel_display_needs_wa_22014263786(struct
> > intel_display *display)
> > +{
> > +	if (!IS_DISPLAY_VERx100(display, 1100, 1400))
> > +		return false;
> > +
> > +	if (display->platform.dg2) {
> > +		u8 pipe_mask = PIPE_A | PIPE_B;
> > +		int num_active_planes = 0;
> > +		struct intel_crtc *crtc;
> > +
> > +		for_each_intel_crtc_in_pipe_mask(display->drm,
> > crtc, pipe_mask) {
> > +			const struct intel_crtc_state *crtc_state
> > =
> > +				to_intel_crtc_state(crtc-
> > >base.state);
> > +			u8 active_planes =
> > +				crtc_state->active_planes &
> > ~BIT(PLANE_CURSOR);
> > +
> > +			num_active_planes +=
> > hweight8(active_planes);
> > +		}
> > +
> > +		if (num_active_planes <= 1)
> > +			return false;
> > +	}
> > +
> > +	return true;
> > +}
> > +
> >  /*
> >   * Wa_14011503117:
> >   * Fixes: Before enabling the scaler DE fatal error is masked
> > @@ -69,7 +96,7 @@ bool __intel_display_wa(struct intel_display
> > *display, enum intel_display_wa wa,
> >  	case INTEL_DISPLAY_WA_14011503117:
> >  		return DISPLAY_VER(display) == 13;
> >  	case INTEL_DISPLAY_WA_22014263786:
> > -		return IS_DISPLAY_VERx100(display, 1100, 1400);
> > +		return
> > intel_display_needs_wa_22014263786(display);
> >  	case INTEL_DISPLAY_WA_15018326506:
> >  		return display->platform.battlemage;
> >  	case INTEL_DISPLAY_WA_14025769978:
> > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c
> > b/drivers/gpu/drm/i915/display/intel_fbc.c
> > index fef2f35ff1e9..5b0a83cb5386 100644
> > --- a/drivers/gpu/drm/i915/display/intel_fbc.c
> > +++ b/drivers/gpu/drm/i915/display/intel_fbc.c
> > @@ -944,10 +944,16 @@ static void
> > intel_fbc_program_workarounds(struct intel_fbc *fbc)
> >  	 * Wa_22014263786
> >  	 * Fixes: Screen flicker with FBC and Package C state
> > enabled
> >  	 * Workaround: Forced SLB invalidation before start of new
> > frame.
> > +	 *             For DG2, wa is applied only if the number
> > of planes
> > +	 *             in PIPE A and PIPE B is > 1. If the wa
> > condition is
> > +	 *             not met, this chicken bit must be unset for
> > DG2.
> 
> I might be misremembering the FBC flows in the driver now, but I
> don't
> think we come back to this point and re-evaluate the workaround once
> FBC
> has been enabled as other planes get enabled/disabled by later atomic
> transactions do we?  E.g., if we initially just have a single plane
> enabled on pipes A/B, we'll apply the workaround as expected.  But
> then
> if we later turn on an additional plane are we going to notice that
> the
> conditions have changed and that we now need to disable the
> workaround?
> Or alternatively if we have two planes turned on initially (so
> workaround not applied), but then we disable the one that FBC isn't
> bound to are we going to notice that we need to come back and apply
> the
> workaround?
> 
> 
> Matt

Hi Matt,

Ah.. sorry. I sent a wrong version for review :( This one is an earlier
version and later I clarified from HW team about resetting that bit in
case of plane count reduces. Earlier the assumption was that this bit
need to be set before enabling the fbc. 

Well, in the one I was supposed to sent, this WA was moved as part of
intel_plane_update_noarm() like below so that it gets called for each
plane updates. 

--- a/drivers/gpu/drm/i915/display/intel_plane.c
+++ b/drivers/gpu/drm/i915/display/intel_plane.c
@@ -856,9 +856,13 @@ void intel_plane_update_noarm(struct intel_dsb
*dsb,
 
        trace_intel_plane_update_noarm(plane_state, crtc);
 
-       if (plane->fbc)
+       if (plane->fbc){
                intel_fbc_dirty_rect_update_noarm(dsb, plane);
 
+               /* TODO: check if group these into
intel_fbc_update_noarm()? */
+               intel_fbc_handle_workaround(dsb, plane);
+       }
+

But I see that this will still miss the other plane updates as this
will be called only for the plane update for the plane with the fbc.

I will need to recheck this still!

May be split the wa into parts where intel_wa_22014263786() checks on
the non DG2 case and call that as part of the program_workaround() as
it is now. And later on if (dg2 && number of planes in pipe A and B)
set/reset this bit from intel_atomic_commit_tail()?

Thanks
Vinod


> 
> >  	 */
> >  	if (intel_display_wa(display, 22014263786))
> >  		intel_de_rmw(display, ILK_DPFC_CHICKEN(fbc->id),
> >  			     0,
> > DPFC_CHICKEN_FORCE_SLB_INVALIDATION);
> > +	else if (display->platform.dg2)
> > +		intel_de_rmw(display, ILK_DPFC_CHICKEN(fbc->id),
> > +			     DPFC_CHICKEN_FORCE_SLB_INVALIDATION,
> > 0);
> >  
> >  	/* wa_18038517565 Disable DPFC clock gating before FBC
> > enable */
> >  	if (display->platform.dg2 || DISPLAY_VER(display) >= 14)
> > -- 
> > 2.43.0
> > 
> 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* ✗ Fi.CI.BUILD: failure for drm/i915/display: update the wa_22014263786 (rev2)
  2025-12-16 14:05 [PATCH] drm/i915/display: update the wa_22014263786 Vinod Govindapillai
  2025-12-16 16:04 ` ✗ i915.CI.BAT: failure for " Patchwork
  2025-12-16 23:44 ` [PATCH] " Matt Roper
@ 2025-12-17 14:45 ` Patchwork
  2 siblings, 0 replies; 5+ messages in thread
From: Patchwork @ 2025-12-17 14:45 UTC (permalink / raw)
  To: Govindapillai, Vinod; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/display: update the wa_22014263786 (rev2)
URL   : https://patchwork.freedesktop.org/series/159109/
State : failure

== Summary ==

Error: patch https://patchwork.freedesktop.org/api/1.0/series/159109/revisions/2/mbox/ not applied
Applying: drm/i915/display: update the wa_22014263786
error: corrupt patch at line 4
error: could not build fake ancestor
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 drm/i915/display: update the wa_22014263786
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Build failed, no error log produced



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-12-17 14:45 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-16 14:05 [PATCH] drm/i915/display: update the wa_22014263786 Vinod Govindapillai
2025-12-16 16:04 ` ✗ i915.CI.BAT: failure for " Patchwork
2025-12-16 23:44 ` [PATCH] " Matt Roper
2025-12-17 14:31   ` Govindapillai, Vinod
2025-12-17 14:45 ` ✗ Fi.CI.BUILD: failure for drm/i915/display: update the wa_22014263786 (rev2) Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox