Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework
@ 2026-02-12 18:45 Luca Coelho
  2026-02-12 18:45 ` [PATCH v2 01/15] drm/i915/display: convert audio workaround to " Luca Coelho
                   ` (17 more replies)
  0 siblings, 18 replies; 39+ messages in thread
From: Luca Coelho @ 2026-02-12 18:45 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

Hi,

This series convert the "low hanging fruits" of workaround checks to
the new framework.  Some of the workarounds check other values that
are not in the intel_display structure, so they don't directly fit in
the workaround framework and will be left for later.

In v2:
   * Added intel-xe in Cc for xe CI (Jani);
   * Removed NOP intel-overlay.c patch (Jani).

Please review.

Cheers,
Luca.


Luca Coelho (15):
  drm/i915/display: convert audio workaround to new framework
  drm/i915/display: convert W/As in intel_display_power.c to new
    framework
  drm/i915/display: convert W/As in intel_cdclk.c to new framework
  drm/i915/display: convert W/As in intel_cursor.c to new framework
  drm/i915/display: convert W/As in intel_ddi.c to new framework
  drm/i915/display: convert W/As in intel_display.c to new framework
  drm/i915/display: convert W/As in intel_display_device.c to new
    framework
  drm/i915/display: convert W/As in intel_dp_mst.c to new framework
  drm/i915/display: convert W/As in intel_fbc.c to new framework
  drm/i915/display: convert W/As in intel_flipq.c to new framework
  drm/i915/display: convert W/As in intel_modeset_setup.c to new
    framework
  drm/i915/display: convert W/As in intel_pmdemand.c to new framework
  drm/i915/display: convert W/As in intel_psr.c to new framework
  drm/i915/display: convert W/As in skl_universal_plane.c to new
    framework
  drm/i915/display: convert W/As in skl_watermark.c to new framework

 drivers/gpu/drm/i915/display/intel_audio.c    | 16 +----
 drivers/gpu/drm/i915/display/intel_cdclk.c    |  2 +-
 drivers/gpu/drm/i915/display/intel_cursor.c   |  3 +-
 drivers/gpu/drm/i915/display/intel_ddi.c      |  4 +-
 drivers/gpu/drm/i915/display/intel_display.c  |  4 +-
 .../drm/i915/display/intel_display_device.c   |  3 +-
 .../drm/i915/display/intel_display_power.c    | 22 +++----
 .../gpu/drm/i915/display/intel_display_wa.c   | 65 +++++++++++++++++++
 .../gpu/drm/i915/display/intel_display_wa.h   | 25 +++++++
 drivers/gpu/drm/i915/display/intel_dp_mst.c   |  3 +-
 drivers/gpu/drm/i915/display/intel_fbc.c      |  4 +-
 drivers/gpu/drm/i915/display/intel_flipq.c    | 13 +---
 .../drm/i915/display/intel_modeset_setup.c    |  3 +-
 drivers/gpu/drm/i915/display/intel_pmdemand.c |  8 ++-
 drivers/gpu/drm/i915/display/intel_psr.c      | 20 +++---
 .../drm/i915/display/skl_universal_plane.c    |  6 +-
 drivers/gpu/drm/i915/display/skl_watermark.c  |  3 +-
 17 files changed, 140 insertions(+), 64 deletions(-)

-- 
2.51.0


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

* [PATCH v2 01/15] drm/i915/display: convert audio workaround to new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
@ 2026-02-12 18:45 ` Luca Coelho
  2026-02-13  4:54   ` Ville Syrjälä
  2026-02-12 18:46 ` [PATCH v2 02/15] drm/i915/display: convert W/As in intel_display_power.c " Luca Coelho
                   ` (16 subsequent siblings)
  17 siblings, 1 reply; 39+ messages in thread
From: Luca Coelho @ 2026-02-12 18:45 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

Convert the low-hanging fruits of workaround checks to the workaround
framework.  Instead of having display structure checks for the
workarounds all over, concentrate the checks in intel_wa.c.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
 drivers/gpu/drm/i915/display/intel_audio.c      | 16 +++-------------
 drivers/gpu/drm/i915/display/intel_display_wa.c |  4 ++++
 drivers/gpu/drm/i915/display/intel_display_wa.h |  1 +
 3 files changed, 8 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_audio.c b/drivers/gpu/drm/i915/display/intel_audio.c
index 5f3c175afdd2..be4b5dbd36fe 100644
--- a/drivers/gpu/drm/i915/display/intel_audio.c
+++ b/drivers/gpu/drm/i915/display/intel_audio.c
@@ -37,6 +37,7 @@
 #include "intel_crtc.h"
 #include "intel_de.h"
 #include "intel_display_types.h"
+#include "intel_display_wa.h"
 #include "intel_lpe_audio.h"
 
 /**
@@ -184,17 +185,6 @@ static const struct hdmi_aud_ncts hdmi_aud_ncts_36bpp[] = {
 	{ 192000, TMDS_445_5M, 20480, 371250 },
 };
 
-/*
- * WA_14020863754: Implement Audio Workaround
- * Corner case with Min Hblank Fix can cause audio hang
- */
-static bool needs_wa_14020863754(struct intel_display *display)
-{
-	return DISPLAY_VERx100(display) == 3000 ||
-		DISPLAY_VERx100(display) == 2000 ||
-		DISPLAY_VERx100(display) == 1401;
-}
-
 /* get AUD_CONFIG_PIXEL_CLOCK_HDMI_* value for mode */
 static u32 audio_config_hdmi_pixel_clock(const struct intel_crtc_state *crtc_state)
 {
@@ -440,7 +430,7 @@ static void hsw_audio_codec_disable(struct intel_encoder *encoder,
 	intel_de_rmw(display, HSW_AUD_PIN_ELD_CP_VLD,
 		     AUDIO_OUTPUT_ENABLE(cpu_transcoder), 0);
 
-	if (needs_wa_14020863754(display))
+	if (intel_display_wa(display, 14020863754))
 		intel_de_rmw(display, AUD_CHICKENBIT_REG3, DACBE_DISABLE_MIN_HBLANK_FIX, 0);
 
 	intel_audio_sdp_split_update(old_crtc_state, false);
@@ -572,7 +562,7 @@ static void hsw_audio_codec_enable(struct intel_encoder *encoder,
 
 	intel_audio_sdp_split_update(crtc_state, true);
 
-	if (needs_wa_14020863754(display))
+	if (intel_display_wa(display, 14020863754))
 		intel_de_rmw(display, AUD_CHICKENBIT_REG3, 0, DACBE_DISABLE_MIN_HBLANK_FIX);
 
 	/* Enable audio presence detect */
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
index c2ccdca2c2f3..99ccc383ee70 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.c
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
@@ -74,6 +74,10 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
 			DISPLAY_VERx100(display) == 3500;
 	case INTEL_DISPLAY_WA_14011503117:
 		return DISPLAY_VER(display) == 13;
+	case INTEL_DISPLAY_WA_14020863754:
+		return DISPLAY_VERx100(display) == 3000 ||
+			DISPLAY_VERx100(display) == 2000 ||
+			DISPLAY_VERx100(display) == 1401;
 	case INTEL_DISPLAY_WA_14025769978:
 		return DISPLAY_VER(display) == 35;
 	case INTEL_DISPLAY_WA_15018326506:
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
index 767420d5f406..bb1382148b6e 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.h
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
@@ -29,6 +29,7 @@ bool intel_display_needs_wa_16023588340(struct intel_display *display);
 enum intel_display_wa {
 	INTEL_DISPLAY_WA_13012396614,
 	INTEL_DISPLAY_WA_14011503117,
+	INTEL_DISPLAY_WA_14020863754,
 	INTEL_DISPLAY_WA_14025769978,
 	INTEL_DISPLAY_WA_15018326506,
 	INTEL_DISPLAY_WA_16023588340,
-- 
2.51.0


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

* [PATCH v2 02/15] drm/i915/display: convert W/As in intel_display_power.c to new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
  2026-02-12 18:45 ` [PATCH v2 01/15] drm/i915/display: convert audio workaround to " Luca Coelho
@ 2026-02-12 18:46 ` Luca Coelho
  2026-02-12 18:46 ` [PATCH v2 03/15] drm/i915/display: convert W/As in intel_cdclk.c " Luca Coelho
                   ` (15 subsequent siblings)
  17 siblings, 0 replies; 39+ messages in thread
From: Luca Coelho @ 2026-02-12 18:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

Convert the low-hanging fruits of workaround checks to the workaround
framework.  Instead of having display structure checks for the
workarounds all over, concentrate the checks in intel_wa.c.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
 .../drm/i915/display/intel_display_power.c    | 22 +++++++++----------
 .../gpu/drm/i915/display/intel_display_wa.c   | 18 +++++++++++++++
 .../gpu/drm/i915/display/intel_display_wa.h   |  7 ++++++
 3 files changed, 36 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_power.c b/drivers/gpu/drm/i915/display/intel_display_power.c
index 755935dcfe23..e17692f32d90 100644
--- a/drivers/gpu/drm/i915/display/intel_display_power.c
+++ b/drivers/gpu/drm/i915/display/intel_display_power.c
@@ -21,6 +21,7 @@
 #include "intel_display_rpm.h"
 #include "intel_display_types.h"
 #include "intel_display_utils.h"
+#include "intel_display_wa.h"
 #include "intel_dmc.h"
 #include "intel_dram.h"
 #include "intel_mchbar_regs.h"
@@ -1621,8 +1622,7 @@ static void tgl_bw_buddy_init(struct intel_display *display)
 	if (display->platform.dgfx && !display->platform.dg1)
 		return;
 
-	if (display->platform.alderlake_s ||
-	    (display->platform.rocketlake && IS_DISPLAY_STEP(display, STEP_A0, STEP_B0)))
+	if (intel_display_wa(display, 1409767108))
 		/* Wa_1409767108 */
 		table = wa_1409767108_buddy_page_masks;
 	else
@@ -1645,7 +1645,7 @@ static void tgl_bw_buddy_init(struct intel_display *display)
 				       table[config].page_mask);
 
 			/* Wa_22010178259:tgl,dg1,rkl,adl-s */
-			if (DISPLAY_VER(display) == 12)
+			if (intel_display_wa(display, 22010178259))
 				intel_de_rmw(display, BW_BUDDY_CTL(i),
 					     BW_BUDDY_TLB_REQ_TIMER_MASK,
 					     BW_BUDDY_TLB_REQ_TIMER(0x8));
@@ -1662,8 +1662,7 @@ static void icl_display_core_init(struct intel_display *display,
 	gen9_set_dc_state(display, DC_STATE_DISABLE);
 
 	/* Wa_14011294188:ehl,jsl,tgl,rkl,adl-s */
-	if (INTEL_PCH_TYPE(display) >= PCH_TGP &&
-	    INTEL_PCH_TYPE(display) < PCH_DG1)
+	if (intel_display_wa(display, 14011294188))
 		intel_de_rmw(display, SOUTH_DSPCLK_GATE_D, 0,
 			     PCH_DPMGUNIT_CLOCK_GATE_DISABLE);
 
@@ -1717,17 +1716,17 @@ static void icl_display_core_init(struct intel_display *display,
 		intel_dmc_load_program(display);
 
 	/* Wa_14011508470:tgl,dg1,rkl,adl-s,adl-p,dg2 */
-	if (IS_DISPLAY_VERx100(display, 1200, 1300))
+	if (intel_display_wa(display, 14011508470))
 		intel_de_rmw(display, GEN11_CHICKEN_DCPR_2, 0,
 			     DCPR_CLEAR_MEMSTAT_DIS | DCPR_SEND_RESP_IMM |
 			     DCPR_MASK_LPMODE | DCPR_MASK_MAXLATENCY_MEMUP_CLR);
 
 	/* Wa_14011503030:xelpd */
-	if (DISPLAY_VER(display) == 13)
+	if (intel_display_wa(display, 14011503030))
 		intel_de_write(display, XELPD_DISPLAY_ERR_FATAL_MASK, ~0);
 
 	/* Wa_15013987218 */
-	if (DISPLAY_VER(display) == 20) {
+	if (intel_display_wa(display, 15013987218)) {
 		intel_de_rmw(display, SOUTH_DSPCLK_GATE_D,
 			     0, PCH_GMBUSUNIT_CLOCK_GATE_DISABLE);
 		intel_de_rmw(display, SOUTH_DSPCLK_GATE_D,
@@ -2266,8 +2265,9 @@ void intel_display_power_suspend_late(struct intel_display *display, bool s2idle
 	}
 
 	/* Tweaked Wa_14010685332:cnp,icp,jsp,mcc,tgp,adp */
-	if (INTEL_PCH_TYPE(display) >= PCH_CNP && INTEL_PCH_TYPE(display) < PCH_DG1)
-		intel_de_rmw(display, SOUTH_CHICKEN1, SBCLK_RUN_REFCLK_DIS, SBCLK_RUN_REFCLK_DIS);
+	if (intel_display_wa(display, 14010685332))
+		intel_de_rmw(display, SOUTH_CHICKEN1,
+			     SBCLK_RUN_REFCLK_DIS, SBCLK_RUN_REFCLK_DIS);
 }
 
 void intel_display_power_resume_early(struct intel_display *display)
@@ -2281,7 +2281,7 @@ void intel_display_power_resume_early(struct intel_display *display)
 	}
 
 	/* Tweaked Wa_14010685332:cnp,icp,jsp,mcc,tgp,adp */
-	if (INTEL_PCH_TYPE(display) >= PCH_CNP && INTEL_PCH_TYPE(display) < PCH_DG1)
+	if (intel_display_wa(display, 14010685332))
 		intel_de_rmw(display, SOUTH_CHICKEN1, SBCLK_RUN_REFCLK_DIS, 0);
 
 	intel_power_domains_resume(display);
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
index 99ccc383ee70..80eecfd33a28 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.c
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
@@ -9,6 +9,7 @@
 #include "intel_display_core.h"
 #include "intel_display_regs.h"
 #include "intel_display_wa.h"
+#include "intel_step.h"
 
 static void gen11_display_wa_apply(struct intel_display *display)
 {
@@ -69,23 +70,40 @@ static bool intel_display_needs_wa_16025573575(struct intel_display *display)
 bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa, const char *name)
 {
 	switch (wa) {
+	case INTEL_DISPLAY_WA_1409767108:
+		return (display->platform.alderlake_s ||
+			(display->platform.rocketlake &&
+			 IS_DISPLAY_STEP(display, STEP_A0, STEP_B0)));
 	case INTEL_DISPLAY_WA_13012396614:
 		return DISPLAY_VERx100(display) == 3000 ||
 			DISPLAY_VERx100(display) == 3500;
+	case INTEL_DISPLAY_WA_14010685332:
+		return INTEL_PCH_TYPE(display) >= PCH_CNP &&
+			INTEL_PCH_TYPE(display) < PCH_DG1;
+	case INTEL_DISPLAY_WA_14011294188:
+		return INTEL_PCH_TYPE(display) >= PCH_TGP &&
+			INTEL_PCH_TYPE(display) < PCH_DG1;
+	case INTEL_DISPLAY_WA_14011503030:
 	case INTEL_DISPLAY_WA_14011503117:
 		return DISPLAY_VER(display) == 13;
+	case INTEL_DISPLAY_WA_14011508470:
+		return (IS_DISPLAY_VERx100(display, 1200, 1300));
 	case INTEL_DISPLAY_WA_14020863754:
 		return DISPLAY_VERx100(display) == 3000 ||
 			DISPLAY_VERx100(display) == 2000 ||
 			DISPLAY_VERx100(display) == 1401;
 	case INTEL_DISPLAY_WA_14025769978:
 		return DISPLAY_VER(display) == 35;
+	case INTEL_DISPLAY_WA_15013987218:
+		return DISPLAY_VER(display) == 20;
 	case INTEL_DISPLAY_WA_15018326506:
 		return display->platform.battlemage;
 	case INTEL_DISPLAY_WA_16023588340:
 		return intel_display_needs_wa_16023588340(display);
 	case INTEL_DISPLAY_WA_16025573575:
 		return intel_display_needs_wa_16025573575(display);
+	case INTEL_DISPLAY_WA_22010178259:
+		return DISPLAY_VER(display) == 12;
 	case INTEL_DISPLAY_WA_22014263786:
 		return IS_DISPLAY_VERx100(display, 1100, 1400);
 	case INTEL_DISPLAY_WA_22021048059:
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
index bb1382148b6e..54f5ea05b293 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.h
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
@@ -27,13 +27,20 @@ bool intel_display_needs_wa_16023588340(struct intel_display *display);
  * number.
  */
 enum intel_display_wa {
+	INTEL_DISPLAY_WA_1409767108,
 	INTEL_DISPLAY_WA_13012396614,
+	INTEL_DISPLAY_WA_14010685332,
+	INTEL_DISPLAY_WA_14011294188,
+	INTEL_DISPLAY_WA_14011503030,
 	INTEL_DISPLAY_WA_14011503117,
+	INTEL_DISPLAY_WA_14011508470,
 	INTEL_DISPLAY_WA_14020863754,
 	INTEL_DISPLAY_WA_14025769978,
+	INTEL_DISPLAY_WA_15013987218,
 	INTEL_DISPLAY_WA_15018326506,
 	INTEL_DISPLAY_WA_16023588340,
 	INTEL_DISPLAY_WA_16025573575,
+	INTEL_DISPLAY_WA_22010178259,
 	INTEL_DISPLAY_WA_22014263786,
 	INTEL_DISPLAY_WA_22021048059,
 };
-- 
2.51.0


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

* [PATCH v2 03/15] drm/i915/display: convert W/As in intel_cdclk.c to new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
  2026-02-12 18:45 ` [PATCH v2 01/15] drm/i915/display: convert audio workaround to " Luca Coelho
  2026-02-12 18:46 ` [PATCH v2 02/15] drm/i915/display: convert W/As in intel_display_power.c " Luca Coelho
@ 2026-02-12 18:46 ` Luca Coelho
  2026-02-13  8:44   ` Kandpal, Suraj
  2026-02-12 18:46 ` [PATCH v2 04/15] drm/i915/display: convert W/As in intel_cursor.c " Luca Coelho
                   ` (14 subsequent siblings)
  17 siblings, 1 reply; 39+ messages in thread
From: Luca Coelho @ 2026-02-12 18:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

Convert the low-hanging fruits of workaround checks to the workaround
framework.  Instead of having display structure checks for the
workarounds all over, concentrate the checks in intel_wa.c.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
 drivers/gpu/drm/i915/display/intel_cdclk.c      | 2 +-
 drivers/gpu/drm/i915/display/intel_display_wa.c | 3 +++
 drivers/gpu/drm/i915/display/intel_display_wa.h | 1 +
 3 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_cdclk.c b/drivers/gpu/drm/i915/display/intel_cdclk.c
index 29d90d612bb2..927b05038e2b 100644
--- a/drivers/gpu/drm/i915/display/intel_cdclk.c
+++ b/drivers/gpu/drm/i915/display/intel_cdclk.c
@@ -4006,7 +4006,7 @@ void intel_init_cdclk_hooks(struct intel_display *display)
 		display->cdclk.table = dg2_cdclk_table;
 	} else if (display->platform.alderlake_p) {
 		/* Wa_22011320316:adl-p[a0] */
-		if (display->platform.alderlake_p && IS_DISPLAY_STEP(display, STEP_A0, STEP_B0)) {
+		if (intel_display_wa(display, 22011320316)) {
 			display->cdclk.table = adlp_a_step_cdclk_table;
 			display->funcs.cdclk = &tgl_cdclk_funcs;
 		} else if (display->platform.alderlake_p_raptorlake_u) {
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
index 80eecfd33a28..f0311cd477a5 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.c
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
@@ -104,6 +104,9 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
 		return intel_display_needs_wa_16025573575(display);
 	case INTEL_DISPLAY_WA_22010178259:
 		return DISPLAY_VER(display) == 12;
+	case INTEL_DISPLAY_WA_22011320316:
+		return display->platform.alderlake_p &&
+			IS_DISPLAY_STEP(display, STEP_A0, STEP_B0);
 	case INTEL_DISPLAY_WA_22014263786:
 		return IS_DISPLAY_VERx100(display, 1100, 1400);
 	case INTEL_DISPLAY_WA_22021048059:
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
index 54f5ea05b293..0d0501fc276f 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.h
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
@@ -41,6 +41,7 @@ enum intel_display_wa {
 	INTEL_DISPLAY_WA_16023588340,
 	INTEL_DISPLAY_WA_16025573575,
 	INTEL_DISPLAY_WA_22010178259,
+	INTEL_DISPLAY_WA_22011320316,
 	INTEL_DISPLAY_WA_22014263786,
 	INTEL_DISPLAY_WA_22021048059,
 };
-- 
2.51.0


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

* [PATCH v2 04/15] drm/i915/display: convert W/As in intel_cursor.c to new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
                   ` (2 preceding siblings ...)
  2026-02-12 18:46 ` [PATCH v2 03/15] drm/i915/display: convert W/As in intel_cdclk.c " Luca Coelho
@ 2026-02-12 18:46 ` Luca Coelho
  2026-02-13  8:42   ` Kandpal, Suraj
  2026-02-12 18:46 ` [PATCH v2 05/15] drm/i915/display: convert W/As in intel_ddi.c " Luca Coelho
                   ` (13 subsequent siblings)
  17 siblings, 1 reply; 39+ messages in thread
From: Luca Coelho @ 2026-02-12 18:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

Convert the low-hanging fruits of workaround checks to the workaround
framework.  Instead of having display structure checks for the
workarounds all over, concentrate the checks in intel_wa.c.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
 drivers/gpu/drm/i915/display/intel_cursor.c     | 3 ++-
 drivers/gpu/drm/i915/display/intel_display_wa.c | 1 +
 drivers/gpu/drm/i915/display/intel_display_wa.h | 1 +
 3 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
index 2c5d917fbd7e..53cd27fd4fc7 100644
--- a/drivers/gpu/drm/i915/display/intel_cursor.c
+++ b/drivers/gpu/drm/i915/display/intel_cursor.c
@@ -19,6 +19,7 @@
 #include "intel_display.h"
 #include "intel_display_types.h"
 #include "intel_display_utils.h"
+#include "intel_display_wa.h"
 #include "intel_fb.h"
 #include "intel_fb_pin.h"
 #include "intel_frontbuffer.h"
@@ -424,7 +425,7 @@ static u32 i9xx_cursor_ctl(const struct intel_plane_state *plane_state)
 		cntl |= MCURSOR_ROTATE_180;
 
 	/* Wa_22012358565:adl-p */
-	if (DISPLAY_VER(display) == 13)
+	if (intel_display_wa(display, 22012358565))
 		cntl |= MCURSOR_ARB_SLOTS(1);
 
 	return cntl;
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
index f0311cd477a5..8473cb25c92e 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.c
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
@@ -85,6 +85,7 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
 			INTEL_PCH_TYPE(display) < PCH_DG1;
 	case INTEL_DISPLAY_WA_14011503030:
 	case INTEL_DISPLAY_WA_14011503117:
+	case INTEL_DISPLAY_WA_22012358565:
 		return DISPLAY_VER(display) == 13;
 	case INTEL_DISPLAY_WA_14011508470:
 		return (IS_DISPLAY_VERx100(display, 1200, 1300));
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
index 0d0501fc276f..7e5f5a466e2a 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.h
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
@@ -42,6 +42,7 @@ enum intel_display_wa {
 	INTEL_DISPLAY_WA_16025573575,
 	INTEL_DISPLAY_WA_22010178259,
 	INTEL_DISPLAY_WA_22011320316,
+	INTEL_DISPLAY_WA_22012358565,
 	INTEL_DISPLAY_WA_22014263786,
 	INTEL_DISPLAY_WA_22021048059,
 };
-- 
2.51.0


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

* [PATCH v2 05/15] drm/i915/display: convert W/As in intel_ddi.c to new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
                   ` (3 preceding siblings ...)
  2026-02-12 18:46 ` [PATCH v2 04/15] drm/i915/display: convert W/As in intel_cursor.c " Luca Coelho
@ 2026-02-12 18:46 ` Luca Coelho
  2026-02-13  8:39   ` Kandpal, Suraj
  2026-02-12 18:46 ` [PATCH v2 06/15] drm/i915/display: convert W/As in intel_display.c " Luca Coelho
                   ` (12 subsequent siblings)
  17 siblings, 1 reply; 39+ messages in thread
From: Luca Coelho @ 2026-02-12 18:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

Convert the low-hanging fruits of workaround checks to the workaround
framework.  Instead of having display structure checks for the
workarounds all over, concentrate the checks in intel_wa.c.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
 drivers/gpu/drm/i915/display/intel_ddi.c        | 4 ++--
 drivers/gpu/drm/i915/display/intel_display_wa.c | 3 +++
 drivers/gpu/drm/i915/display/intel_display_wa.h | 1 +
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 94ae583e907f..c96438245b39 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -52,6 +52,7 @@
 #include "intel_display_regs.h"
 #include "intel_display_types.h"
 #include "intel_display_utils.h"
+#include "intel_display_wa.h"
 #include "intel_dkl_phy.h"
 #include "intel_dkl_phy_regs.h"
 #include "intel_dp.h"
@@ -1401,8 +1402,7 @@ static void tgl_dkl_phy_set_signal_levels(struct intel_encoder *encoder,
 		int level;
 
 		/* Wa_16011342517:adl-p */
-		if (display->platform.alderlake_p &&
-		    IS_DISPLAY_STEP(display, STEP_A0, STEP_D0)) {
+		if (intel_display_wa(display, 16011342517)) {
 			if ((intel_encoder_is_hdmi(encoder) &&
 			     crtc_state->port_clock == 594000) ||
 			     (intel_encoder_is_dp(encoder) &&
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
index 8473cb25c92e..e2bbc3a90eca 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.c
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
@@ -99,6 +99,9 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
 		return DISPLAY_VER(display) == 20;
 	case INTEL_DISPLAY_WA_15018326506:
 		return display->platform.battlemage;
+	case INTEL_DISPLAY_WA_16011342517:
+		return display->platform.alderlake_p &&
+			IS_DISPLAY_STEP(display, STEP_A0, STEP_D0);
 	case INTEL_DISPLAY_WA_16023588340:
 		return intel_display_needs_wa_16023588340(display);
 	case INTEL_DISPLAY_WA_16025573575:
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
index 7e5f5a466e2a..b9c088025fd7 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.h
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
@@ -38,6 +38,7 @@ enum intel_display_wa {
 	INTEL_DISPLAY_WA_14025769978,
 	INTEL_DISPLAY_WA_15013987218,
 	INTEL_DISPLAY_WA_15018326506,
+	INTEL_DISPLAY_WA_16011342517,
 	INTEL_DISPLAY_WA_16023588340,
 	INTEL_DISPLAY_WA_16025573575,
 	INTEL_DISPLAY_WA_22010178259,
-- 
2.51.0


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

* [PATCH v2 06/15] drm/i915/display: convert W/As in intel_display.c to new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
                   ` (4 preceding siblings ...)
  2026-02-12 18:46 ` [PATCH v2 05/15] drm/i915/display: convert W/As in intel_ddi.c " Luca Coelho
@ 2026-02-12 18:46 ` Luca Coelho
  2026-02-13  8:38   ` Kandpal, Suraj
  2026-02-12 18:46 ` [PATCH v2 07/15] drm/i915/display: convert W/As in intel_display_device.c " Luca Coelho
                   ` (11 subsequent siblings)
  17 siblings, 1 reply; 39+ messages in thread
From: Luca Coelho @ 2026-02-12 18:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

Convert the low-hanging fruits of workaround checks to the workaround
framework.  Instead of having display structure checks for the
workarounds all over, concentrate the checks in intel_wa.c.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.c    | 4 ++--
 drivers/gpu/drm/i915/display/intel_display_wa.c | 2 ++
 drivers/gpu/drm/i915/display/intel_display_wa.h | 1 +
 3 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index bd93add5101b..36312e8444bf 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -454,7 +454,7 @@ void intel_enable_transcoder(const struct intel_crtc_state *new_crtc_state)
 	}
 
 	/* Wa_22012358565:adl-p */
-	if (DISPLAY_VER(display) == 13)
+	if (intel_display_wa(display, 22012358565))
 		intel_de_rmw(display, PIPE_ARB_CTL(display, pipe),
 			     0, PIPE_ARB_USE_PROG_SLOTS);
 
@@ -708,7 +708,7 @@ static void icl_set_pipe_chicken(const struct intel_crtc_state *crtc_state)
 		tmp |= UNDERRUN_RECOVERY_DISABLE_ADLP;
 
 	/* Wa_14010547955:dg2 */
-	if (display->platform.dg2)
+	if (intel_display_wa(display, 14010547955))
 		tmp |= DG2_RENDER_CCSTAG_4_3_EN;
 
 	intel_de_write(display, PIPE_CHICKEN(pipe), tmp);
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
index e2bbc3a90eca..744ca7828f06 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.c
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
@@ -77,6 +77,8 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
 	case INTEL_DISPLAY_WA_13012396614:
 		return DISPLAY_VERx100(display) == 3000 ||
 			DISPLAY_VERx100(display) == 3500;
+	case INTEL_DISPLAY_WA_14010547955:
+		return display->platform.dg2;
 	case INTEL_DISPLAY_WA_14010685332:
 		return INTEL_PCH_TYPE(display) >= PCH_CNP &&
 			INTEL_PCH_TYPE(display) < PCH_DG1;
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
index b9c088025fd7..4fab1b27087a 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.h
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
@@ -29,6 +29,7 @@ bool intel_display_needs_wa_16023588340(struct intel_display *display);
 enum intel_display_wa {
 	INTEL_DISPLAY_WA_1409767108,
 	INTEL_DISPLAY_WA_13012396614,
+	INTEL_DISPLAY_WA_14010547955,
 	INTEL_DISPLAY_WA_14010685332,
 	INTEL_DISPLAY_WA_14011294188,
 	INTEL_DISPLAY_WA_14011503030,
-- 
2.51.0


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

* [PATCH v2 07/15] drm/i915/display: convert W/As in intel_display_device.c to new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
                   ` (5 preceding siblings ...)
  2026-02-12 18:46 ` [PATCH v2 06/15] drm/i915/display: convert W/As in intel_display.c " Luca Coelho
@ 2026-02-12 18:46 ` Luca Coelho
  2026-02-13  8:29   ` Kandpal, Suraj
  2026-02-12 18:46 ` [PATCH v2 08/15] drm/i915/display: convert W/As in intel_dp_mst.c " Luca Coelho
                   ` (10 subsequent siblings)
  17 siblings, 1 reply; 39+ messages in thread
From: Luca Coelho @ 2026-02-12 18:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

Convert the low-hanging fruits of workaround checks to the workaround
framework.  Instead of having display structure checks for the
workarounds all over, concentrate the checks in intel_wa.c.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display_device.c | 3 ++-
 drivers/gpu/drm/i915/display/intel_display_wa.c     | 3 +++
 drivers/gpu/drm/i915/display/intel_display_wa.h     | 1 +
 3 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_device.c b/drivers/gpu/drm/i915/display/intel_display_device.c
index e79913a858b3..e88ae1884213 100644
--- a/drivers/gpu/drm/i915/display/intel_display_device.c
+++ b/drivers/gpu/drm/i915/display/intel_display_device.c
@@ -19,6 +19,7 @@
 #include "intel_display_reg_defs.h"
 #include "intel_display_regs.h"
 #include "intel_display_types.h"
+#include "intel_display_wa.h"
 #include "intel_fbc.h"
 #include "intel_step.h"
 
@@ -1773,7 +1774,7 @@ static void __intel_display_device_info_runtime_init(struct intel_display *displ
 		display_runtime->port_mask |= BIT(PORT_F);
 
 	/* Wa_14011765242: adl-s A0,A1 */
-	if (display->platform.alderlake_s && IS_DISPLAY_STEP(display, STEP_A0, STEP_A2))
+	if (intel_display_wa(display, 14011765242))
 		for_each_pipe(display, pipe)
 			display_runtime->num_scalers[pipe] = 0;
 	else if (DISPLAY_VER(display) >= 11) {
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
index 744ca7828f06..b45212708110 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.c
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
@@ -91,6 +91,9 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
 		return DISPLAY_VER(display) == 13;
 	case INTEL_DISPLAY_WA_14011508470:
 		return (IS_DISPLAY_VERx100(display, 1200, 1300));
+	case INTEL_DISPLAY_WA_14011765242:
+		return display->platform.alderlake_s &&
+			IS_DISPLAY_STEP(display, STEP_A0, STEP_A2);
 	case INTEL_DISPLAY_WA_14020863754:
 		return DISPLAY_VERx100(display) == 3000 ||
 			DISPLAY_VERx100(display) == 2000 ||
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
index 4fab1b27087a..923cb917e727 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.h
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
@@ -35,6 +35,7 @@ enum intel_display_wa {
 	INTEL_DISPLAY_WA_14011503030,
 	INTEL_DISPLAY_WA_14011503117,
 	INTEL_DISPLAY_WA_14011508470,
+	INTEL_DISPLAY_WA_14011765242,
 	INTEL_DISPLAY_WA_14020863754,
 	INTEL_DISPLAY_WA_14025769978,
 	INTEL_DISPLAY_WA_15013987218,
-- 
2.51.0


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

* [PATCH v2 08/15] drm/i915/display: convert W/As in intel_dp_mst.c to new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
                   ` (6 preceding siblings ...)
  2026-02-12 18:46 ` [PATCH v2 07/15] drm/i915/display: convert W/As in intel_display_device.c " Luca Coelho
@ 2026-02-12 18:46 ` Luca Coelho
  2026-02-13  8:36   ` Kandpal, Suraj
  2026-02-12 18:46 ` [PATCH v2 09/15] drm/i915/display: convert W/As in intel_fbc.c " Luca Coelho
                   ` (9 subsequent siblings)
  17 siblings, 1 reply; 39+ messages in thread
From: Luca Coelho @ 2026-02-12 18:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

Convert the low-hanging fruits of workaround checks to the workaround
framework.  Instead of having display structure checks for the
workarounds all over, concentrate the checks in intel_wa.c.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display_wa.c | 2 ++
 drivers/gpu/drm/i915/display/intel_display_wa.h | 1 +
 drivers/gpu/drm/i915/display/intel_dp_mst.c     | 3 ++-
 3 files changed, 5 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 b45212708110..798e77200751 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.c
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
@@ -94,6 +94,8 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
 	case INTEL_DISPLAY_WA_14011765242:
 		return display->platform.alderlake_s &&
 			IS_DISPLAY_STEP(display, STEP_A0, STEP_A2);
+	case INTEL_DISPLAY_WA_14014143976:
+		return IS_DISPLAY_STEP(display, STEP_E0, STEP_FOREVER);
 	case INTEL_DISPLAY_WA_14020863754:
 		return DISPLAY_VERx100(display) == 3000 ||
 			DISPLAY_VERx100(display) == 2000 ||
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
index 923cb917e727..2e5ce21e0455 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.h
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
@@ -36,6 +36,7 @@ enum intel_display_wa {
 	INTEL_DISPLAY_WA_14011503117,
 	INTEL_DISPLAY_WA_14011508470,
 	INTEL_DISPLAY_WA_14011765242,
+	INTEL_DISPLAY_WA_14014143976,
 	INTEL_DISPLAY_WA_14020863754,
 	INTEL_DISPLAY_WA_14025769978,
 	INTEL_DISPLAY_WA_15013987218,
diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 29713075e413..e338dd12b39e 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -43,6 +43,7 @@
 #include "intel_display_regs.h"
 #include "intel_display_types.h"
 #include "intel_display_utils.h"
+#include "intel_display_wa.h"
 #include "intel_dp.h"
 #include "intel_dp_hdcp.h"
 #include "intel_dp_link_training.h"
@@ -1274,7 +1275,7 @@ static void enable_bs_jitter_was(const struct intel_crtc_state *crtc_state)
 		set |= DP_MST_FEC_BS_JITTER_WA(crtc_state->cpu_transcoder);
 
 	/* Wa_14014143976:adlp */
-	if (IS_DISPLAY_STEP(display, STEP_E0, STEP_FOREVER)) {
+	if (intel_display_wa(display, 14014143976)) {
 		if (intel_dp_is_uhbr(crtc_state))
 			set |= DP_MST_SHORT_HBLANK_WA(crtc_state->cpu_transcoder);
 		else if (crtc_state->fec_enable)
-- 
2.51.0


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

* [PATCH v2 09/15] drm/i915/display: convert W/As in intel_fbc.c to new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
                   ` (7 preceding siblings ...)
  2026-02-12 18:46 ` [PATCH v2 08/15] drm/i915/display: convert W/As in intel_dp_mst.c " Luca Coelho
@ 2026-02-12 18:46 ` Luca Coelho
  2026-02-13  8:32   ` Kandpal, Suraj
  2026-02-12 18:46 ` [PATCH v2 10/15] drm/i915/display: convert W/As in intel_flipq.c " Luca Coelho
                   ` (8 subsequent siblings)
  17 siblings, 1 reply; 39+ messages in thread
From: Luca Coelho @ 2026-02-12 18:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

Convert the low-hanging fruits of workaround checks to the workaround
framework.  Instead of having display structure checks for the
workarounds all over, concentrate the checks in intel_wa.c.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display_wa.c | 4 ++++
 drivers/gpu/drm/i915/display/intel_display_wa.h | 2 ++
 drivers/gpu/drm/i915/display/intel_fbc.c        | 4 ++--
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
index 798e77200751..1459e5df1dd3 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.c
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
@@ -70,6 +70,8 @@ static bool intel_display_needs_wa_16025573575(struct intel_display *display)
 bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa, const char *name)
 {
 	switch (wa) {
+	case INTEL_DISPLAY_WA_1409120013:
+		return IS_DISPLAY_VER(display, 11, 12);
 	case INTEL_DISPLAY_WA_1409767108:
 		return (display->platform.alderlake_s ||
 			(display->platform.rocketlake &&
@@ -109,6 +111,8 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
 	case INTEL_DISPLAY_WA_16011342517:
 		return display->platform.alderlake_p &&
 			IS_DISPLAY_STEP(display, STEP_A0, STEP_D0);
+	case INTEL_DISPLAY_WA_16011863758:
+		return DISPLAY_VER(display) >= 11;
 	case INTEL_DISPLAY_WA_16023588340:
 		return intel_display_needs_wa_16023588340(display);
 	case INTEL_DISPLAY_WA_16025573575:
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
index 2e5ce21e0455..87fe404962ce 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.h
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
@@ -27,6 +27,7 @@ bool intel_display_needs_wa_16023588340(struct intel_display *display);
  * number.
  */
 enum intel_display_wa {
+	INTEL_DISPLAY_WA_1409120013,
 	INTEL_DISPLAY_WA_1409767108,
 	INTEL_DISPLAY_WA_13012396614,
 	INTEL_DISPLAY_WA_14010547955,
@@ -42,6 +43,7 @@ enum intel_display_wa {
 	INTEL_DISPLAY_WA_15013987218,
 	INTEL_DISPLAY_WA_15018326506,
 	INTEL_DISPLAY_WA_16011342517,
+	INTEL_DISPLAY_WA_16011863758,
 	INTEL_DISPLAY_WA_16023588340,
 	INTEL_DISPLAY_WA_16025573575,
 	INTEL_DISPLAY_WA_22010178259,
diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c
index 9f39b6990bbd..a9e1dc7caa64 100644
--- a/drivers/gpu/drm/i915/display/intel_fbc.c
+++ b/drivers/gpu/drm/i915/display/intel_fbc.c
@@ -184,7 +184,7 @@ static unsigned int skl_fbc_min_cfb_stride(struct intel_display *display,
 	 * Wa_16011863758: icl+
 	 * Avoid some hardware segment address miscalculation.
 	 */
-	if (DISPLAY_VER(display) >= 11)
+	if (intel_display_wa(display, 16011863758))
 		stride += 64;
 
 	/*
@@ -950,7 +950,7 @@ static void intel_fbc_program_workarounds(struct intel_fbc *fbc)
 	}
 
 	/* Wa_1409120013:icl,jsl,tgl,dg1 */
-	if (IS_DISPLAY_VER(display, 11, 12))
+	if (intel_display_wa(display, 1409120013))
 		intel_de_rmw(display, ILK_DPFC_CHICKEN(fbc->id),
 			     0, DPFC_CHICKEN_COMP_DUMMY_PIXEL);
 	/*
-- 
2.51.0


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

* [PATCH v2 10/15] drm/i915/display: convert W/As in intel_flipq.c to new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
                   ` (8 preceding siblings ...)
  2026-02-12 18:46 ` [PATCH v2 09/15] drm/i915/display: convert W/As in intel_fbc.c " Luca Coelho
@ 2026-02-12 18:46 ` Luca Coelho
  2026-02-13  8:26   ` Kandpal, Suraj
  2026-02-12 18:46 ` [PATCH v2 11/15] drm/i915/display: convert W/As in intel_modeset_setup.c " Luca Coelho
                   ` (7 subsequent siblings)
  17 siblings, 1 reply; 39+ messages in thread
From: Luca Coelho @ 2026-02-12 18:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

Convert the low-hanging fruits of workaround checks to the workaround
framework.  Instead of having display structure checks for the
workarounds all over, concentrate the checks in intel_wa.c.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display_wa.c |  4 ++++
 drivers/gpu/drm/i915/display/intel_display_wa.h |  1 +
 drivers/gpu/drm/i915/display/intel_flipq.c      | 13 +++----------
 3 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
index 1459e5df1dd3..3aa79e607bf8 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.c
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
@@ -117,6 +117,10 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
 		return intel_display_needs_wa_16023588340(display);
 	case INTEL_DISPLAY_WA_16025573575:
 		return intel_display_needs_wa_16025573575(display);
+	case INTEL_DISPLAY_WA_18034343758:
+		return DISPLAY_VER(display) == 20 ||
+			(display->platform.pantherlake &&
+			 IS_DISPLAY_STEP(display, STEP_A0, STEP_B0));
 	case INTEL_DISPLAY_WA_22010178259:
 		return DISPLAY_VER(display) == 12;
 	case INTEL_DISPLAY_WA_22011320316:
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
index 87fe404962ce..57345d0abe1c 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.h
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
@@ -46,6 +46,7 @@ enum intel_display_wa {
 	INTEL_DISPLAY_WA_16011863758,
 	INTEL_DISPLAY_WA_16023588340,
 	INTEL_DISPLAY_WA_16025573575,
+	INTEL_DISPLAY_WA_18034343758,
 	INTEL_DISPLAY_WA_22010178259,
 	INTEL_DISPLAY_WA_22011320316,
 	INTEL_DISPLAY_WA_22012358565,
diff --git a/drivers/gpu/drm/i915/display/intel_flipq.c b/drivers/gpu/drm/i915/display/intel_flipq.c
index 1e9550cb66a3..234fe22498f0 100644
--- a/drivers/gpu/drm/i915/display/intel_flipq.c
+++ b/drivers/gpu/drm/i915/display/intel_flipq.c
@@ -12,6 +12,7 @@
 #include "intel_display_core.h"
 #include "intel_display_types.h"
 #include "intel_display_utils.h"
+#include "intel_display_wa.h"
 #include "intel_dmc.h"
 #include "intel_dmc_regs.h"
 #include "intel_dsb.h"
@@ -447,19 +448,11 @@ void intel_flipq_add(struct intel_crtc *crtc,
 	intel_flipq_sw_dmc_wake(crtc);
 }
 
-/* Wa_18034343758 */
-static bool need_dmc_halt_wa(struct intel_display *display)
-{
-	return DISPLAY_VER(display) == 20 ||
-		(display->platform.pantherlake &&
-		 IS_DISPLAY_STEP(display, STEP_A0, STEP_B0));
-}
-
 void intel_flipq_wait_dmc_halt(struct intel_dsb *dsb, struct intel_crtc *crtc)
 {
 	struct intel_display *display = to_intel_display(crtc);
 
-	if (need_dmc_halt_wa(display))
+	if (intel_display_wa(display, 18034343758))
 		intel_dsb_wait_usec(dsb, 2);
 }
 
@@ -467,6 +460,6 @@ void intel_flipq_unhalt_dmc(struct intel_dsb *dsb, struct intel_crtc *crtc)
 {
 	struct intel_display *display = to_intel_display(crtc);
 
-	if (need_dmc_halt_wa(display))
+	if (intel_display_wa(display, 18034343758))
 		intel_dsb_reg_write(dsb, PIPEDMC_CTL(crtc->pipe), 0);
 }
-- 
2.51.0


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

* [PATCH v2 11/15] drm/i915/display: convert W/As in intel_modeset_setup.c to new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
                   ` (9 preceding siblings ...)
  2026-02-12 18:46 ` [PATCH v2 10/15] drm/i915/display: convert W/As in intel_flipq.c " Luca Coelho
@ 2026-02-12 18:46 ` Luca Coelho
  2026-02-13  5:04   ` Ville Syrjälä
  2026-02-12 18:46 ` [PATCH v2 12/15] drm/i915/display: convert W/As in intel_pmdemand.c " Luca Coelho
                   ` (6 subsequent siblings)
  17 siblings, 1 reply; 39+ messages in thread
From: Luca Coelho @ 2026-02-12 18:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

Convert the low-hanging fruits of workaround checks to the workaround
framework.  Instead of having display structure checks for the
workarounds all over, concentrate the checks in intel_wa.c.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display_wa.c    | 2 ++
 drivers/gpu/drm/i915/display/intel_display_wa.h    | 1 +
 drivers/gpu/drm/i915/display/intel_modeset_setup.c | 3 ++-
 3 files changed, 5 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 3aa79e607bf8..72f645686efd 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.c
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
@@ -79,6 +79,8 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
 	case INTEL_DISPLAY_WA_13012396614:
 		return DISPLAY_VERx100(display) == 3000 ||
 			DISPLAY_VERx100(display) == 3500;
+	case INTEL_DISPLAY_WA_14010480278:
+		return (IS_DISPLAY_VER(display, 10, 12));
 	case INTEL_DISPLAY_WA_14010547955:
 		return display->platform.dg2;
 	case INTEL_DISPLAY_WA_14010685332:
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
index 57345d0abe1c..d8359f88de29 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.h
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
@@ -30,6 +30,7 @@ enum intel_display_wa {
 	INTEL_DISPLAY_WA_1409120013,
 	INTEL_DISPLAY_WA_1409767108,
 	INTEL_DISPLAY_WA_13012396614,
+	INTEL_DISPLAY_WA_14010480278,
 	INTEL_DISPLAY_WA_14010547955,
 	INTEL_DISPLAY_WA_14010685332,
 	INTEL_DISPLAY_WA_14011294188,
diff --git a/drivers/gpu/drm/i915/display/intel_modeset_setup.c b/drivers/gpu/drm/i915/display/intel_modeset_setup.c
index 9b0becee221c..7ee1494a67af 100644
--- a/drivers/gpu/drm/i915/display/intel_modeset_setup.c
+++ b/drivers/gpu/drm/i915/display/intel_modeset_setup.c
@@ -25,6 +25,7 @@
 #include "intel_display_power.h"
 #include "intel_display_regs.h"
 #include "intel_display_types.h"
+#include "intel_display_wa.h"
 #include "intel_dmc.h"
 #include "intel_fifo_underrun.h"
 #include "intel_modeset_setup.h"
@@ -913,7 +914,7 @@ static void intel_early_display_was(struct intel_display *display)
 	 * Display WA #1185 WaDisableDARBFClkGating:glk,icl,ehl,tgl
 	 * Also known as Wa_14010480278.
 	 */
-	if (IS_DISPLAY_VER(display, 10, 12))
+	if (intel_display_wa(display, 14010480278))
 		intel_de_rmw(display, GEN9_CLKGATE_DIS_0, 0, DARBF_GATING_DIS);
 
 	/*
-- 
2.51.0


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

* [PATCH v2 12/15] drm/i915/display: convert W/As in intel_pmdemand.c to new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
                   ` (10 preceding siblings ...)
  2026-02-12 18:46 ` [PATCH v2 11/15] drm/i915/display: convert W/As in intel_modeset_setup.c " Luca Coelho
@ 2026-02-12 18:46 ` Luca Coelho
  2026-02-13  8:20   ` Kandpal, Suraj
  2026-02-12 18:46 ` [PATCH v2 13/15] drm/i915/display: convert W/As in intel_psr.c " Luca Coelho
                   ` (5 subsequent siblings)
  17 siblings, 1 reply; 39+ messages in thread
From: Luca Coelho @ 2026-02-12 18:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

Convert the low-hanging fruits of workaround checks to the workaround
framework.  Instead of having display structure checks for the
workarounds all over, concentrate the checks in intel_wa.c.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display_wa.c | 2 ++
 drivers/gpu/drm/i915/display/intel_display_wa.h | 1 +
 drivers/gpu/drm/i915/display/intel_pmdemand.c   | 8 +++++---
 3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
index 72f645686efd..77ea2e5b8144 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.c
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
@@ -100,6 +100,8 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
 			IS_DISPLAY_STEP(display, STEP_A0, STEP_A2);
 	case INTEL_DISPLAY_WA_14014143976:
 		return IS_DISPLAY_STEP(display, STEP_E0, STEP_FOREVER);
+	case INTEL_DISPLAY_WA_14016740474:
+		return IS_DISPLAY_VERx100_STEP(display, 1400, STEP_A0, STEP_C0);
 	case INTEL_DISPLAY_WA_14020863754:
 		return DISPLAY_VERx100(display) == 3000 ||
 			DISPLAY_VERx100(display) == 2000 ||
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
index d8359f88de29..3d2cf05ffacc 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.h
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
@@ -39,6 +39,7 @@ enum intel_display_wa {
 	INTEL_DISPLAY_WA_14011508470,
 	INTEL_DISPLAY_WA_14011765242,
 	INTEL_DISPLAY_WA_14014143976,
+	INTEL_DISPLAY_WA_14016740474,
 	INTEL_DISPLAY_WA_14020863754,
 	INTEL_DISPLAY_WA_14025769978,
 	INTEL_DISPLAY_WA_15013987218,
diff --git a/drivers/gpu/drm/i915/display/intel_pmdemand.c b/drivers/gpu/drm/i915/display/intel_pmdemand.c
index dc44a7a169c1..3b7471df6287 100644
--- a/drivers/gpu/drm/i915/display/intel_pmdemand.c
+++ b/drivers/gpu/drm/i915/display/intel_pmdemand.c
@@ -15,6 +15,7 @@
 #include "intel_display_regs.h"
 #include "intel_display_trace.h"
 #include "intel_display_utils.h"
+#include "intel_display_wa.h"
 #include "intel_pmdemand.h"
 #include "intel_step.h"
 #include "skl_watermark.h"
@@ -129,9 +130,10 @@ int intel_pmdemand_init(struct intel_display *display)
 				     &pmdemand_state->base,
 				     &intel_pmdemand_funcs);
 
-	if (IS_DISPLAY_VERx100_STEP(display, 1400, STEP_A0, STEP_C0))
-		/* Wa_14016740474 */
-		intel_de_rmw(display, XELPD_CHICKEN_DCPR_3, 0, DMD_RSP_TIMEOUT_DISABLE);
+	/* Wa_14016740474 */
+	if (intel_display_wa(display, 14016740474))
+		intel_de_rmw(display, XELPD_CHICKEN_DCPR_3, 0,
+			     DMD_RSP_TIMEOUT_DISABLE);
 
 	return 0;
 }
-- 
2.51.0


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

* [PATCH v2 13/15] drm/i915/display: convert W/As in intel_psr.c to new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
                   ` (11 preceding siblings ...)
  2026-02-12 18:46 ` [PATCH v2 12/15] drm/i915/display: convert W/As in intel_pmdemand.c " Luca Coelho
@ 2026-02-12 18:46 ` Luca Coelho
  2026-02-13  5:09   ` Ville Syrjälä
  2026-02-12 18:46 ` [PATCH v2 14/15] drm/i915/display: convert W/As in skl_universal_plane.c " Luca Coelho
                   ` (4 subsequent siblings)
  17 siblings, 1 reply; 39+ messages in thread
From: Luca Coelho @ 2026-02-12 18:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

Convert the low-hanging fruits of workaround checks to the workaround
framework.  Instead of having display structure checks for the
workarounds all over, concentrate the checks in intel_wa.c.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
 .../gpu/drm/i915/display/intel_display_wa.c   | 15 ++++++++++++--
 .../gpu/drm/i915/display/intel_display_wa.h   |  4 ++++
 drivers/gpu/drm/i915/display/intel_psr.c      | 20 ++++++++-----------
 3 files changed, 25 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
index 77ea2e5b8144..783e1383ff89 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.c
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
@@ -112,6 +112,13 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
 		return DISPLAY_VER(display) == 20;
 	case INTEL_DISPLAY_WA_15018326506:
 		return display->platform.battlemage;
+	case INTEL_DISPLAY_WA_16011303918:
+	case INTEL_DISPLAY_WA_22011320316:
+		return display->platform.alderlake_p &&
+			IS_DISPLAY_STEP(display, STEP_A0, STEP_B0);
+	case INTEL_DISPLAY_WA_16011181250:
+		return display->platform.rocketlake || display->platform.alderlake_s ||
+			display->platform.dg2;
 	case INTEL_DISPLAY_WA_16011342517:
 		return display->platform.alderlake_p &&
 			IS_DISPLAY_STEP(display, STEP_A0, STEP_D0);
@@ -121,15 +128,19 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
 		return intel_display_needs_wa_16023588340(display);
 	case INTEL_DISPLAY_WA_16025573575:
 		return intel_display_needs_wa_16025573575(display);
+	case INTEL_DISPLAY_WA_16025596647:
+		return DISPLAY_VER(display) != 20 &&
+			!IS_DISPLAY_VERx100_STEP(display, 3000,
+						 STEP_A0, STEP_B0);
 	case INTEL_DISPLAY_WA_18034343758:
 		return DISPLAY_VER(display) == 20 ||
 			(display->platform.pantherlake &&
 			 IS_DISPLAY_STEP(display, STEP_A0, STEP_B0));
 	case INTEL_DISPLAY_WA_22010178259:
 		return DISPLAY_VER(display) == 12;
-	case INTEL_DISPLAY_WA_22011320316:
+	case INTEL_DISPLAY_WA_22012278275:
 		return display->platform.alderlake_p &&
-			IS_DISPLAY_STEP(display, STEP_A0, STEP_B0);
+			IS_DISPLAY_STEP(display, STEP_A0, STEP_E0);
 	case INTEL_DISPLAY_WA_22014263786:
 		return IS_DISPLAY_VERx100(display, 1100, 1400);
 	case INTEL_DISPLAY_WA_22021048059:
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
index 3d2cf05ffacc..35d8df4c75a2 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.h
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
@@ -44,13 +44,17 @@ enum intel_display_wa {
 	INTEL_DISPLAY_WA_14025769978,
 	INTEL_DISPLAY_WA_15013987218,
 	INTEL_DISPLAY_WA_15018326506,
+	INTEL_DISPLAY_WA_16011181250,
+	INTEL_DISPLAY_WA_16011303918,
 	INTEL_DISPLAY_WA_16011342517,
 	INTEL_DISPLAY_WA_16011863758,
 	INTEL_DISPLAY_WA_16023588340,
 	INTEL_DISPLAY_WA_16025573575,
+	INTEL_DISPLAY_WA_16025596647,
 	INTEL_DISPLAY_WA_18034343758,
 	INTEL_DISPLAY_WA_22010178259,
 	INTEL_DISPLAY_WA_22011320316,
+	INTEL_DISPLAY_WA_22012278275,
 	INTEL_DISPLAY_WA_22012358565,
 	INTEL_DISPLAY_WA_22014263786,
 	INTEL_DISPLAY_WA_22021048059,
diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
index 5bea2eda744b..b21e52f0c461 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -40,6 +40,7 @@
 #include "intel_display_rpm.h"
 #include "intel_display_types.h"
 #include "intel_display_utils.h"
+#include "intel_display_wa.h"
 #include "intel_dmc.h"
 #include "intel_dp.h"
 #include "intel_dp_aux.h"
@@ -1082,7 +1083,7 @@ static void hsw_activate_psr2(struct intel_dp *intel_dp)
 	}
 
 	/* Wa_22012278275:adl-p */
-	if (display->platform.alderlake_p && IS_DISPLAY_STEP(display, STEP_A0, STEP_E0)) {
+	if (intel_display_wa(display, 22012278275)) {
 		static const u8 map[] = {
 			2, /* 5 lines */
 			1, /* 6 lines */
@@ -1263,7 +1264,7 @@ tgl_dc3co_exitline_compute_config(struct intel_dp *intel_dp,
 		return;
 
 	/* Wa_16011303918:adl-p */
-	if (display->platform.alderlake_p && IS_DISPLAY_STEP(display, STEP_A0, STEP_B0))
+	if (intel_display_wa(display, 16011303918))
 		return;
 
 	/*
@@ -1540,8 +1541,7 @@ static bool intel_psr2_config_valid(struct intel_dp *intel_dp,
 	}
 
 	/* Wa_16011181250 */
-	if (display->platform.rocketlake || display->platform.alderlake_s ||
-	    display->platform.dg2) {
+	if (intel_display_wa(display, 16011181250)) {
 		drm_dbg_kms(display->drm,
 			    "PSR2 is defeatured for this platform\n");
 		return false;
@@ -1823,8 +1823,7 @@ void intel_psr_set_non_psr_pipes(struct intel_dp *intel_dp,
 	u8 active_pipes = 0;
 
 	/* Wa_16025596647 */
-	if (DISPLAY_VER(display) != 20 &&
-	    !IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0))
+	if (intel_display_wa(display, 16025596647))
 		return;
 
 	/* Not needed by Panel Replay  */
@@ -3973,8 +3972,7 @@ static void psr_dc5_dc6_wa_work(struct work_struct *work)
  */
 void intel_psr_notify_dc5_dc6(struct intel_display *display)
 {
-	if (DISPLAY_VER(display) != 20 &&
-	    !IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0))
+	if (intel_display_wa(display, 16025596647))
 		return;
 
 	schedule_work(&display->psr_dc5_dc6_wa_work);
@@ -3989,8 +3987,7 @@ void intel_psr_notify_dc5_dc6(struct intel_display *display)
  */
 void intel_psr_dc5_dc6_wa_init(struct intel_display *display)
 {
-	if (DISPLAY_VER(display) != 20 &&
-	    !IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0))
+	if (intel_display_wa(display, 16025596647))
 		return;
 
 	INIT_WORK(&display->psr_dc5_dc6_wa_work, psr_dc5_dc6_wa_work);
@@ -4011,8 +4008,7 @@ void intel_psr_notify_pipe_change(struct intel_atomic_state *state,
 	struct intel_display *display = to_intel_display(state);
 	struct intel_encoder *encoder;
 
-	if (DISPLAY_VER(display) != 20 &&
-	    !IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0))
+	if (intel_display_wa(display, 16025596647))
 		return;
 
 	for_each_intel_encoder_with_psr(display->drm, encoder) {
-- 
2.51.0


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

* [PATCH v2 14/15] drm/i915/display: convert W/As in skl_universal_plane.c to new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
                   ` (12 preceding siblings ...)
  2026-02-12 18:46 ` [PATCH v2 13/15] drm/i915/display: convert W/As in intel_psr.c " Luca Coelho
@ 2026-02-12 18:46 ` Luca Coelho
  2026-02-13  8:18   ` Kandpal, Suraj
  2026-02-12 18:46 ` [PATCH v2 15/15] drm/i915/display: convert W/As in skl_watermark.c " Luca Coelho
                   ` (3 subsequent siblings)
  17 siblings, 1 reply; 39+ messages in thread
From: Luca Coelho @ 2026-02-12 18:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

Convert the low-hanging fruits of workaround checks to the workaround
framework.  Instead of having display structure checks for the
workarounds all over, concentrate the checks in intel_wa.c.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display_wa.c    | 4 ++++
 drivers/gpu/drm/i915/display/intel_display_wa.h    | 1 +
 drivers/gpu/drm/i915/display/skl_universal_plane.c | 6 +++---
 3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
index 783e1383ff89..20216514c085 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.c
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
@@ -79,6 +79,10 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
 	case INTEL_DISPLAY_WA_13012396614:
 		return DISPLAY_VERx100(display) == 3000 ||
 			DISPLAY_VERx100(display) == 3500;
+	case INTEL_DISPLAY_WA_14010477008:
+		return display->platform.dg1 || display->platform.rocketlake ||
+			(display->platform.tigerlake &&
+			 IS_DISPLAY_STEP(display, STEP_A0, STEP_D0));
 	case INTEL_DISPLAY_WA_14010480278:
 		return (IS_DISPLAY_VER(display, 10, 12));
 	case INTEL_DISPLAY_WA_14010547955:
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
index 35d8df4c75a2..784baf66222b 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.h
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
@@ -30,6 +30,7 @@ enum intel_display_wa {
 	INTEL_DISPLAY_WA_1409120013,
 	INTEL_DISPLAY_WA_1409767108,
 	INTEL_DISPLAY_WA_13012396614,
+	INTEL_DISPLAY_WA_14010477008,
 	INTEL_DISPLAY_WA_14010480278,
 	INTEL_DISPLAY_WA_14010547955,
 	INTEL_DISPLAY_WA_14010685332,
diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c b/drivers/gpu/drm/i915/display/skl_universal_plane.c
index 746e942cafd2..9f31c609271f 100644
--- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
+++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
@@ -17,6 +17,7 @@
 #include "intel_display_regs.h"
 #include "intel_display_types.h"
 #include "intel_display_utils.h"
+#include "intel_display_wa.h"
 #include "intel_dpt.h"
 #include "intel_fb.h"
 #include "intel_fbc.h"
@@ -1217,7 +1218,7 @@ static u32 skl_plane_ctl(const struct intel_plane_state *plane_state)
 		plane_ctl |= PLANE_CTL_KEY_ENABLE_SOURCE;
 
 	/* Wa_22012358565:adl-p */
-	if (DISPLAY_VER(display) == 13)
+	if (intel_display_wa(display, 22012358565))
 		plane_ctl |= adlp_plane_ctl_arb_slots(plane_state);
 
 	return plane_ctl;
@@ -2793,8 +2794,7 @@ static bool tgl_plane_has_mc_ccs(struct intel_display *display,
 				 enum plane_id plane_id)
 {
 	/* Wa_14010477008 */
-	if (display->platform.dg1 || display->platform.rocketlake ||
-	    (display->platform.tigerlake && IS_DISPLAY_STEP(display, STEP_A0, STEP_D0)))
+	if (intel_display_wa(display, 14010477008))
 		return false;
 
 	return plane_id < PLANE_6;
-- 
2.51.0


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

* [PATCH v2 15/15] drm/i915/display: convert W/As in skl_watermark.c to new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
                   ` (13 preceding siblings ...)
  2026-02-12 18:46 ` [PATCH v2 14/15] drm/i915/display: convert W/As in skl_universal_plane.c " Luca Coelho
@ 2026-02-12 18:46 ` Luca Coelho
  2026-02-13  4:26   ` Kandpal, Suraj
  2026-02-12 18:58 ` ✓ CI.KUnit: success for drm/i915/display: convert a bunch of W/A checks to the " Patchwork
                   ` (2 subsequent siblings)
  17 siblings, 1 reply; 39+ messages in thread
From: Luca Coelho @ 2026-02-12 18:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

Convert the low-hanging fruits of workaround checks to the workaround
framework.  Instead of having display structure checks for the
workarounds all over, concentrate the checks in intel_wa.c.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display_wa.c | 2 ++
 drivers/gpu/drm/i915/display/intel_display_wa.h | 1 +
 drivers/gpu/drm/i915/display/skl_watermark.c    | 3 ++-
 3 files changed, 5 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 20216514c085..99a2097275b7 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.c
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
@@ -142,6 +142,8 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
 			 IS_DISPLAY_STEP(display, STEP_A0, STEP_B0));
 	case INTEL_DISPLAY_WA_22010178259:
 		return DISPLAY_VER(display) == 12;
+	case INTEL_DISPLAY_WA_22010947358:
+		return display->platform.alderlake_p;
 	case INTEL_DISPLAY_WA_22012278275:
 		return display->platform.alderlake_p &&
 			IS_DISPLAY_STEP(display, STEP_A0, STEP_E0);
diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
index 784baf66222b..52c3e3ebdeab 100644
--- a/drivers/gpu/drm/i915/display/intel_display_wa.h
+++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
@@ -54,6 +54,7 @@ enum intel_display_wa {
 	INTEL_DISPLAY_WA_16025596647,
 	INTEL_DISPLAY_WA_18034343758,
 	INTEL_DISPLAY_WA_22010178259,
+	INTEL_DISPLAY_WA_22010947358,
 	INTEL_DISPLAY_WA_22011320316,
 	INTEL_DISPLAY_WA_22012278275,
 	INTEL_DISPLAY_WA_22012358565,
diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c b/drivers/gpu/drm/i915/display/skl_watermark.c
index 8e3031adb09f..1940d914ddd5 100644
--- a/drivers/gpu/drm/i915/display/skl_watermark.c
+++ b/drivers/gpu/drm/i915/display/skl_watermark.c
@@ -22,6 +22,7 @@
 #include "intel_display_rpm.h"
 #include "intel_display_types.h"
 #include "intel_display_utils.h"
+#include "intel_display_wa.h"
 #include "intel_dram.h"
 #include "intel_fb.h"
 #include "intel_fixed.h"
@@ -3412,7 +3413,7 @@ static u32 pipe_mbus_dbox_ctl(const struct intel_crtc *crtc,
 	if (DISPLAY_VER(display) >= 14)
 		val |= dbuf_state->joined_mbus ?
 			MBUS_DBOX_A_CREDIT(12) : MBUS_DBOX_A_CREDIT(8);
-	else if (display->platform.alderlake_p)
+	else if (intel_display_wa(display, 22010947358))
 		/* Wa_22010947358:adl-p */
 		val |= dbuf_state->joined_mbus ?
 			MBUS_DBOX_A_CREDIT(6) : MBUS_DBOX_A_CREDIT(4);
-- 
2.51.0


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

* ✓ CI.KUnit: success for drm/i915/display: convert a bunch of W/A checks to the new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
                   ` (14 preceding siblings ...)
  2026-02-12 18:46 ` [PATCH v2 15/15] drm/i915/display: convert W/As in skl_watermark.c " Luca Coelho
@ 2026-02-12 18:58 ` Patchwork
  2026-02-12 19:13 ` ✗ CI.checksparse: warning " Patchwork
  2026-02-12 19:33 ` ✓ Xe.CI.BAT: success " Patchwork
  17 siblings, 0 replies; 39+ messages in thread
From: Patchwork @ 2026-02-12 18:58 UTC (permalink / raw)
  To: Luca Coelho; +Cc: intel-xe

== Series Details ==

Series: drm/i915/display: convert a bunch of W/A checks to the new framework
URL   : https://patchwork.freedesktop.org/series/161555/
State : success

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[18:56:57] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[18:57:01] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[18:57:33] Starting KUnit Kernel (1/1)...
[18:57:33] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[18:57:33] ================== guc_buf (11 subtests) ===================
[18:57:33] [PASSED] test_smallest
[18:57:33] [PASSED] test_largest
[18:57:33] [PASSED] test_granular
[18:57:33] [PASSED] test_unique
[18:57:33] [PASSED] test_overlap
[18:57:33] [PASSED] test_reusable
[18:57:33] [PASSED] test_too_big
[18:57:33] [PASSED] test_flush
[18:57:33] [PASSED] test_lookup
[18:57:33] [PASSED] test_data
[18:57:33] [PASSED] test_class
[18:57:33] ===================== [PASSED] guc_buf =====================
[18:57:33] =================== guc_dbm (7 subtests) ===================
[18:57:33] [PASSED] test_empty
[18:57:33] [PASSED] test_default
[18:57:33] ======================== test_size  ========================
[18:57:33] [PASSED] 4
[18:57:33] [PASSED] 8
[18:57:33] [PASSED] 32
[18:57:33] [PASSED] 256
[18:57:33] ==================== [PASSED] test_size ====================
[18:57:33] ======================= test_reuse  ========================
[18:57:33] [PASSED] 4
[18:57:33] [PASSED] 8
[18:57:33] [PASSED] 32
[18:57:33] [PASSED] 256
[18:57:33] =================== [PASSED] test_reuse ====================
[18:57:33] =================== test_range_overlap  ====================
[18:57:33] [PASSED] 4
[18:57:33] [PASSED] 8
[18:57:33] [PASSED] 32
[18:57:33] [PASSED] 256
[18:57:33] =============== [PASSED] test_range_overlap ================
[18:57:33] =================== test_range_compact  ====================
[18:57:33] [PASSED] 4
[18:57:33] [PASSED] 8
[18:57:33] [PASSED] 32
[18:57:33] [PASSED] 256
[18:57:33] =============== [PASSED] test_range_compact ================
[18:57:33] ==================== test_range_spare  =====================
[18:57:33] [PASSED] 4
[18:57:33] [PASSED] 8
[18:57:33] [PASSED] 32
[18:57:33] [PASSED] 256
[18:57:33] ================ [PASSED] test_range_spare =================
[18:57:33] ===================== [PASSED] guc_dbm =====================
[18:57:33] =================== guc_idm (6 subtests) ===================
[18:57:33] [PASSED] bad_init
[18:57:33] [PASSED] no_init
[18:57:33] [PASSED] init_fini
[18:57:33] [PASSED] check_used
[18:57:33] [PASSED] check_quota
[18:57:33] [PASSED] check_all
[18:57:33] ===================== [PASSED] guc_idm =====================
[18:57:33] ================== no_relay (3 subtests) ===================
[18:57:33] [PASSED] xe_drops_guc2pf_if_not_ready
[18:57:33] [PASSED] xe_drops_guc2vf_if_not_ready
[18:57:33] [PASSED] xe_rejects_send_if_not_ready
[18:57:33] ==================== [PASSED] no_relay =====================
[18:57:33] ================== pf_relay (14 subtests) ==================
[18:57:33] [PASSED] pf_rejects_guc2pf_too_short
[18:57:33] [PASSED] pf_rejects_guc2pf_too_long
[18:57:33] [PASSED] pf_rejects_guc2pf_no_payload
[18:57:33] [PASSED] pf_fails_no_payload
[18:57:33] [PASSED] pf_fails_bad_origin
[18:57:33] [PASSED] pf_fails_bad_type
[18:57:33] [PASSED] pf_txn_reports_error
[18:57:33] [PASSED] pf_txn_sends_pf2guc
[18:57:33] [PASSED] pf_sends_pf2guc
[18:57:33] [SKIPPED] pf_loopback_nop
[18:57:33] [SKIPPED] pf_loopback_echo
[18:57:33] [SKIPPED] pf_loopback_fail
[18:57:33] [SKIPPED] pf_loopback_busy
[18:57:33] [SKIPPED] pf_loopback_retry
[18:57:33] ==================== [PASSED] pf_relay =====================
[18:57:33] ================== vf_relay (3 subtests) ===================
[18:57:33] [PASSED] vf_rejects_guc2vf_too_short
[18:57:33] [PASSED] vf_rejects_guc2vf_too_long
[18:57:33] [PASSED] vf_rejects_guc2vf_no_payload
[18:57:33] ==================== [PASSED] vf_relay =====================
[18:57:33] ================ pf_gt_config (6 subtests) =================
[18:57:33] [PASSED] fair_contexts_1vf
[18:57:33] [PASSED] fair_doorbells_1vf
[18:57:33] [PASSED] fair_ggtt_1vf
[18:57:33] ====================== fair_contexts  ======================
[18:57:33] [PASSED] 1 VF
[18:57:33] [PASSED] 2 VFs
[18:57:33] [PASSED] 3 VFs
[18:57:33] [PASSED] 4 VFs
[18:57:33] [PASSED] 5 VFs
[18:57:33] [PASSED] 6 VFs
[18:57:33] [PASSED] 7 VFs
[18:57:33] [PASSED] 8 VFs
[18:57:33] [PASSED] 9 VFs
[18:57:33] [PASSED] 10 VFs
[18:57:33] [PASSED] 11 VFs
[18:57:33] [PASSED] 12 VFs
[18:57:33] [PASSED] 13 VFs
[18:57:33] [PASSED] 14 VFs
[18:57:33] [PASSED] 15 VFs
[18:57:33] [PASSED] 16 VFs
[18:57:33] [PASSED] 17 VFs
[18:57:33] [PASSED] 18 VFs
[18:57:33] [PASSED] 19 VFs
[18:57:33] [PASSED] 20 VFs
[18:57:33] [PASSED] 21 VFs
[18:57:33] [PASSED] 22 VFs
[18:57:33] [PASSED] 23 VFs
[18:57:33] [PASSED] 24 VFs
[18:57:33] [PASSED] 25 VFs
[18:57:33] [PASSED] 26 VFs
[18:57:33] [PASSED] 27 VFs
[18:57:33] [PASSED] 28 VFs
[18:57:33] [PASSED] 29 VFs
[18:57:33] [PASSED] 30 VFs
[18:57:33] [PASSED] 31 VFs
[18:57:33] [PASSED] 32 VFs
[18:57:33] [PASSED] 33 VFs
[18:57:33] [PASSED] 34 VFs
[18:57:33] [PASSED] 35 VFs
[18:57:33] [PASSED] 36 VFs
[18:57:33] [PASSED] 37 VFs
[18:57:33] [PASSED] 38 VFs
[18:57:33] [PASSED] 39 VFs
[18:57:33] [PASSED] 40 VFs
[18:57:33] [PASSED] 41 VFs
[18:57:33] [PASSED] 42 VFs
[18:57:33] [PASSED] 43 VFs
[18:57:33] [PASSED] 44 VFs
[18:57:33] [PASSED] 45 VFs
[18:57:33] [PASSED] 46 VFs
[18:57:33] [PASSED] 47 VFs
[18:57:33] [PASSED] 48 VFs
[18:57:33] [PASSED] 49 VFs
[18:57:33] [PASSED] 50 VFs
[18:57:33] [PASSED] 51 VFs
[18:57:33] [PASSED] 52 VFs
[18:57:33] [PASSED] 53 VFs
[18:57:33] [PASSED] 54 VFs
[18:57:33] [PASSED] 55 VFs
[18:57:33] [PASSED] 56 VFs
[18:57:33] [PASSED] 57 VFs
[18:57:33] [PASSED] 58 VFs
[18:57:33] [PASSED] 59 VFs
[18:57:33] [PASSED] 60 VFs
[18:57:33] [PASSED] 61 VFs
[18:57:33] [PASSED] 62 VFs
[18:57:33] [PASSED] 63 VFs
[18:57:33] ================== [PASSED] fair_contexts ==================
[18:57:33] ===================== fair_doorbells  ======================
[18:57:33] [PASSED] 1 VF
[18:57:33] [PASSED] 2 VFs
[18:57:33] [PASSED] 3 VFs
[18:57:33] [PASSED] 4 VFs
[18:57:33] [PASSED] 5 VFs
[18:57:33] [PASSED] 6 VFs
[18:57:33] [PASSED] 7 VFs
[18:57:33] [PASSED] 8 VFs
[18:57:33] [PASSED] 9 VFs
[18:57:33] [PASSED] 10 VFs
[18:57:33] [PASSED] 11 VFs
[18:57:33] [PASSED] 12 VFs
[18:57:33] [PASSED] 13 VFs
[18:57:33] [PASSED] 14 VFs
[18:57:33] [PASSED] 15 VFs
[18:57:33] [PASSED] 16 VFs
[18:57:33] [PASSED] 17 VFs
[18:57:33] [PASSED] 18 VFs
[18:57:33] [PASSED] 19 VFs
[18:57:33] [PASSED] 20 VFs
[18:57:33] [PASSED] 21 VFs
[18:57:33] [PASSED] 22 VFs
[18:57:33] [PASSED] 23 VFs
[18:57:33] [PASSED] 24 VFs
[18:57:33] [PASSED] 25 VFs
[18:57:33] [PASSED] 26 VFs
[18:57:33] [PASSED] 27 VFs
[18:57:33] [PASSED] 28 VFs
[18:57:33] [PASSED] 29 VFs
[18:57:33] [PASSED] 30 VFs
[18:57:33] [PASSED] 31 VFs
[18:57:33] [PASSED] 32 VFs
[18:57:33] [PASSED] 33 VFs
[18:57:33] [PASSED] 34 VFs
[18:57:33] [PASSED] 35 VFs
[18:57:33] [PASSED] 36 VFs
[18:57:33] [PASSED] 37 VFs
[18:57:33] [PASSED] 38 VFs
[18:57:33] [PASSED] 39 VFs
[18:57:33] [PASSED] 40 VFs
[18:57:33] [PASSED] 41 VFs
[18:57:33] [PASSED] 42 VFs
[18:57:33] [PASSED] 43 VFs
[18:57:33] [PASSED] 44 VFs
[18:57:33] [PASSED] 45 VFs
[18:57:33] [PASSED] 46 VFs
[18:57:33] [PASSED] 47 VFs
[18:57:33] [PASSED] 48 VFs
[18:57:33] [PASSED] 49 VFs
[18:57:33] [PASSED] 50 VFs
[18:57:33] [PASSED] 51 VFs
[18:57:33] [PASSED] 52 VFs
[18:57:33] [PASSED] 53 VFs
[18:57:33] [PASSED] 54 VFs
[18:57:33] [PASSED] 55 VFs
[18:57:33] [PASSED] 56 VFs
[18:57:33] [PASSED] 57 VFs
[18:57:33] [PASSED] 58 VFs
[18:57:33] [PASSED] 59 VFs
[18:57:33] [PASSED] 60 VFs
[18:57:33] [PASSED] 61 VFs
[18:57:33] [PASSED] 62 VFs
[18:57:33] [PASSED] 63 VFs
[18:57:33] ================= [PASSED] fair_doorbells ==================
[18:57:33] ======================== fair_ggtt  ========================
[18:57:33] [PASSED] 1 VF
[18:57:33] [PASSED] 2 VFs
[18:57:33] [PASSED] 3 VFs
[18:57:33] [PASSED] 4 VFs
[18:57:33] [PASSED] 5 VFs
[18:57:33] [PASSED] 6 VFs
[18:57:33] [PASSED] 7 VFs
[18:57:33] [PASSED] 8 VFs
[18:57:33] [PASSED] 9 VFs
[18:57:33] [PASSED] 10 VFs
[18:57:33] [PASSED] 11 VFs
[18:57:33] [PASSED] 12 VFs
[18:57:33] [PASSED] 13 VFs
[18:57:33] [PASSED] 14 VFs
[18:57:33] [PASSED] 15 VFs
[18:57:33] [PASSED] 16 VFs
[18:57:33] [PASSED] 17 VFs
[18:57:33] [PASSED] 18 VFs
[18:57:33] [PASSED] 19 VFs
[18:57:33] [PASSED] 20 VFs
[18:57:33] [PASSED] 21 VFs
[18:57:33] [PASSED] 22 VFs
[18:57:33] [PASSED] 23 VFs
[18:57:33] [PASSED] 24 VFs
[18:57:33] [PASSED] 25 VFs
[18:57:33] [PASSED] 26 VFs
[18:57:33] [PASSED] 27 VFs
[18:57:33] [PASSED] 28 VFs
[18:57:33] [PASSED] 29 VFs
[18:57:33] [PASSED] 30 VFs
[18:57:33] [PASSED] 31 VFs
[18:57:33] [PASSED] 32 VFs
[18:57:33] [PASSED] 33 VFs
[18:57:33] [PASSED] 34 VFs
[18:57:33] [PASSED] 35 VFs
[18:57:33] [PASSED] 36 VFs
[18:57:33] [PASSED] 37 VFs
[18:57:33] [PASSED] 38 VFs
[18:57:33] [PASSED] 39 VFs
[18:57:33] [PASSED] 40 VFs
[18:57:33] [PASSED] 41 VFs
[18:57:33] [PASSED] 42 VFs
[18:57:33] [PASSED] 43 VFs
[18:57:33] [PASSED] 44 VFs
[18:57:33] [PASSED] 45 VFs
[18:57:33] [PASSED] 46 VFs
[18:57:33] [PASSED] 47 VFs
[18:57:33] [PASSED] 48 VFs
[18:57:33] [PASSED] 49 VFs
[18:57:33] [PASSED] 50 VFs
[18:57:33] [PASSED] 51 VFs
[18:57:33] [PASSED] 52 VFs
[18:57:33] [PASSED] 53 VFs
[18:57:33] [PASSED] 54 VFs
[18:57:33] [PASSED] 55 VFs
[18:57:33] [PASSED] 56 VFs
[18:57:33] [PASSED] 57 VFs
[18:57:33] [PASSED] 58 VFs
[18:57:33] [PASSED] 59 VFs
[18:57:33] [PASSED] 60 VFs
[18:57:33] [PASSED] 61 VFs
[18:57:33] [PASSED] 62 VFs
[18:57:33] [PASSED] 63 VFs
[18:57:33] ==================== [PASSED] fair_ggtt ====================
[18:57:33] ================== [PASSED] pf_gt_config ===================
[18:57:33] ===================== lmtt (1 subtest) =====================
[18:57:33] ======================== test_ops  =========================
[18:57:33] [PASSED] 2-level
[18:57:33] [PASSED] multi-level
[18:57:33] ==================== [PASSED] test_ops =====================
[18:57:33] ====================== [PASSED] lmtt =======================
[18:57:33] ================= pf_service (11 subtests) =================
[18:57:33] [PASSED] pf_negotiate_any
[18:57:33] [PASSED] pf_negotiate_base_match
[18:57:33] [PASSED] pf_negotiate_base_newer
[18:57:33] [PASSED] pf_negotiate_base_next
[18:57:33] [SKIPPED] pf_negotiate_base_older
[18:57:33] [PASSED] pf_negotiate_base_prev
[18:57:33] [PASSED] pf_negotiate_latest_match
[18:57:33] [PASSED] pf_negotiate_latest_newer
[18:57:33] [PASSED] pf_negotiate_latest_next
[18:57:33] [SKIPPED] pf_negotiate_latest_older
[18:57:33] [SKIPPED] pf_negotiate_latest_prev
[18:57:33] =================== [PASSED] pf_service ====================
[18:57:33] ================= xe_guc_g2g (2 subtests) ==================
[18:57:33] ============== xe_live_guc_g2g_kunit_default  ==============
[18:57:33] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[18:57:33] ============== xe_live_guc_g2g_kunit_allmem  ===============
[18:57:33] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[18:57:33] =================== [SKIPPED] xe_guc_g2g ===================
[18:57:33] =================== xe_mocs (2 subtests) ===================
[18:57:33] ================ xe_live_mocs_kernel_kunit  ================
[18:57:33] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[18:57:33] ================ xe_live_mocs_reset_kunit  =================
[18:57:33] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[18:57:33] ==================== [SKIPPED] xe_mocs =====================
[18:57:33] ================= xe_migrate (2 subtests) ==================
[18:57:33] ================= xe_migrate_sanity_kunit  =================
[18:57:33] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[18:57:33] ================== xe_validate_ccs_kunit  ==================
[18:57:33] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[18:57:33] =================== [SKIPPED] xe_migrate ===================
[18:57:33] ================== xe_dma_buf (1 subtest) ==================
[18:57:33] ==================== xe_dma_buf_kunit  =====================
[18:57:33] ================ [SKIPPED] xe_dma_buf_kunit ================
[18:57:33] =================== [SKIPPED] xe_dma_buf ===================
[18:57:33] ================= xe_bo_shrink (1 subtest) =================
[18:57:33] =================== xe_bo_shrink_kunit  ====================
[18:57:33] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[18:57:33] ================== [SKIPPED] xe_bo_shrink ==================
[18:57:33] ==================== xe_bo (2 subtests) ====================
[18:57:33] ================== xe_ccs_migrate_kunit  ===================
[18:57:33] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[18:57:33] ==================== xe_bo_evict_kunit  ====================
[18:57:33] =============== [SKIPPED] xe_bo_evict_kunit ================
[18:57:33] ===================== [SKIPPED] xe_bo ======================
[18:57:33] ==================== args (13 subtests) ====================
[18:57:33] [PASSED] count_args_test
[18:57:33] [PASSED] call_args_example
[18:57:33] [PASSED] call_args_test
[18:57:33] [PASSED] drop_first_arg_example
[18:57:33] [PASSED] drop_first_arg_test
[18:57:33] [PASSED] first_arg_example
[18:57:33] [PASSED] first_arg_test
[18:57:33] [PASSED] last_arg_example
[18:57:33] [PASSED] last_arg_test
[18:57:33] [PASSED] pick_arg_example
[18:57:33] [PASSED] if_args_example
[18:57:33] [PASSED] if_args_test
[18:57:33] [PASSED] sep_comma_example
[18:57:33] ====================== [PASSED] args =======================
[18:57:33] =================== xe_pci (3 subtests) ====================
[18:57:33] ==================== check_graphics_ip  ====================
[18:57:33] [PASSED] 12.00 Xe_LP
[18:57:33] [PASSED] 12.10 Xe_LP+
[18:57:33] [PASSED] 12.55 Xe_HPG
[18:57:33] [PASSED] 12.60 Xe_HPC
[18:57:33] [PASSED] 12.70 Xe_LPG
[18:57:33] [PASSED] 12.71 Xe_LPG
[18:57:33] [PASSED] 12.74 Xe_LPG+
[18:57:33] [PASSED] 20.01 Xe2_HPG
[18:57:33] [PASSED] 20.02 Xe2_HPG
[18:57:33] [PASSED] 20.04 Xe2_LPG
[18:57:33] [PASSED] 30.00 Xe3_LPG
[18:57:33] [PASSED] 30.01 Xe3_LPG
[18:57:33] [PASSED] 30.03 Xe3_LPG
[18:57:33] [PASSED] 30.04 Xe3_LPG
[18:57:33] [PASSED] 30.05 Xe3_LPG
[18:57:33] [PASSED] 35.10 Xe3p_LPG
[18:57:33] [PASSED] 35.11 Xe3p_XPC
[18:57:33] ================ [PASSED] check_graphics_ip ================
[18:57:33] ===================== check_media_ip  ======================
[18:57:33] [PASSED] 12.00 Xe_M
[18:57:33] [PASSED] 12.55 Xe_HPM
[18:57:33] [PASSED] 13.00 Xe_LPM+
[18:57:33] [PASSED] 13.01 Xe2_HPM
[18:57:33] [PASSED] 20.00 Xe2_LPM
[18:57:33] [PASSED] 30.00 Xe3_LPM
[18:57:33] [PASSED] 30.02 Xe3_LPM
[18:57:33] [PASSED] 35.00 Xe3p_LPM
[18:57:33] [PASSED] 35.03 Xe3p_HPM
[18:57:33] ================= [PASSED] check_media_ip ==================
[18:57:33] =================== check_platform_desc  ===================
[18:57:33] [PASSED] 0x9A60 (TIGERLAKE)
[18:57:33] [PASSED] 0x9A68 (TIGERLAKE)
[18:57:33] [PASSED] 0x9A70 (TIGERLAKE)
[18:57:33] [PASSED] 0x9A40 (TIGERLAKE)
[18:57:33] [PASSED] 0x9A49 (TIGERLAKE)
[18:57:33] [PASSED] 0x9A59 (TIGERLAKE)
[18:57:33] [PASSED] 0x9A78 (TIGERLAKE)
[18:57:33] [PASSED] 0x9AC0 (TIGERLAKE)
[18:57:33] [PASSED] 0x9AC9 (TIGERLAKE)
[18:57:33] [PASSED] 0x9AD9 (TIGERLAKE)
[18:57:33] [PASSED] 0x9AF8 (TIGERLAKE)
[18:57:33] [PASSED] 0x4C80 (ROCKETLAKE)
[18:57:33] [PASSED] 0x4C8A (ROCKETLAKE)
[18:57:33] [PASSED] 0x4C8B (ROCKETLAKE)
[18:57:33] [PASSED] 0x4C8C (ROCKETLAKE)
[18:57:33] [PASSED] 0x4C90 (ROCKETLAKE)
[18:57:33] [PASSED] 0x4C9A (ROCKETLAKE)
[18:57:33] [PASSED] 0x4680 (ALDERLAKE_S)
[18:57:33] [PASSED] 0x4682 (ALDERLAKE_S)
[18:57:33] [PASSED] 0x4688 (ALDERLAKE_S)
[18:57:33] [PASSED] 0x468A (ALDERLAKE_S)
[18:57:33] [PASSED] 0x468B (ALDERLAKE_S)
[18:57:33] [PASSED] 0x4690 (ALDERLAKE_S)
[18:57:33] [PASSED] 0x4692 (ALDERLAKE_S)
[18:57:33] [PASSED] 0x4693 (ALDERLAKE_S)
[18:57:33] [PASSED] 0x46A0 (ALDERLAKE_P)
[18:57:33] [PASSED] 0x46A1 (ALDERLAKE_P)
[18:57:33] [PASSED] 0x46A2 (ALDERLAKE_P)
[18:57:33] [PASSED] 0x46A3 (ALDERLAKE_P)
[18:57:33] [PASSED] 0x46A6 (ALDERLAKE_P)
[18:57:33] [PASSED] 0x46A8 (ALDERLAKE_P)
[18:57:33] [PASSED] 0x46AA (ALDERLAKE_P)
[18:57:33] [PASSED] 0x462A (ALDERLAKE_P)
[18:57:33] [PASSED] 0x4626 (ALDERLAKE_P)
stty: 'standard input': Inappropriate ioctl for device
[18:57:33] [PASSED] 0x4628 (ALDERLAKE_P)
[18:57:33] [PASSED] 0x46B0 (ALDERLAKE_P)
[18:57:33] [PASSED] 0x46B1 (ALDERLAKE_P)
[18:57:33] [PASSED] 0x46B2 (ALDERLAKE_P)
[18:57:33] [PASSED] 0x46B3 (ALDERLAKE_P)
[18:57:33] [PASSED] 0x46C0 (ALDERLAKE_P)
[18:57:33] [PASSED] 0x46C1 (ALDERLAKE_P)
[18:57:33] [PASSED] 0x46C2 (ALDERLAKE_P)
[18:57:33] [PASSED] 0x46C3 (ALDERLAKE_P)
[18:57:33] [PASSED] 0x46D0 (ALDERLAKE_N)
[18:57:33] [PASSED] 0x46D1 (ALDERLAKE_N)
[18:57:33] [PASSED] 0x46D2 (ALDERLAKE_N)
[18:57:33] [PASSED] 0x46D3 (ALDERLAKE_N)
[18:57:33] [PASSED] 0x46D4 (ALDERLAKE_N)
[18:57:33] [PASSED] 0xA721 (ALDERLAKE_P)
[18:57:33] [PASSED] 0xA7A1 (ALDERLAKE_P)
[18:57:33] [PASSED] 0xA7A9 (ALDERLAKE_P)
[18:57:33] [PASSED] 0xA7AC (ALDERLAKE_P)
[18:57:33] [PASSED] 0xA7AD (ALDERLAKE_P)
[18:57:33] [PASSED] 0xA720 (ALDERLAKE_P)
[18:57:33] [PASSED] 0xA7A0 (ALDERLAKE_P)
[18:57:33] [PASSED] 0xA7A8 (ALDERLAKE_P)
[18:57:33] [PASSED] 0xA7AA (ALDERLAKE_P)
[18:57:33] [PASSED] 0xA7AB (ALDERLAKE_P)
[18:57:33] [PASSED] 0xA780 (ALDERLAKE_S)
[18:57:33] [PASSED] 0xA781 (ALDERLAKE_S)
[18:57:33] [PASSED] 0xA782 (ALDERLAKE_S)
[18:57:33] [PASSED] 0xA783 (ALDERLAKE_S)
[18:57:33] [PASSED] 0xA788 (ALDERLAKE_S)
[18:57:33] [PASSED] 0xA789 (ALDERLAKE_S)
[18:57:33] [PASSED] 0xA78A (ALDERLAKE_S)
[18:57:33] [PASSED] 0xA78B (ALDERLAKE_S)
[18:57:33] [PASSED] 0x4905 (DG1)
[18:57:33] [PASSED] 0x4906 (DG1)
[18:57:33] [PASSED] 0x4907 (DG1)
[18:57:33] [PASSED] 0x4908 (DG1)
[18:57:33] [PASSED] 0x4909 (DG1)
[18:57:33] [PASSED] 0x56C0 (DG2)
[18:57:33] [PASSED] 0x56C2 (DG2)
[18:57:33] [PASSED] 0x56C1 (DG2)
[18:57:33] [PASSED] 0x7D51 (METEORLAKE)
[18:57:33] [PASSED] 0x7DD1 (METEORLAKE)
[18:57:33] [PASSED] 0x7D41 (METEORLAKE)
[18:57:33] [PASSED] 0x7D67 (METEORLAKE)
[18:57:33] [PASSED] 0xB640 (METEORLAKE)
[18:57:33] [PASSED] 0x56A0 (DG2)
[18:57:33] [PASSED] 0x56A1 (DG2)
[18:57:33] [PASSED] 0x56A2 (DG2)
[18:57:33] [PASSED] 0x56BE (DG2)
[18:57:33] [PASSED] 0x56BF (DG2)
[18:57:33] [PASSED] 0x5690 (DG2)
[18:57:33] [PASSED] 0x5691 (DG2)
[18:57:33] [PASSED] 0x5692 (DG2)
[18:57:33] [PASSED] 0x56A5 (DG2)
[18:57:33] [PASSED] 0x56A6 (DG2)
[18:57:33] [PASSED] 0x56B0 (DG2)
[18:57:33] [PASSED] 0x56B1 (DG2)
[18:57:33] [PASSED] 0x56BA (DG2)
[18:57:33] [PASSED] 0x56BB (DG2)
[18:57:33] [PASSED] 0x56BC (DG2)
[18:57:33] [PASSED] 0x56BD (DG2)
[18:57:33] [PASSED] 0x5693 (DG2)
[18:57:33] [PASSED] 0x5694 (DG2)
[18:57:33] [PASSED] 0x5695 (DG2)
[18:57:33] [PASSED] 0x56A3 (DG2)
[18:57:33] [PASSED] 0x56A4 (DG2)
[18:57:33] [PASSED] 0x56B2 (DG2)
[18:57:33] [PASSED] 0x56B3 (DG2)
[18:57:33] [PASSED] 0x5696 (DG2)
[18:57:33] [PASSED] 0x5697 (DG2)
[18:57:33] [PASSED] 0xB69 (PVC)
[18:57:33] [PASSED] 0xB6E (PVC)
[18:57:33] [PASSED] 0xBD4 (PVC)
[18:57:33] [PASSED] 0xBD5 (PVC)
[18:57:33] [PASSED] 0xBD6 (PVC)
[18:57:33] [PASSED] 0xBD7 (PVC)
[18:57:33] [PASSED] 0xBD8 (PVC)
[18:57:33] [PASSED] 0xBD9 (PVC)
[18:57:33] [PASSED] 0xBDA (PVC)
[18:57:33] [PASSED] 0xBDB (PVC)
[18:57:33] [PASSED] 0xBE0 (PVC)
[18:57:33] [PASSED] 0xBE1 (PVC)
[18:57:33] [PASSED] 0xBE5 (PVC)
[18:57:33] [PASSED] 0x7D40 (METEORLAKE)
[18:57:33] [PASSED] 0x7D45 (METEORLAKE)
[18:57:33] [PASSED] 0x7D55 (METEORLAKE)
[18:57:33] [PASSED] 0x7D60 (METEORLAKE)
[18:57:33] [PASSED] 0x7DD5 (METEORLAKE)
[18:57:33] [PASSED] 0x6420 (LUNARLAKE)
[18:57:33] [PASSED] 0x64A0 (LUNARLAKE)
[18:57:33] [PASSED] 0x64B0 (LUNARLAKE)
[18:57:33] [PASSED] 0xE202 (BATTLEMAGE)
[18:57:33] [PASSED] 0xE209 (BATTLEMAGE)
[18:57:33] [PASSED] 0xE20B (BATTLEMAGE)
[18:57:33] [PASSED] 0xE20C (BATTLEMAGE)
[18:57:33] [PASSED] 0xE20D (BATTLEMAGE)
[18:57:33] [PASSED] 0xE210 (BATTLEMAGE)
[18:57:33] [PASSED] 0xE211 (BATTLEMAGE)
[18:57:33] [PASSED] 0xE212 (BATTLEMAGE)
[18:57:33] [PASSED] 0xE216 (BATTLEMAGE)
[18:57:33] [PASSED] 0xE220 (BATTLEMAGE)
[18:57:33] [PASSED] 0xE221 (BATTLEMAGE)
[18:57:33] [PASSED] 0xE222 (BATTLEMAGE)
[18:57:33] [PASSED] 0xE223 (BATTLEMAGE)
[18:57:33] [PASSED] 0xB080 (PANTHERLAKE)
[18:57:33] [PASSED] 0xB081 (PANTHERLAKE)
[18:57:33] [PASSED] 0xB082 (PANTHERLAKE)
[18:57:33] [PASSED] 0xB083 (PANTHERLAKE)
[18:57:33] [PASSED] 0xB084 (PANTHERLAKE)
[18:57:33] [PASSED] 0xB085 (PANTHERLAKE)
[18:57:33] [PASSED] 0xB086 (PANTHERLAKE)
[18:57:33] [PASSED] 0xB087 (PANTHERLAKE)
[18:57:33] [PASSED] 0xB08F (PANTHERLAKE)
[18:57:33] [PASSED] 0xB090 (PANTHERLAKE)
[18:57:33] [PASSED] 0xB0A0 (PANTHERLAKE)
[18:57:33] [PASSED] 0xB0B0 (PANTHERLAKE)
[18:57:33] [PASSED] 0xFD80 (PANTHERLAKE)
[18:57:33] [PASSED] 0xFD81 (PANTHERLAKE)
[18:57:33] [PASSED] 0xD740 (NOVALAKE_S)
[18:57:33] [PASSED] 0xD741 (NOVALAKE_S)
[18:57:33] [PASSED] 0xD742 (NOVALAKE_S)
[18:57:33] [PASSED] 0xD743 (NOVALAKE_S)
[18:57:33] [PASSED] 0xD744 (NOVALAKE_S)
[18:57:33] [PASSED] 0xD745 (NOVALAKE_S)
[18:57:33] [PASSED] 0x674C (CRESCENTISLAND)
[18:57:33] [PASSED] 0xD750 (NOVALAKE_P)
[18:57:33] [PASSED] 0xD751 (NOVALAKE_P)
[18:57:33] [PASSED] 0xD752 (NOVALAKE_P)
[18:57:33] [PASSED] 0xD753 (NOVALAKE_P)
[18:57:33] [PASSED] 0xD754 (NOVALAKE_P)
[18:57:33] [PASSED] 0xD755 (NOVALAKE_P)
[18:57:33] [PASSED] 0xD756 (NOVALAKE_P)
[18:57:33] [PASSED] 0xD757 (NOVALAKE_P)
[18:57:33] [PASSED] 0xD75F (NOVALAKE_P)
[18:57:33] =============== [PASSED] check_platform_desc ===============
[18:57:33] ===================== [PASSED] xe_pci ======================
[18:57:33] =================== xe_rtp (2 subtests) ====================
[18:57:33] =============== xe_rtp_process_to_sr_tests  ================
[18:57:33] [PASSED] coalesce-same-reg
[18:57:33] [PASSED] no-match-no-add
[18:57:33] [PASSED] match-or
[18:57:33] [PASSED] match-or-xfail
[18:57:33] [PASSED] no-match-no-add-multiple-rules
[18:57:33] [PASSED] two-regs-two-entries
[18:57:33] [PASSED] clr-one-set-other
[18:57:33] [PASSED] set-field
[18:57:33] [PASSED] conflict-duplicate
[18:57:33] [PASSED] conflict-not-disjoint
[18:57:33] [PASSED] conflict-reg-type
[18:57:33] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[18:57:33] ================== xe_rtp_process_tests  ===================
[18:57:33] [PASSED] active1
[18:57:33] [PASSED] active2
[18:57:33] [PASSED] active-inactive
[18:57:33] [PASSED] inactive-active
[18:57:33] [PASSED] inactive-1st_or_active-inactive
[18:57:33] [PASSED] inactive-2nd_or_active-inactive
[18:57:33] [PASSED] inactive-last_or_active-inactive
[18:57:33] [PASSED] inactive-no_or_active-inactive
[18:57:33] ============== [PASSED] xe_rtp_process_tests ===============
[18:57:33] ===================== [PASSED] xe_rtp ======================
[18:57:33] ==================== xe_wa (1 subtest) =====================
[18:57:33] ======================== xe_wa_gt  =========================
[18:57:33] [PASSED] TIGERLAKE B0
[18:57:33] [PASSED] DG1 A0
[18:57:33] [PASSED] DG1 B0
[18:57:33] [PASSED] ALDERLAKE_S A0
[18:57:33] [PASSED] ALDERLAKE_S B0
[18:57:33] [PASSED] ALDERLAKE_S C0
[18:57:33] [PASSED] ALDERLAKE_S D0
[18:57:33] [PASSED] ALDERLAKE_P A0
[18:57:33] [PASSED] ALDERLAKE_P B0
[18:57:33] [PASSED] ALDERLAKE_P C0
[18:57:33] [PASSED] ALDERLAKE_S RPLS D0
[18:57:33] [PASSED] ALDERLAKE_P RPLU E0
[18:57:33] [PASSED] DG2 G10 C0
[18:57:33] [PASSED] DG2 G11 B1
[18:57:33] [PASSED] DG2 G12 A1
[18:57:33] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[18:57:33] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[18:57:33] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[18:57:33] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[18:57:33] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[18:57:33] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[18:57:33] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[18:57:33] ==================== [PASSED] xe_wa_gt =====================
[18:57:33] ====================== [PASSED] xe_wa ======================
[18:57:33] ============================================================
[18:57:33] Testing complete. Ran 522 tests: passed: 504, skipped: 18
[18:57:33] Elapsed time: 36.422s total, 4.254s configuring, 31.652s building, 0.475s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[18:57:33] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[18:57:35] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[18:58:00] Starting KUnit Kernel (1/1)...
[18:58:00] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[18:58:00] ============ drm_test_pick_cmdline (2 subtests) ============
[18:58:00] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[18:58:00] =============== drm_test_pick_cmdline_named  ===============
[18:58:00] [PASSED] NTSC
[18:58:00] [PASSED] NTSC-J
[18:58:00] [PASSED] PAL
[18:58:00] [PASSED] PAL-M
[18:58:00] =========== [PASSED] drm_test_pick_cmdline_named ===========
[18:58:00] ============== [PASSED] drm_test_pick_cmdline ==============
[18:58:00] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[18:58:00] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[18:58:00] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[18:58:00] =========== drm_validate_clone_mode (2 subtests) ===========
[18:58:00] ============== drm_test_check_in_clone_mode  ===============
[18:58:00] [PASSED] in_clone_mode
[18:58:00] [PASSED] not_in_clone_mode
[18:58:00] ========== [PASSED] drm_test_check_in_clone_mode ===========
[18:58:00] =============== drm_test_check_valid_clones  ===============
[18:58:00] [PASSED] not_in_clone_mode
[18:58:00] [PASSED] valid_clone
[18:58:00] [PASSED] invalid_clone
[18:58:00] =========== [PASSED] drm_test_check_valid_clones ===========
[18:58:00] ============= [PASSED] drm_validate_clone_mode =============
[18:58:00] ============= drm_validate_modeset (1 subtest) =============
[18:58:00] [PASSED] drm_test_check_connector_changed_modeset
[18:58:00] ============== [PASSED] drm_validate_modeset ===============
[18:58:00] ====== drm_test_bridge_get_current_state (2 subtests) ======
[18:58:00] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[18:58:00] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[18:58:00] ======== [PASSED] drm_test_bridge_get_current_state ========
[18:58:00] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[18:58:00] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[18:58:00] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[18:58:00] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[18:58:00] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[18:58:00] ============== drm_bridge_alloc (2 subtests) ===============
[18:58:00] [PASSED] drm_test_drm_bridge_alloc_basic
[18:58:00] [PASSED] drm_test_drm_bridge_alloc_get_put
[18:58:00] ================ [PASSED] drm_bridge_alloc =================
[18:58:00] ============= drm_cmdline_parser (40 subtests) =============
[18:58:00] [PASSED] drm_test_cmdline_force_d_only
[18:58:00] [PASSED] drm_test_cmdline_force_D_only_dvi
[18:58:00] [PASSED] drm_test_cmdline_force_D_only_hdmi
[18:58:00] [PASSED] drm_test_cmdline_force_D_only_not_digital
[18:58:00] [PASSED] drm_test_cmdline_force_e_only
[18:58:00] [PASSED] drm_test_cmdline_res
[18:58:00] [PASSED] drm_test_cmdline_res_vesa
[18:58:00] [PASSED] drm_test_cmdline_res_vesa_rblank
[18:58:00] [PASSED] drm_test_cmdline_res_rblank
[18:58:00] [PASSED] drm_test_cmdline_res_bpp
[18:58:00] [PASSED] drm_test_cmdline_res_refresh
[18:58:00] [PASSED] drm_test_cmdline_res_bpp_refresh
[18:58:00] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[18:58:00] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[18:58:00] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[18:58:00] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[18:58:00] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[18:58:00] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[18:58:00] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[18:58:00] [PASSED] drm_test_cmdline_res_margins_force_on
[18:58:00] [PASSED] drm_test_cmdline_res_vesa_margins
[18:58:00] [PASSED] drm_test_cmdline_name
[18:58:00] [PASSED] drm_test_cmdline_name_bpp
[18:58:00] [PASSED] drm_test_cmdline_name_option
[18:58:00] [PASSED] drm_test_cmdline_name_bpp_option
[18:58:00] [PASSED] drm_test_cmdline_rotate_0
[18:58:00] [PASSED] drm_test_cmdline_rotate_90
[18:58:00] [PASSED] drm_test_cmdline_rotate_180
[18:58:00] [PASSED] drm_test_cmdline_rotate_270
[18:58:00] [PASSED] drm_test_cmdline_hmirror
[18:58:00] [PASSED] drm_test_cmdline_vmirror
[18:58:00] [PASSED] drm_test_cmdline_margin_options
[18:58:00] [PASSED] drm_test_cmdline_multiple_options
[18:58:00] [PASSED] drm_test_cmdline_bpp_extra_and_option
[18:58:00] [PASSED] drm_test_cmdline_extra_and_option
[18:58:00] [PASSED] drm_test_cmdline_freestanding_options
[18:58:00] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[18:58:00] [PASSED] drm_test_cmdline_panel_orientation
[18:58:00] ================ drm_test_cmdline_invalid  =================
[18:58:00] [PASSED] margin_only
[18:58:00] [PASSED] interlace_only
[18:58:00] [PASSED] res_missing_x
[18:58:00] [PASSED] res_missing_y
[18:58:00] [PASSED] res_bad_y
[18:58:00] [PASSED] res_missing_y_bpp
[18:58:00] [PASSED] res_bad_bpp
[18:58:00] [PASSED] res_bad_refresh
[18:58:00] [PASSED] res_bpp_refresh_force_on_off
[18:58:00] [PASSED] res_invalid_mode
[18:58:00] [PASSED] res_bpp_wrong_place_mode
[18:58:00] [PASSED] name_bpp_refresh
[18:58:00] [PASSED] name_refresh
[18:58:00] [PASSED] name_refresh_wrong_mode
[18:58:00] [PASSED] name_refresh_invalid_mode
[18:58:00] [PASSED] rotate_multiple
[18:58:00] [PASSED] rotate_invalid_val
[18:58:00] [PASSED] rotate_truncated
[18:58:00] [PASSED] invalid_option
[18:58:00] [PASSED] invalid_tv_option
[18:58:00] [PASSED] truncated_tv_option
[18:58:00] ============ [PASSED] drm_test_cmdline_invalid =============
[18:58:00] =============== drm_test_cmdline_tv_options  ===============
[18:58:00] [PASSED] NTSC
[18:58:00] [PASSED] NTSC_443
[18:58:00] [PASSED] NTSC_J
[18:58:00] [PASSED] PAL
[18:58:00] [PASSED] PAL_M
[18:58:00] [PASSED] PAL_N
[18:58:00] [PASSED] SECAM
[18:58:00] [PASSED] MONO_525
[18:58:00] [PASSED] MONO_625
[18:58:00] =========== [PASSED] drm_test_cmdline_tv_options ===========
[18:58:00] =============== [PASSED] drm_cmdline_parser ================
[18:58:00] ========== drmm_connector_hdmi_init (20 subtests) ==========
[18:58:00] [PASSED] drm_test_connector_hdmi_init_valid
[18:58:00] [PASSED] drm_test_connector_hdmi_init_bpc_8
[18:58:00] [PASSED] drm_test_connector_hdmi_init_bpc_10
[18:58:00] [PASSED] drm_test_connector_hdmi_init_bpc_12
[18:58:00] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[18:58:00] [PASSED] drm_test_connector_hdmi_init_bpc_null
[18:58:00] [PASSED] drm_test_connector_hdmi_init_formats_empty
[18:58:00] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[18:58:00] === drm_test_connector_hdmi_init_formats_yuv420_allowed  ===
[18:58:00] [PASSED] supported_formats=0x9 yuv420_allowed=1
[18:58:00] [PASSED] supported_formats=0x9 yuv420_allowed=0
[18:58:00] [PASSED] supported_formats=0x3 yuv420_allowed=1
[18:58:00] [PASSED] supported_formats=0x3 yuv420_allowed=0
[18:58:00] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[18:58:00] [PASSED] drm_test_connector_hdmi_init_null_ddc
[18:58:00] [PASSED] drm_test_connector_hdmi_init_null_product
[18:58:00] [PASSED] drm_test_connector_hdmi_init_null_vendor
[18:58:00] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[18:58:00] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[18:58:00] [PASSED] drm_test_connector_hdmi_init_product_valid
[18:58:00] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[18:58:00] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[18:58:00] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[18:58:00] ========= drm_test_connector_hdmi_init_type_valid  =========
[18:58:00] [PASSED] HDMI-A
[18:58:00] [PASSED] HDMI-B
[18:58:00] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[18:58:00] ======== drm_test_connector_hdmi_init_type_invalid  ========
[18:58:00] [PASSED] Unknown
[18:58:00] [PASSED] VGA
[18:58:00] [PASSED] DVI-I
[18:58:00] [PASSED] DVI-D
[18:58:00] [PASSED] DVI-A
[18:58:00] [PASSED] Composite
[18:58:00] [PASSED] SVIDEO
[18:58:00] [PASSED] LVDS
[18:58:00] [PASSED] Component
[18:58:00] [PASSED] DIN
[18:58:00] [PASSED] DP
[18:58:00] [PASSED] TV
[18:58:00] [PASSED] eDP
[18:58:00] [PASSED] Virtual
[18:58:00] [PASSED] DSI
[18:58:00] [PASSED] DPI
[18:58:00] [PASSED] Writeback
[18:58:00] [PASSED] SPI
[18:58:00] [PASSED] USB
[18:58:00] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[18:58:00] ============ [PASSED] drmm_connector_hdmi_init =============
[18:58:00] ============= drmm_connector_init (3 subtests) =============
[18:58:00] [PASSED] drm_test_drmm_connector_init
[18:58:00] [PASSED] drm_test_drmm_connector_init_null_ddc
[18:58:00] ========= drm_test_drmm_connector_init_type_valid  =========
[18:58:00] [PASSED] Unknown
[18:58:00] [PASSED] VGA
[18:58:00] [PASSED] DVI-I
[18:58:00] [PASSED] DVI-D
[18:58:00] [PASSED] DVI-A
[18:58:00] [PASSED] Composite
[18:58:00] [PASSED] SVIDEO
[18:58:00] [PASSED] LVDS
[18:58:00] [PASSED] Component
[18:58:00] [PASSED] DIN
[18:58:00] [PASSED] DP
[18:58:00] [PASSED] HDMI-A
[18:58:00] [PASSED] HDMI-B
[18:58:00] [PASSED] TV
[18:58:00] [PASSED] eDP
[18:58:00] [PASSED] Virtual
[18:58:00] [PASSED] DSI
[18:58:00] [PASSED] DPI
[18:58:00] [PASSED] Writeback
[18:58:00] [PASSED] SPI
[18:58:00] [PASSED] USB
[18:58:00] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[18:58:00] =============== [PASSED] drmm_connector_init ===============
[18:58:00] ========= drm_connector_dynamic_init (6 subtests) ==========
[18:58:00] [PASSED] drm_test_drm_connector_dynamic_init
[18:58:00] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[18:58:00] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[18:58:00] [PASSED] drm_test_drm_connector_dynamic_init_properties
[18:58:00] ===== drm_test_drm_connector_dynamic_init_type_valid  ======
[18:58:00] [PASSED] Unknown
[18:58:00] [PASSED] VGA
[18:58:00] [PASSED] DVI-I
[18:58:00] [PASSED] DVI-D
[18:58:00] [PASSED] DVI-A
[18:58:00] [PASSED] Composite
[18:58:00] [PASSED] SVIDEO
[18:58:00] [PASSED] LVDS
[18:58:00] [PASSED] Component
[18:58:00] [PASSED] DIN
[18:58:00] [PASSED] DP
[18:58:00] [PASSED] HDMI-A
[18:58:00] [PASSED] HDMI-B
[18:58:00] [PASSED] TV
[18:58:00] [PASSED] eDP
[18:58:00] [PASSED] Virtual
[18:58:00] [PASSED] DSI
[18:58:00] [PASSED] DPI
[18:58:00] [PASSED] Writeback
[18:58:00] [PASSED] SPI
[18:58:00] [PASSED] USB
[18:58:00] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[18:58:00] ======== drm_test_drm_connector_dynamic_init_name  =========
[18:58:00] [PASSED] Unknown
[18:58:00] [PASSED] VGA
[18:58:00] [PASSED] DVI-I
[18:58:00] [PASSED] DVI-D
[18:58:00] [PASSED] DVI-A
[18:58:00] [PASSED] Composite
[18:58:00] [PASSED] SVIDEO
[18:58:00] [PASSED] LVDS
[18:58:00] [PASSED] Component
[18:58:00] [PASSED] DIN
[18:58:00] [PASSED] DP
[18:58:00] [PASSED] HDMI-A
[18:58:00] [PASSED] HDMI-B
[18:58:00] [PASSED] TV
[18:58:00] [PASSED] eDP
[18:58:00] [PASSED] Virtual
[18:58:00] [PASSED] DSI
[18:58:00] [PASSED] DPI
[18:58:00] [PASSED] Writeback
[18:58:00] [PASSED] SPI
[18:58:00] [PASSED] USB
[18:58:00] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[18:58:00] =========== [PASSED] drm_connector_dynamic_init ============
[18:58:00] ==== drm_connector_dynamic_register_early (4 subtests) =====
[18:58:00] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[18:58:00] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[18:58:00] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[18:58:00] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[18:58:00] ====== [PASSED] drm_connector_dynamic_register_early =======
[18:58:00] ======= drm_connector_dynamic_register (7 subtests) ========
[18:58:00] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[18:58:00] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[18:58:00] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[18:58:00] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[18:58:00] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[18:58:00] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[18:58:00] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[18:58:00] ========= [PASSED] drm_connector_dynamic_register ==========
[18:58:00] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[18:58:00] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[18:58:00] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[18:58:00] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[18:58:00] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[18:58:00] ========== drm_test_get_tv_mode_from_name_valid  ===========
[18:58:00] [PASSED] NTSC
[18:58:00] [PASSED] NTSC-443
[18:58:00] [PASSED] NTSC-J
[18:58:00] [PASSED] PAL
[18:58:00] [PASSED] PAL-M
[18:58:00] [PASSED] PAL-N
[18:58:00] [PASSED] SECAM
[18:58:00] [PASSED] Mono
[18:58:00] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[18:58:00] [PASSED] drm_test_get_tv_mode_from_name_truncated
[18:58:00] ============ [PASSED] drm_get_tv_mode_from_name ============
[18:58:00] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[18:58:00] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[18:58:00] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[18:58:00] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[18:58:00] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[18:58:00] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[18:58:00] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[18:58:00] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid  =
[18:58:00] [PASSED] VIC 96
[18:58:00] [PASSED] VIC 97
[18:58:00] [PASSED] VIC 101
[18:58:00] [PASSED] VIC 102
[18:58:00] [PASSED] VIC 106
[18:58:00] [PASSED] VIC 107
[18:58:00] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[18:58:00] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[18:58:00] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[18:58:00] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[18:58:00] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[18:58:00] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[18:58:00] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[18:58:00] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[18:58:00] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name  ====
[18:58:00] [PASSED] Automatic
[18:58:00] [PASSED] Full
[18:58:00] [PASSED] Limited 16:235
[18:58:00] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[18:58:00] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[18:58:00] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[18:58:00] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[18:58:00] === drm_test_drm_hdmi_connector_get_output_format_name  ====
[18:58:00] [PASSED] RGB
[18:58:00] [PASSED] YUV 4:2:0
[18:58:00] [PASSED] YUV 4:2:2
[18:58:00] [PASSED] YUV 4:4:4
[18:58:00] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[18:58:00] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[18:58:00] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[18:58:00] ============= drm_damage_helper (21 subtests) ==============
[18:58:00] [PASSED] drm_test_damage_iter_no_damage
[18:58:00] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[18:58:00] [PASSED] drm_test_damage_iter_no_damage_src_moved
[18:58:00] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[18:58:00] [PASSED] drm_test_damage_iter_no_damage_not_visible
[18:58:00] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[18:58:00] [PASSED] drm_test_damage_iter_no_damage_no_fb
[18:58:00] [PASSED] drm_test_damage_iter_simple_damage
[18:58:00] [PASSED] drm_test_damage_iter_single_damage
[18:58:00] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[18:58:00] [PASSED] drm_test_damage_iter_single_damage_outside_src
[18:58:00] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[18:58:00] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[18:58:00] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[18:58:00] [PASSED] drm_test_damage_iter_single_damage_src_moved
[18:58:00] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[18:58:00] [PASSED] drm_test_damage_iter_damage
[18:58:00] [PASSED] drm_test_damage_iter_damage_one_intersect
[18:58:00] [PASSED] drm_test_damage_iter_damage_one_outside
[18:58:00] [PASSED] drm_test_damage_iter_damage_src_moved
[18:58:00] [PASSED] drm_test_damage_iter_damage_not_visible
[18:58:00] ================ [PASSED] drm_damage_helper ================
[18:58:00] ============== drm_dp_mst_helper (3 subtests) ==============
[18:58:00] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[18:58:00] [PASSED] Clock 154000 BPP 30 DSC disabled
[18:58:00] [PASSED] Clock 234000 BPP 30 DSC disabled
[18:58:00] [PASSED] Clock 297000 BPP 24 DSC disabled
[18:58:00] [PASSED] Clock 332880 BPP 24 DSC enabled
[18:58:00] [PASSED] Clock 324540 BPP 24 DSC enabled
[18:58:00] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[18:58:00] ============== drm_test_dp_mst_calc_pbn_div  ===============
[18:58:00] [PASSED] Link rate 2000000 lane count 4
[18:58:00] [PASSED] Link rate 2000000 lane count 2
[18:58:00] [PASSED] Link rate 2000000 lane count 1
[18:58:00] [PASSED] Link rate 1350000 lane count 4
[18:58:00] [PASSED] Link rate 1350000 lane count 2
[18:58:00] [PASSED] Link rate 1350000 lane count 1
[18:58:00] [PASSED] Link rate 1000000 lane count 4
[18:58:00] [PASSED] Link rate 1000000 lane count 2
[18:58:00] [PASSED] Link rate 1000000 lane count 1
[18:58:00] [PASSED] Link rate 810000 lane count 4
[18:58:00] [PASSED] Link rate 810000 lane count 2
[18:58:00] [PASSED] Link rate 810000 lane count 1
[18:58:00] [PASSED] Link rate 540000 lane count 4
[18:58:00] [PASSED] Link rate 540000 lane count 2
[18:58:00] [PASSED] Link rate 540000 lane count 1
[18:58:00] [PASSED] Link rate 270000 lane count 4
[18:58:00] [PASSED] Link rate 270000 lane count 2
[18:58:00] [PASSED] Link rate 270000 lane count 1
[18:58:00] [PASSED] Link rate 162000 lane count 4
[18:58:00] [PASSED] Link rate 162000 lane count 2
[18:58:00] [PASSED] Link rate 162000 lane count 1
[18:58:00] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[18:58:00] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[18:58:00] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[18:58:00] [PASSED] DP_POWER_UP_PHY with port number
[18:58:00] [PASSED] DP_POWER_DOWN_PHY with port number
[18:58:00] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[18:58:00] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[18:58:00] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[18:58:00] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[18:58:00] [PASSED] DP_QUERY_PAYLOAD with port number
[18:58:00] [PASSED] DP_QUERY_PAYLOAD with VCPI
[18:58:00] [PASSED] DP_REMOTE_DPCD_READ with port number
[18:58:00] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[18:58:00] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[18:58:00] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[18:58:00] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[18:58:00] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[18:58:00] [PASSED] DP_REMOTE_I2C_READ with port number
[18:58:00] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[18:58:00] [PASSED] DP_REMOTE_I2C_READ with transactions array
[18:58:00] [PASSED] DP_REMOTE_I2C_WRITE with port number
[18:58:00] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[18:58:00] [PASSED] DP_REMOTE_I2C_WRITE with data array
[18:58:00] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[18:58:00] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[18:58:00] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[18:58:00] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[18:58:00] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[18:58:01] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[18:58:01] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[18:58:01] ================ [PASSED] drm_dp_mst_helper ================
[18:58:01] ================== drm_exec (7 subtests) ===================
[18:58:01] [PASSED] sanitycheck
[18:58:01] [PASSED] test_lock
[18:58:01] [PASSED] test_lock_unlock
[18:58:01] [PASSED] test_duplicates
[18:58:01] [PASSED] test_prepare
[18:58:01] [PASSED] test_prepare_array
[18:58:01] [PASSED] test_multiple_loops
[18:58:01] ==================== [PASSED] drm_exec =====================
[18:58:01] =========== drm_format_helper_test (17 subtests) ===========
[18:58:01] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[18:58:01] [PASSED] single_pixel_source_buffer
[18:58:01] [PASSED] single_pixel_clip_rectangle
[18:58:01] [PASSED] well_known_colors
[18:58:01] [PASSED] destination_pitch
[18:58:01] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[18:58:01] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[18:58:01] [PASSED] single_pixel_source_buffer
[18:58:01] [PASSED] single_pixel_clip_rectangle
[18:58:01] [PASSED] well_known_colors
[18:58:01] [PASSED] destination_pitch
[18:58:01] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[18:58:01] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[18:58:01] [PASSED] single_pixel_source_buffer
[18:58:01] [PASSED] single_pixel_clip_rectangle
[18:58:01] [PASSED] well_known_colors
[18:58:01] [PASSED] destination_pitch
[18:58:01] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[18:58:01] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[18:58:01] [PASSED] single_pixel_source_buffer
[18:58:01] [PASSED] single_pixel_clip_rectangle
[18:58:01] [PASSED] well_known_colors
[18:58:01] [PASSED] destination_pitch
[18:58:01] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[18:58:01] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[18:58:01] [PASSED] single_pixel_source_buffer
[18:58:01] [PASSED] single_pixel_clip_rectangle
[18:58:01] [PASSED] well_known_colors
[18:58:01] [PASSED] destination_pitch
[18:58:01] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[18:58:01] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[18:58:01] [PASSED] single_pixel_source_buffer
[18:58:01] [PASSED] single_pixel_clip_rectangle
[18:58:01] [PASSED] well_known_colors
[18:58:01] [PASSED] destination_pitch
[18:58:01] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[18:58:01] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[18:58:01] [PASSED] single_pixel_source_buffer
[18:58:01] [PASSED] single_pixel_clip_rectangle
[18:58:01] [PASSED] well_known_colors
[18:58:01] [PASSED] destination_pitch
[18:58:01] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[18:58:01] ============= drm_test_fb_xrgb8888_to_bgr888  ==============
[18:58:01] [PASSED] single_pixel_source_buffer
[18:58:01] [PASSED] single_pixel_clip_rectangle
[18:58:01] [PASSED] well_known_colors
[18:58:01] [PASSED] destination_pitch
[18:58:01] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[18:58:01] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[18:58:01] [PASSED] single_pixel_source_buffer
[18:58:01] [PASSED] single_pixel_clip_rectangle
[18:58:01] [PASSED] well_known_colors
[18:58:01] [PASSED] destination_pitch
[18:58:01] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[18:58:01] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[18:58:01] [PASSED] single_pixel_source_buffer
[18:58:01] [PASSED] single_pixel_clip_rectangle
[18:58:01] [PASSED] well_known_colors
[18:58:01] [PASSED] destination_pitch
[18:58:01] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[18:58:01] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[18:58:01] [PASSED] single_pixel_source_buffer
[18:58:01] [PASSED] single_pixel_clip_rectangle
[18:58:01] [PASSED] well_known_colors
[18:58:01] [PASSED] destination_pitch
[18:58:01] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[18:58:01] ============== drm_test_fb_xrgb8888_to_mono  ===============
[18:58:01] [PASSED] single_pixel_source_buffer
[18:58:01] [PASSED] single_pixel_clip_rectangle
[18:58:01] [PASSED] well_known_colors
[18:58:01] [PASSED] destination_pitch
[18:58:01] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[18:58:01] ==================== drm_test_fb_swab  =====================
[18:58:01] [PASSED] single_pixel_source_buffer
[18:58:01] [PASSED] single_pixel_clip_rectangle
[18:58:01] [PASSED] well_known_colors
[18:58:01] [PASSED] destination_pitch
[18:58:01] ================ [PASSED] drm_test_fb_swab =================
[18:58:01] ============ drm_test_fb_xrgb8888_to_xbgr8888  =============
[18:58:01] [PASSED] single_pixel_source_buffer
[18:58:01] [PASSED] single_pixel_clip_rectangle
[18:58:01] [PASSED] well_known_colors
[18:58:01] [PASSED] destination_pitch
[18:58:01] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[18:58:01] ============ drm_test_fb_xrgb8888_to_abgr8888  =============
[18:58:01] [PASSED] single_pixel_source_buffer
[18:58:01] [PASSED] single_pixel_clip_rectangle
[18:58:01] [PASSED] well_known_colors
[18:58:01] [PASSED] destination_pitch
[18:58:01] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[18:58:01] ================= drm_test_fb_clip_offset  =================
[18:58:01] [PASSED] pass through
[18:58:01] [PASSED] horizontal offset
[18:58:01] [PASSED] vertical offset
[18:58:01] [PASSED] horizontal and vertical offset
[18:58:01] [PASSED] horizontal offset (custom pitch)
[18:58:01] [PASSED] vertical offset (custom pitch)
[18:58:01] [PASSED] horizontal and vertical offset (custom pitch)
[18:58:01] ============= [PASSED] drm_test_fb_clip_offset =============
[18:58:01] =================== drm_test_fb_memcpy  ====================
[18:58:01] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[18:58:01] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[18:58:01] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[18:58:01] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[18:58:01] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[18:58:01] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[18:58:01] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[18:58:01] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[18:58:01] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[18:58:01] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[18:58:01] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[18:58:01] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[18:58:01] =============== [PASSED] drm_test_fb_memcpy ================
[18:58:01] ============= [PASSED] drm_format_helper_test ==============
[18:58:01] ================= drm_format (18 subtests) =================
[18:58:01] [PASSED] drm_test_format_block_width_invalid
[18:58:01] [PASSED] drm_test_format_block_width_one_plane
[18:58:01] [PASSED] drm_test_format_block_width_two_plane
[18:58:01] [PASSED] drm_test_format_block_width_three_plane
[18:58:01] [PASSED] drm_test_format_block_width_tiled
[18:58:01] [PASSED] drm_test_format_block_height_invalid
[18:58:01] [PASSED] drm_test_format_block_height_one_plane
[18:58:01] [PASSED] drm_test_format_block_height_two_plane
[18:58:01] [PASSED] drm_test_format_block_height_three_plane
[18:58:01] [PASSED] drm_test_format_block_height_tiled
[18:58:01] [PASSED] drm_test_format_min_pitch_invalid
[18:58:01] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[18:58:01] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[18:58:01] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[18:58:01] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[18:58:01] [PASSED] drm_test_format_min_pitch_two_plane
[18:58:01] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[18:58:01] [PASSED] drm_test_format_min_pitch_tiled
[18:58:01] =================== [PASSED] drm_format ====================
[18:58:01] ============== drm_framebuffer (10 subtests) ===============
[18:58:01] ========== drm_test_framebuffer_check_src_coords  ==========
[18:58:01] [PASSED] Success: source fits into fb
[18:58:01] [PASSED] Fail: overflowing fb with x-axis coordinate
[18:58:01] [PASSED] Fail: overflowing fb with y-axis coordinate
[18:58:01] [PASSED] Fail: overflowing fb with source width
[18:58:01] [PASSED] Fail: overflowing fb with source height
[18:58:01] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[18:58:01] [PASSED] drm_test_framebuffer_cleanup
[18:58:01] =============== drm_test_framebuffer_create  ===============
[18:58:01] [PASSED] ABGR8888 normal sizes
[18:58:01] [PASSED] ABGR8888 max sizes
[18:58:01] [PASSED] ABGR8888 pitch greater than min required
[18:58:01] [PASSED] ABGR8888 pitch less than min required
[18:58:01] [PASSED] ABGR8888 Invalid width
[18:58:01] [PASSED] ABGR8888 Invalid buffer handle
[18:58:01] [PASSED] No pixel format
[18:58:01] [PASSED] ABGR8888 Width 0
[18:58:01] [PASSED] ABGR8888 Height 0
[18:58:01] [PASSED] ABGR8888 Out of bound height * pitch combination
[18:58:01] [PASSED] ABGR8888 Large buffer offset
[18:58:01] [PASSED] ABGR8888 Buffer offset for inexistent plane
[18:58:01] [PASSED] ABGR8888 Invalid flag
[18:58:01] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[18:58:01] [PASSED] ABGR8888 Valid buffer modifier
[18:58:01] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[18:58:01] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[18:58:01] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[18:58:01] [PASSED] NV12 Normal sizes
[18:58:01] [PASSED] NV12 Max sizes
[18:58:01] [PASSED] NV12 Invalid pitch
[18:58:01] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[18:58:01] [PASSED] NV12 different  modifier per-plane
[18:58:01] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[18:58:01] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[18:58:01] [PASSED] NV12 Modifier for inexistent plane
[18:58:01] [PASSED] NV12 Handle for inexistent plane
[18:58:01] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[18:58:01] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[18:58:01] [PASSED] YVU420 Normal sizes
[18:58:01] [PASSED] YVU420 Max sizes
[18:58:01] [PASSED] YVU420 Invalid pitch
[18:58:01] [PASSED] YVU420 Different pitches
[18:58:01] [PASSED] YVU420 Different buffer offsets/pitches
[18:58:01] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[18:58:01] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[18:58:01] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[18:58:01] [PASSED] YVU420 Valid modifier
[18:58:01] [PASSED] YVU420 Different modifiers per plane
[18:58:01] [PASSED] YVU420 Modifier for inexistent plane
[18:58:01] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[18:58:01] [PASSED] X0L2 Normal sizes
[18:58:01] [PASSED] X0L2 Max sizes
[18:58:01] [PASSED] X0L2 Invalid pitch
[18:58:01] [PASSED] X0L2 Pitch greater than minimum required
[18:58:01] [PASSED] X0L2 Handle for inexistent plane
[18:58:01] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[18:58:01] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[18:58:01] [PASSED] X0L2 Valid modifier
[18:58:01] [PASSED] X0L2 Modifier for inexistent plane
[18:58:01] =========== [PASSED] drm_test_framebuffer_create ===========
[18:58:01] [PASSED] drm_test_framebuffer_free
[18:58:01] [PASSED] drm_test_framebuffer_init
[18:58:01] [PASSED] drm_test_framebuffer_init_bad_format
[18:58:01] [PASSED] drm_test_framebuffer_init_dev_mismatch
[18:58:01] [PASSED] drm_test_framebuffer_lookup
[18:58:01] [PASSED] drm_test_framebuffer_lookup_inexistent
[18:58:01] [PASSED] drm_test_framebuffer_modifiers_not_supported
[18:58:01] ================= [PASSED] drm_framebuffer =================
[18:58:01] ================ drm_gem_shmem (8 subtests) ================
[18:58:01] [PASSED] drm_gem_shmem_test_obj_create
[18:58:01] [PASSED] drm_gem_shmem_test_obj_create_private
[18:58:01] [PASSED] drm_gem_shmem_test_pin_pages
[18:58:01] [PASSED] drm_gem_shmem_test_vmap
[18:58:01] [PASSED] drm_gem_shmem_test_get_sg_table
[18:58:01] [PASSED] drm_gem_shmem_test_get_pages_sgt
[18:58:01] [PASSED] drm_gem_shmem_test_madvise
[18:58:01] [PASSED] drm_gem_shmem_test_purge
[18:58:01] ================== [PASSED] drm_gem_shmem ==================
[18:58:01] === drm_atomic_helper_connector_hdmi_check (27 subtests) ===
[18:58:01] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[18:58:01] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[18:58:01] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[18:58:01] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[18:58:01] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[18:58:01] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[18:58:01] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420  =======
[18:58:01] [PASSED] Automatic
[18:58:01] [PASSED] Full
[18:58:01] [PASSED] Limited 16:235
[18:58:01] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[18:58:01] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[18:58:01] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[18:58:01] [PASSED] drm_test_check_disable_connector
[18:58:01] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[18:58:01] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[18:58:01] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[18:58:01] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[18:58:01] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[18:58:01] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[18:58:01] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[18:58:01] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[18:58:01] [PASSED] drm_test_check_output_bpc_dvi
[18:58:01] [PASSED] drm_test_check_output_bpc_format_vic_1
[18:58:01] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[18:58:01] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[18:58:01] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[18:58:01] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[18:58:01] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[18:58:01] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[18:58:01] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[18:58:01] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[18:58:01] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[18:58:01] [PASSED] drm_test_check_broadcast_rgb_value
[18:58:01] [PASSED] drm_test_check_bpc_8_value
[18:58:01] [PASSED] drm_test_check_bpc_10_value
[18:58:01] [PASSED] drm_test_check_bpc_12_value
[18:58:01] [PASSED] drm_test_check_format_value
[18:58:01] [PASSED] drm_test_check_tmds_char_value
[18:58:01] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[18:58:01] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[18:58:01] [PASSED] drm_test_check_mode_valid
[18:58:01] [PASSED] drm_test_check_mode_valid_reject
[18:58:01] [PASSED] drm_test_check_mode_valid_reject_rate
[18:58:01] [PASSED] drm_test_check_mode_valid_reject_max_clock
[18:58:01] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[18:58:01] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[18:58:01] [PASSED] drm_test_check_infoframes
[18:58:01] [PASSED] drm_test_check_reject_avi_infoframe
[18:58:01] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[18:58:01] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[18:58:01] [PASSED] drm_test_check_reject_audio_infoframe
[18:58:01] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[18:58:01] ================= drm_managed (2 subtests) =================
[18:58:01] [PASSED] drm_test_managed_release_action
[18:58:01] [PASSED] drm_test_managed_run_action
[18:58:01] =================== [PASSED] drm_managed ===================
[18:58:01] =================== drm_mm (6 subtests) ====================
[18:58:01] [PASSED] drm_test_mm_init
[18:58:01] [PASSED] drm_test_mm_debug
[18:58:01] [PASSED] drm_test_mm_align32
[18:58:01] [PASSED] drm_test_mm_align64
[18:58:01] [PASSED] drm_test_mm_lowest
[18:58:01] [PASSED] drm_test_mm_highest
[18:58:01] ===================== [PASSED] drm_mm ======================
[18:58:01] ============= drm_modes_analog_tv (5 subtests) =============
[18:58:01] [PASSED] drm_test_modes_analog_tv_mono_576i
[18:58:01] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[18:58:01] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[18:58:01] [PASSED] drm_test_modes_analog_tv_pal_576i
[18:58:01] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[18:58:01] =============== [PASSED] drm_modes_analog_tv ===============
[18:58:01] ============== drm_plane_helper (2 subtests) ===============
[18:58:01] =============== drm_test_check_plane_state  ================
[18:58:01] [PASSED] clipping_simple
[18:58:01] [PASSED] clipping_rotate_reflect
[18:58:01] [PASSED] positioning_simple
[18:58:01] [PASSED] upscaling
[18:58:01] [PASSED] downscaling
[18:58:01] [PASSED] rounding1
[18:58:01] [PASSED] rounding2
[18:58:01] [PASSED] rounding3
[18:58:01] [PASSED] rounding4
[18:58:01] =========== [PASSED] drm_test_check_plane_state ============
[18:58:01] =========== drm_test_check_invalid_plane_state  ============
[18:58:01] [PASSED] positioning_invalid
[18:58:01] [PASSED] upscaling_invalid
[18:58:01] [PASSED] downscaling_invalid
[18:58:01] ======= [PASSED] drm_test_check_invalid_plane_state ========
[18:58:01] ================ [PASSED] drm_plane_helper =================
[18:58:01] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[18:58:01] ====== drm_test_connector_helper_tv_get_modes_check  =======
[18:58:01] [PASSED] None
[18:58:01] [PASSED] PAL
[18:58:01] [PASSED] NTSC
[18:58:01] [PASSED] Both, NTSC Default
[18:58:01] [PASSED] Both, PAL Default
[18:58:01] [PASSED] Both, NTSC Default, with PAL on command-line
[18:58:01] [PASSED] Both, PAL Default, with NTSC on command-line
[18:58:01] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[18:58:01] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[18:58:01] ================== drm_rect (9 subtests) ===================
[18:58:01] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[18:58:01] [PASSED] drm_test_rect_clip_scaled_not_clipped
[18:58:01] [PASSED] drm_test_rect_clip_scaled_clipped
[18:58:01] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[18:58:01] ================= drm_test_rect_intersect  =================
[18:58:01] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[18:58:01] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[18:58:01] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[18:58:01] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[18:58:01] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[18:58:01] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[18:58:01] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[18:58:01] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[18:58:01] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[18:58:01] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[18:58:01] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[18:58:01] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[18:58:01] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[18:58:01] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[18:58:01] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[18:58:01] ============= [PASSED] drm_test_rect_intersect =============
[18:58:01] ================ drm_test_rect_calc_hscale  ================
[18:58:01] [PASSED] normal use
[18:58:01] [PASSED] out of max range
[18:58:01] [PASSED] out of min range
[18:58:01] [PASSED] zero dst
[18:58:01] [PASSED] negative src
[18:58:01] [PASSED] negative dst
[18:58:01] ============ [PASSED] drm_test_rect_calc_hscale ============
[18:58:01] ================ drm_test_rect_calc_vscale  ================
[18:58:01] [PASSED] normal use
[18:58:01] [PASSED] out of max range
[18:58:01] [PASSED] out of min range
[18:58:01] [PASSED] zero dst
[18:58:01] [PASSED] negative src
[18:58:01] [PASSED] negative dst
stty: 'standard input': Inappropriate ioctl for device
[18:58:01] ============ [PASSED] drm_test_rect_calc_vscale ============
[18:58:01] ================== drm_test_rect_rotate  ===================
[18:58:01] [PASSED] reflect-x
[18:58:01] [PASSED] reflect-y
[18:58:01] [PASSED] rotate-0
[18:58:01] [PASSED] rotate-90
[18:58:01] [PASSED] rotate-180
[18:58:01] [PASSED] rotate-270
[18:58:01] ============== [PASSED] drm_test_rect_rotate ===============
[18:58:01] ================ drm_test_rect_rotate_inv  =================
[18:58:01] [PASSED] reflect-x
[18:58:01] [PASSED] reflect-y
[18:58:01] [PASSED] rotate-0
[18:58:01] [PASSED] rotate-90
[18:58:01] [PASSED] rotate-180
[18:58:01] [PASSED] rotate-270
[18:58:01] ============ [PASSED] drm_test_rect_rotate_inv =============
[18:58:01] ==================== [PASSED] drm_rect =====================
[18:58:01] ============ drm_sysfb_modeset_test (1 subtest) ============
[18:58:01] ============ drm_test_sysfb_build_fourcc_list  =============
[18:58:01] [PASSED] no native formats
[18:58:01] [PASSED] XRGB8888 as native format
[18:58:01] [PASSED] remove duplicates
[18:58:01] [PASSED] convert alpha formats
[18:58:01] [PASSED] random formats
[18:58:01] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[18:58:01] ============= [PASSED] drm_sysfb_modeset_test ==============
[18:58:01] ================== drm_fixp (2 subtests) ===================
[18:58:01] [PASSED] drm_test_int2fixp
[18:58:01] [PASSED] drm_test_sm2fixp
[18:58:01] ==================== [PASSED] drm_fixp =====================
[18:58:01] ============================================================
[18:58:01] Testing complete. Ran 621 tests: passed: 621
[18:58:01] Elapsed time: 27.340s total, 1.656s configuring, 25.518s building, 0.124s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[18:58:01] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[18:58:02] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[18:58:12] Starting KUnit Kernel (1/1)...
[18:58:12] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[18:58:12] ================= ttm_device (5 subtests) ==================
[18:58:12] [PASSED] ttm_device_init_basic
[18:58:12] [PASSED] ttm_device_init_multiple
[18:58:12] [PASSED] ttm_device_fini_basic
[18:58:12] [PASSED] ttm_device_init_no_vma_man
[18:58:12] ================== ttm_device_init_pools  ==================
[18:58:12] [PASSED] No DMA allocations, no DMA32 required
[18:58:12] [PASSED] DMA allocations, DMA32 required
[18:58:12] [PASSED] No DMA allocations, DMA32 required
[18:58:12] [PASSED] DMA allocations, no DMA32 required
[18:58:12] ============== [PASSED] ttm_device_init_pools ==============
[18:58:12] =================== [PASSED] ttm_device ====================
[18:58:12] ================== ttm_pool (8 subtests) ===================
[18:58:12] ================== ttm_pool_alloc_basic  ===================
[18:58:12] [PASSED] One page
[18:58:12] [PASSED] More than one page
[18:58:12] [PASSED] Above the allocation limit
[18:58:12] [PASSED] One page, with coherent DMA mappings enabled
[18:58:12] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[18:58:12] ============== [PASSED] ttm_pool_alloc_basic ===============
[18:58:12] ============== ttm_pool_alloc_basic_dma_addr  ==============
[18:58:12] [PASSED] One page
[18:58:12] [PASSED] More than one page
[18:58:12] [PASSED] Above the allocation limit
[18:58:12] [PASSED] One page, with coherent DMA mappings enabled
[18:58:12] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[18:58:12] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[18:58:12] [PASSED] ttm_pool_alloc_order_caching_match
[18:58:12] [PASSED] ttm_pool_alloc_caching_mismatch
[18:58:12] [PASSED] ttm_pool_alloc_order_mismatch
[18:58:12] [PASSED] ttm_pool_free_dma_alloc
[18:58:12] [PASSED] ttm_pool_free_no_dma_alloc
[18:58:12] [PASSED] ttm_pool_fini_basic
[18:58:12] ==================== [PASSED] ttm_pool =====================
[18:58:12] ================ ttm_resource (8 subtests) =================
[18:58:12] ================= ttm_resource_init_basic  =================
[18:58:12] [PASSED] Init resource in TTM_PL_SYSTEM
[18:58:12] [PASSED] Init resource in TTM_PL_VRAM
[18:58:12] [PASSED] Init resource in a private placement
[18:58:12] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[18:58:12] ============= [PASSED] ttm_resource_init_basic =============
[18:58:12] [PASSED] ttm_resource_init_pinned
[18:58:12] [PASSED] ttm_resource_fini_basic
[18:58:12] [PASSED] ttm_resource_manager_init_basic
[18:58:12] [PASSED] ttm_resource_manager_usage_basic
[18:58:12] [PASSED] ttm_resource_manager_set_used_basic
[18:58:12] [PASSED] ttm_sys_man_alloc_basic
[18:58:12] [PASSED] ttm_sys_man_free_basic
[18:58:12] ================== [PASSED] ttm_resource ===================
[18:58:12] =================== ttm_tt (15 subtests) ===================
[18:58:12] ==================== ttm_tt_init_basic  ====================
[18:58:12] [PASSED] Page-aligned size
[18:58:12] [PASSED] Extra pages requested
[18:58:12] ================ [PASSED] ttm_tt_init_basic ================
[18:58:12] [PASSED] ttm_tt_init_misaligned
[18:58:12] [PASSED] ttm_tt_fini_basic
[18:58:12] [PASSED] ttm_tt_fini_sg
[18:58:12] [PASSED] ttm_tt_fini_shmem
[18:58:12] [PASSED] ttm_tt_create_basic
[18:58:12] [PASSED] ttm_tt_create_invalid_bo_type
[18:58:12] [PASSED] ttm_tt_create_ttm_exists
[18:58:12] [PASSED] ttm_tt_create_failed
[18:58:12] [PASSED] ttm_tt_destroy_basic
[18:58:12] [PASSED] ttm_tt_populate_null_ttm
[18:58:12] [PASSED] ttm_tt_populate_populated_ttm
[18:58:12] [PASSED] ttm_tt_unpopulate_basic
[18:58:12] [PASSED] ttm_tt_unpopulate_empty_ttm
[18:58:12] [PASSED] ttm_tt_swapin_basic
[18:58:12] ===================== [PASSED] ttm_tt ======================
[18:58:12] =================== ttm_bo (14 subtests) ===================
[18:58:12] =========== ttm_bo_reserve_optimistic_no_ticket  ===========
[18:58:12] [PASSED] Cannot be interrupted and sleeps
[18:58:12] [PASSED] Cannot be interrupted, locks straight away
[18:58:12] [PASSED] Can be interrupted, sleeps
[18:58:12] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[18:58:12] [PASSED] ttm_bo_reserve_locked_no_sleep
[18:58:12] [PASSED] ttm_bo_reserve_no_wait_ticket
[18:58:12] [PASSED] ttm_bo_reserve_double_resv
[18:58:12] [PASSED] ttm_bo_reserve_interrupted
[18:58:12] [PASSED] ttm_bo_reserve_deadlock
[18:58:12] [PASSED] ttm_bo_unreserve_basic
[18:58:12] [PASSED] ttm_bo_unreserve_pinned
[18:58:12] [PASSED] ttm_bo_unreserve_bulk
[18:58:12] [PASSED] ttm_bo_fini_basic
[18:58:12] [PASSED] ttm_bo_fini_shared_resv
[18:58:12] [PASSED] ttm_bo_pin_basic
[18:58:12] [PASSED] ttm_bo_pin_unpin_resource
[18:58:12] [PASSED] ttm_bo_multiple_pin_one_unpin
[18:58:12] ===================== [PASSED] ttm_bo ======================
[18:58:12] ============== ttm_bo_validate (21 subtests) ===============
[18:58:12] ============== ttm_bo_init_reserved_sys_man  ===============
[18:58:12] [PASSED] Buffer object for userspace
[18:58:12] [PASSED] Kernel buffer object
[18:58:12] [PASSED] Shared buffer object
[18:58:12] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[18:58:12] ============== ttm_bo_init_reserved_mock_man  ==============
[18:58:12] [PASSED] Buffer object for userspace
[18:58:12] [PASSED] Kernel buffer object
[18:58:12] [PASSED] Shared buffer object
[18:58:12] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[18:58:12] [PASSED] ttm_bo_init_reserved_resv
[18:58:12] ================== ttm_bo_validate_basic  ==================
[18:58:12] [PASSED] Buffer object for userspace
[18:58:12] [PASSED] Kernel buffer object
[18:58:12] [PASSED] Shared buffer object
[18:58:12] ============== [PASSED] ttm_bo_validate_basic ==============
[18:58:12] [PASSED] ttm_bo_validate_invalid_placement
[18:58:12] ============= ttm_bo_validate_same_placement  ==============
[18:58:12] [PASSED] System manager
[18:58:12] [PASSED] VRAM manager
[18:58:12] ========= [PASSED] ttm_bo_validate_same_placement ==========
[18:58:12] [PASSED] ttm_bo_validate_failed_alloc
[18:58:12] [PASSED] ttm_bo_validate_pinned
[18:58:12] [PASSED] ttm_bo_validate_busy_placement
[18:58:12] ================ ttm_bo_validate_multihop  =================
[18:58:12] [PASSED] Buffer object for userspace
[18:58:12] [PASSED] Kernel buffer object
[18:58:12] [PASSED] Shared buffer object
[18:58:12] ============ [PASSED] ttm_bo_validate_multihop =============
[18:58:12] ========== ttm_bo_validate_no_placement_signaled  ==========
[18:58:12] [PASSED] Buffer object in system domain, no page vector
[18:58:12] [PASSED] Buffer object in system domain with an existing page vector
[18:58:12] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[18:58:12] ======== ttm_bo_validate_no_placement_not_signaled  ========
[18:58:12] [PASSED] Buffer object for userspace
[18:58:12] [PASSED] Kernel buffer object
[18:58:12] [PASSED] Shared buffer object
[18:58:12] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[18:58:12] [PASSED] ttm_bo_validate_move_fence_signaled
[18:58:12] ========= ttm_bo_validate_move_fence_not_signaled  =========
[18:58:12] [PASSED] Waits for GPU
[18:58:12] [PASSED] Tries to lock straight away
[18:58:12] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[18:58:12] [PASSED] ttm_bo_validate_happy_evict
[18:58:12] [PASSED] ttm_bo_validate_all_pinned_evict
[18:58:12] [PASSED] ttm_bo_validate_allowed_only_evict
[18:58:12] [PASSED] ttm_bo_validate_deleted_evict
[18:58:12] [PASSED] ttm_bo_validate_busy_domain_evict
[18:58:12] [PASSED] ttm_bo_validate_evict_gutting
[18:58:12] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[18:58:12] ================= [PASSED] ttm_bo_validate =================
[18:58:12] ============================================================
[18:58:12] Testing complete. Ran 101 tests: passed: 101
[18:58:12] Elapsed time: 11.541s total, 1.713s configuring, 9.613s building, 0.177s running

+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



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

* ✗ CI.checksparse: warning for drm/i915/display: convert a bunch of W/A checks to the new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
                   ` (15 preceding siblings ...)
  2026-02-12 18:58 ` ✓ CI.KUnit: success for drm/i915/display: convert a bunch of W/A checks to the " Patchwork
@ 2026-02-12 19:13 ` Patchwork
  2026-02-12 19:33 ` ✓ Xe.CI.BAT: success " Patchwork
  17 siblings, 0 replies; 39+ messages in thread
From: Patchwork @ 2026-02-12 19:13 UTC (permalink / raw)
  To: Luca Coelho; +Cc: intel-xe

== Series Details ==

Series: drm/i915/display: convert a bunch of W/A checks to the new framework
URL   : https://patchwork.freedesktop.org/series/161555/
State : warning

== Summary ==

+ trap cleanup EXIT
+ KERNEL=/kernel
+ MT=/root/linux/maintainer-tools
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools /root/linux/maintainer-tools
Cloning into '/root/linux/maintainer-tools'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ make -C /root/linux/maintainer-tools
make: Entering directory '/root/linux/maintainer-tools'
cc -O2 -g -Wextra -o remap-log remap-log.c
make: Leaving directory '/root/linux/maintainer-tools'
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ /root/linux/maintainer-tools/dim sparse --fast 923df5da4a4aad772379b172b2c38049bc47af41
Sparse version: 0.6.4 (Ubuntu: 0.6.4-4ubuntu3)
Fast mode used, each commit won't be checked separately.
+drivers/gpu/drm/i915/display/intel_audio.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_cursor.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_ddi.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_display_device.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_display_power.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_dp_mst.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_flipq.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_modeset_setup.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_pmdemand.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h, drivers/gpu/drm/i915/display/intel_display_trace.h):
+drivers/gpu/drm/i915/display/intel_psr.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/skl_universal_plane.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression

+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



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

* ✓ Xe.CI.BAT: success for drm/i915/display: convert a bunch of W/A checks to the new framework
  2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
                   ` (16 preceding siblings ...)
  2026-02-12 19:13 ` ✗ CI.checksparse: warning " Patchwork
@ 2026-02-12 19:33 ` Patchwork
  17 siblings, 0 replies; 39+ messages in thread
From: Patchwork @ 2026-02-12 19:33 UTC (permalink / raw)
  To: Luca Coelho; +Cc: intel-xe

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

== Series Details ==

Series: drm/i915/display: convert a bunch of W/A checks to the new framework
URL   : https://patchwork.freedesktop.org/series/161555/
State : success

== Summary ==

CI Bug Log - changes from xe-4550-923df5da4a4aad772379b172b2c38049bc47af41_BAT -> xe-pw-161555v1_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (11 -> 11)
------------------------------

  No changes in participating hosts


Changes
-------

  No changes found


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

  * Linux: xe-4550-923df5da4a4aad772379b172b2c38049bc47af41 -> xe-pw-161555v1

  IGT_8753: 8753
  xe-4550-923df5da4a4aad772379b172b2c38049bc47af41: 923df5da4a4aad772379b172b2c38049bc47af41
  xe-pw-161555v1: 161555v1

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161555v1/index.html

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

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

* RE: [PATCH v2 15/15] drm/i915/display: convert W/As in skl_watermark.c to new framework
  2026-02-12 18:46 ` [PATCH v2 15/15] drm/i915/display: convert W/As in skl_watermark.c " Luca Coelho
@ 2026-02-13  4:26   ` Kandpal, Suraj
  0 siblings, 0 replies; 39+ messages in thread
From: Kandpal, Suraj @ 2026-02-13  4:26 UTC (permalink / raw)
  To: Coelho, Luciano, intel-gfx@lists.freedesktop.org
  Cc: intel-xe@lists.freedesktop.org

> Subject: [PATCH v2 15/15] drm/i915/display: convert W/As in skl_watermark.c
> to new framework
> 
> Convert the low-hanging fruits of workaround checks to the workaround
> framework.  Instead of having display structure checks for the workarounds all
> over, concentrate the checks in intel_wa.c.

I think you  mean intel_display_wa.c
With that fixed,
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>

> 
> Acked-by: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display_wa.c | 2 ++
> drivers/gpu/drm/i915/display/intel_display_wa.h | 1 +
>  drivers/gpu/drm/i915/display/skl_watermark.c    | 3 ++-
>  3 files changed, 5 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 20216514c085..99a2097275b7 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> @@ -142,6 +142,8 @@ bool __intel_display_wa(struct intel_display *display,
> enum intel_display_wa wa,
>  			 IS_DISPLAY_STEP(display, STEP_A0, STEP_B0));
>  	case INTEL_DISPLAY_WA_22010178259:
>  		return DISPLAY_VER(display) == 12;
> +	case INTEL_DISPLAY_WA_22010947358:
> +		return display->platform.alderlake_p;
>  	case INTEL_DISPLAY_WA_22012278275:
>  		return display->platform.alderlake_p &&
>  			IS_DISPLAY_STEP(display, STEP_A0, STEP_E0); diff --
> git a/drivers/gpu/drm/i915/display/intel_display_wa.h
> b/drivers/gpu/drm/i915/display/intel_display_wa.h
> index 784baf66222b..52c3e3ebdeab 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> @@ -54,6 +54,7 @@ enum intel_display_wa {
>  	INTEL_DISPLAY_WA_16025596647,
>  	INTEL_DISPLAY_WA_18034343758,
>  	INTEL_DISPLAY_WA_22010178259,
> +	INTEL_DISPLAY_WA_22010947358,
>  	INTEL_DISPLAY_WA_22011320316,
>  	INTEL_DISPLAY_WA_22012278275,
>  	INTEL_DISPLAY_WA_22012358565,
> diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c
> b/drivers/gpu/drm/i915/display/skl_watermark.c
> index 8e3031adb09f..1940d914ddd5 100644
> --- a/drivers/gpu/drm/i915/display/skl_watermark.c
> +++ b/drivers/gpu/drm/i915/display/skl_watermark.c
> @@ -22,6 +22,7 @@
>  #include "intel_display_rpm.h"
>  #include "intel_display_types.h"
>  #include "intel_display_utils.h"
> +#include "intel_display_wa.h"
>  #include "intel_dram.h"
>  #include "intel_fb.h"
>  #include "intel_fixed.h"
> @@ -3412,7 +3413,7 @@ static u32 pipe_mbus_dbox_ctl(const struct
> intel_crtc *crtc,
>  	if (DISPLAY_VER(display) >= 14)
>  		val |= dbuf_state->joined_mbus ?
>  			MBUS_DBOX_A_CREDIT(12) :
> MBUS_DBOX_A_CREDIT(8);
> -	else if (display->platform.alderlake_p)
> +	else if (intel_display_wa(display, 22010947358))
>  		/* Wa_22010947358:adl-p */
>  		val |= dbuf_state->joined_mbus ?
>  			MBUS_DBOX_A_CREDIT(6) :
> MBUS_DBOX_A_CREDIT(4);
> --
> 2.51.0


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

* Re: [PATCH v2 01/15] drm/i915/display: convert audio workaround to new framework
  2026-02-12 18:45 ` [PATCH v2 01/15] drm/i915/display: convert audio workaround to " Luca Coelho
@ 2026-02-13  4:54   ` Ville Syrjälä
  2026-02-13  7:36     ` Luca Coelho
  0 siblings, 1 reply; 39+ messages in thread
From: Ville Syrjälä @ 2026-02-13  4:54 UTC (permalink / raw)
  To: Luca Coelho; +Cc: intel-gfx, intel-xe

On Thu, Feb 12, 2026 at 08:45:59PM +0200, Luca Coelho wrote:
> Convert the low-hanging fruits of workaround checks to the workaround
> framework.  Instead of having display structure checks for the
> workarounds all over, concentrate the checks in intel_wa.c.
> 
> Acked-by: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_audio.c      | 16 +++-------------
>  drivers/gpu/drm/i915/display/intel_display_wa.c |  4 ++++
>  drivers/gpu/drm/i915/display/intel_display_wa.h |  1 +
>  3 files changed, 8 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_audio.c b/drivers/gpu/drm/i915/display/intel_audio.c
> index 5f3c175afdd2..be4b5dbd36fe 100644
> --- a/drivers/gpu/drm/i915/display/intel_audio.c
> +++ b/drivers/gpu/drm/i915/display/intel_audio.c
> @@ -37,6 +37,7 @@
>  #include "intel_crtc.h"
>  #include "intel_de.h"
>  #include "intel_display_types.h"
> +#include "intel_display_wa.h"
>  #include "intel_lpe_audio.h"
>  
>  /**
> @@ -184,17 +185,6 @@ static const struct hdmi_aud_ncts hdmi_aud_ncts_36bpp[] = {
>  	{ 192000, TMDS_445_5M, 20480, 371250 },
>  };
>  
> -/*
> - * WA_14020863754: Implement Audio Workaround
> - * Corner case with Min Hblank Fix can cause audio hang

We are now losing the description of the problem. Not great.
Not that the description here is super clear, but at least it
gives me some idea what this is about.

Perhaps such descriptions should remain with the implementation?

> - */
> -static bool needs_wa_14020863754(struct intel_display *display)
> -{
> -	return DISPLAY_VERx100(display) == 3000 ||
> -		DISPLAY_VERx100(display) == 2000 ||
> -		DISPLAY_VERx100(display) == 1401;
> -}
> -
>  /* get AUD_CONFIG_PIXEL_CLOCK_HDMI_* value for mode */
>  static u32 audio_config_hdmi_pixel_clock(const struct intel_crtc_state *crtc_state)
>  {
> @@ -440,7 +430,7 @@ static void hsw_audio_codec_disable(struct intel_encoder *encoder,
>  	intel_de_rmw(display, HSW_AUD_PIN_ELD_CP_VLD,
>  		     AUDIO_OUTPUT_ENABLE(cpu_transcoder), 0);
>  
> -	if (needs_wa_14020863754(display))
> +	if (intel_display_wa(display, 14020863754))

This thing is still a major disaster. There is no way to get from
here to the list of affected platforms without jumping through crazy
hoops.

At the very least the intel_display_wa() macro magic needs to die
and this should just take the enum directly. Then I could at least
jump to places where said enum value is used fairly quickly with
cscope.

>  		intel_de_rmw(display, AUD_CHICKENBIT_REG3, DACBE_DISABLE_MIN_HBLANK_FIX, 0);
>  
>  	intel_audio_sdp_split_update(old_crtc_state, false);
> @@ -572,7 +562,7 @@ static void hsw_audio_codec_enable(struct intel_encoder *encoder,
>  
>  	intel_audio_sdp_split_update(crtc_state, true);
>  
> -	if (needs_wa_14020863754(display))
> +	if (intel_display_wa(display, 14020863754))
>  		intel_de_rmw(display, AUD_CHICKENBIT_REG3, 0, DACBE_DISABLE_MIN_HBLANK_FIX);
>  
>  	/* Enable audio presence detect */
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
> index c2ccdca2c2f3..99ccc383ee70 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> @@ -74,6 +74,10 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
>  			DISPLAY_VERx100(display) == 3500;
>  	case INTEL_DISPLAY_WA_14011503117:
>  		return DISPLAY_VER(display) == 13;
> +	case INTEL_DISPLAY_WA_14020863754:
> +		return DISPLAY_VERx100(display) == 3000 ||
> +			DISPLAY_VERx100(display) == 2000 ||
> +			DISPLAY_VERx100(display) == 1401;
>  	case INTEL_DISPLAY_WA_14025769978:
>  		return DISPLAY_VER(display) == 35;
>  	case INTEL_DISPLAY_WA_15018326506:
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
> index 767420d5f406..bb1382148b6e 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> @@ -29,6 +29,7 @@ bool intel_display_needs_wa_16023588340(struct intel_display *display);
>  enum intel_display_wa {
>  	INTEL_DISPLAY_WA_13012396614,
>  	INTEL_DISPLAY_WA_14011503117,
> +	INTEL_DISPLAY_WA_14020863754,
>  	INTEL_DISPLAY_WA_14025769978,
>  	INTEL_DISPLAY_WA_15018326506,
>  	INTEL_DISPLAY_WA_16023588340,
> -- 
> 2.51.0

-- 
Ville Syrjälä
Intel

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

* Re: [PATCH v2 11/15] drm/i915/display: convert W/As in intel_modeset_setup.c to new framework
  2026-02-12 18:46 ` [PATCH v2 11/15] drm/i915/display: convert W/As in intel_modeset_setup.c " Luca Coelho
@ 2026-02-13  5:04   ` Ville Syrjälä
  2026-02-13  8:04     ` Luca Coelho
  0 siblings, 1 reply; 39+ messages in thread
From: Ville Syrjälä @ 2026-02-13  5:04 UTC (permalink / raw)
  To: Luca Coelho; +Cc: intel-gfx, intel-xe

On Thu, Feb 12, 2026 at 08:46:09PM +0200, Luca Coelho wrote:
> Convert the low-hanging fruits of workaround checks to the workaround
> framework.  Instead of having display structure checks for the
> workarounds all over, concentrate the checks in intel_wa.c.
> 
> Acked-by: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display_wa.c    | 2 ++
>  drivers/gpu/drm/i915/display/intel_display_wa.h    | 1 +
>  drivers/gpu/drm/i915/display/intel_modeset_setup.c | 3 ++-
>  3 files changed, 5 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 3aa79e607bf8..72f645686efd 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> @@ -79,6 +79,8 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
>  	case INTEL_DISPLAY_WA_13012396614:
>  		return DISPLAY_VERx100(display) == 3000 ||
>  			DISPLAY_VERx100(display) == 3500;
> +	case INTEL_DISPLAY_WA_14010480278:
> +		return (IS_DISPLAY_VER(display, 10, 12));

This is now quite confusing. That w/a number only means something for
tgl+. I think if we want to start converting this kind of places someone
needs to come up with an actual plan how to deal with older platforms.

Also I'm pretty sure that even among the new platforms some w/a's are
listed with different numbers for different platforms. Has anyone
thought what we should do about that?

>  	case INTEL_DISPLAY_WA_14010547955:
>  		return display->platform.dg2;
>  	case INTEL_DISPLAY_WA_14010685332:
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
> index 57345d0abe1c..d8359f88de29 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> @@ -30,6 +30,7 @@ enum intel_display_wa {
>  	INTEL_DISPLAY_WA_1409120013,
>  	INTEL_DISPLAY_WA_1409767108,
>  	INTEL_DISPLAY_WA_13012396614,
> +	INTEL_DISPLAY_WA_14010480278,
>  	INTEL_DISPLAY_WA_14010547955,
>  	INTEL_DISPLAY_WA_14010685332,
>  	INTEL_DISPLAY_WA_14011294188,
> diff --git a/drivers/gpu/drm/i915/display/intel_modeset_setup.c b/drivers/gpu/drm/i915/display/intel_modeset_setup.c
> index 9b0becee221c..7ee1494a67af 100644
> --- a/drivers/gpu/drm/i915/display/intel_modeset_setup.c
> +++ b/drivers/gpu/drm/i915/display/intel_modeset_setup.c
> @@ -25,6 +25,7 @@
>  #include "intel_display_power.h"
>  #include "intel_display_regs.h"
>  #include "intel_display_types.h"
> +#include "intel_display_wa.h"
>  #include "intel_dmc.h"
>  #include "intel_fifo_underrun.h"
>  #include "intel_modeset_setup.h"
> @@ -913,7 +914,7 @@ static void intel_early_display_was(struct intel_display *display)
>  	 * Display WA #1185 WaDisableDARBFClkGating:glk,icl,ehl,tgl
>  	 * Also known as Wa_14010480278.
>  	 */
> -	if (IS_DISPLAY_VER(display, 10, 12))
> +	if (intel_display_wa(display, 14010480278))

>  		intel_de_rmw(display, GEN9_CLKGATE_DIS_0, 0, DARBF_GATING_DIS);
>  
>  	/*
> -- 
> 2.51.0

-- 
Ville Syrjälä
Intel

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

* Re: [PATCH v2 13/15] drm/i915/display: convert W/As in intel_psr.c to new framework
  2026-02-12 18:46 ` [PATCH v2 13/15] drm/i915/display: convert W/As in intel_psr.c " Luca Coelho
@ 2026-02-13  5:09   ` Ville Syrjälä
  2026-02-13  8:11     ` Luca Coelho
  0 siblings, 1 reply; 39+ messages in thread
From: Ville Syrjälä @ 2026-02-13  5:09 UTC (permalink / raw)
  To: Luca Coelho; +Cc: intel-gfx, intel-xe

On Thu, Feb 12, 2026 at 08:46:11PM +0200, Luca Coelho wrote:
> Convert the low-hanging fruits of workaround checks to the workaround
> framework.  Instead of having display structure checks for the
> workarounds all over, concentrate the checks in intel_wa.c.
> 
> Acked-by: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> ---
>  .../gpu/drm/i915/display/intel_display_wa.c   | 15 ++++++++++++--
>  .../gpu/drm/i915/display/intel_display_wa.h   |  4 ++++
>  drivers/gpu/drm/i915/display/intel_psr.c      | 20 ++++++++-----------
>  3 files changed, 25 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
> index 77ea2e5b8144..783e1383ff89 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> @@ -112,6 +112,13 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
>  		return DISPLAY_VER(display) == 20;
>  	case INTEL_DISPLAY_WA_15018326506:
>  		return display->platform.battlemage;
> +	case INTEL_DISPLAY_WA_16011303918:
> +	case INTEL_DISPLAY_WA_22011320316:
> +		return display->platform.alderlake_p &&
> +			IS_DISPLAY_STEP(display, STEP_A0, STEP_B0);
> +	case INTEL_DISPLAY_WA_16011181250:
> +		return display->platform.rocketlake || display->platform.alderlake_s ||
> +			display->platform.dg2;
>  	case INTEL_DISPLAY_WA_16011342517:
>  		return display->platform.alderlake_p &&
>  			IS_DISPLAY_STEP(display, STEP_A0, STEP_D0);
> @@ -121,15 +128,19 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
>  		return intel_display_needs_wa_16023588340(display);
>  	case INTEL_DISPLAY_WA_16025573575:
>  		return intel_display_needs_wa_16025573575(display);
> +	case INTEL_DISPLAY_WA_16025596647:
> +		return DISPLAY_VER(display) != 20 &&
> +			!IS_DISPLAY_VERx100_STEP(display, 3000,
> +						 STEP_A0, STEP_B0);

This one is nuts. It declarates (incorrectly) which platforms don't
need the w/a. I don't think this sort of thing should be allowed here
ever.

Presumably the only reason it was OK in the old place is because 
those codepaths were only executed on some new platforms. But
__intel_display_wa() is so generic that is is clearly meant to
give correct answers regardless of where it gets called.

>  	case INTEL_DISPLAY_WA_18034343758:
>  		return DISPLAY_VER(display) == 20 ||
>  			(display->platform.pantherlake &&
>  			 IS_DISPLAY_STEP(display, STEP_A0, STEP_B0));
>  	case INTEL_DISPLAY_WA_22010178259:
>  		return DISPLAY_VER(display) == 12;
> -	case INTEL_DISPLAY_WA_22011320316:
> +	case INTEL_DISPLAY_WA_22012278275:
>  		return display->platform.alderlake_p &&
> -			IS_DISPLAY_STEP(display, STEP_A0, STEP_B0);
> +			IS_DISPLAY_STEP(display, STEP_A0, STEP_E0);
>  	case INTEL_DISPLAY_WA_22014263786:
>  		return IS_DISPLAY_VERx100(display, 1100, 1400);
>  	case INTEL_DISPLAY_WA_22021048059:
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
> index 3d2cf05ffacc..35d8df4c75a2 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> @@ -44,13 +44,17 @@ enum intel_display_wa {
>  	INTEL_DISPLAY_WA_14025769978,
>  	INTEL_DISPLAY_WA_15013987218,
>  	INTEL_DISPLAY_WA_15018326506,
> +	INTEL_DISPLAY_WA_16011181250,
> +	INTEL_DISPLAY_WA_16011303918,
>  	INTEL_DISPLAY_WA_16011342517,
>  	INTEL_DISPLAY_WA_16011863758,
>  	INTEL_DISPLAY_WA_16023588340,
>  	INTEL_DISPLAY_WA_16025573575,
> +	INTEL_DISPLAY_WA_16025596647,
>  	INTEL_DISPLAY_WA_18034343758,
>  	INTEL_DISPLAY_WA_22010178259,
>  	INTEL_DISPLAY_WA_22011320316,
> +	INTEL_DISPLAY_WA_22012278275,
>  	INTEL_DISPLAY_WA_22012358565,
>  	INTEL_DISPLAY_WA_22014263786,
>  	INTEL_DISPLAY_WA_22021048059,
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> index 5bea2eda744b..b21e52f0c461 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -40,6 +40,7 @@
>  #include "intel_display_rpm.h"
>  #include "intel_display_types.h"
>  #include "intel_display_utils.h"
> +#include "intel_display_wa.h"
>  #include "intel_dmc.h"
>  #include "intel_dp.h"
>  #include "intel_dp_aux.h"
> @@ -1082,7 +1083,7 @@ static void hsw_activate_psr2(struct intel_dp *intel_dp)
>  	}
>  
>  	/* Wa_22012278275:adl-p */
> -	if (display->platform.alderlake_p && IS_DISPLAY_STEP(display, STEP_A0, STEP_E0)) {
> +	if (intel_display_wa(display, 22012278275)) {
>  		static const u8 map[] = {
>  			2, /* 5 lines */
>  			1, /* 6 lines */
> @@ -1263,7 +1264,7 @@ tgl_dc3co_exitline_compute_config(struct intel_dp *intel_dp,
>  		return;
>  
>  	/* Wa_16011303918:adl-p */
> -	if (display->platform.alderlake_p && IS_DISPLAY_STEP(display, STEP_A0, STEP_B0))
> +	if (intel_display_wa(display, 16011303918))
>  		return;
>  
>  	/*
> @@ -1540,8 +1541,7 @@ static bool intel_psr2_config_valid(struct intel_dp *intel_dp,
>  	}
>  
>  	/* Wa_16011181250 */
> -	if (display->platform.rocketlake || display->platform.alderlake_s ||
> -	    display->platform.dg2) {
> +	if (intel_display_wa(display, 16011181250)) {
>  		drm_dbg_kms(display->drm,
>  			    "PSR2 is defeatured for this platform\n");
>  		return false;
> @@ -1823,8 +1823,7 @@ void intel_psr_set_non_psr_pipes(struct intel_dp *intel_dp,
>  	u8 active_pipes = 0;
>  
>  	/* Wa_16025596647 */
> -	if (DISPLAY_VER(display) != 20 &&
> -	    !IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0))
> +	if (intel_display_wa(display, 16025596647))
>  		return;
>  
>  	/* Not needed by Panel Replay  */
> @@ -3973,8 +3972,7 @@ static void psr_dc5_dc6_wa_work(struct work_struct *work)
>   */
>  void intel_psr_notify_dc5_dc6(struct intel_display *display)
>  {
> -	if (DISPLAY_VER(display) != 20 &&
> -	    !IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0))
> +	if (intel_display_wa(display, 16025596647))
>  		return;
>  
>  	schedule_work(&display->psr_dc5_dc6_wa_work);
> @@ -3989,8 +3987,7 @@ void intel_psr_notify_dc5_dc6(struct intel_display *display)
>   */
>  void intel_psr_dc5_dc6_wa_init(struct intel_display *display)
>  {
> -	if (DISPLAY_VER(display) != 20 &&
> -	    !IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0))
> +	if (intel_display_wa(display, 16025596647))
>  		return;
>  
>  	INIT_WORK(&display->psr_dc5_dc6_wa_work, psr_dc5_dc6_wa_work);
> @@ -4011,8 +4008,7 @@ void intel_psr_notify_pipe_change(struct intel_atomic_state *state,
>  	struct intel_display *display = to_intel_display(state);
>  	struct intel_encoder *encoder;
>  
> -	if (DISPLAY_VER(display) != 20 &&
> -	    !IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0))
> +	if (intel_display_wa(display, 16025596647))
>  		return;
>  
>  	for_each_intel_encoder_with_psr(display->drm, encoder) {
> -- 
> 2.51.0

-- 
Ville Syrjälä
Intel

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

* Re: [PATCH v2 01/15] drm/i915/display: convert audio workaround to new framework
  2026-02-13  4:54   ` Ville Syrjälä
@ 2026-02-13  7:36     ` Luca Coelho
  0 siblings, 0 replies; 39+ messages in thread
From: Luca Coelho @ 2026-02-13  7:36 UTC (permalink / raw)
  To: Ville Syrjälä, Luca Coelho; +Cc: intel-gfx, intel-xe

On Fri, 2026-02-13 at 06:54 +0200, Ville Syrjälä wrote:
> On Thu, Feb 12, 2026 at 08:45:59PM +0200, Luca Coelho wrote:
> > Convert the low-hanging fruits of workaround checks to the workaround
> > framework.  Instead of having display structure checks for the
> > workarounds all over, concentrate the checks in intel_wa.c.
> > 
> > Acked-by: Jani Nikula <jani.nikula@intel.com>
> > Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_audio.c      | 16 +++-------------
> >  drivers/gpu/drm/i915/display/intel_display_wa.c |  4 ++++
> >  drivers/gpu/drm/i915/display/intel_display_wa.h |  1 +
> >  3 files changed, 8 insertions(+), 13 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_audio.c b/drivers/gpu/drm/i915/display/intel_audio.c
> > index 5f3c175afdd2..be4b5dbd36fe 100644
> > --- a/drivers/gpu/drm/i915/display/intel_audio.c
> > +++ b/drivers/gpu/drm/i915/display/intel_audio.c
> > @@ -37,6 +37,7 @@
> >  #include "intel_crtc.h"
> >  #include "intel_de.h"
> >  #include "intel_display_types.h"
> > +#include "intel_display_wa.h"
> >  #include "intel_lpe_audio.h"
> >  
> >  /**
> > @@ -184,17 +185,6 @@ static const struct hdmi_aud_ncts hdmi_aud_ncts_36bpp[] = {
> >  	{ 192000, TMDS_445_5M, 20480, 371250 },
> >  };
> >  
> > -/*
> > - * WA_14020863754: Implement Audio Workaround
> > - * Corner case with Min Hblank Fix can cause audio hang
> 
> We are now losing the description of the problem. Not great.
> Not that the description here is super clear, but at least it
> gives me some idea what this is about.
> 
> Perhaps such descriptions should remain with the implementation?

Sorry, this was accidental.  In all the remaining patches I just kept
the comments at the call site.

I'll add it back.


> > - */
> > -static bool needs_wa_14020863754(struct intel_display *display)
> > -{
> > -	return DISPLAY_VERx100(display) == 3000 ||
> > -		DISPLAY_VERx100(display) == 2000 ||
> > -		DISPLAY_VERx100(display) == 1401;
> > -}
> > -
> >  /* get AUD_CONFIG_PIXEL_CLOCK_HDMI_* value for mode */
> >  static u32 audio_config_hdmi_pixel_clock(const struct intel_crtc_state *crtc_state)
> >  {
> > @@ -440,7 +430,7 @@ static void hsw_audio_codec_disable(struct intel_encoder *encoder,
> >  	intel_de_rmw(display, HSW_AUD_PIN_ELD_CP_VLD,
> >  		     AUDIO_OUTPUT_ENABLE(cpu_transcoder), 0);
> >  
> > -	if (needs_wa_14020863754(display))
> > +	if (intel_display_wa(display, 14020863754))
> 
> This thing is still a major disaster. There is no way to get from
> here to the list of affected platforms without jumping through crazy
> hoops.

I agree, this whole workarounds stuff is a mess.  There are gazillions
of workarounds spread around the code, and most of them can't be
converted to using this "framework".  Actually, anything that needs
data from elsewhere than struct intel_display doesn't fit in.


> At the very least the intel_display_wa() macro magic needs to die
> and this should just take the enum directly. Then I could at least
> jump to places where said enum value is used fairly quickly with
> cscope.

I totally agree and thought the same.  The macro thing to convert this
number to INTEL_DISPLAY_WA_<number> is useless and just convolutes
things even more.

I'll add a patch to the beginning of this series to remove that.

OTOH, there's a lot to improve, expand and clean up in the way we
handle these.  I'm pretty sure a lot of the workarounds are pretty much
dead-code too, because some of the devices the workarounds are for have
never been released to public.  I bet the majority of the STEP_A0
devices handled in workarounds have never been released.

But this was not the intention of this patch-series.  Here I'm only
moving the "simple ones", i.e. the ones that can be easily be handled
by this framework.

--
Cheers,
Luca.


> >  		intel_de_rmw(display, AUD_CHICKENBIT_REG3, DACBE_DISABLE_MIN_HBLANK_FIX, 0);
> >  
> >  	intel_audio_sdp_split_update(old_crtc_state, false);
> > @@ -572,7 +562,7 @@ static void hsw_audio_codec_enable(struct intel_encoder *encoder,
> >  
> >  	intel_audio_sdp_split_update(crtc_state, true);
> >  
> > -	if (needs_wa_14020863754(display))
> > +	if (intel_display_wa(display, 14020863754))
> >  		intel_de_rmw(display, AUD_CHICKENBIT_REG3, 0, DACBE_DISABLE_MIN_HBLANK_FIX);
> >  
> >  	/* Enable audio presence detect */
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
> > index c2ccdca2c2f3..99ccc383ee70 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> > @@ -74,6 +74,10 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
> >  			DISPLAY_VERx100(display) == 3500;
> >  	case INTEL_DISPLAY_WA_14011503117:
> >  		return DISPLAY_VER(display) == 13;
> > +	case INTEL_DISPLAY_WA_14020863754:
> > +		return DISPLAY_VERx100(display) == 3000 ||
> > +			DISPLAY_VERx100(display) == 2000 ||
> > +			DISPLAY_VERx100(display) == 1401;
> >  	case INTEL_DISPLAY_WA_14025769978:
> >  		return DISPLAY_VER(display) == 35;
> >  	case INTEL_DISPLAY_WA_15018326506:
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
> > index 767420d5f406..bb1382148b6e 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> > +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> > @@ -29,6 +29,7 @@ bool intel_display_needs_wa_16023588340(struct intel_display *display);
> >  enum intel_display_wa {
> >  	INTEL_DISPLAY_WA_13012396614,
> >  	INTEL_DISPLAY_WA_14011503117,
> > +	INTEL_DISPLAY_WA_14020863754,
> >  	INTEL_DISPLAY_WA_14025769978,
> >  	INTEL_DISPLAY_WA_15018326506,
> >  	INTEL_DISPLAY_WA_16023588340,
> > -- 
> > 2.51.0

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

* Re: [PATCH v2 11/15] drm/i915/display: convert W/As in intel_modeset_setup.c to new framework
  2026-02-13  5:04   ` Ville Syrjälä
@ 2026-02-13  8:04     ` Luca Coelho
  2026-02-13  8:24       ` Kandpal, Suraj
  0 siblings, 1 reply; 39+ messages in thread
From: Luca Coelho @ 2026-02-13  8:04 UTC (permalink / raw)
  To: Ville Syrjälä, Luca Coelho; +Cc: intel-gfx, intel-xe

On Fri, 2026-02-13 at 07:04 +0200, Ville Syrjälä wrote:
> On Thu, Feb 12, 2026 at 08:46:09PM +0200, Luca Coelho wrote:
> > Convert the low-hanging fruits of workaround checks to the workaround
> > framework.  Instead of having display structure checks for the
> > workarounds all over, concentrate the checks in intel_wa.c.
> > 
> > Acked-by: Jani Nikula <jani.nikula@intel.com>
> > Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_display_wa.c    | 2 ++
> >  drivers/gpu/drm/i915/display/intel_display_wa.h    | 1 +
> >  drivers/gpu/drm/i915/display/intel_modeset_setup.c | 3 ++-
> >  3 files changed, 5 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 3aa79e607bf8..72f645686efd 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> > @@ -79,6 +79,8 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
> >  	case INTEL_DISPLAY_WA_13012396614:
> >  		return DISPLAY_VERx100(display) == 3000 ||
> >  			DISPLAY_VERx100(display) == 3500;
> > +	case INTEL_DISPLAY_WA_14010480278:
> > +		return (IS_DISPLAY_VER(display, 10, 12));
> 
> This is now quite confusing. That w/a number only means something for
> tgl+. I think if we want to start converting this kind of places someone
> needs to come up with an actual plan how to deal with older platforms.

If there are more numbers from other platforms, I think they should
just have their own cases, like in some later patches in this series,
eg.:

	case INTEL_DISPLAY_WA_<tgl+_wa_number>:
	case INTEL_DISPLAY_WA_<lnl_wa_number>:

...but this was a problem before my series already, and it's not
something I'm trying to address here.


> Also I'm pretty sure that even among the new platforms some w/a's are
> listed with different numbers for different platforms. Has anyone
> thought what we should do about that?

Yeah, and there's also the case where more than workaround has the same
check, we'll end up with many fallthrough cases.

--
Cheers,
Luca.


> >  	case INTEL_DISPLAY_WA_14010547955:
> >  		return display->platform.dg2;
> >  	case INTEL_DISPLAY_WA_14010685332:
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
> > index 57345d0abe1c..d8359f88de29 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> > +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> > @@ -30,6 +30,7 @@ enum intel_display_wa {
> >  	INTEL_DISPLAY_WA_1409120013,
> >  	INTEL_DISPLAY_WA_1409767108,
> >  	INTEL_DISPLAY_WA_13012396614,
> > +	INTEL_DISPLAY_WA_14010480278,
> >  	INTEL_DISPLAY_WA_14010547955,
> >  	INTEL_DISPLAY_WA_14010685332,
> >  	INTEL_DISPLAY_WA_14011294188,
> > diff --git a/drivers/gpu/drm/i915/display/intel_modeset_setup.c b/drivers/gpu/drm/i915/display/intel_modeset_setup.c
> > index 9b0becee221c..7ee1494a67af 100644
> > --- a/drivers/gpu/drm/i915/display/intel_modeset_setup.c
> > +++ b/drivers/gpu/drm/i915/display/intel_modeset_setup.c
> > @@ -25,6 +25,7 @@
> >  #include "intel_display_power.h"
> >  #include "intel_display_regs.h"
> >  #include "intel_display_types.h"
> > +#include "intel_display_wa.h"
> >  #include "intel_dmc.h"
> >  #include "intel_fifo_underrun.h"
> >  #include "intel_modeset_setup.h"
> > @@ -913,7 +914,7 @@ static void intel_early_display_was(struct intel_display *display)
> >  	 * Display WA #1185 WaDisableDARBFClkGating:glk,icl,ehl,tgl
> >  	 * Also known as Wa_14010480278.
> >  	 */
> > -	if (IS_DISPLAY_VER(display, 10, 12))
> > +	if (intel_display_wa(display, 14010480278))
> 
> >  		intel_de_rmw(display, GEN9_CLKGATE_DIS_0, 0, DARBF_GATING_DIS);
> >  
> >  	/*
> > -- 
> > 2.51.0

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

* Re: [PATCH v2 13/15] drm/i915/display: convert W/As in intel_psr.c to new framework
  2026-02-13  5:09   ` Ville Syrjälä
@ 2026-02-13  8:11     ` Luca Coelho
  0 siblings, 0 replies; 39+ messages in thread
From: Luca Coelho @ 2026-02-13  8:11 UTC (permalink / raw)
  To: Ville Syrjälä, Luca Coelho; +Cc: intel-gfx, intel-xe

On Fri, 2026-02-13 at 07:09 +0200, Ville Syrjälä wrote:
> On Thu, Feb 12, 2026 at 08:46:11PM +0200, Luca Coelho wrote:
> > Convert the low-hanging fruits of workaround checks to the workaround
> > framework.  Instead of having display structure checks for the
> > workarounds all over, concentrate the checks in intel_wa.c.
> > 
> > Acked-by: Jani Nikula <jani.nikula@intel.com>
> > Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> > ---
> >  .../gpu/drm/i915/display/intel_display_wa.c   | 15 ++++++++++++--
> >  .../gpu/drm/i915/display/intel_display_wa.h   |  4 ++++
> >  drivers/gpu/drm/i915/display/intel_psr.c      | 20 ++++++++-----------
> >  3 files changed, 25 insertions(+), 14 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c b/drivers/gpu/drm/i915/display/intel_display_wa.c
> > index 77ea2e5b8144..783e1383ff89 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> > @@ -112,6 +112,13 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
> >  		return DISPLAY_VER(display) == 20;
> >  	case INTEL_DISPLAY_WA_15018326506:
> >  		return display->platform.battlemage;
> > +	case INTEL_DISPLAY_WA_16011303918:
> > +	case INTEL_DISPLAY_WA_22011320316:
> > +		return display->platform.alderlake_p &&
> > +			IS_DISPLAY_STEP(display, STEP_A0, STEP_B0);
> > +	case INTEL_DISPLAY_WA_16011181250:
> > +		return display->platform.rocketlake || display->platform.alderlake_s ||
> > +			display->platform.dg2;
> >  	case INTEL_DISPLAY_WA_16011342517:
> >  		return display->platform.alderlake_p &&
> >  			IS_DISPLAY_STEP(display, STEP_A0, STEP_D0);
> > @@ -121,15 +128,19 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
> >  		return intel_display_needs_wa_16023588340(display);
> >  	case INTEL_DISPLAY_WA_16025573575:
> >  		return intel_display_needs_wa_16025573575(display);
> > +	case INTEL_DISPLAY_WA_16025596647:
> > +		return DISPLAY_VER(display) != 20 &&
> > +			!IS_DISPLAY_VERx100_STEP(display, 3000,
> > +						 STEP_A0, STEP_B0);
> 
> This one is nuts. It declarates (incorrectly) which platforms don't
> need the w/a. I don't think this sort of thing should be allowed here
> ever.

Yeah, this is bad.  I noticed the inversion (i.e. return who _doesn't_
need, as opposed to how all the other ones, which return who _does_
need the workaroun), but I admit I didn't give it much attention.  I'll
invert it.


> Presumably the only reason it was OK in the old place is because 
> those codepaths were only executed on some new platforms. But
> __intel_display_wa() is so generic that is is clearly meant to
> give correct answers regardless of where it gets called.

I don't think it was okay in the old place either.  It's just confusing
(unless it had a clear comment on why it was like this).

--
Cheers,
Luca.


> >  	case INTEL_DISPLAY_WA_18034343758:
> >  		return DISPLAY_VER(display) == 20 ||
> >  			(display->platform.pantherlake &&
> >  			 IS_DISPLAY_STEP(display, STEP_A0, STEP_B0));
> >  	case INTEL_DISPLAY_WA_22010178259:
> >  		return DISPLAY_VER(display) == 12;
> > -	case INTEL_DISPLAY_WA_22011320316:
> > +	case INTEL_DISPLAY_WA_22012278275:
> >  		return display->platform.alderlake_p &&
> > -			IS_DISPLAY_STEP(display, STEP_A0, STEP_B0);
> > +			IS_DISPLAY_STEP(display, STEP_A0, STEP_E0);
> >  	case INTEL_DISPLAY_WA_22014263786:
> >  		return IS_DISPLAY_VERx100(display, 1100, 1400);
> >  	case INTEL_DISPLAY_WA_22021048059:
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h b/drivers/gpu/drm/i915/display/intel_display_wa.h
> > index 3d2cf05ffacc..35d8df4c75a2 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> > +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> > @@ -44,13 +44,17 @@ enum intel_display_wa {
> >  	INTEL_DISPLAY_WA_14025769978,
> >  	INTEL_DISPLAY_WA_15013987218,
> >  	INTEL_DISPLAY_WA_15018326506,
> > +	INTEL_DISPLAY_WA_16011181250,
> > +	INTEL_DISPLAY_WA_16011303918,
> >  	INTEL_DISPLAY_WA_16011342517,
> >  	INTEL_DISPLAY_WA_16011863758,
> >  	INTEL_DISPLAY_WA_16023588340,
> >  	INTEL_DISPLAY_WA_16025573575,
> > +	INTEL_DISPLAY_WA_16025596647,
> >  	INTEL_DISPLAY_WA_18034343758,
> >  	INTEL_DISPLAY_WA_22010178259,
> >  	INTEL_DISPLAY_WA_22011320316,
> > +	INTEL_DISPLAY_WA_22012278275,
> >  	INTEL_DISPLAY_WA_22012358565,
> >  	INTEL_DISPLAY_WA_22014263786,
> >  	INTEL_DISPLAY_WA_22021048059,
> > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> > index 5bea2eda744b..b21e52f0c461 100644
> > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > @@ -40,6 +40,7 @@
> >  #include "intel_display_rpm.h"
> >  #include "intel_display_types.h"
> >  #include "intel_display_utils.h"
> > +#include "intel_display_wa.h"
> >  #include "intel_dmc.h"
> >  #include "intel_dp.h"
> >  #include "intel_dp_aux.h"
> > @@ -1082,7 +1083,7 @@ static void hsw_activate_psr2(struct intel_dp *intel_dp)
> >  	}
> >  
> >  	/* Wa_22012278275:adl-p */
> > -	if (display->platform.alderlake_p && IS_DISPLAY_STEP(display, STEP_A0, STEP_E0)) {
> > +	if (intel_display_wa(display, 22012278275)) {
> >  		static const u8 map[] = {
> >  			2, /* 5 lines */
> >  			1, /* 6 lines */
> > @@ -1263,7 +1264,7 @@ tgl_dc3co_exitline_compute_config(struct intel_dp *intel_dp,
> >  		return;
> >  
> >  	/* Wa_16011303918:adl-p */
> > -	if (display->platform.alderlake_p && IS_DISPLAY_STEP(display, STEP_A0, STEP_B0))
> > +	if (intel_display_wa(display, 16011303918))
> >  		return;
> >  
> >  	/*
> > @@ -1540,8 +1541,7 @@ static bool intel_psr2_config_valid(struct intel_dp *intel_dp,
> >  	}
> >  
> >  	/* Wa_16011181250 */
> > -	if (display->platform.rocketlake || display->platform.alderlake_s ||
> > -	    display->platform.dg2) {
> > +	if (intel_display_wa(display, 16011181250)) {
> >  		drm_dbg_kms(display->drm,
> >  			    "PSR2 is defeatured for this platform\n");
> >  		return false;
> > @@ -1823,8 +1823,7 @@ void intel_psr_set_non_psr_pipes(struct intel_dp *intel_dp,
> >  	u8 active_pipes = 0;
> >  
> >  	/* Wa_16025596647 */
> > -	if (DISPLAY_VER(display) != 20 &&
> > -	    !IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0))
> > +	if (intel_display_wa(display, 16025596647))
> >  		return;
> >  
> >  	/* Not needed by Panel Replay  */
> > @@ -3973,8 +3972,7 @@ static void psr_dc5_dc6_wa_work(struct work_struct *work)
> >   */
> >  void intel_psr_notify_dc5_dc6(struct intel_display *display)
> >  {
> > -	if (DISPLAY_VER(display) != 20 &&
> > -	    !IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0))
> > +	if (intel_display_wa(display, 16025596647))
> >  		return;
> >  
> >  	schedule_work(&display->psr_dc5_dc6_wa_work);
> > @@ -3989,8 +3987,7 @@ void intel_psr_notify_dc5_dc6(struct intel_display *display)
> >   */
> >  void intel_psr_dc5_dc6_wa_init(struct intel_display *display)
> >  {
> > -	if (DISPLAY_VER(display) != 20 &&
> > -	    !IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0))
> > +	if (intel_display_wa(display, 16025596647))
> >  		return;
> >  
> >  	INIT_WORK(&display->psr_dc5_dc6_wa_work, psr_dc5_dc6_wa_work);
> > @@ -4011,8 +4008,7 @@ void intel_psr_notify_pipe_change(struct intel_atomic_state *state,
> >  	struct intel_display *display = to_intel_display(state);
> >  	struct intel_encoder *encoder;
> >  
> > -	if (DISPLAY_VER(display) != 20 &&
> > -	    !IS_DISPLAY_VERx100_STEP(display, 3000, STEP_A0, STEP_B0))
> > +	if (intel_display_wa(display, 16025596647))
> >  		return;
> >  
> >  	for_each_intel_encoder_with_psr(display->drm, encoder) {
> > -- 
> > 2.51.0

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

* RE: [PATCH v2 14/15] drm/i915/display: convert W/As in skl_universal_plane.c to new framework
  2026-02-12 18:46 ` [PATCH v2 14/15] drm/i915/display: convert W/As in skl_universal_plane.c " Luca Coelho
@ 2026-02-13  8:18   ` Kandpal, Suraj
  0 siblings, 0 replies; 39+ messages in thread
From: Kandpal, Suraj @ 2026-02-13  8:18 UTC (permalink / raw)
  To: Coelho, Luciano, intel-gfx@lists.freedesktop.org
  Cc: intel-xe@lists.freedesktop.org

> Subject: [PATCH v2 14/15] drm/i915/display: convert W/As in
> skl_universal_plane.c to new framework
> 
> Convert the low-hanging fruits of workaround checks to the workaround
> framework.  Instead of having display structure checks for the workarounds all
> over, concentrate the checks in intel_wa.c.

*intel_display_wa.c

> 
> Acked-by: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display_wa.c    | 4 ++++
>  drivers/gpu/drm/i915/display/intel_display_wa.h    | 1 +
>  drivers/gpu/drm/i915/display/skl_universal_plane.c | 6 +++---
>  3 files changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c
> b/drivers/gpu/drm/i915/display/intel_display_wa.c
> index 783e1383ff89..20216514c085 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> @@ -79,6 +79,10 @@ bool __intel_display_wa(struct intel_display *display,
> enum intel_display_wa wa,
>  	case INTEL_DISPLAY_WA_13012396614:
>  		return DISPLAY_VERx100(display) == 3000 ||
>  			DISPLAY_VERx100(display) == 3500;
> +	case INTEL_DISPLAY_WA_14010477008:
> +		return display->platform.dg1 || display->platform.rocketlake
> ||
> +			(display->platform.tigerlake &&
> +			 IS_DISPLAY_STEP(display, STEP_A0, STEP_D0));
>  	case INTEL_DISPLAY_WA_14010480278:
>  		return (IS_DISPLAY_VER(display, 10, 12));
>  	case INTEL_DISPLAY_WA_14010547955:
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h
> b/drivers/gpu/drm/i915/display/intel_display_wa.h
> index 35d8df4c75a2..784baf66222b 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> @@ -30,6 +30,7 @@ enum intel_display_wa {
>  	INTEL_DISPLAY_WA_1409120013,
>  	INTEL_DISPLAY_WA_1409767108,
>  	INTEL_DISPLAY_WA_13012396614,
> +	INTEL_DISPLAY_WA_14010477008,
>  	INTEL_DISPLAY_WA_14010480278,
>  	INTEL_DISPLAY_WA_14010547955,
>  	INTEL_DISPLAY_WA_14010685332,
> diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c
> b/drivers/gpu/drm/i915/display/skl_universal_plane.c
> index 746e942cafd2..9f31c609271f 100644
> --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
> +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
> @@ -17,6 +17,7 @@
>  #include "intel_display_regs.h"
>  #include "intel_display_types.h"
>  #include "intel_display_utils.h"
> +#include "intel_display_wa.h"
>  #include "intel_dpt.h"
>  #include "intel_fb.h"
>  #include "intel_fbc.h"
> @@ -1217,7 +1218,7 @@ static u32 skl_plane_ctl(const struct intel_plane_state
> *plane_state)
>  		plane_ctl |= PLANE_CTL_KEY_ENABLE_SOURCE;
> 
>  	/* Wa_22012358565:adl-p */
> -	if (DISPLAY_VER(display) == 13)
> +	if (intel_display_wa(display, 22012358565))

I feel like you missed to add this WA no in the enum and corresponding intel_display_wa function

Regards,
Suraj Kandpal 

>  		plane_ctl |= adlp_plane_ctl_arb_slots(plane_state);
> 
>  	return plane_ctl;
> @@ -2793,8 +2794,7 @@ static bool tgl_plane_has_mc_ccs(struct intel_display
> *display,
>  				 enum plane_id plane_id)
>  {
>  	/* Wa_14010477008 */
> -	if (display->platform.dg1 || display->platform.rocketlake ||
> -	    (display->platform.tigerlake && IS_DISPLAY_STEP(display, STEP_A0,
> STEP_D0)))
> +	if (intel_display_wa(display, 14010477008))
>  		return false;
> 
>  	return plane_id < PLANE_6;
> --
> 2.51.0


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

* RE: [PATCH v2 12/15] drm/i915/display: convert W/As in intel_pmdemand.c to new framework
  2026-02-12 18:46 ` [PATCH v2 12/15] drm/i915/display: convert W/As in intel_pmdemand.c " Luca Coelho
@ 2026-02-13  8:20   ` Kandpal, Suraj
  0 siblings, 0 replies; 39+ messages in thread
From: Kandpal, Suraj @ 2026-02-13  8:20 UTC (permalink / raw)
  To: Coelho, Luciano, intel-gfx@lists.freedesktop.org
  Cc: intel-xe@lists.freedesktop.org


> Subject: [PATCH v2 12/15] drm/i915/display: convert W/As in
> intel_pmdemand.c to new framework
> 
> Convert the low-hanging fruits of workaround checks to the workaround
> framework.  Instead of having display structure checks for the workarounds all
> over, concentrate the checks in intel_wa.c.

*intel_display_wa.c

With that fixed
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>

> 
> Acked-by: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display_wa.c | 2 ++
> drivers/gpu/drm/i915/display/intel_display_wa.h | 1 +
>  drivers/gpu/drm/i915/display/intel_pmdemand.c   | 8 +++++---
>  3 files changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c
> b/drivers/gpu/drm/i915/display/intel_display_wa.c
> index 72f645686efd..77ea2e5b8144 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> @@ -100,6 +100,8 @@ bool __intel_display_wa(struct intel_display *display,
> enum intel_display_wa wa,
>  			IS_DISPLAY_STEP(display, STEP_A0, STEP_A2);
>  	case INTEL_DISPLAY_WA_14014143976:
>  		return IS_DISPLAY_STEP(display, STEP_E0, STEP_FOREVER);
> +	case INTEL_DISPLAY_WA_14016740474:
> +		return IS_DISPLAY_VERx100_STEP(display, 1400, STEP_A0,
> STEP_C0);
>  	case INTEL_DISPLAY_WA_14020863754:
>  		return DISPLAY_VERx100(display) == 3000 ||
>  			DISPLAY_VERx100(display) == 2000 ||
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h
> b/drivers/gpu/drm/i915/display/intel_display_wa.h
> index d8359f88de29..3d2cf05ffacc 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> @@ -39,6 +39,7 @@ enum intel_display_wa {
>  	INTEL_DISPLAY_WA_14011508470,
>  	INTEL_DISPLAY_WA_14011765242,
>  	INTEL_DISPLAY_WA_14014143976,
> +	INTEL_DISPLAY_WA_14016740474,
>  	INTEL_DISPLAY_WA_14020863754,
>  	INTEL_DISPLAY_WA_14025769978,
>  	INTEL_DISPLAY_WA_15013987218,
> diff --git a/drivers/gpu/drm/i915/display/intel_pmdemand.c
> b/drivers/gpu/drm/i915/display/intel_pmdemand.c
> index dc44a7a169c1..3b7471df6287 100644
> --- a/drivers/gpu/drm/i915/display/intel_pmdemand.c
> +++ b/drivers/gpu/drm/i915/display/intel_pmdemand.c
> @@ -15,6 +15,7 @@
>  #include "intel_display_regs.h"
>  #include "intel_display_trace.h"
>  #include "intel_display_utils.h"
> +#include "intel_display_wa.h"
>  #include "intel_pmdemand.h"
>  #include "intel_step.h"
>  #include "skl_watermark.h"
> @@ -129,9 +130,10 @@ int intel_pmdemand_init(struct intel_display
> *display)
>  				     &pmdemand_state->base,
>  				     &intel_pmdemand_funcs);
> 
> -	if (IS_DISPLAY_VERx100_STEP(display, 1400, STEP_A0, STEP_C0))
> -		/* Wa_14016740474 */
> -		intel_de_rmw(display, XELPD_CHICKEN_DCPR_3, 0,
> DMD_RSP_TIMEOUT_DISABLE);
> +	/* Wa_14016740474 */
> +	if (intel_display_wa(display, 14016740474))
> +		intel_de_rmw(display, XELPD_CHICKEN_DCPR_3, 0,
> +			     DMD_RSP_TIMEOUT_DISABLE);
> 
>  	return 0;
>  }
> --
> 2.51.0


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

* RE: [PATCH v2 11/15] drm/i915/display: convert W/As in intel_modeset_setup.c to new framework
  2026-02-13  8:04     ` Luca Coelho
@ 2026-02-13  8:24       ` Kandpal, Suraj
  2026-02-13  9:19         ` Luca Coelho
  0 siblings, 1 reply; 39+ messages in thread
From: Kandpal, Suraj @ 2026-02-13  8:24 UTC (permalink / raw)
  To: Luca Coelho, Ville Syrjälä, Coelho, Luciano
  Cc: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org

> Subject: Re: [PATCH v2 11/15] drm/i915/display: convert W/As in
> intel_modeset_setup.c to new framework
> 
> On Fri, 2026-02-13 at 07:04 +0200, Ville Syrjälä wrote:
> > On Thu, Feb 12, 2026 at 08:46:09PM +0200, Luca Coelho wrote:
> > > Convert the low-hanging fruits of workaround checks to the
> > > workaround framework.  Instead of having display structure checks
> > > for the workarounds all over, concentrate the checks in intel_wa.c.
> > >
> > > Acked-by: Jani Nikula <jani.nikula@intel.com>
> > > Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> > > ---
> > >  drivers/gpu/drm/i915/display/intel_display_wa.c    | 2 ++
> > >  drivers/gpu/drm/i915/display/intel_display_wa.h    | 1 +
> > >  drivers/gpu/drm/i915/display/intel_modeset_setup.c | 3 ++-
> > >  3 files changed, 5 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 3aa79e607bf8..72f645686efd 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> > > @@ -79,6 +79,8 @@ bool __intel_display_wa(struct intel_display *display,
> enum intel_display_wa wa,
> > >  	case INTEL_DISPLAY_WA_13012396614:
> > >  		return DISPLAY_VERx100(display) == 3000 ||
> > >  			DISPLAY_VERx100(display) == 3500;
> > > +	case INTEL_DISPLAY_WA_14010480278:
> > > +		return (IS_DISPLAY_VER(display, 10, 12));
> >
> > This is now quite confusing. That w/a number only means something for
> > tgl+. I think if we want to start converting this kind of places
> > tgl+someone
> > needs to come up with an actual plan how to deal with older platforms.
> 
> If there are more numbers from other platforms, I think they should just have
> their own cases, like in some later patches in this series,
> eg.:
> 
> 	case INTEL_DISPLAY_WA_<tgl+_wa_number>:
> 	case INTEL_DISPLAY_WA_<lnl_wa_number>:
> 
> ...but this was a problem before my series already, and it's not something I'm
> trying to address here.
> 
> 
> > Also I'm pretty sure that even among the new platforms some w/a's are
> > listed with different numbers for different platforms. Has anyone
> > thought what we should do about that?
> 
> Yeah, and there's also the case where more than workaround has the same
> check, we'll end up with many fallthrough cases.
> 


My two cents here:
Maybe we first get all the WA's here into this framework then work on how to optimize it later.
Perhaps documenting how and where WA's can be placed, their numbering and version checking.

Regards,
Suraj Kandpal

> --
> Cheers,
> Luca.
> 
> 
> > >  	case INTEL_DISPLAY_WA_14010547955:
> > >  		return display->platform.dg2;
> > >  	case INTEL_DISPLAY_WA_14010685332:
> > > diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h
> > > b/drivers/gpu/drm/i915/display/intel_display_wa.h
> > > index 57345d0abe1c..d8359f88de29 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> > > +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> > > @@ -30,6 +30,7 @@ enum intel_display_wa {
> > >  	INTEL_DISPLAY_WA_1409120013,
> > >  	INTEL_DISPLAY_WA_1409767108,
> > >  	INTEL_DISPLAY_WA_13012396614,
> > > +	INTEL_DISPLAY_WA_14010480278,
> > >  	INTEL_DISPLAY_WA_14010547955,
> > >  	INTEL_DISPLAY_WA_14010685332,
> > >  	INTEL_DISPLAY_WA_14011294188,
> > > diff --git a/drivers/gpu/drm/i915/display/intel_modeset_setup.c
> > > b/drivers/gpu/drm/i915/display/intel_modeset_setup.c
> > > index 9b0becee221c..7ee1494a67af 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_modeset_setup.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_modeset_setup.c
> > > @@ -25,6 +25,7 @@
> > >  #include "intel_display_power.h"
> > >  #include "intel_display_regs.h"
> > >  #include "intel_display_types.h"
> > > +#include "intel_display_wa.h"
> > >  #include "intel_dmc.h"
> > >  #include "intel_fifo_underrun.h"
> > >  #include "intel_modeset_setup.h"
> > > @@ -913,7 +914,7 @@ static void intel_early_display_was(struct
> intel_display *display)
> > >  	 * Display WA #1185 WaDisableDARBFClkGating:glk,icl,ehl,tgl
> > >  	 * Also known as Wa_14010480278.
> > >  	 */
> > > -	if (IS_DISPLAY_VER(display, 10, 12))
> > > +	if (intel_display_wa(display, 14010480278))
> >
> > >  		intel_de_rmw(display, GEN9_CLKGATE_DIS_0, 0,
> DARBF_GATING_DIS);
> > >
> > >  	/*
> > > --
> > > 2.51.0

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

* RE: [PATCH v2 10/15] drm/i915/display: convert W/As in intel_flipq.c to new framework
  2026-02-12 18:46 ` [PATCH v2 10/15] drm/i915/display: convert W/As in intel_flipq.c " Luca Coelho
@ 2026-02-13  8:26   ` Kandpal, Suraj
  0 siblings, 0 replies; 39+ messages in thread
From: Kandpal, Suraj @ 2026-02-13  8:26 UTC (permalink / raw)
  To: Coelho, Luciano, intel-gfx@lists.freedesktop.org
  Cc: intel-xe@lists.freedesktop.org

> Subject: [PATCH v2 10/15] drm/i915/display: convert W/As in intel_flipq.c to
> new framework
> 
> Convert the low-hanging fruits of workaround checks to the workaround
> framework.  Instead of having display structure checks for the workarounds all
> over, concentrate the checks in intel_wa.c.

*intel_display_wa.c
With that fixed
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>

> 
> Acked-by: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display_wa.c |  4 ++++
> drivers/gpu/drm/i915/display/intel_display_wa.h |  1 +
>  drivers/gpu/drm/i915/display/intel_flipq.c      | 13 +++----------
>  3 files changed, 8 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c
> b/drivers/gpu/drm/i915/display/intel_display_wa.c
> index 1459e5df1dd3..3aa79e607bf8 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> @@ -117,6 +117,10 @@ bool __intel_display_wa(struct intel_display
> *display, enum intel_display_wa wa,
>  		return intel_display_needs_wa_16023588340(display);
>  	case INTEL_DISPLAY_WA_16025573575:
>  		return intel_display_needs_wa_16025573575(display);
> +	case INTEL_DISPLAY_WA_18034343758:
> +		return DISPLAY_VER(display) == 20 ||
> +			(display->platform.pantherlake &&
> +			 IS_DISPLAY_STEP(display, STEP_A0, STEP_B0));
>  	case INTEL_DISPLAY_WA_22010178259:
>  		return DISPLAY_VER(display) == 12;
>  	case INTEL_DISPLAY_WA_22011320316:
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h
> b/drivers/gpu/drm/i915/display/intel_display_wa.h
> index 87fe404962ce..57345d0abe1c 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> @@ -46,6 +46,7 @@ enum intel_display_wa {
>  	INTEL_DISPLAY_WA_16011863758,
>  	INTEL_DISPLAY_WA_16023588340,
>  	INTEL_DISPLAY_WA_16025573575,
> +	INTEL_DISPLAY_WA_18034343758,
>  	INTEL_DISPLAY_WA_22010178259,
>  	INTEL_DISPLAY_WA_22011320316,
>  	INTEL_DISPLAY_WA_22012358565,
> diff --git a/drivers/gpu/drm/i915/display/intel_flipq.c
> b/drivers/gpu/drm/i915/display/intel_flipq.c
> index 1e9550cb66a3..234fe22498f0 100644
> --- a/drivers/gpu/drm/i915/display/intel_flipq.c
> +++ b/drivers/gpu/drm/i915/display/intel_flipq.c
> @@ -12,6 +12,7 @@
>  #include "intel_display_core.h"
>  #include "intel_display_types.h"
>  #include "intel_display_utils.h"
> +#include "intel_display_wa.h"
>  #include "intel_dmc.h"
>  #include "intel_dmc_regs.h"
>  #include "intel_dsb.h"
> @@ -447,19 +448,11 @@ void intel_flipq_add(struct intel_crtc *crtc,
>  	intel_flipq_sw_dmc_wake(crtc);
>  }
> 
> -/* Wa_18034343758 */
> -static bool need_dmc_halt_wa(struct intel_display *display) -{
> -	return DISPLAY_VER(display) == 20 ||
> -		(display->platform.pantherlake &&
> -		 IS_DISPLAY_STEP(display, STEP_A0, STEP_B0));
> -}
> -
>  void intel_flipq_wait_dmc_halt(struct intel_dsb *dsb, struct intel_crtc *crtc)
> {
>  	struct intel_display *display = to_intel_display(crtc);
> 
> -	if (need_dmc_halt_wa(display))
> +	if (intel_display_wa(display, 18034343758))
>  		intel_dsb_wait_usec(dsb, 2);
>  }
> 
> @@ -467,6 +460,6 @@ void intel_flipq_unhalt_dmc(struct intel_dsb *dsb,
> struct intel_crtc *crtc)  {
>  	struct intel_display *display = to_intel_display(crtc);
> 
> -	if (need_dmc_halt_wa(display))
> +	if (intel_display_wa(display, 18034343758))
>  		intel_dsb_reg_write(dsb, PIPEDMC_CTL(crtc->pipe), 0);  }
> --
> 2.51.0


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

* RE: [PATCH v2 07/15] drm/i915/display: convert W/As in intel_display_device.c to new framework
  2026-02-12 18:46 ` [PATCH v2 07/15] drm/i915/display: convert W/As in intel_display_device.c " Luca Coelho
@ 2026-02-13  8:29   ` Kandpal, Suraj
  0 siblings, 0 replies; 39+ messages in thread
From: Kandpal, Suraj @ 2026-02-13  8:29 UTC (permalink / raw)
  To: Coelho, Luciano, intel-gfx@lists.freedesktop.org
  Cc: intel-xe@lists.freedesktop.org

> Subject: [PATCH v2 07/15] drm/i915/display: convert W/As in
> intel_display_device.c to new framework
> 
> Convert the low-hanging fruits of workaround checks to the workaround
> framework.  Instead of having display structure checks for the workarounds all
> over, concentrate the checks in intel_wa.c.

*intel_display_wa.c
With that fixed
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>

> 
> Acked-by: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display_device.c | 3 ++-
>  drivers/gpu/drm/i915/display/intel_display_wa.c     | 3 +++
>  drivers/gpu/drm/i915/display/intel_display_wa.h     | 1 +
>  3 files changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_device.c
> b/drivers/gpu/drm/i915/display/intel_display_device.c
> index e79913a858b3..e88ae1884213 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_device.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_device.c
> @@ -19,6 +19,7 @@
>  #include "intel_display_reg_defs.h"
>  #include "intel_display_regs.h"
>  #include "intel_display_types.h"
> +#include "intel_display_wa.h"
>  #include "intel_fbc.h"
>  #include "intel_step.h"
> 
> @@ -1773,7 +1774,7 @@ static void
> __intel_display_device_info_runtime_init(struct intel_display *displ
>  		display_runtime->port_mask |= BIT(PORT_F);
> 
>  	/* Wa_14011765242: adl-s A0,A1 */
> -	if (display->platform.alderlake_s && IS_DISPLAY_STEP(display,
> STEP_A0, STEP_A2))
> +	if (intel_display_wa(display, 14011765242))
>  		for_each_pipe(display, pipe)
>  			display_runtime->num_scalers[pipe] = 0;
>  	else if (DISPLAY_VER(display) >= 11) { diff --git
> a/drivers/gpu/drm/i915/display/intel_display_wa.c
> b/drivers/gpu/drm/i915/display/intel_display_wa.c
> index 744ca7828f06..b45212708110 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> @@ -91,6 +91,9 @@ bool __intel_display_wa(struct intel_display *display,
> enum intel_display_wa wa,
>  		return DISPLAY_VER(display) == 13;
>  	case INTEL_DISPLAY_WA_14011508470:
>  		return (IS_DISPLAY_VERx100(display, 1200, 1300));
> +	case INTEL_DISPLAY_WA_14011765242:
> +		return display->platform.alderlake_s &&
> +			IS_DISPLAY_STEP(display, STEP_A0, STEP_A2);
>  	case INTEL_DISPLAY_WA_14020863754:
>  		return DISPLAY_VERx100(display) == 3000 ||
>  			DISPLAY_VERx100(display) == 2000 ||
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h
> b/drivers/gpu/drm/i915/display/intel_display_wa.h
> index 4fab1b27087a..923cb917e727 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> @@ -35,6 +35,7 @@ enum intel_display_wa {
>  	INTEL_DISPLAY_WA_14011503030,
>  	INTEL_DISPLAY_WA_14011503117,
>  	INTEL_DISPLAY_WA_14011508470,
> +	INTEL_DISPLAY_WA_14011765242,
>  	INTEL_DISPLAY_WA_14020863754,
>  	INTEL_DISPLAY_WA_14025769978,
>  	INTEL_DISPLAY_WA_15013987218,
> --
> 2.51.0


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

* RE: [PATCH v2 09/15] drm/i915/display: convert W/As in intel_fbc.c to new framework
  2026-02-12 18:46 ` [PATCH v2 09/15] drm/i915/display: convert W/As in intel_fbc.c " Luca Coelho
@ 2026-02-13  8:32   ` Kandpal, Suraj
  0 siblings, 0 replies; 39+ messages in thread
From: Kandpal, Suraj @ 2026-02-13  8:32 UTC (permalink / raw)
  To: Coelho, Luciano, intel-gfx@lists.freedesktop.org
  Cc: intel-xe@lists.freedesktop.org

> Subject: [PATCH v2 09/15] drm/i915/display: convert W/As in intel_fbc.c to
> new framework
> 
> Convert the low-hanging fruits of workaround checks to the workaround
> framework.  Instead of having display structure checks for the workarounds all
> over, concentrate the checks in intel_wa.c.

*intel_display_wa.c
With that fixed
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>

> 
> Acked-by: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display_wa.c | 4 ++++
> drivers/gpu/drm/i915/display/intel_display_wa.h | 2 ++
>  drivers/gpu/drm/i915/display/intel_fbc.c        | 4 ++--
>  3 files changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c
> b/drivers/gpu/drm/i915/display/intel_display_wa.c
> index 798e77200751..1459e5df1dd3 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> @@ -70,6 +70,8 @@ static bool intel_display_needs_wa_16025573575(struct
> intel_display *display)  bool __intel_display_wa(struct intel_display *display,
> enum intel_display_wa wa, const char *name)  {
>  	switch (wa) {
> +	case INTEL_DISPLAY_WA_1409120013:
> +		return IS_DISPLAY_VER(display, 11, 12);
>  	case INTEL_DISPLAY_WA_1409767108:
>  		return (display->platform.alderlake_s ||
>  			(display->platform.rocketlake &&
> @@ -109,6 +111,8 @@ bool __intel_display_wa(struct intel_display *display,
> enum intel_display_wa wa,
>  	case INTEL_DISPLAY_WA_16011342517:
>  		return display->platform.alderlake_p &&
>  			IS_DISPLAY_STEP(display, STEP_A0, STEP_D0);
> +	case INTEL_DISPLAY_WA_16011863758:
> +		return DISPLAY_VER(display) >= 11;
>  	case INTEL_DISPLAY_WA_16023588340:
>  		return intel_display_needs_wa_16023588340(display);
>  	case INTEL_DISPLAY_WA_16025573575:
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h
> b/drivers/gpu/drm/i915/display/intel_display_wa.h
> index 2e5ce21e0455..87fe404962ce 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> @@ -27,6 +27,7 @@ bool intel_display_needs_wa_16023588340(struct
> intel_display *display);
>   * number.
>   */
>  enum intel_display_wa {
> +	INTEL_DISPLAY_WA_1409120013,
>  	INTEL_DISPLAY_WA_1409767108,
>  	INTEL_DISPLAY_WA_13012396614,
>  	INTEL_DISPLAY_WA_14010547955,
> @@ -42,6 +43,7 @@ enum intel_display_wa {
>  	INTEL_DISPLAY_WA_15013987218,
>  	INTEL_DISPLAY_WA_15018326506,
>  	INTEL_DISPLAY_WA_16011342517,
> +	INTEL_DISPLAY_WA_16011863758,
>  	INTEL_DISPLAY_WA_16023588340,
>  	INTEL_DISPLAY_WA_16025573575,
>  	INTEL_DISPLAY_WA_22010178259,
> diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c
> b/drivers/gpu/drm/i915/display/intel_fbc.c
> index 9f39b6990bbd..a9e1dc7caa64 100644
> --- a/drivers/gpu/drm/i915/display/intel_fbc.c
> +++ b/drivers/gpu/drm/i915/display/intel_fbc.c
> @@ -184,7 +184,7 @@ static unsigned int skl_fbc_min_cfb_stride(struct
> intel_display *display,
>  	 * Wa_16011863758: icl+
>  	 * Avoid some hardware segment address miscalculation.
>  	 */
> -	if (DISPLAY_VER(display) >= 11)
> +	if (intel_display_wa(display, 16011863758))
>  		stride += 64;
> 
>  	/*
> @@ -950,7 +950,7 @@ static void intel_fbc_program_workarounds(struct
> intel_fbc *fbc)
>  	}
> 
>  	/* Wa_1409120013:icl,jsl,tgl,dg1 */
> -	if (IS_DISPLAY_VER(display, 11, 12))
> +	if (intel_display_wa(display, 1409120013))
>  		intel_de_rmw(display, ILK_DPFC_CHICKEN(fbc->id),
>  			     0, DPFC_CHICKEN_COMP_DUMMY_PIXEL);
>  	/*
> --
> 2.51.0


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

* RE: [PATCH v2 08/15] drm/i915/display: convert W/As in intel_dp_mst.c to new framework
  2026-02-12 18:46 ` [PATCH v2 08/15] drm/i915/display: convert W/As in intel_dp_mst.c " Luca Coelho
@ 2026-02-13  8:36   ` Kandpal, Suraj
  0 siblings, 0 replies; 39+ messages in thread
From: Kandpal, Suraj @ 2026-02-13  8:36 UTC (permalink / raw)
  To: Coelho, Luciano, intel-gfx@lists.freedesktop.org
  Cc: intel-xe@lists.freedesktop.org

> Subject: [PATCH v2 08/15] drm/i915/display: convert W/As in intel_dp_mst.c
> to new framework
> 
> Convert the low-hanging fruits of workaround checks to the workaround
> framework.  Instead of having display structure checks for the workarounds all
> over, concentrate the checks in intel_wa.c.
> 

*intel_display_wa.c
With that fixed,
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>

> Acked-by: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display_wa.c | 2 ++
> drivers/gpu/drm/i915/display/intel_display_wa.h | 1 +
>  drivers/gpu/drm/i915/display/intel_dp_mst.c     | 3 ++-
>  3 files changed, 5 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 b45212708110..798e77200751 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> @@ -94,6 +94,8 @@ bool __intel_display_wa(struct intel_display *display,
> enum intel_display_wa wa,
>  	case INTEL_DISPLAY_WA_14011765242:
>  		return display->platform.alderlake_s &&
>  			IS_DISPLAY_STEP(display, STEP_A0, STEP_A2);
> +	case INTEL_DISPLAY_WA_14014143976:
> +		return IS_DISPLAY_STEP(display, STEP_E0, STEP_FOREVER);
>  	case INTEL_DISPLAY_WA_14020863754:
>  		return DISPLAY_VERx100(display) == 3000 ||
>  			DISPLAY_VERx100(display) == 2000 ||
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h
> b/drivers/gpu/drm/i915/display/intel_display_wa.h
> index 923cb917e727..2e5ce21e0455 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> @@ -36,6 +36,7 @@ enum intel_display_wa {
>  	INTEL_DISPLAY_WA_14011503117,
>  	INTEL_DISPLAY_WA_14011508470,
>  	INTEL_DISPLAY_WA_14011765242,
> +	INTEL_DISPLAY_WA_14014143976,
>  	INTEL_DISPLAY_WA_14020863754,
>  	INTEL_DISPLAY_WA_14025769978,
>  	INTEL_DISPLAY_WA_15013987218,
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> index 29713075e413..e338dd12b39e 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -43,6 +43,7 @@
>  #include "intel_display_regs.h"
>  #include "intel_display_types.h"
>  #include "intel_display_utils.h"
> +#include "intel_display_wa.h"
>  #include "intel_dp.h"
>  #include "intel_dp_hdcp.h"
>  #include "intel_dp_link_training.h"
> @@ -1274,7 +1275,7 @@ static void enable_bs_jitter_was(const struct
> intel_crtc_state *crtc_state)
>  		set |= DP_MST_FEC_BS_JITTER_WA(crtc_state-
> >cpu_transcoder);
> 
>  	/* Wa_14014143976:adlp */
> -	if (IS_DISPLAY_STEP(display, STEP_E0, STEP_FOREVER)) {
> +	if (intel_display_wa(display, 14014143976)) {
>  		if (intel_dp_is_uhbr(crtc_state))
>  			set |= DP_MST_SHORT_HBLANK_WA(crtc_state-
> >cpu_transcoder);
>  		else if (crtc_state->fec_enable)
> --
> 2.51.0


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

* RE: [PATCH v2 06/15] drm/i915/display: convert W/As in intel_display.c to new framework
  2026-02-12 18:46 ` [PATCH v2 06/15] drm/i915/display: convert W/As in intel_display.c " Luca Coelho
@ 2026-02-13  8:38   ` Kandpal, Suraj
  0 siblings, 0 replies; 39+ messages in thread
From: Kandpal, Suraj @ 2026-02-13  8:38 UTC (permalink / raw)
  To: Coelho, Luciano, intel-gfx@lists.freedesktop.org
  Cc: intel-xe@lists.freedesktop.org

> Subject: [PATCH v2 06/15] drm/i915/display: convert W/As in intel_display.c to
> new framework
> 
> Convert the low-hanging fruits of workaround checks to the workaround
> framework.  Instead of having display structure checks for the workarounds all
> over, concentrate the checks in intel_wa.c.
> 
> Acked-by: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c    | 4 ++--
>  drivers/gpu/drm/i915/display/intel_display_wa.c | 2 ++
> drivers/gpu/drm/i915/display/intel_display_wa.h | 1 +
>  3 files changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> b/drivers/gpu/drm/i915/display/intel_display.c
> index bd93add5101b..36312e8444bf 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -454,7 +454,7 @@ void intel_enable_transcoder(const struct
> intel_crtc_state *new_crtc_state)
>  	}
> 
>  	/* Wa_22012358565:adl-p */
> -	if (DISPLAY_VER(display) == 13)
> +	if (intel_display_wa(display, 22012358565))

Did you forget to add this as an enum

Regards,
Suraj Kandpal

>  		intel_de_rmw(display, PIPE_ARB_CTL(display, pipe),
>  			     0, PIPE_ARB_USE_PROG_SLOTS);
> 
> @@ -708,7 +708,7 @@ static void icl_set_pipe_chicken(const struct
> intel_crtc_state *crtc_state)
>  		tmp |= UNDERRUN_RECOVERY_DISABLE_ADLP;
> 
>  	/* Wa_14010547955:dg2 */
> -	if (display->platform.dg2)
> +	if (intel_display_wa(display, 14010547955))
>  		tmp |= DG2_RENDER_CCSTAG_4_3_EN;
> 
>  	intel_de_write(display, PIPE_CHICKEN(pipe), tmp); diff --git
> a/drivers/gpu/drm/i915/display/intel_display_wa.c
> b/drivers/gpu/drm/i915/display/intel_display_wa.c
> index e2bbc3a90eca..744ca7828f06 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> @@ -77,6 +77,8 @@ bool __intel_display_wa(struct intel_display *display,
> enum intel_display_wa wa,
>  	case INTEL_DISPLAY_WA_13012396614:
>  		return DISPLAY_VERx100(display) == 3000 ||
>  			DISPLAY_VERx100(display) == 3500;
> +	case INTEL_DISPLAY_WA_14010547955:
> +		return display->platform.dg2;
>  	case INTEL_DISPLAY_WA_14010685332:
>  		return INTEL_PCH_TYPE(display) >= PCH_CNP &&
>  			INTEL_PCH_TYPE(display) < PCH_DG1;
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h
> b/drivers/gpu/drm/i915/display/intel_display_wa.h
> index b9c088025fd7..4fab1b27087a 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> @@ -29,6 +29,7 @@ bool intel_display_needs_wa_16023588340(struct
> intel_display *display);  enum intel_display_wa {
>  	INTEL_DISPLAY_WA_1409767108,
>  	INTEL_DISPLAY_WA_13012396614,
> +	INTEL_DISPLAY_WA_14010547955,
>  	INTEL_DISPLAY_WA_14010685332,
>  	INTEL_DISPLAY_WA_14011294188,
>  	INTEL_DISPLAY_WA_14011503030,
> --
> 2.51.0


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

* RE: [PATCH v2 05/15] drm/i915/display: convert W/As in intel_ddi.c to new framework
  2026-02-12 18:46 ` [PATCH v2 05/15] drm/i915/display: convert W/As in intel_ddi.c " Luca Coelho
@ 2026-02-13  8:39   ` Kandpal, Suraj
  0 siblings, 0 replies; 39+ messages in thread
From: Kandpal, Suraj @ 2026-02-13  8:39 UTC (permalink / raw)
  To: Coelho, Luciano, intel-gfx@lists.freedesktop.org
  Cc: intel-xe@lists.freedesktop.org

> Subject: [PATCH v2 05/15] drm/i915/display: convert W/As in intel_ddi.c to
> new framework
> 
> Convert the low-hanging fruits of workaround checks to the workaround
> framework.  Instead of having display structure checks for the workarounds all
> over, concentrate the checks in intel_wa.c.

*intel_display_wa.c
With that fixed
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>

> 
> Acked-by: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_ddi.c        | 4 ++--
>  drivers/gpu/drm/i915/display/intel_display_wa.c | 3 +++
> drivers/gpu/drm/i915/display/intel_display_wa.h | 1 +
>  3 files changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 94ae583e907f..c96438245b39 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -52,6 +52,7 @@
>  #include "intel_display_regs.h"
>  #include "intel_display_types.h"
>  #include "intel_display_utils.h"
> +#include "intel_display_wa.h"
>  #include "intel_dkl_phy.h"
>  #include "intel_dkl_phy_regs.h"
>  #include "intel_dp.h"
> @@ -1401,8 +1402,7 @@ static void tgl_dkl_phy_set_signal_levels(struct
> intel_encoder *encoder,
>  		int level;
> 
>  		/* Wa_16011342517:adl-p */
> -		if (display->platform.alderlake_p &&
> -		    IS_DISPLAY_STEP(display, STEP_A0, STEP_D0)) {
> +		if (intel_display_wa(display, 16011342517)) {
>  			if ((intel_encoder_is_hdmi(encoder) &&
>  			     crtc_state->port_clock == 594000) ||
>  			     (intel_encoder_is_dp(encoder) && diff --git
> a/drivers/gpu/drm/i915/display/intel_display_wa.c
> b/drivers/gpu/drm/i915/display/intel_display_wa.c
> index 8473cb25c92e..e2bbc3a90eca 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> @@ -99,6 +99,9 @@ bool __intel_display_wa(struct intel_display *display,
> enum intel_display_wa wa,
>  		return DISPLAY_VER(display) == 20;
>  	case INTEL_DISPLAY_WA_15018326506:
>  		return display->platform.battlemage;
> +	case INTEL_DISPLAY_WA_16011342517:
> +		return display->platform.alderlake_p &&
> +			IS_DISPLAY_STEP(display, STEP_A0, STEP_D0);
>  	case INTEL_DISPLAY_WA_16023588340:
>  		return intel_display_needs_wa_16023588340(display);
>  	case INTEL_DISPLAY_WA_16025573575:
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h
> b/drivers/gpu/drm/i915/display/intel_display_wa.h
> index 7e5f5a466e2a..b9c088025fd7 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> @@ -38,6 +38,7 @@ enum intel_display_wa {
>  	INTEL_DISPLAY_WA_14025769978,
>  	INTEL_DISPLAY_WA_15013987218,
>  	INTEL_DISPLAY_WA_15018326506,
> +	INTEL_DISPLAY_WA_16011342517,
>  	INTEL_DISPLAY_WA_16023588340,
>  	INTEL_DISPLAY_WA_16025573575,
>  	INTEL_DISPLAY_WA_22010178259,
> --
> 2.51.0


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

* RE: [PATCH v2 04/15] drm/i915/display: convert W/As in intel_cursor.c to new framework
  2026-02-12 18:46 ` [PATCH v2 04/15] drm/i915/display: convert W/As in intel_cursor.c " Luca Coelho
@ 2026-02-13  8:42   ` Kandpal, Suraj
  2026-02-13  9:17     ` Luca Coelho
  0 siblings, 1 reply; 39+ messages in thread
From: Kandpal, Suraj @ 2026-02-13  8:42 UTC (permalink / raw)
  To: Coelho, Luciano, intel-gfx@lists.freedesktop.org
  Cc: intel-xe@lists.freedesktop.org

> Subject: [PATCH v2 04/15] drm/i915/display: convert W/As in intel_cursor.c to
> new framework
> 
> Convert the low-hanging fruits of workaround checks to the workaround
> framework.  Instead of having display structure checks for the workarounds all
> over, concentrate the checks in intel_wa.c.

* intel_display_wa.c

> 
> Acked-by: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_cursor.c     | 3 ++-
>  drivers/gpu/drm/i915/display/intel_display_wa.c | 1 +
> drivers/gpu/drm/i915/display/intel_display_wa.h | 1 +
>  3 files changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c
> b/drivers/gpu/drm/i915/display/intel_cursor.c
> index 2c5d917fbd7e..53cd27fd4fc7 100644
> --- a/drivers/gpu/drm/i915/display/intel_cursor.c
> +++ b/drivers/gpu/drm/i915/display/intel_cursor.c
> @@ -19,6 +19,7 @@
>  #include "intel_display.h"
>  #include "intel_display_types.h"
>  #include "intel_display_utils.h"
> +#include "intel_display_wa.h"
>  #include "intel_fb.h"
>  #include "intel_fb_pin.h"
>  #include "intel_frontbuffer.h"
> @@ -424,7 +425,7 @@ static u32 i9xx_cursor_ctl(const struct
> intel_plane_state *plane_state)
>  		cntl |= MCURSOR_ROTATE_180;
> 
>  	/* Wa_22012358565:adl-p */
> -	if (DISPLAY_VER(display) == 13)
> +	if (intel_display_wa(display, 22012358565))

Ahh so you define it here 
So with all mentioned comments addressed for this patch
And ones where WA 22012358565 was questioned.
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com

>  		cntl |= MCURSOR_ARB_SLOTS(1);
> 
>  	return cntl;
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c
> b/drivers/gpu/drm/i915/display/intel_display_wa.c
> index f0311cd477a5..8473cb25c92e 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> @@ -85,6 +85,7 @@ bool __intel_display_wa(struct intel_display *display,
> enum intel_display_wa wa,
>  			INTEL_PCH_TYPE(display) < PCH_DG1;
>  	case INTEL_DISPLAY_WA_14011503030:
>  	case INTEL_DISPLAY_WA_14011503117:
> +	case INTEL_DISPLAY_WA_22012358565:
>  		return DISPLAY_VER(display) == 13;
>  	case INTEL_DISPLAY_WA_14011508470:
>  		return (IS_DISPLAY_VERx100(display, 1200, 1300)); diff --git
> a/drivers/gpu/drm/i915/display/intel_display_wa.h
> b/drivers/gpu/drm/i915/display/intel_display_wa.h
> index 0d0501fc276f..7e5f5a466e2a 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> @@ -42,6 +42,7 @@ enum intel_display_wa {
>  	INTEL_DISPLAY_WA_16025573575,
>  	INTEL_DISPLAY_WA_22010178259,
>  	INTEL_DISPLAY_WA_22011320316,
> +	INTEL_DISPLAY_WA_22012358565,
>  	INTEL_DISPLAY_WA_22014263786,
>  	INTEL_DISPLAY_WA_22021048059,
>  };
> --
> 2.51.0


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

* RE: [PATCH v2 03/15] drm/i915/display: convert W/As in intel_cdclk.c to new framework
  2026-02-12 18:46 ` [PATCH v2 03/15] drm/i915/display: convert W/As in intel_cdclk.c " Luca Coelho
@ 2026-02-13  8:44   ` Kandpal, Suraj
  0 siblings, 0 replies; 39+ messages in thread
From: Kandpal, Suraj @ 2026-02-13  8:44 UTC (permalink / raw)
  To: Coelho, Luciano, intel-gfx@lists.freedesktop.org
  Cc: intel-xe@lists.freedesktop.org

> Subject: [PATCH v2 03/15] drm/i915/display: convert W/As in intel_cdclk.c to
> new framework
> 
> Convert the low-hanging fruits of workaround checks to the workaround
> framework.  Instead of having display structure checks for the workarounds all
> over, concentrate the checks in intel_wa.c.
> 

*intel_display_wa.c
With that fixed
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>

> Acked-by: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_cdclk.c      | 2 +-
>  drivers/gpu/drm/i915/display/intel_display_wa.c | 3 +++
> drivers/gpu/drm/i915/display/intel_display_wa.h | 1 +
>  3 files changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_cdclk.c
> b/drivers/gpu/drm/i915/display/intel_cdclk.c
> index 29d90d612bb2..927b05038e2b 100644
> --- a/drivers/gpu/drm/i915/display/intel_cdclk.c
> +++ b/drivers/gpu/drm/i915/display/intel_cdclk.c
> @@ -4006,7 +4006,7 @@ void intel_init_cdclk_hooks(struct intel_display
> *display)
>  		display->cdclk.table = dg2_cdclk_table;
>  	} else if (display->platform.alderlake_p) {
>  		/* Wa_22011320316:adl-p[a0] */
> -		if (display->platform.alderlake_p && IS_DISPLAY_STEP(display,
> STEP_A0, STEP_B0)) {
> +		if (intel_display_wa(display, 22011320316)) {
>  			display->cdclk.table = adlp_a_step_cdclk_table;
>  			display->funcs.cdclk = &tgl_cdclk_funcs;
>  		} else if (display->platform.alderlake_p_raptorlake_u) { diff --
> git a/drivers/gpu/drm/i915/display/intel_display_wa.c
> b/drivers/gpu/drm/i915/display/intel_display_wa.c
> index 80eecfd33a28..f0311cd477a5 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> @@ -104,6 +104,9 @@ bool __intel_display_wa(struct intel_display *display,
> enum intel_display_wa wa,
>  		return intel_display_needs_wa_16025573575(display);
>  	case INTEL_DISPLAY_WA_22010178259:
>  		return DISPLAY_VER(display) == 12;
> +	case INTEL_DISPLAY_WA_22011320316:
> +		return display->platform.alderlake_p &&
> +			IS_DISPLAY_STEP(display, STEP_A0, STEP_B0);
>  	case INTEL_DISPLAY_WA_22014263786:
>  		return IS_DISPLAY_VERx100(display, 1100, 1400);
>  	case INTEL_DISPLAY_WA_22021048059:
> diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h
> b/drivers/gpu/drm/i915/display/intel_display_wa.h
> index 54f5ea05b293..0d0501fc276f 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> @@ -41,6 +41,7 @@ enum intel_display_wa {
>  	INTEL_DISPLAY_WA_16023588340,
>  	INTEL_DISPLAY_WA_16025573575,
>  	INTEL_DISPLAY_WA_22010178259,
> +	INTEL_DISPLAY_WA_22011320316,
>  	INTEL_DISPLAY_WA_22014263786,
>  	INTEL_DISPLAY_WA_22021048059,
>  };
> --
> 2.51.0


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

* Re: [PATCH v2 04/15] drm/i915/display: convert W/As in intel_cursor.c to new framework
  2026-02-13  8:42   ` Kandpal, Suraj
@ 2026-02-13  9:17     ` Luca Coelho
  0 siblings, 0 replies; 39+ messages in thread
From: Luca Coelho @ 2026-02-13  9:17 UTC (permalink / raw)
  To: Kandpal, Suraj, Coelho, Luciano, intel-gfx@lists.freedesktop.org
  Cc: intel-xe@lists.freedesktop.org

On Fri, 2026-02-13 at 08:42 +0000, Kandpal, Suraj wrote:
> > Subject: [PATCH v2 04/15] drm/i915/display: convert W/As in intel_cursor.c to
> > new framework
> > 
> > Convert the low-hanging fruits of workaround checks to the workaround
> > framework.  Instead of having display structure checks for the workarounds all
> > over, concentrate the checks in intel_wa.c.
> 
> * intel_display_wa.c
> 
> > 
> > Acked-by: Jani Nikula <jani.nikula@intel.com>
> > Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_cursor.c     | 3 ++-
> >  drivers/gpu/drm/i915/display/intel_display_wa.c | 1 +
> > drivers/gpu/drm/i915/display/intel_display_wa.h | 1 +
> >  3 files changed, 4 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c
> > b/drivers/gpu/drm/i915/display/intel_cursor.c
> > index 2c5d917fbd7e..53cd27fd4fc7 100644
> > --- a/drivers/gpu/drm/i915/display/intel_cursor.c
> > +++ b/drivers/gpu/drm/i915/display/intel_cursor.c
> > @@ -19,6 +19,7 @@
> >  #include "intel_display.h"
> >  #include "intel_display_types.h"
> >  #include "intel_display_utils.h"
> > +#include "intel_display_wa.h"
> >  #include "intel_fb.h"
> >  #include "intel_fb_pin.h"
> >  #include "intel_frontbuffer.h"
> > @@ -424,7 +425,7 @@ static u32 i9xx_cursor_ctl(const struct
> > intel_plane_state *plane_state)
> >  		cntl |= MCURSOR_ROTATE_180;
> > 
> >  	/* Wa_22012358565:adl-p */
> > -	if (DISPLAY_VER(display) == 13)
> > +	if (intel_display_wa(display, 22012358565))
> 
> Ahh so you define it here 
> So with all mentioned comments addressed for this patch
> And ones where WA 22012358565 was questioned.
> Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com
> 

Yes, this workaround applies to more than one file, so I defined it
here and reused it in subsequent patches.

I'll change all the commit messages as you suggested.

Thanks for the reviews!

--
Cheers,
Luca.


> >  		cntl |= MCURSOR_ARB_SLOTS(1);
> > 
> >  	return cntl;
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.c
> > b/drivers/gpu/drm/i915/display/intel_display_wa.c
> > index f0311cd477a5..8473cb25c92e 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> > @@ -85,6 +85,7 @@ bool __intel_display_wa(struct intel_display *display,
> > enum intel_display_wa wa,
> >  			INTEL_PCH_TYPE(display) < PCH_DG1;
> >  	case INTEL_DISPLAY_WA_14011503030:
> >  	case INTEL_DISPLAY_WA_14011503117:
> > +	case INTEL_DISPLAY_WA_22012358565:
> >  		return DISPLAY_VER(display) == 13;
> >  	case INTEL_DISPLAY_WA_14011508470:
> >  		return (IS_DISPLAY_VERx100(display, 1200, 1300)); diff --git
> > a/drivers/gpu/drm/i915/display/intel_display_wa.h
> > b/drivers/gpu/drm/i915/display/intel_display_wa.h
> > index 0d0501fc276f..7e5f5a466e2a 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> > +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> > @@ -42,6 +42,7 @@ enum intel_display_wa {
> >  	INTEL_DISPLAY_WA_16025573575,
> >  	INTEL_DISPLAY_WA_22010178259,
> >  	INTEL_DISPLAY_WA_22011320316,
> > +	INTEL_DISPLAY_WA_22012358565,
> >  	INTEL_DISPLAY_WA_22014263786,
> >  	INTEL_DISPLAY_WA_22021048059,
> >  };
> > --
> > 2.51.0

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

* Re: [PATCH v2 11/15] drm/i915/display: convert W/As in intel_modeset_setup.c to new framework
  2026-02-13  8:24       ` Kandpal, Suraj
@ 2026-02-13  9:19         ` Luca Coelho
  0 siblings, 0 replies; 39+ messages in thread
From: Luca Coelho @ 2026-02-13  9:19 UTC (permalink / raw)
  To: Kandpal, Suraj, Ville Syrjälä, Coelho, Luciano
  Cc: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org

On Fri, 2026-02-13 at 08:24 +0000, Kandpal, Suraj wrote:
> > Subject: Re: [PATCH v2 11/15] drm/i915/display: convert W/As in
> > intel_modeset_setup.c to new framework
> > 
> > On Fri, 2026-02-13 at 07:04 +0200, Ville Syrjälä wrote:
> > > On Thu, Feb 12, 2026 at 08:46:09PM +0200, Luca Coelho wrote:
> > > > Convert the low-hanging fruits of workaround checks to the
> > > > workaround framework.  Instead of having display structure checks
> > > > for the workarounds all over, concentrate the checks in intel_wa.c.
> > > > 
> > > > Acked-by: Jani Nikula <jani.nikula@intel.com>
> > > > Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
> > > > ---
> > > >  drivers/gpu/drm/i915/display/intel_display_wa.c    | 2 ++
> > > >  drivers/gpu/drm/i915/display/intel_display_wa.h    | 1 +
> > > >  drivers/gpu/drm/i915/display/intel_modeset_setup.c | 3 ++-
> > > >  3 files changed, 5 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 3aa79e607bf8..72f645686efd 100644
> > > > --- a/drivers/gpu/drm/i915/display/intel_display_wa.c
> > > > +++ b/drivers/gpu/drm/i915/display/intel_display_wa.c
> > > > @@ -79,6 +79,8 @@ bool __intel_display_wa(struct intel_display *display,
> > enum intel_display_wa wa,
> > > >  	case INTEL_DISPLAY_WA_13012396614:
> > > >  		return DISPLAY_VERx100(display) == 3000 ||
> > > >  			DISPLAY_VERx100(display) == 3500;
> > > > +	case INTEL_DISPLAY_WA_14010480278:
> > > > +		return (IS_DISPLAY_VER(display, 10, 12));
> > > 
> > > This is now quite confusing. That w/a number only means something for
> > > tgl+. I think if we want to start converting this kind of places
> > > tgl+someone
> > > needs to come up with an actual plan how to deal with older platforms.
> > 
> > If there are more numbers from other platforms, I think they should just have
> > their own cases, like in some later patches in this series,
> > eg.:
> > 
> > 	case INTEL_DISPLAY_WA_<tgl+_wa_number>:
> > 	case INTEL_DISPLAY_WA_<lnl_wa_number>:
> > 
> > ...but this was a problem before my series already, and it's not something I'm
> > trying to address here.
> > 
> > 
> > > Also I'm pretty sure that even among the new platforms some w/a's are
> > > listed with different numbers for different platforms. Has anyone
> > > thought what we should do about that?
> > 
> > Yeah, and there's also the case where more than workaround has the same
> > check, we'll end up with many fallthrough cases.
> > 
> 
> 
> My two cents here:
> Maybe we first get all the WA's here into this framework then work on how to optimize it later.
> Perhaps documenting how and where WA's can be placed, their numbering and version checking.

Yes, I agree with moving the "low-hanging fruits" to the new framework
and continue to improve it from there.  That was the intention of this
series, a first step that hopefully makes it easier to continue with
subsequent clean-ups.

--
Cheers,
Luca.



> Regards,
> Suraj Kandpal
> 
> > --
> > Cheers,
> > Luca.
> > 
> > 
> > > >  	case INTEL_DISPLAY_WA_14010547955:
> > > >  		return display->platform.dg2;
> > > >  	case INTEL_DISPLAY_WA_14010685332:
> > > > diff --git a/drivers/gpu/drm/i915/display/intel_display_wa.h
> > > > b/drivers/gpu/drm/i915/display/intel_display_wa.h
> > > > index 57345d0abe1c..d8359f88de29 100644
> > > > --- a/drivers/gpu/drm/i915/display/intel_display_wa.h
> > > > +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h
> > > > @@ -30,6 +30,7 @@ enum intel_display_wa {
> > > >  	INTEL_DISPLAY_WA_1409120013,
> > > >  	INTEL_DISPLAY_WA_1409767108,
> > > >  	INTEL_DISPLAY_WA_13012396614,
> > > > +	INTEL_DISPLAY_WA_14010480278,
> > > >  	INTEL_DISPLAY_WA_14010547955,
> > > >  	INTEL_DISPLAY_WA_14010685332,
> > > >  	INTEL_DISPLAY_WA_14011294188,
> > > > diff --git a/drivers/gpu/drm/i915/display/intel_modeset_setup.c
> > > > b/drivers/gpu/drm/i915/display/intel_modeset_setup.c
> > > > index 9b0becee221c..7ee1494a67af 100644
> > > > --- a/drivers/gpu/drm/i915/display/intel_modeset_setup.c
> > > > +++ b/drivers/gpu/drm/i915/display/intel_modeset_setup.c
> > > > @@ -25,6 +25,7 @@
> > > >  #include "intel_display_power.h"
> > > >  #include "intel_display_regs.h"
> > > >  #include "intel_display_types.h"
> > > > +#include "intel_display_wa.h"
> > > >  #include "intel_dmc.h"
> > > >  #include "intel_fifo_underrun.h"
> > > >  #include "intel_modeset_setup.h"
> > > > @@ -913,7 +914,7 @@ static void intel_early_display_was(struct
> > intel_display *display)
> > > >  	 * Display WA #1185 WaDisableDARBFClkGating:glk,icl,ehl,tgl
> > > >  	 * Also known as Wa_14010480278.
> > > >  	 */
> > > > -	if (IS_DISPLAY_VER(display, 10, 12))
> > > > +	if (intel_display_wa(display, 14010480278))
> > > 
> > > >  		intel_de_rmw(display, GEN9_CLKGATE_DIS_0, 0,
> > DARBF_GATING_DIS);
> > > > 
> > > >  	/*
> > > > --
> > > > 2.51.0

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

end of thread, other threads:[~2026-02-13  9:19 UTC | newest]

Thread overview: 39+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-12 18:45 [PATCH v2 00/15] drm/i915/display: convert a bunch of W/A checks to the new framework Luca Coelho
2026-02-12 18:45 ` [PATCH v2 01/15] drm/i915/display: convert audio workaround to " Luca Coelho
2026-02-13  4:54   ` Ville Syrjälä
2026-02-13  7:36     ` Luca Coelho
2026-02-12 18:46 ` [PATCH v2 02/15] drm/i915/display: convert W/As in intel_display_power.c " Luca Coelho
2026-02-12 18:46 ` [PATCH v2 03/15] drm/i915/display: convert W/As in intel_cdclk.c " Luca Coelho
2026-02-13  8:44   ` Kandpal, Suraj
2026-02-12 18:46 ` [PATCH v2 04/15] drm/i915/display: convert W/As in intel_cursor.c " Luca Coelho
2026-02-13  8:42   ` Kandpal, Suraj
2026-02-13  9:17     ` Luca Coelho
2026-02-12 18:46 ` [PATCH v2 05/15] drm/i915/display: convert W/As in intel_ddi.c " Luca Coelho
2026-02-13  8:39   ` Kandpal, Suraj
2026-02-12 18:46 ` [PATCH v2 06/15] drm/i915/display: convert W/As in intel_display.c " Luca Coelho
2026-02-13  8:38   ` Kandpal, Suraj
2026-02-12 18:46 ` [PATCH v2 07/15] drm/i915/display: convert W/As in intel_display_device.c " Luca Coelho
2026-02-13  8:29   ` Kandpal, Suraj
2026-02-12 18:46 ` [PATCH v2 08/15] drm/i915/display: convert W/As in intel_dp_mst.c " Luca Coelho
2026-02-13  8:36   ` Kandpal, Suraj
2026-02-12 18:46 ` [PATCH v2 09/15] drm/i915/display: convert W/As in intel_fbc.c " Luca Coelho
2026-02-13  8:32   ` Kandpal, Suraj
2026-02-12 18:46 ` [PATCH v2 10/15] drm/i915/display: convert W/As in intel_flipq.c " Luca Coelho
2026-02-13  8:26   ` Kandpal, Suraj
2026-02-12 18:46 ` [PATCH v2 11/15] drm/i915/display: convert W/As in intel_modeset_setup.c " Luca Coelho
2026-02-13  5:04   ` Ville Syrjälä
2026-02-13  8:04     ` Luca Coelho
2026-02-13  8:24       ` Kandpal, Suraj
2026-02-13  9:19         ` Luca Coelho
2026-02-12 18:46 ` [PATCH v2 12/15] drm/i915/display: convert W/As in intel_pmdemand.c " Luca Coelho
2026-02-13  8:20   ` Kandpal, Suraj
2026-02-12 18:46 ` [PATCH v2 13/15] drm/i915/display: convert W/As in intel_psr.c " Luca Coelho
2026-02-13  5:09   ` Ville Syrjälä
2026-02-13  8:11     ` Luca Coelho
2026-02-12 18:46 ` [PATCH v2 14/15] drm/i915/display: convert W/As in skl_universal_plane.c " Luca Coelho
2026-02-13  8:18   ` Kandpal, Suraj
2026-02-12 18:46 ` [PATCH v2 15/15] drm/i915/display: convert W/As in skl_watermark.c " Luca Coelho
2026-02-13  4:26   ` Kandpal, Suraj
2026-02-12 18:58 ` ✓ CI.KUnit: success for drm/i915/display: convert a bunch of W/A checks to the " Patchwork
2026-02-12 19:13 ` ✗ CI.checksparse: warning " Patchwork
2026-02-12 19:33 ` ✓ Xe.CI.BAT: success " Patchwork

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