All of lore.kernel.org
 help / color / mirror / Atom feed
* [Intel-gfx] [PATCH 1/2] drm/i915/mtl: Initial display workarounds
@ 2022-11-30 23:17 Matt Atwood
  2022-11-30 23:17 ` [Intel-gfx] [PATCH 2/2] drm/i915/mtl: Add initial gt workarounds Matt Atwood
                   ` (6 more replies)
  0 siblings, 7 replies; 17+ messages in thread
From: Matt Atwood @ 2022-11-30 23:17 UTC (permalink / raw)
  To: intel-gfx; +Cc: lucas.demarchi

From: Jouni Högander <jouni.hogander@intel.com>

This patch introduces initial workarounds for mtl platform

Bspec: 66624

Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com>
Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
---
 drivers/gpu/drm/i915/display/intel_fbc.c  |  4 +++-
 drivers/gpu/drm/i915/display/intel_hdmi.c |  3 ++-
 drivers/gpu/drm/i915/display/intel_psr.c  | 27 ++++++++++++++++-------
 drivers/gpu/drm/i915/i915_drv.h           |  4 ++++
 4 files changed, 28 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c
index b5ee5ea0d010..8f269553d826 100644
--- a/drivers/gpu/drm/i915/display/intel_fbc.c
+++ b/drivers/gpu/drm/i915/display/intel_fbc.c
@@ -1095,7 +1095,9 @@ static int intel_fbc_check_plane(struct intel_atomic_state *state,
 	}
 
 	/* Wa_14016291713 */
-	if (IS_DISPLAY_VER(i915, 12, 13) && crtc_state->has_psr) {
+	if ((IS_DISPLAY_VER(i915, 12, 13) ||
+	     IS_MTL_DISPLAY_STEP(i915, STEP_A0, STEP_C0)) &&
+	    crtc_state->has_psr) {
 		plane_state->no_fbc_reason = "PSR1 enabled (Wa_14016291713)";
 		return 0;
 	}
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index e82f8a07e2b0..efa2da080f62 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -537,7 +537,8 @@ void hsw_write_infoframe(struct intel_encoder *encoder,
 			       0);
 
 	/* Wa_14013475917 */
-	if (DISPLAY_VER(dev_priv) == 13 && crtc_state->has_psr &&
+	if ((DISPLAY_VER(dev_priv) == 13 ||
+	     IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)) && crtc_state->has_psr &&
 	    type == DP_SDP_VSC)
 		return;
 
diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
index 5b678916e6db..7982157fb1ff 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -797,7 +797,7 @@ static bool psr2_granularity_check(struct intel_dp *intel_dp,
 		return intel_dp->psr.su_y_granularity == 4;
 
 	/*
-	 * adl_p and display 14+ platforms has 1 line granularity.
+	 * adl_p and mtl platforms has 1 line granularity.
 	 * For other platforms with SW tracking we can adjust the y coordinates
 	 * to match sink requirement if multiple of 4.
 	 */
@@ -1170,11 +1170,14 @@ static void intel_psr_enable_source(struct intel_dp *intel_dp,
 				     PSR2_ADD_VERTICAL_LINE_COUNT);
 
 		/*
-		 * Wa_16014451276:adlp
+		 * Wa_16014451276:adlp,mtl[a0,b0]
 		 * All supported adlp panels have 1-based X granularity, this may
 		 * cause issues if non-supported panels are used.
 		 */
-		if (IS_ALDERLAKE_P(dev_priv))
+		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
+			intel_de_rmw(dev_priv, MTL_CHICKEN_TRANS(cpu_transcoder), 0,
+				     ADLP_1_BASED_X_GRANULARITY);
+		else if (IS_ALDERLAKE_P(dev_priv))
 			intel_de_rmw(dev_priv, CHICKEN_TRANS(cpu_transcoder), 0,
 				     ADLP_1_BASED_X_GRANULARITY);
 
@@ -1185,8 +1188,12 @@ static void intel_psr_enable_source(struct intel_dp *intel_dp,
 				     TRANS_SET_CONTEXT_LATENCY_MASK,
 				     TRANS_SET_CONTEXT_LATENCY_VALUE(1));
 
-		/* Wa_16012604467:adlp */
-		if (IS_ALDERLAKE_P(dev_priv))
+		/* Wa_16012604467:adlp,mtl[a0,b0] */
+		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
+			intel_de_rmw(dev_priv,
+				     MTL_CLKGATE_DIS_TRANS(cpu_transcoder), 0,
+				     MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS);
+		else if (IS_ALDERLAKE_P(dev_priv))
 			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC, 0,
 				     CLKGATE_DIS_MISC_DMASC_GATING_DIS);
 
@@ -1362,8 +1369,12 @@ static void intel_psr_disable_locked(struct intel_dp *intel_dp)
 				     TRANS_SET_CONTEXT_LATENCY(intel_dp->psr.transcoder),
 				     TRANS_SET_CONTEXT_LATENCY_MASK, 0);
 
-		/* Wa_16012604467:adlp */
-		if (IS_ALDERLAKE_P(dev_priv))
+		/* Wa_16012604467:adlp,mtl[a0,b0] */
+		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
+			intel_de_rmw(dev_priv,
+				     MTL_CLKGATE_DIS_TRANS(intel_dp->psr.transcoder),
+				     MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS, 0);
+		else if (IS_ALDERLAKE_P(dev_priv))
 			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC,
 				     CLKGATE_DIS_MISC_DMASC_GATING_DIS, 0);
 
@@ -1625,7 +1636,7 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
 
 	if (full_update) {
 		/*
-		 * Not applying Wa_14014971508:adlp as we do not support the
+		 * Not applying Wa_14014971508:adlp,mtl as we do not support the
 		 * feature that requires this workaround.
 		 */
 		val |= man_trk_ctl_single_full_frame_bit_get(dev_priv);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index a8a5bd426e78..ecb027626a21 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -727,6 +727,10 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
 	(IS_SUBPLATFORM(__i915, INTEL_METEORLAKE, INTEL_SUBPLATFORM_##variant) && \
 	 IS_GRAPHICS_STEP(__i915, since, until))
 
+#define IS_MTL_DISPLAY_STEP(__i915, since, until) \
+	(DISPLAY_VER(__i915) == 14 && \
+	 IS_DISPLAY_STEP(__i915, since, until))
+
 /*
  * DG2 hardware steppings are a bit unusual.  The hardware design was forked to
  * create three variants (G10, G11, and G12) which each have distinct
-- 
2.38.1


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

* [Intel-gfx] [PATCH 2/2] drm/i915/mtl: Add initial gt workarounds
  2022-11-30 23:17 [Intel-gfx] [PATCH 1/2] drm/i915/mtl: Initial display workarounds Matt Atwood
@ 2022-11-30 23:17 ` Matt Atwood
  2022-12-01 13:15   ` Tvrtko Ursulin
  2022-12-01  0:27 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/2] drm/i915/mtl: Initial display workarounds Patchwork
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 17+ messages in thread
From: Matt Atwood @ 2022-11-30 23:17 UTC (permalink / raw)
  To: intel-gfx; +Cc: lucas.demarchi

From: Matt Roper <matthew.d.roper@intel.com>

This patch introduces initial workarounds for mtl platform

Bspec:66622

Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com>
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
---
 drivers/gpu/drm/i915/gt/intel_engine_cs.c     |   4 +-
 .../drm/i915/gt/intel_execlists_submission.c  |   4 +-
 drivers/gpu/drm/i915/gt/intel_gt_mcr.c        |  11 +-
 drivers/gpu/drm/i915/gt/intel_gt_regs.h       |   5 +
 drivers/gpu/drm/i915/gt/intel_workarounds.c   | 105 +++++++++++++-----
 drivers/gpu/drm/i915/gt/uc/intel_guc.c        |   9 +-
 .../gpu/drm/i915/gt/uc/intel_guc_submission.c |  10 +-
 drivers/gpu/drm/i915/i915_drv.h               |   4 +
 drivers/gpu/drm/i915/intel_device_info.c      |   6 +
 9 files changed, 121 insertions(+), 37 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
index c33e0d72d670..af88d8ab61c1 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
@@ -1479,7 +1479,9 @@ static int __intel_engine_stop_cs(struct intel_engine_cs *engine,
 	 * Wa_22011802037 : gen11, gen12, Prior to doing a reset, ensure CS is
 	 * stopped, set ring stop bit and prefetch disable bit to halt CS
 	 */
-	if (IS_GRAPHICS_VER(engine->i915, 11, 12))
+	if (IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
+	    (GRAPHICS_VER(engine->i915) >= 11 &&
+	    GRAPHICS_VER_FULL(engine->i915) < IP_VER(12, 70)))
 		intel_uncore_write_fw(uncore, RING_MODE_GEN7(engine->mmio_base),
 				      _MASKED_BIT_ENABLE(GEN12_GFX_PREFETCH_DISABLE));
 
diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
index 49a8f10d76c7..a91c912e35d6 100644
--- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
+++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
@@ -2992,7 +2992,9 @@ static void execlists_reset_prepare(struct intel_engine_cs *engine)
 	 * Wa_22011802037:gen11/gen12: In addition to stopping the cs, we need
 	 * to wait for any pending mi force wakeups
 	 */
-	if (IS_GRAPHICS_VER(engine->i915, 11, 12))
+	if (IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
+	    (GRAPHICS_VER(engine->i915) >= 11 &&
+	    GRAPHICS_VER_FULL(engine->i915) < IP_VER(12, 70)))
 		intel_engine_wait_for_pending_mi_fw(engine);
 
 	engine->execlists.reset_ccid = active_ccid(engine);
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
index aa070ae57f11..0e90a8f86b27 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
@@ -164,8 +164,15 @@ void intel_gt_mcr_init(struct intel_gt *gt)
 	if (MEDIA_VER(i915) >= 13 && gt->type == GT_MEDIA) {
 		gt->steering_table[OADDRM] = xelpmp_oaddrm_steering_table;
 	} else if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 70)) {
-		fuse = REG_FIELD_GET(GT_L3_EXC_MASK,
-				     intel_uncore_read(gt->uncore, XEHP_FUSE4));
+		/* Wa_14016747170:mtl-m[a0], mtl-p[a0] */
+		if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
+		    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0))
+			fuse = REG_FIELD_GET(MTL_GT_L3_EXC_MASK,
+					     intel_uncore_read(gt->uncore,
+							       MTL_GT_ACTIVITY_FACTOR));
+		else
+			fuse = REG_FIELD_GET(GT_L3_EXC_MASK,
+					     intel_uncore_read(gt->uncore, XEHP_FUSE4));
 
 		/*
 		 * Despite the register field being named "exclude mask" the
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_regs.h b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
index 784152548472..c2c03b02f200 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_regs.h
+++ b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
@@ -413,6 +413,7 @@
 #define   TBIMR_FAST_CLIP			REG_BIT(5)
 
 #define VFLSKPD					MCR_REG(0x62a8)
+#define   VF_PREFETCH_TLB_DIS			REG_BIT(5)
 #define   DIS_OVER_FETCH_CACHE			REG_BIT(1)
 #define   DIS_MULT_MISS_RD_SQUASH		REG_BIT(0)
 
@@ -1532,6 +1533,10 @@
 
 #define MTL_MEDIA_MC6				_MMIO(0x138048)
 
+/* Wa_14016747170:mtl-p[a0], mtl-m[a0] */
+#define MTL_GT_ACTIVITY_FACTOR			_MMIO(0x138010)
+#define   MTL_GT_L3_EXC_MASK			REG_GENMASK(5, 3)
+
 #define GEN6_GT_THREAD_STATUS_REG		_MMIO(0x13805c)
 #define   GEN6_GT_THREAD_STATUS_CORE_MASK	0x7
 
diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
index 3e35facac2b4..2e3d5de0c522 100644
--- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
+++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
@@ -786,6 +786,32 @@ static void dg2_ctx_workarounds_init(struct intel_engine_cs *engine,
 	wa_masked_en(wal, CACHE_MODE_1, MSAA_OPTIMIZATION_REDUC_DISABLE);
 }
 
+static void mtl_ctx_workarounds_init(struct intel_engine_cs *engine,
+				     struct i915_wa_list *wal)
+{
+	struct drm_i915_private *i915 = engine->i915;
+
+	if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
+	    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0)) {
+		/* Wa_14014947963:mtl */
+		wa_masked_field_set(wal, VF_PREEMPTION,
+				    PREEMPTION_VERTEX_COUNT, 0x4000);
+
+		/* Wa_16013271637:mtl */
+		wa_mcr_masked_en(wal, XEHP_SLICE_COMMON_ECO_CHICKEN1,
+				 MSC_MSAA_REODER_BUF_BYPASS_DISABLE);
+
+		/* Wa_18019627453:mtl */
+		wa_mcr_masked_en(wal, VFLSKPD, VF_PREFETCH_TLB_DIS);
+
+		/* Wa_18018764978:mtl */
+		wa_masked_en(wal, PSS_MODE2, SCOREBOARD_STALL_FLUSH_CONTROL);
+	}
+
+	/* Wa_18019271663:mtl */
+	wa_masked_en(wal, CACHE_MODE_1, MSAA_OPTIMIZATION_REDUC_DISABLE);
+}
+
 static void fakewa_disable_nestedbb_mode(struct intel_engine_cs *engine,
 					 struct i915_wa_list *wal)
 {
@@ -872,7 +898,9 @@ __intel_engine_init_ctx_wa(struct intel_engine_cs *engine,
 	if (engine->class != RENDER_CLASS)
 		goto done;
 
-	if (IS_PONTEVECCHIO(i915))
+	if (IS_METEORLAKE(i915))
+		mtl_ctx_workarounds_init(engine, wal);
+	else if (IS_PONTEVECCHIO(i915))
 		; /* noop; none at this time */
 	else if (IS_DG2(i915))
 		dg2_ctx_workarounds_init(engine, wal);
@@ -1628,7 +1656,10 @@ pvc_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
 static void
 xelpg_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
 {
-	/* FIXME: Actual workarounds will be added in future patch(es) */
+	/* Wa_14014830051:mtl */
+	if (IS_MTL_GRAPHICS_STEP(gt->i915, M, STEP_A0, STEP_B0) ||
+	    IS_MTL_GRAPHICS_STEP(gt->i915, P, STEP_A0, STEP_B0))
+		wa_mcr_write_clr(wal, SARB_CHICKEN1, COMP_CKN_IN);
 
 	/*
 	 * Unlike older platforms, we no longer setup implicit steering here;
@@ -2168,7 +2199,9 @@ void intel_engine_init_whitelist(struct intel_engine_cs *engine)
 
 	wa_init_start(w, engine->gt, "whitelist", engine->name);
 
-	if (IS_PONTEVECCHIO(i915))
+	if (IS_METEORLAKE(i915))
+		; /* noop; none at this time */
+	else if (IS_PONTEVECCHIO(i915))
 		pvc_whitelist_build(engine);
 	else if (IS_DG2(i915))
 		dg2_whitelist_build(engine);
@@ -2278,6 +2311,34 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
 {
 	struct drm_i915_private *i915 = engine->i915;
 
+	if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
+	    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0)) {
+		/* Wa_22014600077:mtl */
+		wa_mcr_masked_en(wal, GEN10_CACHE_MODE_SS,
+				 ENABLE_EU_COUNT_FOR_TDL_FLUSH);
+	}
+
+	if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
+	    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0) ||
+	    IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
+	    IS_DG2_G11(i915) || IS_DG2_G12(i915)) {
+		/* Wa_1509727124:dg2,mtl */
+		wa_mcr_masked_en(wal, GEN10_SAMPLER_MODE,
+				 SC_DISABLE_POWER_OPTIMIZATION_EBB);
+
+		/* Wa_22013037850:dg2,mtl */
+		wa_mcr_write_or(wal, LSC_CHICKEN_BIT_0_UDW,
+				DISABLE_128B_EVICTION_COMMAND_UDW);
+	}
+
+	if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
+	    IS_DG2_G11(i915) || IS_DG2_G12(i915) ||
+	    IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0)) {
+		/* Wa_22012856258:dg2,mtl */
+		wa_mcr_masked_en(wal, GEN8_ROW_CHICKEN2,
+				 GEN12_DISABLE_READ_SUPPRESSION);
+	}
+
 	if (IS_DG2(i915)) {
 		/* Wa_1509235366:dg2 */
 		wa_write_or(wal, GEN12_GAMCNTRL_CTRL, INVALIDATION_BROADCAST_MODE_DIS |
@@ -2289,13 +2350,6 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
 		wa_mcr_masked_en(wal, GEN8_ROW_CHICKEN2, GEN12_ENABLE_LARGE_GRF_MODE);
 	}
 
-	if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
-	    IS_DG2_G11(i915) || IS_DG2_G12(i915)) {
-		/* Wa_1509727124:dg2 */
-		wa_mcr_masked_en(wal, GEN10_SAMPLER_MODE,
-				 SC_DISABLE_POWER_OPTIMIZATION_EBB);
-	}
-
 	if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_A0, STEP_B0) ||
 	    IS_DG2_GRAPHICS_STEP(i915, G11, STEP_A0, STEP_B0)) {
 		/* Wa_14012419201:dg2 */
@@ -2327,14 +2381,6 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
 
 	if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
 	    IS_DG2_G11(i915) || IS_DG2_G12(i915)) {
-		/* Wa_22013037850:dg2 */
-		wa_mcr_write_or(wal, LSC_CHICKEN_BIT_0_UDW,
-				DISABLE_128B_EVICTION_COMMAND_UDW);
-
-		/* Wa_22012856258:dg2 */
-		wa_mcr_masked_en(wal, GEN8_ROW_CHICKEN2,
-				 GEN12_DISABLE_READ_SUPPRESSION);
-
 		/*
 		 * Wa_22010960976:dg2
 		 * Wa_14013347512:dg2
@@ -2954,6 +3000,20 @@ general_render_compute_wa_init(struct intel_engine_cs *engine, struct i915_wa_li
 
 	add_render_compute_tuning_settings(i915, wal);
 
+	if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
+	    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0) ||
+	    IS_PONTEVECCHIO(i915) ||
+	    IS_DG2(i915)) {
+		/* Wa_18018781329:dg2,pvc,mtl */
+		wa_mcr_write_or(wal, RENDER_MOD_CTRL, FORCE_MISS_FTLB);
+		wa_mcr_write_or(wal, COMP_MOD_CTRL, FORCE_MISS_FTLB);
+		wa_mcr_write_or(wal, VDBX_MOD_CTRL, FORCE_MISS_FTLB);
+		wa_mcr_write_or(wal, VEBX_MOD_CTRL, FORCE_MISS_FTLB);
+
+		/* Wa_22014226127:dg2,pvc,mtl */
+		wa_mcr_write_or(wal, LSC_CHICKEN_BIT_0, DISABLE_D8_D16_COASLESCE);
+	}
+
 	if (IS_PONTEVECCHIO(i915)) {
 		/* Wa_16016694945 */
 		wa_masked_en(wal, XEHPC_LNCFMISCCFGREG0, XEHPC_OVRLSCCC);
@@ -2995,17 +3055,8 @@ general_render_compute_wa_init(struct intel_engine_cs *engine, struct i915_wa_li
 		/* Wa_14015227452:dg2,pvc */
 		wa_mcr_masked_en(wal, GEN9_ROW_CHICKEN4, XEHP_DIS_BBL_SYSPIPE);
 
-		/* Wa_22014226127:dg2,pvc */
-		wa_mcr_write_or(wal, LSC_CHICKEN_BIT_0, DISABLE_D8_D16_COASLESCE);
-
 		/* Wa_16015675438:dg2,pvc */
 		wa_masked_en(wal, FF_SLICE_CS_CHICKEN2, GEN12_PERF_FIX_BALANCING_CFE_DISABLE);
-
-		/* Wa_18018781329:dg2,pvc */
-		wa_mcr_write_or(wal, RENDER_MOD_CTRL, FORCE_MISS_FTLB);
-		wa_mcr_write_or(wal, COMP_MOD_CTRL, FORCE_MISS_FTLB);
-		wa_mcr_write_or(wal, VDBX_MOD_CTRL, FORCE_MISS_FTLB);
-		wa_mcr_write_or(wal, VEBX_MOD_CTRL, FORCE_MISS_FTLB);
 	}
 
 	if (IS_DG2(i915)) {
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
index 52aede324788..5ec74a167df9 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
@@ -274,8 +274,9 @@ static u32 guc_ctl_wa_flags(struct intel_guc *guc)
 	if (IS_DG2_GRAPHICS_STEP(gt->i915, G10, STEP_A0, STEP_B0))
 		flags |= GUC_WA_GAM_CREDITS;
 
-	/* Wa_14014475959:dg2 */
-	if (IS_DG2(gt->i915))
+	/* Wa_14014475959:dg2,mtl */
+	if (IS_MTL_GRAPHICS_STEP(gt->i915, M, STEP_A0, STEP_B0) ||
+	    IS_DG2(gt->i915))
 		flags |= GUC_WA_HOLD_CCS_SWITCHOUT;
 
 	/*
@@ -289,7 +290,9 @@ static u32 guc_ctl_wa_flags(struct intel_guc *guc)
 		flags |= GUC_WA_DUAL_QUEUE;
 
 	/* Wa_22011802037: graphics version 11/12 */
-	if (IS_GRAPHICS_VER(gt->i915, 11, 12))
+	if (IS_MTL_GRAPHICS_STEP(gt->i915, M, STEP_A0, STEP_B0) ||
+	    (GRAPHICS_VER(gt->i915) >= 11 &&
+	    GRAPHICS_VER_FULL(gt->i915) < IP_VER(12, 70)))
 		flags |= GUC_WA_PRE_PARSER;
 
 	/* Wa_16011777198:dg2 */
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
index 0a42f1807f52..f148d2f88d40 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
@@ -1615,7 +1615,9 @@ static void guc_reset_state(struct intel_context *ce, u32 head, bool scrub)
 
 static void guc_engine_reset_prepare(struct intel_engine_cs *engine)
 {
-	if (!IS_GRAPHICS_VER(engine->i915, 11, 12))
+	if (!(IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
+	      (GRAPHICS_VER(engine->i915) >= 11 &&
+	      GRAPHICS_VER_FULL(engine->i915) < IP_VER(12, 70))))
 		return;
 
 	intel_engine_stop_cs(engine);
@@ -4202,8 +4204,10 @@ static void guc_default_vfuncs(struct intel_engine_cs *engine)
 	engine->flags |= I915_ENGINE_HAS_TIMESLICES;
 
 	/* Wa_14014475959:dg2 */
-	if (IS_DG2(engine->i915) && engine->class == COMPUTE_CLASS)
-		engine->flags |= I915_ENGINE_USES_WA_HOLD_CCS_SWITCHOUT;
+	if (engine->class == COMPUTE_CLASS)
+		if (IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
+		    IS_DG2(engine->i915))
+			engine->flags |= I915_ENGINE_USES_WA_HOLD_CCS_SWITCHOUT;
 
 	/*
 	 * TODO: GuC supports timeslicing and semaphores as well, but they're
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index ecb027626a21..2f18bc123438 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -731,6 +731,10 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
 	(DISPLAY_VER(__i915) == 14 && \
 	 IS_DISPLAY_STEP(__i915, since, until))
 
+#define IS_MTL_GRAPHICS_STEP(__i915, variant, since, until) \
+	(IS_SUBPLATFORM(__i915, INTEL_METEORLAKE, INTEL_SUBPLATFORM_##variant) && \
+	 IS_GRAPHICS_STEP(__i915, since, until))
+
 /*
  * DG2 hardware steppings are a bit unusual.  The hardware design was forked to
  * create three variants (G10, G11, and G12) which each have distinct
diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c
index 849baf6c3b3c..7add88dde79e 100644
--- a/drivers/gpu/drm/i915/intel_device_info.c
+++ b/drivers/gpu/drm/i915/intel_device_info.c
@@ -343,6 +343,12 @@ static void intel_ipver_early_init(struct drm_i915_private *i915)
 
 	ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_GRAPHICS),
 		    &runtime->graphics.ip);
+	/* Wa_22012778468:mtl */
+	if (runtime->graphics.ip.ver == 0x0 &&
+	    INTEL_INFO(i915)->platform == INTEL_METEORLAKE) {
+		RUNTIME_INFO(i915)->graphics.ip.ver = 12;
+		RUNTIME_INFO(i915)->graphics.ip.rel = 70;
+	}
 	ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_DISPLAY),
 		    &runtime->display.ip);
 	ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_MEDIA),
-- 
2.38.1


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

* [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/2] drm/i915/mtl: Initial display workarounds
  2022-11-30 23:17 [Intel-gfx] [PATCH 1/2] drm/i915/mtl: Initial display workarounds Matt Atwood
  2022-11-30 23:17 ` [Intel-gfx] [PATCH 2/2] drm/i915/mtl: Add initial gt workarounds Matt Atwood
@ 2022-12-01  0:27 ` Patchwork
  2022-12-01  0:27 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2022-12-01  0:27 UTC (permalink / raw)
  To: Matt Atwood; +Cc: intel-gfx

== Series Details ==

Series: series starting with [1/2] drm/i915/mtl: Initial display workarounds
URL   : https://patchwork.freedesktop.org/series/111507/
State : warning

== Summary ==

Error: dim checkpatch failed
8c18d75df531 drm/i915/mtl: Initial display workarounds
-:122: CHECK:MACRO_ARG_REUSE: Macro argument reuse '__i915' - possible side-effects?
#122: FILE: drivers/gpu/drm/i915/i915_drv.h:730:
+#define IS_MTL_DISPLAY_STEP(__i915, since, until) \
+	(DISPLAY_VER(__i915) == 14 && \
+	 IS_DISPLAY_STEP(__i915, since, until))

total: 0 errors, 0 warnings, 1 checks, 89 lines checked
1f8e6e4fe341 drm/i915/mtl: Add initial gt workarounds
-:325: CHECK:MACRO_ARG_REUSE: Macro argument reuse '__i915' - possible side-effects?
#325: FILE: drivers/gpu/drm/i915/i915_drv.h:734:
+#define IS_MTL_GRAPHICS_STEP(__i915, variant, since, until) \
+	(IS_SUBPLATFORM(__i915, INTEL_METEORLAKE, INTEL_SUBPLATFORM_##variant) && \
+	 IS_GRAPHICS_STEP(__i915, since, until))

total: 0 errors, 0 warnings, 1 checks, 280 lines checked



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

* [Intel-gfx] ✗ Fi.CI.SPARSE: warning for series starting with [1/2] drm/i915/mtl: Initial display workarounds
  2022-11-30 23:17 [Intel-gfx] [PATCH 1/2] drm/i915/mtl: Initial display workarounds Matt Atwood
  2022-11-30 23:17 ` [Intel-gfx] [PATCH 2/2] drm/i915/mtl: Add initial gt workarounds Matt Atwood
  2022-12-01  0:27 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/2] drm/i915/mtl: Initial display workarounds Patchwork
@ 2022-12-01  0:27 ` Patchwork
  2022-12-01  0:46 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2022-12-01  0:27 UTC (permalink / raw)
  To: Matt Atwood; +Cc: intel-gfx

== Series Details ==

Series: series starting with [1/2] drm/i915/mtl: Initial display workarounds
URL   : https://patchwork.freedesktop.org/series/111507/
State : warning

== Summary ==

Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.



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

* [Intel-gfx] ✓ Fi.CI.BAT: success for series starting with [1/2] drm/i915/mtl: Initial display workarounds
  2022-11-30 23:17 [Intel-gfx] [PATCH 1/2] drm/i915/mtl: Initial display workarounds Matt Atwood
                   ` (2 preceding siblings ...)
  2022-12-01  0:27 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
@ 2022-12-01  0:46 ` Patchwork
  2022-12-01 12:28 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2022-12-01  0:46 UTC (permalink / raw)
  To: Matt Atwood; +Cc: intel-gfx

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

== Series Details ==

Series: series starting with [1/2] drm/i915/mtl: Initial display workarounds
URL   : https://patchwork.freedesktop.org/series/111507/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_12457 -> Patchwork_111507v1
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (38 -> 35)
------------------------------

  Missing    (3): fi-ilk-m540 fi-tgl-dsi bat-dg1-6 

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

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

### IGT changes ###

#### Issues hit ####

  * igt@core_hotunplug@unbind-rebind:
    - fi-apl-guc:         [PASS][1] -> [INCOMPLETE][2] ([i915#7073])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/fi-apl-guc/igt@core_hotunplug@unbind-rebind.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/fi-apl-guc/igt@core_hotunplug@unbind-rebind.html

  * igt@i915_selftest@live@hangcheck:
    - fi-hsw-4770:        [PASS][3] -> [INCOMPLETE][4] ([i915#4785])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/fi-hsw-4770/igt@i915_selftest@live@hangcheck.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/fi-hsw-4770/igt@i915_selftest@live@hangcheck.html

  * igt@kms_chamelium@common-hpd-after-suspend:
    - fi-rkl-guc:         NOTRUN -> [SKIP][5] ([fdo#111827])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/fi-rkl-guc/igt@kms_chamelium@common-hpd-after-suspend.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions-varying-size:
    - fi-bsw-kefka:       [PASS][6] -> [FAIL][7] ([i915#6298])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/fi-bsw-kefka/igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions-varying-size.html
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/fi-bsw-kefka/igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions-varying-size.html

  
#### Possible fixes ####

  * igt@i915_selftest@live@execlists:
    - {fi-ehl-2}:         [INCOMPLETE][8] ([i915#2940]) -> [PASS][9]
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/fi-ehl-2/igt@i915_selftest@live@execlists.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/fi-ehl-2/igt@i915_selftest@live@execlists.html

  * igt@i915_selftest@live@gt_lrc:
    - fi-rkl-guc:         [INCOMPLETE][10] ([i915#4983]) -> [PASS][11]
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/fi-rkl-guc/igt@i915_selftest@live@gt_lrc.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/fi-rkl-guc/igt@i915_selftest@live@gt_lrc.html

  * igt@i915_selftest@live@reset:
    - {bat-rpls-2}:       [DMESG-FAIL][12] ([i915#4983]) -> [PASS][13]
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/bat-rpls-2/igt@i915_selftest@live@reset.html
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/bat-rpls-2/igt@i915_selftest@live@reset.html
    - {bat-rpls-1}:       [DMESG-FAIL][14] ([i915#4983]) -> [PASS][15]
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/bat-rpls-1/igt@i915_selftest@live@reset.html
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/bat-rpls-1/igt@i915_selftest@live@reset.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions:
    - fi-bsw-kefka:       [FAIL][16] ([i915#6298]) -> [PASS][17]
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/fi-bsw-kefka/igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/fi-bsw-kefka/igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845
  [i915#1849]: https://gitlab.freedesktop.org/drm/intel/issues/1849
  [i915#2582]: https://gitlab.freedesktop.org/drm/intel/issues/2582
  [i915#2867]: https://gitlab.freedesktop.org/drm/intel/issues/2867
  [i915#2940]: https://gitlab.freedesktop.org/drm/intel/issues/2940
  [i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
  [i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
  [i915#4785]: https://gitlab.freedesktop.org/drm/intel/issues/4785
  [i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983
  [i915#6298]: https://gitlab.freedesktop.org/drm/intel/issues/6298
  [i915#6367]: https://gitlab.freedesktop.org/drm/intel/issues/6367
  [i915#6434]: https://gitlab.freedesktop.org/drm/intel/issues/6434
  [i915#6559]: https://gitlab.freedesktop.org/drm/intel/issues/6559
  [i915#6997]: https://gitlab.freedesktop.org/drm/intel/issues/6997
  [i915#7073]: https://gitlab.freedesktop.org/drm/intel/issues/7073
  [i915#7348]: https://gitlab.freedesktop.org/drm/intel/issues/7348


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

  * Linux: CI_DRM_12457 -> Patchwork_111507v1

  CI-20190529: 20190529
  CI_DRM_12457: 42273934c8b473fd88e6689a589e9b4050c46bec @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7076: 888725538e0d6bbb94bbbb1ac278d4afcbbbdad0 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_111507v1: 42273934c8b473fd88e6689a589e9b4050c46bec @ git://anongit.freedesktop.org/gfx-ci/linux


### Linux commits

384be56ecf5d drm/i915/mtl: Add initial gt workarounds
40f6874198a5 drm/i915/mtl: Initial display workarounds

== Logs ==

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

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

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

* [Intel-gfx] ✓ Fi.CI.IGT: success for series starting with [1/2] drm/i915/mtl: Initial display workarounds
  2022-11-30 23:17 [Intel-gfx] [PATCH 1/2] drm/i915/mtl: Initial display workarounds Matt Atwood
                   ` (3 preceding siblings ...)
  2022-12-01  0:46 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
@ 2022-12-01 12:28 ` Patchwork
  2022-12-01 12:51 ` [Intel-gfx] [PATCH 1/2] " Tvrtko Ursulin
  2022-12-01 23:01 ` Matt Roper
  6 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2022-12-01 12:28 UTC (permalink / raw)
  To: Matt Atwood; +Cc: intel-gfx

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

== Series Details ==

Series: series starting with [1/2] drm/i915/mtl: Initial display workarounds
URL   : https://patchwork.freedesktop.org/series/111507/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_12457_full -> Patchwork_111507v1_full
====================================================

Summary
-------

  **WARNING**

  Minor unknown changes coming with Patchwork_111507v1_full need to be verified
  manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_111507v1_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

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

  No changes in participating hosts

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

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

### IGT changes ###

#### Warnings ####

  * igt@kms_psr@psr2_cursor_plane_move:
    - shard-tglb:         [FAIL][1] ([i915#132] / [i915#3467]) -> [INCOMPLETE][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-tglb8/igt@kms_psr@psr2_cursor_plane_move.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-tglb8/igt@kms_psr@psr2_cursor_plane_move.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_ctx_exec@basic-nohangcheck:
    - shard-tglb:         [PASS][3] -> [FAIL][4] ([i915#6268])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-tglb2/igt@gem_ctx_exec@basic-nohangcheck.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-tglb6/igt@gem_ctx_exec@basic-nohangcheck.html

  * igt@gem_ctx_persistence@engines-queued:
    - shard-snb:          NOTRUN -> [SKIP][5] ([fdo#109271] / [i915#1099])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-snb4/igt@gem_ctx_persistence@engines-queued.html

  * igt@gem_exec_balancer@parallel-contexts:
    - shard-iclb:         [PASS][6] -> [SKIP][7] ([i915#4525])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-iclb1/igt@gem_exec_balancer@parallel-contexts.html
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb3/igt@gem_exec_balancer@parallel-contexts.html

  * igt@gem_exec_fair@basic-flow@rcs0:
    - shard-tglb:         [PASS][8] -> [FAIL][9] ([i915#2842])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-tglb1/igt@gem_exec_fair@basic-flow@rcs0.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-tglb1/igt@gem_exec_fair@basic-flow@rcs0.html

  * igt@gem_exec_fair@basic-none-solo@rcs0:
    - shard-apl:          [PASS][10] -> [FAIL][11] ([i915#2842])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-apl8/igt@gem_exec_fair@basic-none-solo@rcs0.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-apl2/igt@gem_exec_fair@basic-none-solo@rcs0.html

  * igt@gem_huc_copy@huc-copy:
    - shard-tglb:         [PASS][12] -> [SKIP][13] ([i915#2190])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-tglb5/igt@gem_huc_copy@huc-copy.html
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-tglb6/igt@gem_huc_copy@huc-copy.html

  * igt@gem_userptr_blits@unsync-unmap:
    - shard-iclb:         NOTRUN -> [SKIP][14] ([i915#3297])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb3/igt@gem_userptr_blits@unsync-unmap.html

  * igt@gem_vm_create@invalid-create:
    - shard-snb:          NOTRUN -> [SKIP][15] ([fdo#109271]) +76 similar issues
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-snb4/igt@gem_vm_create@invalid-create.html

  * igt@i915_pm_dc@dc6-dpms:
    - shard-iclb:         [PASS][16] -> [FAIL][17] ([i915#3989] / [i915#454])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-iclb1/igt@i915_pm_dc@dc6-dpms.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb3/igt@i915_pm_dc@dc6-dpms.html

  * igt@i915_pm_dc@dc6-psr:
    - shard-iclb:         NOTRUN -> [FAIL][18] ([i915#3989] / [i915#454])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb3/igt@i915_pm_dc@dc6-psr.html

  * igt@i915_selftest@live@gt_heartbeat:
    - shard-skl:          [PASS][19] -> [DMESG-FAIL][20] ([i915#5334])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-skl9/igt@i915_selftest@live@gt_heartbeat.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-skl1/igt@i915_selftest@live@gt_heartbeat.html

  * igt@kms_async_flips@alternate-sync-async-flip@pipe-b-edp-1:
    - shard-skl:          [PASS][21] -> [FAIL][22] ([i915#2521]) +2 similar issues
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-skl6/igt@kms_async_flips@alternate-sync-async-flip@pipe-b-edp-1.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-skl7/igt@kms_async_flips@alternate-sync-async-flip@pipe-b-edp-1.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180:
    - shard-iclb:         NOTRUN -> [SKIP][23] ([fdo#110723])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb3/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180.html

  * igt@kms_ccs@pipe-b-random-ccs-data-y_tiled_gen12_mc_ccs:
    - shard-skl:          NOTRUN -> [SKIP][24] ([fdo#109271] / [i915#3886])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-skl4/igt@kms_ccs@pipe-b-random-ccs-data-y_tiled_gen12_mc_ccs.html

  * igt@kms_ccs@pipe-c-crc-sprite-planes-basic-4_tiled_dg2_rc_ccs:
    - shard-iclb:         NOTRUN -> [SKIP][25] ([fdo#109278]) +1 similar issue
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb3/igt@kms_ccs@pipe-c-crc-sprite-planes-basic-4_tiled_dg2_rc_ccs.html

  * igt@kms_chamelium@dp-edid-read:
    - shard-iclb:         NOTRUN -> [SKIP][26] ([fdo#109284] / [fdo#111827])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb3/igt@kms_chamelium@dp-edid-read.html

  * igt@kms_chamelium@hdmi-crc-nonplanar-formats:
    - shard-snb:          NOTRUN -> [SKIP][27] ([fdo#109271] / [fdo#111827]) +2 similar issues
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-snb4/igt@kms_chamelium@hdmi-crc-nonplanar-formats.html

  * igt@kms_cursor_legacy@cursor-vs-flip@legacy:
    - shard-iclb:         [PASS][28] -> [FAIL][29] ([i915#5072])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-iclb2/igt@kms_cursor_legacy@cursor-vs-flip@legacy.html
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb7/igt@kms_cursor_legacy@cursor-vs-flip@legacy.html

  * igt@kms_flip@flip-vs-expired-vblank@c-edp1:
    - shard-skl:          [PASS][30] -> [FAIL][31] ([i915#79]) +1 similar issue
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-skl9/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-skl1/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html

  * igt@kms_flip@flip-vs-suspend-interruptible@a-dp1:
    - shard-apl:          [PASS][32] -> [DMESG-WARN][33] ([i915#180])
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-apl6/igt@kms_flip@flip-vs-suspend-interruptible@a-dp1.html
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-apl3/igt@kms_flip@flip-vs-suspend-interruptible@a-dp1.html

  * igt@kms_flip@plain-flip-ts-check-interruptible@c-edp1:
    - shard-skl:          [PASS][34] -> [FAIL][35] ([i915#2122])
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-skl1/igt@kms_flip@plain-flip-ts-check-interruptible@c-edp1.html
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-skl6/igt@kms_flip@plain-flip-ts-check-interruptible@c-edp1.html

  * igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling@pipe-a-default-mode:
    - shard-iclb:         NOTRUN -> [SKIP][36] ([i915#3555])
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb2/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling@pipe-a-default-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling@pipe-a-default-mode:
    - shard-iclb:         NOTRUN -> [SKIP][37] ([i915#2672] / [i915#3555])
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb3/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling@pipe-a-default-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-downscaling@pipe-a-valid-mode:
    - shard-iclb:         NOTRUN -> [SKIP][38] ([i915#2587] / [i915#2672]) +2 similar issues
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb6/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-downscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling@pipe-a-default-mode:
    - shard-iclb:         NOTRUN -> [SKIP][39] ([i915#2672]) +2 similar issues
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb2/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling@pipe-a-default-mode.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-indfb-pgflip-blt:
    - shard-iclb:         NOTRUN -> [SKIP][40] ([fdo#109280]) +3 similar issues
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb3/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-indfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@psr-modesetfrombusy:
    - shard-skl:          [PASS][41] -> [DMESG-WARN][42] ([i915#1982])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-skl9/igt@kms_frontbuffer_tracking@psr-modesetfrombusy.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-skl1/igt@kms_frontbuffer_tracking@psr-modesetfrombusy.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-iclb:         NOTRUN -> [SKIP][43] ([i915#1839])
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb3/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_plane_alpha_blend@alpha-basic@pipe-a-edp-1:
    - shard-skl:          NOTRUN -> [FAIL][44] ([i915#4573]) +2 similar issues
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-skl4/igt@kms_plane_alpha_blend@alpha-basic@pipe-a-edp-1.html

  * igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area:
    - shard-iclb:         NOTRUN -> [SKIP][45] ([fdo#111068] / [i915#658])
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb3/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_su@page_flip-p010:
    - shard-iclb:         NOTRUN -> [SKIP][46] ([fdo#109642] / [fdo#111068] / [i915#658])
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb6/igt@kms_psr2_su@page_flip-p010.html

  * igt@kms_psr@psr2_cursor_blt:
    - shard-iclb:         [PASS][47] -> [SKIP][48] ([fdo#109441]) +1 similar issue
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-iclb2/igt@kms_psr@psr2_cursor_blt.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb6/igt@kms_psr@psr2_cursor_blt.html

  * igt@kms_vrr@flipline:
    - shard-skl:          NOTRUN -> [SKIP][49] ([fdo#109271]) +31 similar issues
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-skl4/igt@kms_vrr@flipline.html

  * igt@kms_writeback@writeback-check-output:
    - shard-skl:          NOTRUN -> [SKIP][50] ([fdo#109271] / [i915#2437])
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-skl6/igt@kms_writeback@writeback-check-output.html

  * igt@perf_pmu@interrupts:
    - shard-skl:          NOTRUN -> [FAIL][51] ([i915#7318])
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-skl4/igt@perf_pmu@interrupts.html

  
#### Possible fixes ####

  * igt@drm_read@short-buffer-block:
    - {shard-rkl}:        [SKIP][52] ([i915#4098]) -> [PASS][53]
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-rkl-4/igt@drm_read@short-buffer-block.html
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-rkl-6/igt@drm_read@short-buffer-block.html

  * igt@feature_discovery@psr2:
    - {shard-rkl}:        [SKIP][54] ([i915#658]) -> [PASS][55]
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-rkl-2/igt@feature_discovery@psr2.html
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-rkl-6/igt@feature_discovery@psr2.html

  * igt@gem_bad_reloc@negative-reloc-lut:
    - {shard-rkl}:        [SKIP][56] ([i915#3281]) -> [PASS][57] +7 similar issues
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-rkl-6/igt@gem_bad_reloc@negative-reloc-lut.html
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-rkl-5/igt@gem_bad_reloc@negative-reloc-lut.html

  * igt@gem_ctx_persistence@legacy-engines-hang@blt:
    - {shard-rkl}:        [SKIP][58] ([i915#6252]) -> [PASS][59]
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-rkl-5/igt@gem_ctx_persistence@legacy-engines-hang@blt.html
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-rkl-2/igt@gem_ctx_persistence@legacy-engines-hang@blt.html

  * igt@gem_exec_balancer@parallel:
    - shard-iclb:         [SKIP][60] ([i915#4525]) -> [PASS][61] +1 similar issue
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-iclb6/igt@gem_exec_balancer@parallel.html
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb1/igt@gem_exec_balancer@parallel.html

  * igt@gem_exec_fair@basic-pace-share@rcs0:
    - shard-tglb:         [FAIL][62] ([i915#2842]) -> [PASS][63]
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-tglb6/igt@gem_exec_fair@basic-pace-share@rcs0.html
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-tglb3/igt@gem_exec_fair@basic-pace-share@rcs0.html

  * igt@gem_exec_whisper@basic-contexts-forked:
    - shard-iclb:         [INCOMPLETE][64] ([i915#6453]) -> [PASS][65]
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-iclb1/igt@gem_exec_whisper@basic-contexts-forked.html
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb3/igt@gem_exec_whisper@basic-contexts-forked.html

  * igt@gem_mmap_gtt@coherency:
    - {shard-rkl}:        [SKIP][66] ([fdo#111656]) -> [PASS][67]
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-rkl-2/igt@gem_mmap_gtt@coherency.html
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-rkl-5/igt@gem_mmap_gtt@coherency.html

  * igt@gem_pread@snoop:
    - {shard-rkl}:        [SKIP][68] ([i915#3282]) -> [PASS][69] +6 similar issues
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-rkl-6/igt@gem_pread@snoop.html
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-rkl-5/igt@gem_pread@snoop.html

  * igt@gen9_exec_parse@bb-start-far:
    - {shard-rkl}:        [SKIP][70] ([i915#2527]) -> [PASS][71] +2 similar issues
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-rkl-1/igt@gen9_exec_parse@bb-start-far.html
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-rkl-5/igt@gen9_exec_parse@bb-start-far.html

  * igt@i915_pm_rpm@pm-tiling:
    - {shard-rkl}:        [SKIP][72] ([fdo#109308]) -> [PASS][73] +1 similar issue
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-rkl-2/igt@i915_pm_rpm@pm-tiling.html
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-rkl-6/igt@i915_pm_rpm@pm-tiling.html

  * igt@i915_pm_rps@engine-order:
    - shard-apl:          [FAIL][74] ([i915#6537]) -> [PASS][75]
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-apl6/igt@i915_pm_rps@engine-order.html
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-apl3/igt@i915_pm_rps@engine-order.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1:
    - shard-iclb:         [FAIL][76] ([i915#79]) -> [PASS][77]
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-iclb5/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb2/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html

  * igt@kms_flip@plain-flip-ts-check-interruptible@a-dp1:
    - shard-apl:          [FAIL][78] ([i915#2122]) -> [PASS][79]
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-apl6/igt@kms_flip@plain-flip-ts-check-interruptible@a-dp1.html
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-apl7/igt@kms_flip@plain-flip-ts-check-interruptible@a-dp1.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-render:
    - {shard-rkl}:        [SKIP][80] ([i915#1849] / [i915#4098]) -> [PASS][81] +16 similar issues
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-rkl-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-render.html
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-suspend:
    - shard-skl:          [INCOMPLETE][82] ([i915#7255]) -> [PASS][83]
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-skl10/igt@kms_frontbuffer_tracking@psr-suspend.html
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-skl4/igt@kms_frontbuffer_tracking@psr-suspend.html

  * igt@kms_prime@basic-crc-vgem@second-to-first:
    - shard-skl:          [DMESG-WARN][84] ([i915#1982]) -> [PASS][85]
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-skl7/igt@kms_prime@basic-crc-vgem@second-to-first.html
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-skl10/igt@kms_prime@basic-crc-vgem@second-to-first.html

  * igt@kms_psr@sprite_mmap_gtt:
    - {shard-rkl}:        [SKIP][86] ([i915#1072]) -> [PASS][87] +1 similar issue
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-rkl-4/igt@kms_psr@sprite_mmap_gtt.html
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-rkl-6/igt@kms_psr@sprite_mmap_gtt.html

  * igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
    - shard-tglb:         [SKIP][88] ([i915#5519]) -> [PASS][89]
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-tglb7/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-tglb5/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html

  * igt@kms_sysfs_edid_timing:
    - shard-skl:          [FAIL][90] ([i915#6493]) -> [PASS][91]
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-skl4/igt@kms_sysfs_edid_timing.html
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-skl10/igt@kms_sysfs_edid_timing.html

  * igt@kms_vblank@pipe-a-wait-forked-busy-hang:
    - {shard-rkl}:        [SKIP][92] ([i915#1845] / [i915#4098]) -> [PASS][93] +26 similar issues
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-rkl-4/igt@kms_vblank@pipe-a-wait-forked-busy-hang.html
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-rkl-6/igt@kms_vblank@pipe-a-wait-forked-busy-hang.html

  * igt@prime_vgem@basic-fence-read:
    - {shard-rkl}:        [SKIP][94] ([fdo#109295] / [i915#3291] / [i915#3708]) -> [PASS][95]
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-rkl-1/igt@prime_vgem@basic-fence-read.html
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-rkl-5/igt@prime_vgem@basic-fence-read.html

  
#### Warnings ####

  * igt@i915_pm_dc@dc3co-vpb-simulation:
    - shard-iclb:         [SKIP][96] ([i915#588]) -> [SKIP][97] ([i915#658])
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-iclb2/igt@i915_pm_dc@dc3co-vpb-simulation.html
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb6/igt@i915_pm_dc@dc3co-vpb-simulation.html

  * igt@i915_pm_rc6_residency@rc6-idle@vecs0:
    - shard-iclb:         [FAIL][98] ([i915#2684]) -> [WARN][99] ([i915#2684])
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-iclb1/igt@i915_pm_rc6_residency@rc6-idle@vecs0.html
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb2/igt@i915_pm_rc6_residency@rc6-idle@vecs0.html

  * igt@kms_plane_alpha_blend@alpha-basic@pipe-c-dp-1:
    - shard-apl:          [FAIL][100] ([i915#4573]) -> [DMESG-FAIL][101] ([IGT#6]) +1 similar issue
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-apl7/igt@kms_plane_alpha_blend@alpha-basic@pipe-c-dp-1.html
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-apl8/igt@kms_plane_alpha_blend@alpha-basic@pipe-c-dp-1.html

  * igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf:
    - shard-iclb:         [SKIP][102] ([i915#658]) -> [SKIP][103] ([i915#2920]) +1 similar issue
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-iclb1/igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf.html
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb2/igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_sf@overlay-plane-move-continuous-sf:
    - shard-iclb:         [SKIP][104] ([i915#2920]) -> [SKIP][105] ([i915#658])
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-iclb2/igt@kms_psr2_sf@overlay-plane-move-continuous-sf.html
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-iclb7/igt@kms_psr2_sf@overlay-plane-move-continuous-sf.html

  * igt@runner@aborted:
    - shard-apl:          ([FAIL][106], [FAIL][107]) ([i915#3002] / [i915#4312]) -> ([FAIL][108], [FAIL][109], [FAIL][110]) ([i915#180] / [i915#3002] / [i915#4312])
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-apl7/igt@runner@aborted.html
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12457/shard-apl6/igt@runner@aborted.html
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-apl1/igt@runner@aborted.html
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-apl6/igt@runner@aborted.html
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_111507v1/shard-apl3/igt@runner@aborted.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [IGT#6]: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/6
  [fdo#103375]: https://bugs.freedesktop.org/show_bug.cgi?id=103375
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
  [fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278
  [fdo#109279]: https://bugs.freedesktop.org/show_bug.cgi?id=109279
  [fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
  [fdo#109283]: https://bugs.freedesktop.org/show_bug.cgi?id=109283
  [fdo#109284]: https://bugs.freedesktop.org/show_bug.cgi?id=109284
  [fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
  [fdo#109291]: https://bugs.freedesktop.org/show_bug.cgi?id=109291
  [fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295
  [fdo#109307]: https://bugs.freedesktop.org/show_bug.cgi?id=109307
  [fdo#109308]: https://bugs.freedesktop.org/show_bug.cgi?id=109308
  [fdo#109313]: https://bugs.freedesktop.org/show_bug.cgi?id=109313
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [fdo#109506]: https://bugs.freedesktop.org/show_bug.cgi?id=109506
  [fdo#109642]: https://bugs.freedesktop.org/show_bug.cgi?id=109642
  [fdo#110189]: https://bugs.freedesktop.org/show_bug.cgi?id=110189
  [fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723
  [fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068
  [fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
  [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
  [fdo#111656]: https://bugs.freedesktop.org/show_bug.cgi?id=111656
  [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1099]: https://gitlab.freedesktop.org/drm/intel/issues/1099
  [i915#132]: https://gitlab.freedesktop.org/drm/intel/issues/132
  [i915#1755]: https://gitlab.freedesktop.org/drm/intel/issues/1755
  [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180
  [i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
  [i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839
  [i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845
  [i915#1849]: https://gitlab.freedesktop.org/drm/intel/issues/1849
  [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
  [i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
  [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
  [i915#2232]: https://gitlab.freedesktop.org/drm/intel/issues/2232
  [i915#2410]: https://gitlab.freedesktop.org/drm/intel/issues/2410
  [i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
  [i915#2521]: https://gitlab.freedesktop.org/drm/intel/issues/2521
  [i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
  [i915#2532]: https://gitlab.freedesktop.org/drm/intel/issues/2532
  [i915#2582]: https://gitlab.freedesktop.org/drm/intel/issues/2582
  [i915#2587]: https://gitlab.freedesktop.org/drm/intel/issues/2587
  [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
  [i915#2684]: https://gitlab.freedesktop.org/drm/intel/issues/2684
  [i915#2705]: https://gitlab.freedesktop.org/drm/intel/issues/2705
  [i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
  [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
  [i915#2920]: https://gitlab.freedesktop.org/drm/intel/issues/2920
  [i915#2994]: https://gitlab.freedesktop.org/drm/intel/issues/2994
  [i915#3002]: https://gitlab.freedesktop.org/drm/intel/issues/3002
  [i915#3116]: https://gitlab.freedesktop.org/drm/intel/issues/3116
  [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
  [i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
  [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
  [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
  [i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
  [i915#3467]: https://gitlab.freedesktop.org/drm/intel/issues/3467
  [i915#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539
  [i915#3546]: https://gitlab.freedesktop.org/drm/intel/issues/3546
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3558]: https://gitlab.freedesktop.org/drm/intel/issues/3558
  [i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637
  [i915#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638
  [i915#3689]: https://gitlab.freedesktop.org/drm/intel/issues/3689
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#3734]: https://gitlab.freedesktop.org/drm/intel/issues/3734
  [i915#3742]: https://gitlab.freedesktop.org/drm/intel/issues/3742
  [i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840
  [i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
  [i915#3955]: https://gitlab.freedesktop.org/drm/intel/issues/3955
  [i915#3989]: https://gitlab.freedesktop.org/drm/intel/issues/3989
  [i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
  [i915#4098]: https://gitlab.freedesktop.org/drm/intel/issues/4098
  [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
  [i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212
  [i915#4213]: https://gitlab.freedesktop.org/drm/intel/issues/4213
  [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
  [i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
  [i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349
  [i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
  [i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
  [i915#454]: https://gitlab.freedesktop.org/drm/intel/issues/454
  [i915#4565]: https://gitlab.freedesktop.org/drm/intel/issues/4565
  [i915#4573]: https://gitlab.freedesktop.org/drm/intel/issues/4573
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4771]: https://gitlab.freedesktop.org/drm/intel/issues/4771
  [i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812
  [i915#4818]: https://gitlab.freedesktop.org/drm/intel/issues/4818
  [i915#4833]: https://gitlab.freedesktop.org/drm/intel/issues/4833
  [i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852
  [i915#4859]: https://gitlab.freedesktop.org/drm/intel/issues/4859
  [i915#4877]: https://gitlab.freedesktop.org/drm/intel/issues/4877
  [i915#4880]: https://gitlab.freedesktop.org/drm/intel/issues/4880
  [i915#4881]: https://gitlab.freedesktop.org/drm/intel/issues/4881
  [i915#4885]: https://gitlab.freedesktop.org/drm/intel/issues/4885
  [i915#4958]: https://gitlab.freedesktop.org/drm/intel/issues/4958
  [i915#5030]: https://gitlab.freedesktop.org/drm/intel/issues/5030
  [i915#5072]: https://gitlab.freedesktop.org/drm/intel/issues/5072
  [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
  [i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
  [i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
  [i915#5325]: https://gitlab.freedesktop.org/drm/intel/issues/5325
  [i915#5327]: https://gitlab.freedesktop.org/drm/intel/issues/5327
  [i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
  [i915#5334]: https://gitlab.freedesktop.org/drm/intel/issues/5334
  [i915#5439]: https://gitlab.freedesktop.org/drm/intel/issues/5439
  [i915#5519]: https://gitlab.freedesktop.org/drm/intel/issues/5519
  [i915#5563]: https://gitlab.freedesktop.org/drm/intel/issues/5563
  [i915#588]: https://gitlab.freedesktop.org/drm/intel/issues/588
  [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
  [i915#6230]: https://gitlab.freedesktop.org/drm/intel/issues/6230
  [i915#6247]: https://gitlab.freedesktop.org/drm/intel/issues/6247
  [i915#6248]: https://gitlab.freedesktop.org/drm/intel/issues/6248
  [i915#6252]: https://gitlab.freedesktop.org/drm/intel/issues/6252
  [i915#6268]: https://gitlab.freedesktop.org/drm/intel/issues/6268
  [i915#6355]: https://gitlab.freedesktop.org/drm/intel/issues/6355
  [i915#6403]: https://gitlab.freedesktop.org/drm/intel/issues/6403
  [i915#6433]: https://gitlab.freedesktop.org/drm/intel/issues/6433
  [i915#6453]: https://gitlab.freedesktop.org/drm/intel/issues/6453
  [i915#6493]: https://gitlab.freedesktop.org/drm/intel/issues/6493
  [i915#6497]: https://gitlab.freedesktop.org/drm/intel/issues/6497
  [i915#6537]: https://gitlab.freedesktop.org/drm/intel/issues/6537
  [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
  [i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621
  [i915#6768]: https://gitlab.freedesktop.org/drm/intel/issues/6768
  [i915#6946]: https://gitlab.freedesktop.org/drm/intel/issues/6946
  [i915#7037]: https://gitlab.freedesktop.org/drm/intel/issues/7037
  [i915#7052]: https://gitlab.freedesktop.org/drm/intel/issues/7052
  [i915#7116]: https://gitlab.freedesktop.org/drm/intel/issues/7116
  [i915#7118]: https://gitlab.freedesktop.org/drm/intel/issues/7118
  [i915#7255]: https://gitlab.freedesktop.org/drm/intel/issues/7255
  [i915#7318]: https://gitlab.freedesktop.org/drm/intel/issues/7318
  [i915#7456]: https://gitlab.freedesktop.org/drm/intel/issues/7456
  [i915#7561]: https://gitlab.freedesktop.org/drm/intel/issues/7561
  [i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79


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

  * Linux: CI_DRM_12457 -> Patchwork_111507v1

  CI-20190529: 20190529
  CI_DRM_12457: 42273934c8b473fd88e6689a589e9b4050c46bec @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7076: 888725538e0d6bbb94bbbb1ac278d4afcbbbdad0 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_111507v1: 42273934c8b473fd88e6689a589e9b4050c46bec @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

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

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

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

* Re: [Intel-gfx] [PATCH 1/2] drm/i915/mtl: Initial display workarounds
  2022-11-30 23:17 [Intel-gfx] [PATCH 1/2] drm/i915/mtl: Initial display workarounds Matt Atwood
                   ` (4 preceding siblings ...)
  2022-12-01 12:28 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
@ 2022-12-01 12:51 ` Tvrtko Ursulin
  2022-12-01 22:14   ` Matt Atwood
  2022-12-01 23:01 ` Matt Roper
  6 siblings, 1 reply; 17+ messages in thread
From: Tvrtko Ursulin @ 2022-12-01 12:51 UTC (permalink / raw)
  To: Matt Atwood, intel-gfx; +Cc: lucas.demarchi


On 30/11/2022 23:17, Matt Atwood wrote:
> From: Jouni Högander <jouni.hogander@intel.com>
> 
> This patch introduces initial workarounds for mtl platform
> 
> Bspec: 66624
> 
> Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com>
> Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> ---
>   drivers/gpu/drm/i915/display/intel_fbc.c  |  4 +++-
>   drivers/gpu/drm/i915/display/intel_hdmi.c |  3 ++-
>   drivers/gpu/drm/i915/display/intel_psr.c  | 27 ++++++++++++++++-------
>   drivers/gpu/drm/i915/i915_drv.h           |  4 ++++
>   4 files changed, 28 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c
> index b5ee5ea0d010..8f269553d826 100644
> --- a/drivers/gpu/drm/i915/display/intel_fbc.c
> +++ b/drivers/gpu/drm/i915/display/intel_fbc.c
> @@ -1095,7 +1095,9 @@ static int intel_fbc_check_plane(struct intel_atomic_state *state,
>   	}
>   
>   	/* Wa_14016291713 */
> -	if (IS_DISPLAY_VER(i915, 12, 13) && crtc_state->has_psr) {
> +	if ((IS_DISPLAY_VER(i915, 12, 13) ||
> +	     IS_MTL_DISPLAY_STEP(i915, STEP_A0, STEP_C0)) &&
> +	    crtc_state->has_psr) {
>   		plane_state->no_fbc_reason = "PSR1 enabled (Wa_14016291713)";
>   		return 0;
>   	}
> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
> index e82f8a07e2b0..efa2da080f62 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> @@ -537,7 +537,8 @@ void hsw_write_infoframe(struct intel_encoder *encoder,
>   			       0);
>   
>   	/* Wa_14013475917 */
> -	if (DISPLAY_VER(dev_priv) == 13 && crtc_state->has_psr &&
> +	if ((DISPLAY_VER(dev_priv) == 13 ||
> +	     IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)) && crtc_state->has_psr &&
>   	    type == DP_SDP_VSC)
>   		return;
>   
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> index 5b678916e6db..7982157fb1ff 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -797,7 +797,7 @@ static bool psr2_granularity_check(struct intel_dp *intel_dp,
>   		return intel_dp->psr.su_y_granularity == 4;
>   
>   	/*
> -	 * adl_p and display 14+ platforms has 1 line granularity.
> +	 * adl_p and mtl platforms has 1 line granularity.
>   	 * For other platforms with SW tracking we can adjust the y coordinates
>   	 * to match sink requirement if multiple of 4.
>   	 */
> @@ -1170,11 +1170,14 @@ static void intel_psr_enable_source(struct intel_dp *intel_dp,
>   				     PSR2_ADD_VERTICAL_LINE_COUNT);
>   
>   		/*
> -		 * Wa_16014451276:adlp
> +		 * Wa_16014451276:adlp,mtl[a0,b0]
>   		 * All supported adlp panels have 1-based X granularity, this may
>   		 * cause issues if non-supported panels are used.
>   		 */
> -		if (IS_ALDERLAKE_P(dev_priv))
> +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
> +			intel_de_rmw(dev_priv, MTL_CHICKEN_TRANS(cpu_transcoder), 0,
> +				     ADLP_1_BASED_X_GRANULARITY);
> +		else if (IS_ALDERLAKE_P(dev_priv))
>   			intel_de_rmw(dev_priv, CHICKEN_TRANS(cpu_transcoder), 0,
>   				     ADLP_1_BASED_X_GRANULARITY);
>   
> @@ -1185,8 +1188,12 @@ static void intel_psr_enable_source(struct intel_dp *intel_dp,
>   				     TRANS_SET_CONTEXT_LATENCY_MASK,
>   				     TRANS_SET_CONTEXT_LATENCY_VALUE(1));
>   
> -		/* Wa_16012604467:adlp */
> -		if (IS_ALDERLAKE_P(dev_priv))
> +		/* Wa_16012604467:adlp,mtl[a0,b0] */
> +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
> +			intel_de_rmw(dev_priv,
> +				     MTL_CLKGATE_DIS_TRANS(cpu_transcoder), 0,
> +				     MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS);
> +		else if (IS_ALDERLAKE_P(dev_priv))
>   			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC, 0,
>   				     CLKGATE_DIS_MISC_DMASC_GATING_DIS);
>   
> @@ -1362,8 +1369,12 @@ static void intel_psr_disable_locked(struct intel_dp *intel_dp)
>   				     TRANS_SET_CONTEXT_LATENCY(intel_dp->psr.transcoder),
>   				     TRANS_SET_CONTEXT_LATENCY_MASK, 0);
>   
> -		/* Wa_16012604467:adlp */
> -		if (IS_ALDERLAKE_P(dev_priv))
> +		/* Wa_16012604467:adlp,mtl[a0,b0] */
> +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
> +			intel_de_rmw(dev_priv,
> +				     MTL_CLKGATE_DIS_TRANS(intel_dp->psr.transcoder),
> +				     MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS, 0);
> +		else if (IS_ALDERLAKE_P(dev_priv))
>   			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC,
>   				     CLKGATE_DIS_MISC_DMASC_GATING_DIS, 0);
>   
> @@ -1625,7 +1636,7 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
>   
>   	if (full_update) {
>   		/*
> -		 * Not applying Wa_14014971508:adlp as we do not support the
> +		 * Not applying Wa_14014971508:adlp,mtl as we do not support the
>   		 * feature that requires this workaround.
>   		 */
>   		val |= man_trk_ctl_single_full_frame_bit_get(dev_priv);
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index a8a5bd426e78..ecb027626a21 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -727,6 +727,10 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
>   	(IS_SUBPLATFORM(__i915, INTEL_METEORLAKE, INTEL_SUBPLATFORM_##variant) && \
>   	 IS_GRAPHICS_STEP(__i915, since, until))
>   
> +#define IS_MTL_DISPLAY_STEP(__i915, since, until) \
> +	(DISPLAY_VER(__i915) == 14 && \
> +	 IS_DISPLAY_STEP(__i915, since, until))

You might want IS_METEORLAKE somewhere in here if macro is called 
IS_MTL_.. otherwise it may surprise in the future. Unless it is 
guaranteed MTL will be the only with display_ver == 14.

Take care of checkpatch warnings as well please.

Regards,

Tvrtko

> +
>   /*
>    * DG2 hardware steppings are a bit unusual.  The hardware design was forked to
>    * create three variants (G10, G11, and G12) which each have distinct

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

* Re: [Intel-gfx] [PATCH 2/2] drm/i915/mtl: Add initial gt workarounds
  2022-11-30 23:17 ` [Intel-gfx] [PATCH 2/2] drm/i915/mtl: Add initial gt workarounds Matt Atwood
@ 2022-12-01 13:15   ` Tvrtko Ursulin
  2022-12-01 17:23     ` Lucas De Marchi
  2022-12-01 17:25     ` Lucas De Marchi
  0 siblings, 2 replies; 17+ messages in thread
From: Tvrtko Ursulin @ 2022-12-01 13:15 UTC (permalink / raw)
  To: Matt Atwood, intel-gfx; +Cc: lucas.demarchi


On 30/11/2022 23:17, Matt Atwood wrote:
> From: Matt Roper <matthew.d.roper@intel.com>
> 
> This patch introduces initial workarounds for mtl platform
> 
> Bspec:66622
> 
> Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com>
> Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
> ---
>   drivers/gpu/drm/i915/gt/intel_engine_cs.c     |   4 +-
>   .../drm/i915/gt/intel_execlists_submission.c  |   4 +-
>   drivers/gpu/drm/i915/gt/intel_gt_mcr.c        |  11 +-
>   drivers/gpu/drm/i915/gt/intel_gt_regs.h       |   5 +
>   drivers/gpu/drm/i915/gt/intel_workarounds.c   | 105 +++++++++++++-----
>   drivers/gpu/drm/i915/gt/uc/intel_guc.c        |   9 +-
>   .../gpu/drm/i915/gt/uc/intel_guc_submission.c |  10 +-
>   drivers/gpu/drm/i915/i915_drv.h               |   4 +
>   drivers/gpu/drm/i915/intel_device_info.c      |   6 +
>   9 files changed, 121 insertions(+), 37 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> index c33e0d72d670..af88d8ab61c1 100644
> --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> @@ -1479,7 +1479,9 @@ static int __intel_engine_stop_cs(struct intel_engine_cs *engine,
>   	 * Wa_22011802037 : gen11, gen12, Prior to doing a reset, ensure CS is
>   	 * stopped, set ring stop bit and prefetch disable bit to halt CS
>   	 */
> -	if (IS_GRAPHICS_VER(engine->i915, 11, 12))
> +	if (IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
> +	    (GRAPHICS_VER(engine->i915) >= 11 &&
> +	    GRAPHICS_VER_FULL(engine->i915) < IP_VER(12, 70)))

Does comment need updating to reflect the workaround applicability? 
Elsewhere as well. Some are left as dg2 only. Some gen11,gen12 only.

Then there's a few of this same change logic throught the patch, so I 
assume a general situation of workarounds applying to only early MTL.

  if ((IS_GRAPHICS_VER(engine->i915, 11, 12)) &&
      !IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_B1, STEP_FOREVER)

Would this be correct and simpler? Not sure about STEP_B1 for start of 
range, if it is possible to define it. Don't know.. One could perhaps 
even suggest a new macro to avoid repeated whatever patterna lot.

>   		intel_uncore_write_fw(uncore, RING_MODE_GEN7(engine->mmio_base),
>   				      _MASKED_BIT_ENABLE(GEN12_GFX_PREFETCH_DISABLE));
>   
> diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> index 49a8f10d76c7..a91c912e35d6 100644
> --- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> +++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> @@ -2992,7 +2992,9 @@ static void execlists_reset_prepare(struct intel_engine_cs *engine)
>   	 * Wa_22011802037:gen11/gen12: In addition to stopping the cs, we need
>   	 * to wait for any pending mi force wakeups
>   	 */
> -	if (IS_GRAPHICS_VER(engine->i915, 11, 12))
> +	if (IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
> +	    (GRAPHICS_VER(engine->i915) >= 11 &&
> +	    GRAPHICS_VER_FULL(engine->i915) < IP_VER(12, 70)))
>   		intel_engine_wait_for_pending_mi_fw(engine);
>   
>   	engine->execlists.reset_ccid = active_ccid(engine);
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> index aa070ae57f11..0e90a8f86b27 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> @@ -164,8 +164,15 @@ void intel_gt_mcr_init(struct intel_gt *gt)
>   	if (MEDIA_VER(i915) >= 13 && gt->type == GT_MEDIA) {
>   		gt->steering_table[OADDRM] = xelpmp_oaddrm_steering_table;
>   	} else if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 70)) {
> -		fuse = REG_FIELD_GET(GT_L3_EXC_MASK,
> -				     intel_uncore_read(gt->uncore, XEHP_FUSE4));
> +		/* Wa_14016747170:mtl-m[a0], mtl-p[a0] */
> +		if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
> +		    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0))
> +			fuse = REG_FIELD_GET(MTL_GT_L3_EXC_MASK,
> +					     intel_uncore_read(gt->uncore,
> +							       MTL_GT_ACTIVITY_FACTOR));
> +		else
> +			fuse = REG_FIELD_GET(GT_L3_EXC_MASK,
> +					     intel_uncore_read(gt->uncore, XEHP_FUSE4));
>   
>   		/*
>   		 * Despite the register field being named "exclude mask" the
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_regs.h b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
> index 784152548472..c2c03b02f200 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_regs.h
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
> @@ -413,6 +413,7 @@
>   #define   TBIMR_FAST_CLIP			REG_BIT(5)
>   
>   #define VFLSKPD					MCR_REG(0x62a8)
> +#define   VF_PREFETCH_TLB_DIS			REG_BIT(5)
>   #define   DIS_OVER_FETCH_CACHE			REG_BIT(1)
>   #define   DIS_MULT_MISS_RD_SQUASH		REG_BIT(0)
>   
> @@ -1532,6 +1533,10 @@
>   
>   #define MTL_MEDIA_MC6				_MMIO(0x138048)
>   
> +/* Wa_14016747170:mtl-p[a0], mtl-m[a0] */
> +#define MTL_GT_ACTIVITY_FACTOR			_MMIO(0x138010)
> +#define   MTL_GT_L3_EXC_MASK			REG_GENMASK(5, 3)
> +
>   #define GEN6_GT_THREAD_STATUS_REG		_MMIO(0x13805c)
>   #define   GEN6_GT_THREAD_STATUS_CORE_MASK	0x7
>   
> diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> index 3e35facac2b4..2e3d5de0c522 100644
> --- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
> +++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> @@ -786,6 +786,32 @@ static void dg2_ctx_workarounds_init(struct intel_engine_cs *engine,
>   	wa_masked_en(wal, CACHE_MODE_1, MSAA_OPTIMIZATION_REDUC_DISABLE);
>   }
>   
> +static void mtl_ctx_workarounds_init(struct intel_engine_cs *engine,
> +				     struct i915_wa_list *wal)
> +{
> +	struct drm_i915_private *i915 = engine->i915;
> +
> +	if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
> +	    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0)) {
> +		/* Wa_14014947963:mtl */
> +		wa_masked_field_set(wal, VF_PREEMPTION,
> +				    PREEMPTION_VERTEX_COUNT, 0x4000);
> +
> +		/* Wa_16013271637:mtl */
> +		wa_mcr_masked_en(wal, XEHP_SLICE_COMMON_ECO_CHICKEN1,
> +				 MSC_MSAA_REODER_BUF_BYPASS_DISABLE);
> +
> +		/* Wa_18019627453:mtl */
> +		wa_mcr_masked_en(wal, VFLSKPD, VF_PREFETCH_TLB_DIS);
> +
> +		/* Wa_18018764978:mtl */
> +		wa_masked_en(wal, PSS_MODE2, SCOREBOARD_STALL_FLUSH_CONTROL);
> +	}
> +
> +	/* Wa_18019271663:mtl */
> +	wa_masked_en(wal, CACHE_MODE_1, MSAA_OPTIMIZATION_REDUC_DISABLE);
> +}
> +
>   static void fakewa_disable_nestedbb_mode(struct intel_engine_cs *engine,
>   					 struct i915_wa_list *wal)
>   {
> @@ -872,7 +898,9 @@ __intel_engine_init_ctx_wa(struct intel_engine_cs *engine,
>   	if (engine->class != RENDER_CLASS)
>   		goto done;
>   
> -	if (IS_PONTEVECCHIO(i915))
> +	if (IS_METEORLAKE(i915))
> +		mtl_ctx_workarounds_init(engine, wal);
> +	else if (IS_PONTEVECCHIO(i915))
>   		; /* noop; none at this time */
>   	else if (IS_DG2(i915))
>   		dg2_ctx_workarounds_init(engine, wal);
> @@ -1628,7 +1656,10 @@ pvc_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
>   static void
>   xelpg_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
>   {
> -	/* FIXME: Actual workarounds will be added in future patch(es) */
> +	/* Wa_14014830051:mtl */
> +	if (IS_MTL_GRAPHICS_STEP(gt->i915, M, STEP_A0, STEP_B0) ||
> +	    IS_MTL_GRAPHICS_STEP(gt->i915, P, STEP_A0, STEP_B0))
> +		wa_mcr_write_clr(wal, SARB_CHICKEN1, COMP_CKN_IN);
>   
>   	/*
>   	 * Unlike older platforms, we no longer setup implicit steering here;
> @@ -2168,7 +2199,9 @@ void intel_engine_init_whitelist(struct intel_engine_cs *engine)
>   
>   	wa_init_start(w, engine->gt, "whitelist", engine->name);
>   
> -	if (IS_PONTEVECCHIO(i915))
> +	if (IS_METEORLAKE(i915))
> +		; /* noop; none at this time */
> +	else if (IS_PONTEVECCHIO(i915))
>   		pvc_whitelist_build(engine);
>   	else if (IS_DG2(i915))
>   		dg2_whitelist_build(engine);
> @@ -2278,6 +2311,34 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
>   {
>   	struct drm_i915_private *i915 = engine->i915;
>   
> +	if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
> +	    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0)) {
> +		/* Wa_22014600077:mtl */
> +		wa_mcr_masked_en(wal, GEN10_CACHE_MODE_SS,
> +				 ENABLE_EU_COUNT_FOR_TDL_FLUSH);
> +	}
> +
> +	if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
> +	    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0) ||
> +	    IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
> +	    IS_DG2_G11(i915) || IS_DG2_G12(i915)) {
> +		/* Wa_1509727124:dg2,mtl */
> +		wa_mcr_masked_en(wal, GEN10_SAMPLER_MODE,
> +				 SC_DISABLE_POWER_OPTIMIZATION_EBB);
> +
> +		/* Wa_22013037850:dg2,mtl */
> +		wa_mcr_write_or(wal, LSC_CHICKEN_BIT_0_UDW,
> +				DISABLE_128B_EVICTION_COMMAND_UDW);
> +	}
> +
> +	if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
> +	    IS_DG2_G11(i915) || IS_DG2_G12(i915) ||
> +	    IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0)) {
> +		/* Wa_22012856258:dg2,mtl */
> +		wa_mcr_masked_en(wal, GEN8_ROW_CHICKEN2,
> +				 GEN12_DISABLE_READ_SUPPRESSION);
> +	}
> +
>   	if (IS_DG2(i915)) {
>   		/* Wa_1509235366:dg2 */
>   		wa_write_or(wal, GEN12_GAMCNTRL_CTRL, INVALIDATION_BROADCAST_MODE_DIS |
> @@ -2289,13 +2350,6 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
>   		wa_mcr_masked_en(wal, GEN8_ROW_CHICKEN2, GEN12_ENABLE_LARGE_GRF_MODE);
>   	}
>   
> -	if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
> -	    IS_DG2_G11(i915) || IS_DG2_G12(i915)) {
> -		/* Wa_1509727124:dg2 */
> -		wa_mcr_masked_en(wal, GEN10_SAMPLER_MODE,
> -				 SC_DISABLE_POWER_OPTIMIZATION_EBB);
> -	}
> -
>   	if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_A0, STEP_B0) ||
>   	    IS_DG2_GRAPHICS_STEP(i915, G11, STEP_A0, STEP_B0)) {
>   		/* Wa_14012419201:dg2 */
> @@ -2327,14 +2381,6 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
>   
>   	if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
>   	    IS_DG2_G11(i915) || IS_DG2_G12(i915)) {
> -		/* Wa_22013037850:dg2 */
> -		wa_mcr_write_or(wal, LSC_CHICKEN_BIT_0_UDW,
> -				DISABLE_128B_EVICTION_COMMAND_UDW);
> -
> -		/* Wa_22012856258:dg2 */
> -		wa_mcr_masked_en(wal, GEN8_ROW_CHICKEN2,
> -				 GEN12_DISABLE_READ_SUPPRESSION);
> -
>   		/*
>   		 * Wa_22010960976:dg2
>   		 * Wa_14013347512:dg2
> @@ -2954,6 +3000,20 @@ general_render_compute_wa_init(struct intel_engine_cs *engine, struct i915_wa_li
>   
>   	add_render_compute_tuning_settings(i915, wal);
>   
> +	if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
> +	    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0) ||
> +	    IS_PONTEVECCHIO(i915) ||
> +	    IS_DG2(i915)) {
> +		/* Wa_18018781329:dg2,pvc,mtl */
> +		wa_mcr_write_or(wal, RENDER_MOD_CTRL, FORCE_MISS_FTLB);
> +		wa_mcr_write_or(wal, COMP_MOD_CTRL, FORCE_MISS_FTLB);
> +		wa_mcr_write_or(wal, VDBX_MOD_CTRL, FORCE_MISS_FTLB);
> +		wa_mcr_write_or(wal, VEBX_MOD_CTRL, FORCE_MISS_FTLB);
> +
> +		/* Wa_22014226127:dg2,pvc,mtl */
> +		wa_mcr_write_or(wal, LSC_CHICKEN_BIT_0, DISABLE_D8_D16_COASLESCE);
> +	}
> +
>   	if (IS_PONTEVECCHIO(i915)) {
>   		/* Wa_16016694945 */
>   		wa_masked_en(wal, XEHPC_LNCFMISCCFGREG0, XEHPC_OVRLSCCC);
> @@ -2995,17 +3055,8 @@ general_render_compute_wa_init(struct intel_engine_cs *engine, struct i915_wa_li
>   		/* Wa_14015227452:dg2,pvc */
>   		wa_mcr_masked_en(wal, GEN9_ROW_CHICKEN4, XEHP_DIS_BBL_SYSPIPE);
>   
> -		/* Wa_22014226127:dg2,pvc */
> -		wa_mcr_write_or(wal, LSC_CHICKEN_BIT_0, DISABLE_D8_D16_COASLESCE);
> -
>   		/* Wa_16015675438:dg2,pvc */
>   		wa_masked_en(wal, FF_SLICE_CS_CHICKEN2, GEN12_PERF_FIX_BALANCING_CFE_DISABLE);
> -
> -		/* Wa_18018781329:dg2,pvc */
> -		wa_mcr_write_or(wal, RENDER_MOD_CTRL, FORCE_MISS_FTLB);
> -		wa_mcr_write_or(wal, COMP_MOD_CTRL, FORCE_MISS_FTLB);
> -		wa_mcr_write_or(wal, VDBX_MOD_CTRL, FORCE_MISS_FTLB);
> -		wa_mcr_write_or(wal, VEBX_MOD_CTRL, FORCE_MISS_FTLB);
>   	}
>   
>   	if (IS_DG2(i915)) {
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> index 52aede324788..5ec74a167df9 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> @@ -274,8 +274,9 @@ static u32 guc_ctl_wa_flags(struct intel_guc *guc)
>   	if (IS_DG2_GRAPHICS_STEP(gt->i915, G10, STEP_A0, STEP_B0))
>   		flags |= GUC_WA_GAM_CREDITS;
>   
> -	/* Wa_14014475959:dg2 */
> -	if (IS_DG2(gt->i915))
> +	/* Wa_14014475959:dg2,mtl */
> +	if (IS_MTL_GRAPHICS_STEP(gt->i915, M, STEP_A0, STEP_B0) ||
> +	    IS_DG2(gt->i915))
>   		flags |= GUC_WA_HOLD_CCS_SWITCHOUT;
>   
>   	/*
> @@ -289,7 +290,9 @@ static u32 guc_ctl_wa_flags(struct intel_guc *guc)
>   		flags |= GUC_WA_DUAL_QUEUE;
>   
>   	/* Wa_22011802037: graphics version 11/12 */
> -	if (IS_GRAPHICS_VER(gt->i915, 11, 12))
> +	if (IS_MTL_GRAPHICS_STEP(gt->i915, M, STEP_A0, STEP_B0) ||
> +	    (GRAPHICS_VER(gt->i915) >= 11 &&
> +	    GRAPHICS_VER_FULL(gt->i915) < IP_VER(12, 70)))
>   		flags |= GUC_WA_PRE_PARSER;
>   
>   	/* Wa_16011777198:dg2 */
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> index 0a42f1807f52..f148d2f88d40 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> @@ -1615,7 +1615,9 @@ static void guc_reset_state(struct intel_context *ce, u32 head, bool scrub)
>   
>   static void guc_engine_reset_prepare(struct intel_engine_cs *engine)
>   {
> -	if (!IS_GRAPHICS_VER(engine->i915, 11, 12))
> +	if (!(IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
> +	      (GRAPHICS_VER(engine->i915) >= 11 &&
> +	      GRAPHICS_VER_FULL(engine->i915) < IP_VER(12, 70))))
>   		return;

The situation in this function looks bad.

It is not documented at all why calling intel_engine_stop_cs is only 
applicable on gen 11-12.

The workaround comment only comes after that call so one should assume 
it is not part of workaround.

Could you strong arm someone to put a comment in here explaining the 
situaion?

Regards,

Tvrtko

>   
>   	intel_engine_stop_cs(engine);
> @@ -4202,8 +4204,10 @@ static void guc_default_vfuncs(struct intel_engine_cs *engine)
>   	engine->flags |= I915_ENGINE_HAS_TIMESLICES;
>   
>   	/* Wa_14014475959:dg2 */
> -	if (IS_DG2(engine->i915) && engine->class == COMPUTE_CLASS)
> -		engine->flags |= I915_ENGINE_USES_WA_HOLD_CCS_SWITCHOUT;
> +	if (engine->class == COMPUTE_CLASS)
> +		if (IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
> +		    IS_DG2(engine->i915))
> +			engine->flags |= I915_ENGINE_USES_WA_HOLD_CCS_SWITCHOUT;
>   
>   	/*
>   	 * TODO: GuC supports timeslicing and semaphores as well, but they're
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index ecb027626a21..2f18bc123438 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -731,6 +731,10 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
>   	(DISPLAY_VER(__i915) == 14 && \
>   	 IS_DISPLAY_STEP(__i915, since, until))
>   
> +#define IS_MTL_GRAPHICS_STEP(__i915, variant, since, until) \
> +	(IS_SUBPLATFORM(__i915, INTEL_METEORLAKE, INTEL_SUBPLATFORM_##variant) && \
> +	 IS_GRAPHICS_STEP(__i915, since, until))
> +
>   /*
>    * DG2 hardware steppings are a bit unusual.  The hardware design was forked to
>    * create three variants (G10, G11, and G12) which each have distinct
> diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c
> index 849baf6c3b3c..7add88dde79e 100644
> --- a/drivers/gpu/drm/i915/intel_device_info.c
> +++ b/drivers/gpu/drm/i915/intel_device_info.c
> @@ -343,6 +343,12 @@ static void intel_ipver_early_init(struct drm_i915_private *i915)
>   
>   	ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_GRAPHICS),
>   		    &runtime->graphics.ip);
> +	/* Wa_22012778468:mtl */
> +	if (runtime->graphics.ip.ver == 0x0 &&
> +	    INTEL_INFO(i915)->platform == INTEL_METEORLAKE) {
> +		RUNTIME_INFO(i915)->graphics.ip.ver = 12;
> +		RUNTIME_INFO(i915)->graphics.ip.rel = 70;
> +	}
>   	ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_DISPLAY),
>   		    &runtime->display.ip);
>   	ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_MEDIA),

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

* Re: [Intel-gfx] [PATCH 2/2] drm/i915/mtl: Add initial gt workarounds
  2022-12-01 13:15   ` Tvrtko Ursulin
@ 2022-12-01 17:23     ` Lucas De Marchi
  2022-12-01 23:23       ` Matt Roper
  2022-12-01 17:25     ` Lucas De Marchi
  1 sibling, 1 reply; 17+ messages in thread
From: Lucas De Marchi @ 2022-12-01 17:23 UTC (permalink / raw)
  To: Tvrtko Ursulin; +Cc: intel-gfx

On Thu, Dec 01, 2022 at 01:15:35PM +0000, Tvrtko Ursulin wrote:
>
>On 30/11/2022 23:17, Matt Atwood wrote:
>>From: Matt Roper <matthew.d.roper@intel.com>
>>
>>This patch introduces initial workarounds for mtl platform
>>
>>Bspec:66622
>>
>>Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com>
>>Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
>>---
>>  drivers/gpu/drm/i915/gt/intel_engine_cs.c     |   4 +-
>>  .../drm/i915/gt/intel_execlists_submission.c  |   4 +-
>>  drivers/gpu/drm/i915/gt/intel_gt_mcr.c        |  11 +-
>>  drivers/gpu/drm/i915/gt/intel_gt_regs.h       |   5 +
>>  drivers/gpu/drm/i915/gt/intel_workarounds.c   | 105 +++++++++++++-----
>>  drivers/gpu/drm/i915/gt/uc/intel_guc.c        |   9 +-
>>  .../gpu/drm/i915/gt/uc/intel_guc_submission.c |  10 +-
>>  drivers/gpu/drm/i915/i915_drv.h               |   4 +
>>  drivers/gpu/drm/i915/intel_device_info.c      |   6 +
>>  9 files changed, 121 insertions(+), 37 deletions(-)
>>
>>diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
>>index c33e0d72d670..af88d8ab61c1 100644
>>--- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
>>+++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
>>@@ -1479,7 +1479,9 @@ static int __intel_engine_stop_cs(struct intel_engine_cs *engine,
>>  	 * Wa_22011802037 : gen11, gen12, Prior to doing a reset, ensure CS is
>>  	 * stopped, set ring stop bit and prefetch disable bit to halt CS
>>  	 */
>>-	if (IS_GRAPHICS_VER(engine->i915, 11, 12))
>>+	if (IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
>>+	    (GRAPHICS_VER(engine->i915) >= 11 &&
>>+	    GRAPHICS_VER_FULL(engine->i915) < IP_VER(12, 70)))
>
>Does comment need updating to reflect the workaround applicability? 
>Elsewhere as well. Some are left as dg2 only. Some gen11,gen12 only.
>
>Then there's a few of this same change logic throught the patch, so I 
>assume a general situation of workarounds applying to only early MTL.
>
> if ((IS_GRAPHICS_VER(engine->i915, 11, 12)) &&
>     !IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_B1, STEP_FOREVER)
>
>Would this be correct and simpler? Not sure about STEP_B1 for start of 

should be STEP_B0 if doing this. The stepping check is inclusive on the
left, exclusive on the right, i.e:  [STEP_A0, STEP_B0).

But even if the check is simpler, I'd avoid doing a negative check to
maintain consistency.

Lucas De Marchi


>range, if it is possible to define it. Don't know.. One could perhaps 
>even suggest a new macro to avoid repeated whatever patterna lot.
>
>>  		intel_uncore_write_fw(uncore, RING_MODE_GEN7(engine->mmio_base),
>>  				      _MASKED_BIT_ENABLE(GEN12_GFX_PREFETCH_DISABLE));
>>diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
>>index 49a8f10d76c7..a91c912e35d6 100644
>>--- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
>>+++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
>>@@ -2992,7 +2992,9 @@ static void execlists_reset_prepare(struct intel_engine_cs *engine)
>>  	 * Wa_22011802037:gen11/gen12: In addition to stopping the cs, we need
>>  	 * to wait for any pending mi force wakeups
>>  	 */
>>-	if (IS_GRAPHICS_VER(engine->i915, 11, 12))
>>+	if (IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
>>+	    (GRAPHICS_VER(engine->i915) >= 11 &&
>>+	    GRAPHICS_VER_FULL(engine->i915) < IP_VER(12, 70)))
>>  		intel_engine_wait_for_pending_mi_fw(engine);
>>  	engine->execlists.reset_ccid = active_ccid(engine);
>>diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>>index aa070ae57f11..0e90a8f86b27 100644
>>--- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>>+++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>>@@ -164,8 +164,15 @@ void intel_gt_mcr_init(struct intel_gt *gt)
>>  	if (MEDIA_VER(i915) >= 13 && gt->type == GT_MEDIA) {
>>  		gt->steering_table[OADDRM] = xelpmp_oaddrm_steering_table;
>>  	} else if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 70)) {
>>-		fuse = REG_FIELD_GET(GT_L3_EXC_MASK,
>>-				     intel_uncore_read(gt->uncore, XEHP_FUSE4));
>>+		/* Wa_14016747170:mtl-m[a0], mtl-p[a0] */
>>+		if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
>>+		    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0))
>>+			fuse = REG_FIELD_GET(MTL_GT_L3_EXC_MASK,
>>+					     intel_uncore_read(gt->uncore,
>>+							       MTL_GT_ACTIVITY_FACTOR));
>>+		else
>>+			fuse = REG_FIELD_GET(GT_L3_EXC_MASK,
>>+					     intel_uncore_read(gt->uncore, XEHP_FUSE4));
>>  		/*
>>  		 * Despite the register field being named "exclude mask" the
>>diff --git a/drivers/gpu/drm/i915/gt/intel_gt_regs.h b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
>>index 784152548472..c2c03b02f200 100644
>>--- a/drivers/gpu/drm/i915/gt/intel_gt_regs.h
>>+++ b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
>>@@ -413,6 +413,7 @@
>>  #define   TBIMR_FAST_CLIP			REG_BIT(5)
>>  #define VFLSKPD					MCR_REG(0x62a8)
>>+#define   VF_PREFETCH_TLB_DIS			REG_BIT(5)
>>  #define   DIS_OVER_FETCH_CACHE			REG_BIT(1)
>>  #define   DIS_MULT_MISS_RD_SQUASH		REG_BIT(0)
>>@@ -1532,6 +1533,10 @@
>>  #define MTL_MEDIA_MC6				_MMIO(0x138048)
>>+/* Wa_14016747170:mtl-p[a0], mtl-m[a0] */
>>+#define MTL_GT_ACTIVITY_FACTOR			_MMIO(0x138010)
>>+#define   MTL_GT_L3_EXC_MASK			REG_GENMASK(5, 3)
>>+
>>  #define GEN6_GT_THREAD_STATUS_REG		_MMIO(0x13805c)
>>  #define   GEN6_GT_THREAD_STATUS_CORE_MASK	0x7
>>diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
>>index 3e35facac2b4..2e3d5de0c522 100644
>>--- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
>>+++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
>>@@ -786,6 +786,32 @@ static void dg2_ctx_workarounds_init(struct intel_engine_cs *engine,
>>  	wa_masked_en(wal, CACHE_MODE_1, MSAA_OPTIMIZATION_REDUC_DISABLE);
>>  }
>>+static void mtl_ctx_workarounds_init(struct intel_engine_cs *engine,
>>+				     struct i915_wa_list *wal)
>>+{
>>+	struct drm_i915_private *i915 = engine->i915;
>>+
>>+	if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
>>+	    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0)) {
>>+		/* Wa_14014947963:mtl */
>>+		wa_masked_field_set(wal, VF_PREEMPTION,
>>+				    PREEMPTION_VERTEX_COUNT, 0x4000);
>>+
>>+		/* Wa_16013271637:mtl */
>>+		wa_mcr_masked_en(wal, XEHP_SLICE_COMMON_ECO_CHICKEN1,
>>+				 MSC_MSAA_REODER_BUF_BYPASS_DISABLE);
>>+
>>+		/* Wa_18019627453:mtl */
>>+		wa_mcr_masked_en(wal, VFLSKPD, VF_PREFETCH_TLB_DIS);
>>+
>>+		/* Wa_18018764978:mtl */
>>+		wa_masked_en(wal, PSS_MODE2, SCOREBOARD_STALL_FLUSH_CONTROL);
>>+	}
>>+
>>+	/* Wa_18019271663:mtl */
>>+	wa_masked_en(wal, CACHE_MODE_1, MSAA_OPTIMIZATION_REDUC_DISABLE);
>>+}
>>+
>>  static void fakewa_disable_nestedbb_mode(struct intel_engine_cs *engine,
>>  					 struct i915_wa_list *wal)
>>  {
>>@@ -872,7 +898,9 @@ __intel_engine_init_ctx_wa(struct intel_engine_cs *engine,
>>  	if (engine->class != RENDER_CLASS)
>>  		goto done;
>>-	if (IS_PONTEVECCHIO(i915))
>>+	if (IS_METEORLAKE(i915))
>>+		mtl_ctx_workarounds_init(engine, wal);
>>+	else if (IS_PONTEVECCHIO(i915))
>>  		; /* noop; none at this time */
>>  	else if (IS_DG2(i915))
>>  		dg2_ctx_workarounds_init(engine, wal);
>>@@ -1628,7 +1656,10 @@ pvc_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
>>  static void
>>  xelpg_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
>>  {
>>-	/* FIXME: Actual workarounds will be added in future patch(es) */
>>+	/* Wa_14014830051:mtl */
>>+	if (IS_MTL_GRAPHICS_STEP(gt->i915, M, STEP_A0, STEP_B0) ||
>>+	    IS_MTL_GRAPHICS_STEP(gt->i915, P, STEP_A0, STEP_B0))
>>+		wa_mcr_write_clr(wal, SARB_CHICKEN1, COMP_CKN_IN);
>>  	/*
>>  	 * Unlike older platforms, we no longer setup implicit steering here;
>>@@ -2168,7 +2199,9 @@ void intel_engine_init_whitelist(struct intel_engine_cs *engine)
>>  	wa_init_start(w, engine->gt, "whitelist", engine->name);
>>-	if (IS_PONTEVECCHIO(i915))
>>+	if (IS_METEORLAKE(i915))
>>+		; /* noop; none at this time */
>>+	else if (IS_PONTEVECCHIO(i915))
>>  		pvc_whitelist_build(engine);
>>  	else if (IS_DG2(i915))
>>  		dg2_whitelist_build(engine);
>>@@ -2278,6 +2311,34 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
>>  {
>>  	struct drm_i915_private *i915 = engine->i915;
>>+	if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
>>+	    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0)) {
>>+		/* Wa_22014600077:mtl */
>>+		wa_mcr_masked_en(wal, GEN10_CACHE_MODE_SS,
>>+				 ENABLE_EU_COUNT_FOR_TDL_FLUSH);
>>+	}
>>+
>>+	if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
>>+	    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0) ||
>>+	    IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
>>+	    IS_DG2_G11(i915) || IS_DG2_G12(i915)) {
>>+		/* Wa_1509727124:dg2,mtl */
>>+		wa_mcr_masked_en(wal, GEN10_SAMPLER_MODE,
>>+				 SC_DISABLE_POWER_OPTIMIZATION_EBB);
>>+
>>+		/* Wa_22013037850:dg2,mtl */
>>+		wa_mcr_write_or(wal, LSC_CHICKEN_BIT_0_UDW,
>>+				DISABLE_128B_EVICTION_COMMAND_UDW);
>>+	}
>>+
>>+	if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
>>+	    IS_DG2_G11(i915) || IS_DG2_G12(i915) ||
>>+	    IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0)) {
>>+		/* Wa_22012856258:dg2,mtl */
>>+		wa_mcr_masked_en(wal, GEN8_ROW_CHICKEN2,
>>+				 GEN12_DISABLE_READ_SUPPRESSION);
>>+	}
>>+
>>  	if (IS_DG2(i915)) {
>>  		/* Wa_1509235366:dg2 */
>>  		wa_write_or(wal, GEN12_GAMCNTRL_CTRL, INVALIDATION_BROADCAST_MODE_DIS |
>>@@ -2289,13 +2350,6 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
>>  		wa_mcr_masked_en(wal, GEN8_ROW_CHICKEN2, GEN12_ENABLE_LARGE_GRF_MODE);
>>  	}
>>-	if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
>>-	    IS_DG2_G11(i915) || IS_DG2_G12(i915)) {
>>-		/* Wa_1509727124:dg2 */
>>-		wa_mcr_masked_en(wal, GEN10_SAMPLER_MODE,
>>-				 SC_DISABLE_POWER_OPTIMIZATION_EBB);
>>-	}
>>-
>>  	if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_A0, STEP_B0) ||
>>  	    IS_DG2_GRAPHICS_STEP(i915, G11, STEP_A0, STEP_B0)) {
>>  		/* Wa_14012419201:dg2 */
>>@@ -2327,14 +2381,6 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
>>  	if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
>>  	    IS_DG2_G11(i915) || IS_DG2_G12(i915)) {
>>-		/* Wa_22013037850:dg2 */
>>-		wa_mcr_write_or(wal, LSC_CHICKEN_BIT_0_UDW,
>>-				DISABLE_128B_EVICTION_COMMAND_UDW);
>>-
>>-		/* Wa_22012856258:dg2 */
>>-		wa_mcr_masked_en(wal, GEN8_ROW_CHICKEN2,
>>-				 GEN12_DISABLE_READ_SUPPRESSION);
>>-
>>  		/*
>>  		 * Wa_22010960976:dg2
>>  		 * Wa_14013347512:dg2
>>@@ -2954,6 +3000,20 @@ general_render_compute_wa_init(struct intel_engine_cs *engine, struct i915_wa_li
>>  	add_render_compute_tuning_settings(i915, wal);
>>+	if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
>>+	    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0) ||
>>+	    IS_PONTEVECCHIO(i915) ||
>>+	    IS_DG2(i915)) {
>>+		/* Wa_18018781329:dg2,pvc,mtl */
>>+		wa_mcr_write_or(wal, RENDER_MOD_CTRL, FORCE_MISS_FTLB);
>>+		wa_mcr_write_or(wal, COMP_MOD_CTRL, FORCE_MISS_FTLB);
>>+		wa_mcr_write_or(wal, VDBX_MOD_CTRL, FORCE_MISS_FTLB);
>>+		wa_mcr_write_or(wal, VEBX_MOD_CTRL, FORCE_MISS_FTLB);
>>+
>>+		/* Wa_22014226127:dg2,pvc,mtl */
>>+		wa_mcr_write_or(wal, LSC_CHICKEN_BIT_0, DISABLE_D8_D16_COASLESCE);
>>+	}
>>+
>>  	if (IS_PONTEVECCHIO(i915)) {
>>  		/* Wa_16016694945 */
>>  		wa_masked_en(wal, XEHPC_LNCFMISCCFGREG0, XEHPC_OVRLSCCC);
>>@@ -2995,17 +3055,8 @@ general_render_compute_wa_init(struct intel_engine_cs *engine, struct i915_wa_li
>>  		/* Wa_14015227452:dg2,pvc */
>>  		wa_mcr_masked_en(wal, GEN9_ROW_CHICKEN4, XEHP_DIS_BBL_SYSPIPE);
>>-		/* Wa_22014226127:dg2,pvc */
>>-		wa_mcr_write_or(wal, LSC_CHICKEN_BIT_0, DISABLE_D8_D16_COASLESCE);
>>-
>>  		/* Wa_16015675438:dg2,pvc */
>>  		wa_masked_en(wal, FF_SLICE_CS_CHICKEN2, GEN12_PERF_FIX_BALANCING_CFE_DISABLE);
>>-
>>-		/* Wa_18018781329:dg2,pvc */
>>-		wa_mcr_write_or(wal, RENDER_MOD_CTRL, FORCE_MISS_FTLB);
>>-		wa_mcr_write_or(wal, COMP_MOD_CTRL, FORCE_MISS_FTLB);
>>-		wa_mcr_write_or(wal, VDBX_MOD_CTRL, FORCE_MISS_FTLB);
>>-		wa_mcr_write_or(wal, VEBX_MOD_CTRL, FORCE_MISS_FTLB);
>>  	}
>>  	if (IS_DG2(i915)) {
>>diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
>>index 52aede324788..5ec74a167df9 100644
>>--- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c
>>+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
>>@@ -274,8 +274,9 @@ static u32 guc_ctl_wa_flags(struct intel_guc *guc)
>>  	if (IS_DG2_GRAPHICS_STEP(gt->i915, G10, STEP_A0, STEP_B0))
>>  		flags |= GUC_WA_GAM_CREDITS;
>>-	/* Wa_14014475959:dg2 */
>>-	if (IS_DG2(gt->i915))
>>+	/* Wa_14014475959:dg2,mtl */
>>+	if (IS_MTL_GRAPHICS_STEP(gt->i915, M, STEP_A0, STEP_B0) ||
>>+	    IS_DG2(gt->i915))
>>  		flags |= GUC_WA_HOLD_CCS_SWITCHOUT;
>>  	/*
>>@@ -289,7 +290,9 @@ static u32 guc_ctl_wa_flags(struct intel_guc *guc)
>>  		flags |= GUC_WA_DUAL_QUEUE;
>>  	/* Wa_22011802037: graphics version 11/12 */
>>-	if (IS_GRAPHICS_VER(gt->i915, 11, 12))
>>+	if (IS_MTL_GRAPHICS_STEP(gt->i915, M, STEP_A0, STEP_B0) ||
>>+	    (GRAPHICS_VER(gt->i915) >= 11 &&
>>+	    GRAPHICS_VER_FULL(gt->i915) < IP_VER(12, 70)))
>>  		flags |= GUC_WA_PRE_PARSER;
>>  	/* Wa_16011777198:dg2 */
>>diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
>>index 0a42f1807f52..f148d2f88d40 100644
>>--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
>>+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
>>@@ -1615,7 +1615,9 @@ static void guc_reset_state(struct intel_context *ce, u32 head, bool scrub)
>>  static void guc_engine_reset_prepare(struct intel_engine_cs *engine)
>>  {
>>-	if (!IS_GRAPHICS_VER(engine->i915, 11, 12))
>>+	if (!(IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
>>+	      (GRAPHICS_VER(engine->i915) >= 11 &&
>>+	      GRAPHICS_VER_FULL(engine->i915) < IP_VER(12, 70))))
>>  		return;
>
>The situation in this function looks bad.
>
>It is not documented at all why calling intel_engine_stop_cs is only 
>applicable on gen 11-12.
>
>The workaround comment only comes after that call so one should assume 
>it is not part of workaround.
>
>Could you strong arm someone to put a comment in here explaining the 
>situaion?
>
>Regards,
>
>Tvrtko
>
>>  	intel_engine_stop_cs(engine);
>>@@ -4202,8 +4204,10 @@ static void guc_default_vfuncs(struct intel_engine_cs *engine)
>>  	engine->flags |= I915_ENGINE_HAS_TIMESLICES;
>>  	/* Wa_14014475959:dg2 */
>>-	if (IS_DG2(engine->i915) && engine->class == COMPUTE_CLASS)
>>-		engine->flags |= I915_ENGINE_USES_WA_HOLD_CCS_SWITCHOUT;
>>+	if (engine->class == COMPUTE_CLASS)
>>+		if (IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
>>+		    IS_DG2(engine->i915))
>>+			engine->flags |= I915_ENGINE_USES_WA_HOLD_CCS_SWITCHOUT;
>>  	/*
>>  	 * TODO: GuC supports timeslicing and semaphores as well, but they're
>>diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
>>index ecb027626a21..2f18bc123438 100644
>>--- a/drivers/gpu/drm/i915/i915_drv.h
>>+++ b/drivers/gpu/drm/i915/i915_drv.h
>>@@ -731,6 +731,10 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
>>  	(DISPLAY_VER(__i915) == 14 && \
>>  	 IS_DISPLAY_STEP(__i915, since, until))
>>+#define IS_MTL_GRAPHICS_STEP(__i915, variant, since, until) \
>>+	(IS_SUBPLATFORM(__i915, INTEL_METEORLAKE, INTEL_SUBPLATFORM_##variant) && \
>>+	 IS_GRAPHICS_STEP(__i915, since, until))
>>+
>>  /*
>>   * DG2 hardware steppings are a bit unusual.  The hardware design was forked to
>>   * create three variants (G10, G11, and G12) which each have distinct
>>diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c
>>index 849baf6c3b3c..7add88dde79e 100644
>>--- a/drivers/gpu/drm/i915/intel_device_info.c
>>+++ b/drivers/gpu/drm/i915/intel_device_info.c
>>@@ -343,6 +343,12 @@ static void intel_ipver_early_init(struct drm_i915_private *i915)
>>  	ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_GRAPHICS),
>>  		    &runtime->graphics.ip);
>>+	/* Wa_22012778468:mtl */
>>+	if (runtime->graphics.ip.ver == 0x0 &&
>>+	    INTEL_INFO(i915)->platform == INTEL_METEORLAKE) {
>>+		RUNTIME_INFO(i915)->graphics.ip.ver = 12;
>>+		RUNTIME_INFO(i915)->graphics.ip.rel = 70;
>>+	}
>>  	ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_DISPLAY),
>>  		    &runtime->display.ip);
>>  	ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_MEDIA),

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

* Re: [Intel-gfx] [PATCH 2/2] drm/i915/mtl: Add initial gt workarounds
  2022-12-01 13:15   ` Tvrtko Ursulin
  2022-12-01 17:23     ` Lucas De Marchi
@ 2022-12-01 17:25     ` Lucas De Marchi
  1 sibling, 0 replies; 17+ messages in thread
From: Lucas De Marchi @ 2022-12-01 17:25 UTC (permalink / raw)
  To: Tvrtko Ursulin; +Cc: intel-gfx

On Thu, Dec 01, 2022 at 01:15:35PM +0000, Tvrtko Ursulin wrote:
>
>On 30/11/2022 23:17, Matt Atwood wrote:
>>From: Matt Roper <matthew.d.roper@intel.com>
>>
>>This patch introduces initial workarounds for mtl platform
>>
>>Bspec:66622
>>
>>Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com>
>>Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
>>---
>>  drivers/gpu/drm/i915/gt/intel_engine_cs.c     |   4 +-
>>  .../drm/i915/gt/intel_execlists_submission.c  |   4 +-
>>  drivers/gpu/drm/i915/gt/intel_gt_mcr.c        |  11 +-
>>  drivers/gpu/drm/i915/gt/intel_gt_regs.h       |   5 +
>>  drivers/gpu/drm/i915/gt/intel_workarounds.c   | 105 +++++++++++++-----
>>  drivers/gpu/drm/i915/gt/uc/intel_guc.c        |   9 +-
>>  .../gpu/drm/i915/gt/uc/intel_guc_submission.c |  10 +-
>>  drivers/gpu/drm/i915/i915_drv.h               |   4 +
>>  drivers/gpu/drm/i915/intel_device_info.c      |   6 +
>>  9 files changed, 121 insertions(+), 37 deletions(-)
>>
>>diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
>>index c33e0d72d670..af88d8ab61c1 100644
>>--- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
>>+++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
>>@@ -1479,7 +1479,9 @@ static int __intel_engine_stop_cs(struct intel_engine_cs *engine,
>>  	 * Wa_22011802037 : gen11, gen12, Prior to doing a reset, ensure CS is
>>  	 * stopped, set ring stop bit and prefetch disable bit to halt CS
>>  	 */
>>-	if (IS_GRAPHICS_VER(engine->i915, 11, 12))
>>+	if (IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
>>+	    (GRAPHICS_VER(engine->i915) >= 11 &&
>>+	    GRAPHICS_VER_FULL(engine->i915) < IP_VER(12, 70)))
>
>Does comment need updating to reflect the workaround applicability? 
>Elsewhere as well. Some are left as dg2 only. Some gen11,gen12 only.

We've been removing these comments as they are redundant with the code
and only ever get out of sync. So I'd say to remove "gen11, gen12".

>
>Then there's a few of this same change logic throught the patch, so I 
>assume a general situation of workarounds applying to only early MTL.
>
> if ((IS_GRAPHICS_VER(engine->i915, 11, 12)) &&
>     !IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_B1, STEP_FOREVER)
>
>Would this be correct and simpler? Not sure about STEP_B1 for start of 
>range, if it is possible to define it. Don't know.. One could perhaps 
>even suggest a new macro to avoid repeated whatever patterna lot.
>
>>  		intel_uncore_write_fw(uncore, RING_MODE_GEN7(engine->mmio_base),
>>  				      _MASKED_BIT_ENABLE(GEN12_GFX_PREFETCH_DISABLE));
>>diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
>>index 49a8f10d76c7..a91c912e35d6 100644
>>--- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
>>+++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
>>@@ -2992,7 +2992,9 @@ static void execlists_reset_prepare(struct intel_engine_cs *engine)
>>  	 * Wa_22011802037:gen11/gen12: In addition to stopping the cs, we need
>>  	 * to wait for any pending mi force wakeups
>>  	 */
>>-	if (IS_GRAPHICS_VER(engine->i915, 11, 12))
>>+	if (IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
>>+	    (GRAPHICS_VER(engine->i915) >= 11 &&
>>+	    GRAPHICS_VER_FULL(engine->i915) < IP_VER(12, 70)))
>>  		intel_engine_wait_for_pending_mi_fw(engine);
>>  	engine->execlists.reset_ccid = active_ccid(engine);
>>diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>>index aa070ae57f11..0e90a8f86b27 100644
>>--- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>>+++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>>@@ -164,8 +164,15 @@ void intel_gt_mcr_init(struct intel_gt *gt)
>>  	if (MEDIA_VER(i915) >= 13 && gt->type == GT_MEDIA) {
>>  		gt->steering_table[OADDRM] = xelpmp_oaddrm_steering_table;
>>  	} else if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 70)) {
>>-		fuse = REG_FIELD_GET(GT_L3_EXC_MASK,
>>-				     intel_uncore_read(gt->uncore, XEHP_FUSE4));
>>+		/* Wa_14016747170:mtl-m[a0], mtl-p[a0] */

and here and in other places.

Lucas De Marchi

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

* Re: [Intel-gfx] [PATCH 1/2] drm/i915/mtl: Initial display workarounds
  2022-12-01 12:51 ` [Intel-gfx] [PATCH 1/2] " Tvrtko Ursulin
@ 2022-12-01 22:14   ` Matt Atwood
  0 siblings, 0 replies; 17+ messages in thread
From: Matt Atwood @ 2022-12-01 22:14 UTC (permalink / raw)
  To: Tvrtko Ursulin, intel-gfx; +Cc: intel-gfx, lucas.demarchi

On Thu, Dec 01, 2022 at 12:51:33PM +0000, Tvrtko Ursulin wrote:
> 
> On 30/11/2022 23:17, Matt Atwood wrote:
> > From: Jouni Högander <jouni.hogander@intel.com>
> > 
> > This patch introduces initial workarounds for mtl platform
> > 
> > Bspec: 66624
> > 
> > Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com>
> > Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> > ---
> >   drivers/gpu/drm/i915/display/intel_fbc.c  |  4 +++-
> >   drivers/gpu/drm/i915/display/intel_hdmi.c |  3 ++-
> >   drivers/gpu/drm/i915/display/intel_psr.c  | 27 ++++++++++++++++-------
> >   drivers/gpu/drm/i915/i915_drv.h           |  4 ++++
> >   4 files changed, 28 insertions(+), 10 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c
> > index b5ee5ea0d010..8f269553d826 100644
> > --- a/drivers/gpu/drm/i915/display/intel_fbc.c
> > +++ b/drivers/gpu/drm/i915/display/intel_fbc.c
> > @@ -1095,7 +1095,9 @@ static int intel_fbc_check_plane(struct intel_atomic_state *state,
> >   	}
> >   	/* Wa_14016291713 */
> > -	if (IS_DISPLAY_VER(i915, 12, 13) && crtc_state->has_psr) {
> > +	if ((IS_DISPLAY_VER(i915, 12, 13) ||
> > +	     IS_MTL_DISPLAY_STEP(i915, STEP_A0, STEP_C0)) &&
> > +	    crtc_state->has_psr) {
> >   		plane_state->no_fbc_reason = "PSR1 enabled (Wa_14016291713)";
> >   		return 0;
> >   	}
> > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
> > index e82f8a07e2b0..efa2da080f62 100644
> > --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> > @@ -537,7 +537,8 @@ void hsw_write_infoframe(struct intel_encoder *encoder,
> >   			       0);
> >   	/* Wa_14013475917 */
> > -	if (DISPLAY_VER(dev_priv) == 13 && crtc_state->has_psr &&
> > +	if ((DISPLAY_VER(dev_priv) == 13 ||
> > +	     IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)) && crtc_state->has_psr &&
> >   	    type == DP_SDP_VSC)
> >   		return;
> > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> > index 5b678916e6db..7982157fb1ff 100644
> > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > @@ -797,7 +797,7 @@ static bool psr2_granularity_check(struct intel_dp *intel_dp,
> >   		return intel_dp->psr.su_y_granularity == 4;
> >   	/*
> > -	 * adl_p and display 14+ platforms has 1 line granularity.
> > +	 * adl_p and mtl platforms has 1 line granularity.
> >   	 * For other platforms with SW tracking we can adjust the y coordinates
> >   	 * to match sink requirement if multiple of 4.
> >   	 */
> > @@ -1170,11 +1170,14 @@ static void intel_psr_enable_source(struct intel_dp *intel_dp,
> >   				     PSR2_ADD_VERTICAL_LINE_COUNT);
> >   		/*
> > -		 * Wa_16014451276:adlp
> > +		 * Wa_16014451276:adlp,mtl[a0,b0]
> >   		 * All supported adlp panels have 1-based X granularity, this may
> >   		 * cause issues if non-supported panels are used.
> >   		 */
> > -		if (IS_ALDERLAKE_P(dev_priv))
> > +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
> > +			intel_de_rmw(dev_priv, MTL_CHICKEN_TRANS(cpu_transcoder), 0,
> > +				     ADLP_1_BASED_X_GRANULARITY);
> > +		else if (IS_ALDERLAKE_P(dev_priv))
> >   			intel_de_rmw(dev_priv, CHICKEN_TRANS(cpu_transcoder), 0,
> >   				     ADLP_1_BASED_X_GRANULARITY);
> > @@ -1185,8 +1188,12 @@ static void intel_psr_enable_source(struct intel_dp *intel_dp,
> >   				     TRANS_SET_CONTEXT_LATENCY_MASK,
> >   				     TRANS_SET_CONTEXT_LATENCY_VALUE(1));
> > -		/* Wa_16012604467:adlp */
> > -		if (IS_ALDERLAKE_P(dev_priv))
> > +		/* Wa_16012604467:adlp,mtl[a0,b0] */
> > +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
> > +			intel_de_rmw(dev_priv,
> > +				     MTL_CLKGATE_DIS_TRANS(cpu_transcoder), 0,
> > +				     MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS);
> > +		else if (IS_ALDERLAKE_P(dev_priv))
> >   			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC, 0,
> >   				     CLKGATE_DIS_MISC_DMASC_GATING_DIS);
> > @@ -1362,8 +1369,12 @@ static void intel_psr_disable_locked(struct intel_dp *intel_dp)
> >   				     TRANS_SET_CONTEXT_LATENCY(intel_dp->psr.transcoder),
> >   				     TRANS_SET_CONTEXT_LATENCY_MASK, 0);
> > -		/* Wa_16012604467:adlp */
> > -		if (IS_ALDERLAKE_P(dev_priv))
> > +		/* Wa_16012604467:adlp,mtl[a0,b0] */
> > +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
> > +			intel_de_rmw(dev_priv,
> > +				     MTL_CLKGATE_DIS_TRANS(intel_dp->psr.transcoder),
> > +				     MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS, 0);
> > +		else if (IS_ALDERLAKE_P(dev_priv))
> >   			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC,
> >   				     CLKGATE_DIS_MISC_DMASC_GATING_DIS, 0);
> > @@ -1625,7 +1636,7 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
> >   	if (full_update) {
> >   		/*
> > -		 * Not applying Wa_14014971508:adlp as we do not support the
> > +		 * Not applying Wa_14014971508:adlp,mtl as we do not support the
> >   		 * feature that requires this workaround.
> >   		 */
> >   		val |= man_trk_ctl_single_full_frame_bit_get(dev_priv);
> > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > index a8a5bd426e78..ecb027626a21 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.h
> > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > @@ -727,6 +727,10 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
> >   	(IS_SUBPLATFORM(__i915, INTEL_METEORLAKE, INTEL_SUBPLATFORM_##variant) && \
> >   	 IS_GRAPHICS_STEP(__i915, since, until))
> > +#define IS_MTL_DISPLAY_STEP(__i915, since, until) \
> > +	(DISPLAY_VER(__i915) == 14 && \
> > +	 IS_DISPLAY_STEP(__i915, since, until))
> 
> You might want IS_METEORLAKE somewhere in here if macro is called IS_MTL_..
> otherwise it may surprise in the future. Unless it is guaranteed MTL will be
> the only with display_ver == 14.
ack
> 
> Take care of checkpatch warnings as well please.
Checkpatch failures are all "macro argument reuse '__i915' - possible
side-effects?" this appears to be the standard for these macros (the
passing of __i915 to this macro to be fed into
IS_[DISPLAY|GRAPHICS]_step functions.). Was there something more I'm
missing, or were you wanting something more done to the overall format
of the file?
> 
> Regards,
> 
> Tvrtko
> 
> > +
> >   /*
> >    * DG2 hardware steppings are a bit unusual.  The hardware design was forked to
> >    * create three variants (G10, G11, and G12) which each have distinct

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

* Re: [Intel-gfx] [PATCH 1/2] drm/i915/mtl: Initial display workarounds
  2022-11-30 23:17 [Intel-gfx] [PATCH 1/2] drm/i915/mtl: Initial display workarounds Matt Atwood
                   ` (5 preceding siblings ...)
  2022-12-01 12:51 ` [Intel-gfx] [PATCH 1/2] " Tvrtko Ursulin
@ 2022-12-01 23:01 ` Matt Roper
  2022-12-01 23:27   ` Lucas De Marchi
  6 siblings, 1 reply; 17+ messages in thread
From: Matt Roper @ 2022-12-01 23:01 UTC (permalink / raw)
  To: Matt Atwood; +Cc: intel-gfx, lucas.demarchi

On Wed, Nov 30, 2022 at 03:17:08PM -0800, Matt Atwood wrote:
> From: Jouni Högander <jouni.hogander@intel.com>
> 
> This patch introduces initial workarounds for mtl platform
> 
> Bspec: 66624
> 
> Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com>
> Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_fbc.c  |  4 +++-
>  drivers/gpu/drm/i915/display/intel_hdmi.c |  3 ++-
>  drivers/gpu/drm/i915/display/intel_psr.c  | 27 ++++++++++++++++-------
>  drivers/gpu/drm/i915/i915_drv.h           |  4 ++++
>  4 files changed, 28 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c
> index b5ee5ea0d010..8f269553d826 100644
> --- a/drivers/gpu/drm/i915/display/intel_fbc.c
> +++ b/drivers/gpu/drm/i915/display/intel_fbc.c
> @@ -1095,7 +1095,9 @@ static int intel_fbc_check_plane(struct intel_atomic_state *state,
>  	}
>  
>  	/* Wa_14016291713 */
> -	if (IS_DISPLAY_VER(i915, 12, 13) && crtc_state->has_psr) {
> +	if ((IS_DISPLAY_VER(i915, 12, 13) ||
> +	     IS_MTL_DISPLAY_STEP(i915, STEP_A0, STEP_C0)) &&
> +	    crtc_state->has_psr) {
>  		plane_state->no_fbc_reason = "PSR1 enabled (Wa_14016291713)";
>  		return 0;
>  	}
> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
> index e82f8a07e2b0..efa2da080f62 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> @@ -537,7 +537,8 @@ void hsw_write_infoframe(struct intel_encoder *encoder,
>  			       0);
>  
>  	/* Wa_14013475917 */
> -	if (DISPLAY_VER(dev_priv) == 13 && crtc_state->has_psr &&
> +	if ((DISPLAY_VER(dev_priv) == 13 ||
> +	     IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)) && crtc_state->has_psr &&
>  	    type == DP_SDP_VSC)
>  		return;
>  
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> index 5b678916e6db..7982157fb1ff 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -797,7 +797,7 @@ static bool psr2_granularity_check(struct intel_dp *intel_dp,
>  		return intel_dp->psr.su_y_granularity == 4;
>  
>  	/*
> -	 * adl_p and display 14+ platforms has 1 line granularity.
> +	 * adl_p and mtl platforms has 1 line granularity.
>  	 * For other platforms with SW tracking we can adjust the y coordinates
>  	 * to match sink requirement if multiple of 4.
>  	 */
> @@ -1170,11 +1170,14 @@ static void intel_psr_enable_source(struct intel_dp *intel_dp,
>  				     PSR2_ADD_VERTICAL_LINE_COUNT);
>  
>  		/*
> -		 * Wa_16014451276:adlp
> +		 * Wa_16014451276:adlp,mtl[a0,b0]

These days we don't really add steppings in these comments; at best
they're just reiterating information that can be easily seen from the
code below, at worst they get out of sync and cause confusion.  I'd drop
the "[a0,b0]" part (which also isn't accurate anyway if you're using
range notation...it would be "[a0..b0)" in that case).

Honestly even the list of platform names on workarounds is of
questionable value and I'm thinking about writing a patch that just
drops all of them throughout i915, leaving just the workaround lineage
number.  Maybe I'd keep the platform names in the few cases where we
have multiple workaround numbers (with different sets of platforms) all
requesting the same programming of a register...

>  		 * All supported adlp panels have 1-based X granularity, this may
>  		 * cause issues if non-supported panels are used.
>  		 */
> -		if (IS_ALDERLAKE_P(dev_priv))
> +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
> +			intel_de_rmw(dev_priv, MTL_CHICKEN_TRANS(cpu_transcoder), 0,
> +				     ADLP_1_BASED_X_GRANULARITY);
> +		else if (IS_ALDERLAKE_P(dev_priv))
>  			intel_de_rmw(dev_priv, CHICKEN_TRANS(cpu_transcoder), 0,
>  				     ADLP_1_BASED_X_GRANULARITY);
>  
> @@ -1185,8 +1188,12 @@ static void intel_psr_enable_source(struct intel_dp *intel_dp,
>  				     TRANS_SET_CONTEXT_LATENCY_MASK,
>  				     TRANS_SET_CONTEXT_LATENCY_VALUE(1));
>  
> -		/* Wa_16012604467:adlp */
> -		if (IS_ALDERLAKE_P(dev_priv))
> +		/* Wa_16012604467:adlp,mtl[a0,b0] */
> +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
> +			intel_de_rmw(dev_priv,
> +				     MTL_CLKGATE_DIS_TRANS(cpu_transcoder), 0,
> +				     MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS);
> +		else if (IS_ALDERLAKE_P(dev_priv))
>  			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC, 0,
>  				     CLKGATE_DIS_MISC_DMASC_GATING_DIS);
>  
> @@ -1362,8 +1369,12 @@ static void intel_psr_disable_locked(struct intel_dp *intel_dp)
>  				     TRANS_SET_CONTEXT_LATENCY(intel_dp->psr.transcoder),
>  				     TRANS_SET_CONTEXT_LATENCY_MASK, 0);
>  
> -		/* Wa_16012604467:adlp */
> -		if (IS_ALDERLAKE_P(dev_priv))
> +		/* Wa_16012604467:adlp,mtl[a0,b0] */
> +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
> +			intel_de_rmw(dev_priv,
> +				     MTL_CLKGATE_DIS_TRANS(intel_dp->psr.transcoder),
> +				     MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS, 0);
> +		else if (IS_ALDERLAKE_P(dev_priv))
>  			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC,
>  				     CLKGATE_DIS_MISC_DMASC_GATING_DIS, 0);
>  
> @@ -1625,7 +1636,7 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
>  
>  	if (full_update) {
>  		/*
> -		 * Not applying Wa_14014971508:adlp as we do not support the
> +		 * Not applying Wa_14014971508:adlp,mtl as we do not support the
>  		 * feature that requires this workaround.
>  		 */
>  		val |= man_trk_ctl_single_full_frame_bit_get(dev_priv);
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index a8a5bd426e78..ecb027626a21 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -727,6 +727,10 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
>  	(IS_SUBPLATFORM(__i915, INTEL_METEORLAKE, INTEL_SUBPLATFORM_##variant) && \
>  	 IS_GRAPHICS_STEP(__i915, since, until))
>  
> +#define IS_MTL_DISPLAY_STEP(__i915, since, until) \
> +	(DISPLAY_VER(__i915) == 14 && \

As Tvrtko noted, this could come back to bite us in the future if
another platform shows up with 14.10, 14.50, etc.  MTL has exactly
version 14.0, so best to make this

        DISPLAY_VER_FULL(__i915) == IP_VER(14, 0)

so that it won't automatically capture future platforms by accident.


Matt

> +	 IS_DISPLAY_STEP(__i915, since, until))
> +
>  /*
>   * DG2 hardware steppings are a bit unusual.  The hardware design was forked to
>   * create three variants (G10, G11, and G12) which each have distinct
> -- 
> 2.38.1
> 

-- 
Matt Roper
Graphics Software Engineer
VTT-OSGC Platform Enablement
Intel Corporation

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

* Re: [Intel-gfx] [PATCH 2/2] drm/i915/mtl: Add initial gt workarounds
  2022-12-01 17:23     ` Lucas De Marchi
@ 2022-12-01 23:23       ` Matt Roper
  2022-12-02  8:59         ` Tvrtko Ursulin
  0 siblings, 1 reply; 17+ messages in thread
From: Matt Roper @ 2022-12-01 23:23 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-gfx

On Thu, Dec 01, 2022 at 09:23:07AM -0800, Lucas De Marchi wrote:
> On Thu, Dec 01, 2022 at 01:15:35PM +0000, Tvrtko Ursulin wrote:
> > 
> > On 30/11/2022 23:17, Matt Atwood wrote:
> > > From: Matt Roper <matthew.d.roper@intel.com>
> > > 
> > > This patch introduces initial workarounds for mtl platform
> > > 
> > > Bspec:66622
> > > 
> > > Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com>
> > > Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
> > > ---
> > >  drivers/gpu/drm/i915/gt/intel_engine_cs.c     |   4 +-
> > >  .../drm/i915/gt/intel_execlists_submission.c  |   4 +-
> > >  drivers/gpu/drm/i915/gt/intel_gt_mcr.c        |  11 +-
> > >  drivers/gpu/drm/i915/gt/intel_gt_regs.h       |   5 +
> > >  drivers/gpu/drm/i915/gt/intel_workarounds.c   | 105 +++++++++++++-----
> > >  drivers/gpu/drm/i915/gt/uc/intel_guc.c        |   9 +-
> > >  .../gpu/drm/i915/gt/uc/intel_guc_submission.c |  10 +-
> > >  drivers/gpu/drm/i915/i915_drv.h               |   4 +
> > >  drivers/gpu/drm/i915/intel_device_info.c      |   6 +
> > >  9 files changed, 121 insertions(+), 37 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> > > index c33e0d72d670..af88d8ab61c1 100644
> > > --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> > > +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> > > @@ -1479,7 +1479,9 @@ static int __intel_engine_stop_cs(struct intel_engine_cs *engine,
> > >  	 * Wa_22011802037 : gen11, gen12, Prior to doing a reset, ensure CS is
> > >  	 * stopped, set ring stop bit and prefetch disable bit to halt CS
> > >  	 */
> > > -	if (IS_GRAPHICS_VER(engine->i915, 11, 12))
> > > +	if (IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
> > > +	    (GRAPHICS_VER(engine->i915) >= 11 &&
> > > +	    GRAPHICS_VER_FULL(engine->i915) < IP_VER(12, 70)))
> > 
> > Does comment need updating to reflect the workaround applicability?
> > Elsewhere as well. Some are left as dg2 only. Some gen11,gen12 only.
> > 
> > Then there's a few of this same change logic throught the patch, so I
> > assume a general situation of workarounds applying to only early MTL.
> > 
> > if ((IS_GRAPHICS_VER(engine->i915, 11, 12)) &&
> >     !IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_B1, STEP_FOREVER)
> > 
> > Would this be correct and simpler? Not sure about STEP_B1 for start of
> 
> should be STEP_B0 if doing this. The stepping check is inclusive on the
> left, exclusive on the right, i.e:  [STEP_A0, STEP_B0).
> 
> But even if the check is simpler, I'd avoid doing a negative check to
> maintain consistency.

Agreed; if you have access to the internal workaround database, you can
query a list of which platforms/steppings a given workaround applies to
and get a list that basically lays things out something like

  Wa_XXXXXXXX:
    MTL:        [a0..b0)
    PVC:        not needed
    DG2-G10:    [b1..c3)
    DG2-G11:    [a0..a2)
    XEHPSDV:    all steppings
    ADL-P:      not needed
    ...

Even if the code condition has a bunch of arms, it should translate
pretty clearly to what's in the workaround database, so it's easier to
audit and make sure we aren't missing anything.  With all the platforms
we have these days, negative tests make it a lot harder to verify (and
in your example here would cause problems if we get something like a new
12.80 or 12.90 platform down the road...presumably those wouldn't want
this workaround either, but wouldn't be captured properly).

The corollary of that is that we should be really careful about using
range checks like IS_GRAPHICS_VER() that only compare the major version
number.  If we aren't sure we've fully moved past the upper end of the
range, there's a possibility that new platforms may show up that
shouldn't be included in that range (as MTL did in this case, breaking
our "applies to all 11.x and 12.x" assumption).


Matt

> 
> Lucas De Marchi
> 
> 
> > range, if it is possible to define it. Don't know.. One could perhaps
> > even suggest a new macro to avoid repeated whatever patterna lot.
> > 
> > >  		intel_uncore_write_fw(uncore, RING_MODE_GEN7(engine->mmio_base),
> > >  				      _MASKED_BIT_ENABLE(GEN12_GFX_PREFETCH_DISABLE));
> > > diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> > > index 49a8f10d76c7..a91c912e35d6 100644
> > > --- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> > > +++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> > > @@ -2992,7 +2992,9 @@ static void execlists_reset_prepare(struct intel_engine_cs *engine)
> > >  	 * Wa_22011802037:gen11/gen12: In addition to stopping the cs, we need
> > >  	 * to wait for any pending mi force wakeups
> > >  	 */
> > > -	if (IS_GRAPHICS_VER(engine->i915, 11, 12))
> > > +	if (IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
> > > +	    (GRAPHICS_VER(engine->i915) >= 11 &&
> > > +	    GRAPHICS_VER_FULL(engine->i915) < IP_VER(12, 70)))
> > >  		intel_engine_wait_for_pending_mi_fw(engine);
> > >  	engine->execlists.reset_ccid = active_ccid(engine);
> > > diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> > > index aa070ae57f11..0e90a8f86b27 100644
> > > --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> > > +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> > > @@ -164,8 +164,15 @@ void intel_gt_mcr_init(struct intel_gt *gt)
> > >  	if (MEDIA_VER(i915) >= 13 && gt->type == GT_MEDIA) {
> > >  		gt->steering_table[OADDRM] = xelpmp_oaddrm_steering_table;
> > >  	} else if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 70)) {
> > > -		fuse = REG_FIELD_GET(GT_L3_EXC_MASK,
> > > -				     intel_uncore_read(gt->uncore, XEHP_FUSE4));
> > > +		/* Wa_14016747170:mtl-m[a0], mtl-p[a0] */
> > > +		if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
> > > +		    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0))
> > > +			fuse = REG_FIELD_GET(MTL_GT_L3_EXC_MASK,
> > > +					     intel_uncore_read(gt->uncore,
> > > +							       MTL_GT_ACTIVITY_FACTOR));
> > > +		else
> > > +			fuse = REG_FIELD_GET(GT_L3_EXC_MASK,
> > > +					     intel_uncore_read(gt->uncore, XEHP_FUSE4));
> > >  		/*
> > >  		 * Despite the register field being named "exclude mask" the
> > > diff --git a/drivers/gpu/drm/i915/gt/intel_gt_regs.h b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
> > > index 784152548472..c2c03b02f200 100644
> > > --- a/drivers/gpu/drm/i915/gt/intel_gt_regs.h
> > > +++ b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
> > > @@ -413,6 +413,7 @@
> > >  #define   TBIMR_FAST_CLIP			REG_BIT(5)
> > >  #define VFLSKPD					MCR_REG(0x62a8)
> > > +#define   VF_PREFETCH_TLB_DIS			REG_BIT(5)
> > >  #define   DIS_OVER_FETCH_CACHE			REG_BIT(1)
> > >  #define   DIS_MULT_MISS_RD_SQUASH		REG_BIT(0)
> > > @@ -1532,6 +1533,10 @@
> > >  #define MTL_MEDIA_MC6				_MMIO(0x138048)
> > > +/* Wa_14016747170:mtl-p[a0], mtl-m[a0] */
> > > +#define MTL_GT_ACTIVITY_FACTOR			_MMIO(0x138010)
> > > +#define   MTL_GT_L3_EXC_MASK			REG_GENMASK(5, 3)
> > > +
> > >  #define GEN6_GT_THREAD_STATUS_REG		_MMIO(0x13805c)
> > >  #define   GEN6_GT_THREAD_STATUS_CORE_MASK	0x7
> > > diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> > > index 3e35facac2b4..2e3d5de0c522 100644
> > > --- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
> > > +++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> > > @@ -786,6 +786,32 @@ static void dg2_ctx_workarounds_init(struct intel_engine_cs *engine,
> > >  	wa_masked_en(wal, CACHE_MODE_1, MSAA_OPTIMIZATION_REDUC_DISABLE);
> > >  }
> > > +static void mtl_ctx_workarounds_init(struct intel_engine_cs *engine,
> > > +				     struct i915_wa_list *wal)
> > > +{
> > > +	struct drm_i915_private *i915 = engine->i915;
> > > +
> > > +	if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
> > > +	    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0)) {
> > > +		/* Wa_14014947963:mtl */
> > > +		wa_masked_field_set(wal, VF_PREEMPTION,
> > > +				    PREEMPTION_VERTEX_COUNT, 0x4000);
> > > +
> > > +		/* Wa_16013271637:mtl */
> > > +		wa_mcr_masked_en(wal, XEHP_SLICE_COMMON_ECO_CHICKEN1,
> > > +				 MSC_MSAA_REODER_BUF_BYPASS_DISABLE);
> > > +
> > > +		/* Wa_18019627453:mtl */
> > > +		wa_mcr_masked_en(wal, VFLSKPD, VF_PREFETCH_TLB_DIS);
> > > +
> > > +		/* Wa_18018764978:mtl */
> > > +		wa_masked_en(wal, PSS_MODE2, SCOREBOARD_STALL_FLUSH_CONTROL);
> > > +	}
> > > +
> > > +	/* Wa_18019271663:mtl */
> > > +	wa_masked_en(wal, CACHE_MODE_1, MSAA_OPTIMIZATION_REDUC_DISABLE);
> > > +}
> > > +
> > >  static void fakewa_disable_nestedbb_mode(struct intel_engine_cs *engine,
> > >  					 struct i915_wa_list *wal)
> > >  {
> > > @@ -872,7 +898,9 @@ __intel_engine_init_ctx_wa(struct intel_engine_cs *engine,
> > >  	if (engine->class != RENDER_CLASS)
> > >  		goto done;
> > > -	if (IS_PONTEVECCHIO(i915))
> > > +	if (IS_METEORLAKE(i915))
> > > +		mtl_ctx_workarounds_init(engine, wal);
> > > +	else if (IS_PONTEVECCHIO(i915))
> > >  		; /* noop; none at this time */
> > >  	else if (IS_DG2(i915))
> > >  		dg2_ctx_workarounds_init(engine, wal);
> > > @@ -1628,7 +1656,10 @@ pvc_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
> > >  static void
> > >  xelpg_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
> > >  {
> > > -	/* FIXME: Actual workarounds will be added in future patch(es) */
> > > +	/* Wa_14014830051:mtl */
> > > +	if (IS_MTL_GRAPHICS_STEP(gt->i915, M, STEP_A0, STEP_B0) ||
> > > +	    IS_MTL_GRAPHICS_STEP(gt->i915, P, STEP_A0, STEP_B0))
> > > +		wa_mcr_write_clr(wal, SARB_CHICKEN1, COMP_CKN_IN);
> > >  	/*
> > >  	 * Unlike older platforms, we no longer setup implicit steering here;
> > > @@ -2168,7 +2199,9 @@ void intel_engine_init_whitelist(struct intel_engine_cs *engine)
> > >  	wa_init_start(w, engine->gt, "whitelist", engine->name);
> > > -	if (IS_PONTEVECCHIO(i915))
> > > +	if (IS_METEORLAKE(i915))
> > > +		; /* noop; none at this time */
> > > +	else if (IS_PONTEVECCHIO(i915))
> > >  		pvc_whitelist_build(engine);
> > >  	else if (IS_DG2(i915))
> > >  		dg2_whitelist_build(engine);
> > > @@ -2278,6 +2311,34 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
> > >  {
> > >  	struct drm_i915_private *i915 = engine->i915;
> > > +	if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
> > > +	    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0)) {
> > > +		/* Wa_22014600077:mtl */
> > > +		wa_mcr_masked_en(wal, GEN10_CACHE_MODE_SS,
> > > +				 ENABLE_EU_COUNT_FOR_TDL_FLUSH);
> > > +	}
> > > +
> > > +	if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
> > > +	    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0) ||
> > > +	    IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
> > > +	    IS_DG2_G11(i915) || IS_DG2_G12(i915)) {
> > > +		/* Wa_1509727124:dg2,mtl */
> > > +		wa_mcr_masked_en(wal, GEN10_SAMPLER_MODE,
> > > +				 SC_DISABLE_POWER_OPTIMIZATION_EBB);
> > > +
> > > +		/* Wa_22013037850:dg2,mtl */
> > > +		wa_mcr_write_or(wal, LSC_CHICKEN_BIT_0_UDW,
> > > +				DISABLE_128B_EVICTION_COMMAND_UDW);
> > > +	}
> > > +
> > > +	if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
> > > +	    IS_DG2_G11(i915) || IS_DG2_G12(i915) ||
> > > +	    IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0)) {
> > > +		/* Wa_22012856258:dg2,mtl */
> > > +		wa_mcr_masked_en(wal, GEN8_ROW_CHICKEN2,
> > > +				 GEN12_DISABLE_READ_SUPPRESSION);
> > > +	}
> > > +
> > >  	if (IS_DG2(i915)) {
> > >  		/* Wa_1509235366:dg2 */
> > >  		wa_write_or(wal, GEN12_GAMCNTRL_CTRL, INVALIDATION_BROADCAST_MODE_DIS |
> > > @@ -2289,13 +2350,6 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
> > >  		wa_mcr_masked_en(wal, GEN8_ROW_CHICKEN2, GEN12_ENABLE_LARGE_GRF_MODE);
> > >  	}
> > > -	if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
> > > -	    IS_DG2_G11(i915) || IS_DG2_G12(i915)) {
> > > -		/* Wa_1509727124:dg2 */
> > > -		wa_mcr_masked_en(wal, GEN10_SAMPLER_MODE,
> > > -				 SC_DISABLE_POWER_OPTIMIZATION_EBB);
> > > -	}
> > > -
> > >  	if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_A0, STEP_B0) ||
> > >  	    IS_DG2_GRAPHICS_STEP(i915, G11, STEP_A0, STEP_B0)) {
> > >  		/* Wa_14012419201:dg2 */
> > > @@ -2327,14 +2381,6 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
> > >  	if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
> > >  	    IS_DG2_G11(i915) || IS_DG2_G12(i915)) {
> > > -		/* Wa_22013037850:dg2 */
> > > -		wa_mcr_write_or(wal, LSC_CHICKEN_BIT_0_UDW,
> > > -				DISABLE_128B_EVICTION_COMMAND_UDW);
> > > -
> > > -		/* Wa_22012856258:dg2 */
> > > -		wa_mcr_masked_en(wal, GEN8_ROW_CHICKEN2,
> > > -				 GEN12_DISABLE_READ_SUPPRESSION);
> > > -
> > >  		/*
> > >  		 * Wa_22010960976:dg2
> > >  		 * Wa_14013347512:dg2
> > > @@ -2954,6 +3000,20 @@ general_render_compute_wa_init(struct intel_engine_cs *engine, struct i915_wa_li
> > >  	add_render_compute_tuning_settings(i915, wal);
> > > +	if (IS_MTL_GRAPHICS_STEP(i915, M, STEP_A0, STEP_B0) ||
> > > +	    IS_MTL_GRAPHICS_STEP(i915, P, STEP_A0, STEP_B0) ||
> > > +	    IS_PONTEVECCHIO(i915) ||
> > > +	    IS_DG2(i915)) {
> > > +		/* Wa_18018781329:dg2,pvc,mtl */
> > > +		wa_mcr_write_or(wal, RENDER_MOD_CTRL, FORCE_MISS_FTLB);
> > > +		wa_mcr_write_or(wal, COMP_MOD_CTRL, FORCE_MISS_FTLB);
> > > +		wa_mcr_write_or(wal, VDBX_MOD_CTRL, FORCE_MISS_FTLB);
> > > +		wa_mcr_write_or(wal, VEBX_MOD_CTRL, FORCE_MISS_FTLB);
> > > +
> > > +		/* Wa_22014226127:dg2,pvc,mtl */
> > > +		wa_mcr_write_or(wal, LSC_CHICKEN_BIT_0, DISABLE_D8_D16_COASLESCE);
> > > +	}
> > > +
> > >  	if (IS_PONTEVECCHIO(i915)) {
> > >  		/* Wa_16016694945 */
> > >  		wa_masked_en(wal, XEHPC_LNCFMISCCFGREG0, XEHPC_OVRLSCCC);
> > > @@ -2995,17 +3055,8 @@ general_render_compute_wa_init(struct intel_engine_cs *engine, struct i915_wa_li
> > >  		/* Wa_14015227452:dg2,pvc */
> > >  		wa_mcr_masked_en(wal, GEN9_ROW_CHICKEN4, XEHP_DIS_BBL_SYSPIPE);
> > > -		/* Wa_22014226127:dg2,pvc */
> > > -		wa_mcr_write_or(wal, LSC_CHICKEN_BIT_0, DISABLE_D8_D16_COASLESCE);
> > > -
> > >  		/* Wa_16015675438:dg2,pvc */
> > >  		wa_masked_en(wal, FF_SLICE_CS_CHICKEN2, GEN12_PERF_FIX_BALANCING_CFE_DISABLE);
> > > -
> > > -		/* Wa_18018781329:dg2,pvc */
> > > -		wa_mcr_write_or(wal, RENDER_MOD_CTRL, FORCE_MISS_FTLB);
> > > -		wa_mcr_write_or(wal, COMP_MOD_CTRL, FORCE_MISS_FTLB);
> > > -		wa_mcr_write_or(wal, VDBX_MOD_CTRL, FORCE_MISS_FTLB);
> > > -		wa_mcr_write_or(wal, VEBX_MOD_CTRL, FORCE_MISS_FTLB);
> > >  	}
> > >  	if (IS_DG2(i915)) {
> > > diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> > > index 52aede324788..5ec74a167df9 100644
> > > --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> > > +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> > > @@ -274,8 +274,9 @@ static u32 guc_ctl_wa_flags(struct intel_guc *guc)
> > >  	if (IS_DG2_GRAPHICS_STEP(gt->i915, G10, STEP_A0, STEP_B0))
> > >  		flags |= GUC_WA_GAM_CREDITS;
> > > -	/* Wa_14014475959:dg2 */
> > > -	if (IS_DG2(gt->i915))
> > > +	/* Wa_14014475959:dg2,mtl */
> > > +	if (IS_MTL_GRAPHICS_STEP(gt->i915, M, STEP_A0, STEP_B0) ||
> > > +	    IS_DG2(gt->i915))
> > >  		flags |= GUC_WA_HOLD_CCS_SWITCHOUT;
> > >  	/*
> > > @@ -289,7 +290,9 @@ static u32 guc_ctl_wa_flags(struct intel_guc *guc)
> > >  		flags |= GUC_WA_DUAL_QUEUE;
> > >  	/* Wa_22011802037: graphics version 11/12 */
> > > -	if (IS_GRAPHICS_VER(gt->i915, 11, 12))
> > > +	if (IS_MTL_GRAPHICS_STEP(gt->i915, M, STEP_A0, STEP_B0) ||
> > > +	    (GRAPHICS_VER(gt->i915) >= 11 &&
> > > +	    GRAPHICS_VER_FULL(gt->i915) < IP_VER(12, 70)))
> > >  		flags |= GUC_WA_PRE_PARSER;
> > >  	/* Wa_16011777198:dg2 */
> > > diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> > > index 0a42f1807f52..f148d2f88d40 100644
> > > --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> > > +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> > > @@ -1615,7 +1615,9 @@ static void guc_reset_state(struct intel_context *ce, u32 head, bool scrub)
> > >  static void guc_engine_reset_prepare(struct intel_engine_cs *engine)
> > >  {
> > > -	if (!IS_GRAPHICS_VER(engine->i915, 11, 12))
> > > +	if (!(IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
> > > +	      (GRAPHICS_VER(engine->i915) >= 11 &&
> > > +	      GRAPHICS_VER_FULL(engine->i915) < IP_VER(12, 70))))
> > >  		return;
> > 
> > The situation in this function looks bad.
> > 
> > It is not documented at all why calling intel_engine_stop_cs is only
> > applicable on gen 11-12.
> > 
> > The workaround comment only comes after that call so one should assume
> > it is not part of workaround.
> > 
> > Could you strong arm someone to put a comment in here explaining the
> > situaion?
> > 
> > Regards,
> > 
> > Tvrtko
> > 
> > >  	intel_engine_stop_cs(engine);
> > > @@ -4202,8 +4204,10 @@ static void guc_default_vfuncs(struct intel_engine_cs *engine)
> > >  	engine->flags |= I915_ENGINE_HAS_TIMESLICES;
> > >  	/* Wa_14014475959:dg2 */
> > > -	if (IS_DG2(engine->i915) && engine->class == COMPUTE_CLASS)
> > > -		engine->flags |= I915_ENGINE_USES_WA_HOLD_CCS_SWITCHOUT;
> > > +	if (engine->class == COMPUTE_CLASS)
> > > +		if (IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
> > > +		    IS_DG2(engine->i915))
> > > +			engine->flags |= I915_ENGINE_USES_WA_HOLD_CCS_SWITCHOUT;
> > >  	/*
> > >  	 * TODO: GuC supports timeslicing and semaphores as well, but they're
> > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > > index ecb027626a21..2f18bc123438 100644
> > > --- a/drivers/gpu/drm/i915/i915_drv.h
> > > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > > @@ -731,6 +731,10 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
> > >  	(DISPLAY_VER(__i915) == 14 && \
> > >  	 IS_DISPLAY_STEP(__i915, since, until))
> > > +#define IS_MTL_GRAPHICS_STEP(__i915, variant, since, until) \
> > > +	(IS_SUBPLATFORM(__i915, INTEL_METEORLAKE, INTEL_SUBPLATFORM_##variant) && \
> > > +	 IS_GRAPHICS_STEP(__i915, since, until))
> > > +
> > >  /*
> > >   * DG2 hardware steppings are a bit unusual.  The hardware design was forked to
> > >   * create three variants (G10, G11, and G12) which each have distinct
> > > diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c
> > > index 849baf6c3b3c..7add88dde79e 100644
> > > --- a/drivers/gpu/drm/i915/intel_device_info.c
> > > +++ b/drivers/gpu/drm/i915/intel_device_info.c
> > > @@ -343,6 +343,12 @@ static void intel_ipver_early_init(struct drm_i915_private *i915)
> > >  	ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_GRAPHICS),
> > >  		    &runtime->graphics.ip);
> > > +	/* Wa_22012778468:mtl */
> > > +	if (runtime->graphics.ip.ver == 0x0 &&
> > > +	    INTEL_INFO(i915)->platform == INTEL_METEORLAKE) {
> > > +		RUNTIME_INFO(i915)->graphics.ip.ver = 12;
> > > +		RUNTIME_INFO(i915)->graphics.ip.rel = 70;
> > > +	}
> > >  	ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_DISPLAY),
> > >  		    &runtime->display.ip);
> > >  	ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_MEDIA),

-- 
Matt Roper
Graphics Software Engineer
VTT-OSGC Platform Enablement
Intel Corporation

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

* Re: [Intel-gfx] [PATCH 1/2] drm/i915/mtl: Initial display workarounds
  2022-12-01 23:01 ` Matt Roper
@ 2022-12-01 23:27   ` Lucas De Marchi
  2022-12-01 23:44     ` Matt Roper
  0 siblings, 1 reply; 17+ messages in thread
From: Lucas De Marchi @ 2022-12-01 23:27 UTC (permalink / raw)
  To: Matt Roper; +Cc: intel-gfx

On Thu, Dec 01, 2022 at 03:01:05PM -0800, Matt Roper wrote:
>On Wed, Nov 30, 2022 at 03:17:08PM -0800, Matt Atwood wrote:
>> From: Jouni Högander <jouni.hogander@intel.com>
>>
>> This patch introduces initial workarounds for mtl platform
>>
>> Bspec: 66624
>>
>> Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com>
>> Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
>> ---
>>  drivers/gpu/drm/i915/display/intel_fbc.c  |  4 +++-
>>  drivers/gpu/drm/i915/display/intel_hdmi.c |  3 ++-
>>  drivers/gpu/drm/i915/display/intel_psr.c  | 27 ++++++++++++++++-------
>>  drivers/gpu/drm/i915/i915_drv.h           |  4 ++++
>>  4 files changed, 28 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c
>> index b5ee5ea0d010..8f269553d826 100644
>> --- a/drivers/gpu/drm/i915/display/intel_fbc.c
>> +++ b/drivers/gpu/drm/i915/display/intel_fbc.c
>> @@ -1095,7 +1095,9 @@ static int intel_fbc_check_plane(struct intel_atomic_state *state,
>>  	}
>>
>>  	/* Wa_14016291713 */
>> -	if (IS_DISPLAY_VER(i915, 12, 13) && crtc_state->has_psr) {
>> +	if ((IS_DISPLAY_VER(i915, 12, 13) ||
>> +	     IS_MTL_DISPLAY_STEP(i915, STEP_A0, STEP_C0)) &&
>> +	    crtc_state->has_psr) {
>>  		plane_state->no_fbc_reason = "PSR1 enabled (Wa_14016291713)";
>>  		return 0;
>>  	}
>> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
>> index e82f8a07e2b0..efa2da080f62 100644
>> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
>> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
>> @@ -537,7 +537,8 @@ void hsw_write_infoframe(struct intel_encoder *encoder,
>>  			       0);
>>
>>  	/* Wa_14013475917 */
>> -	if (DISPLAY_VER(dev_priv) == 13 && crtc_state->has_psr &&
>> +	if ((DISPLAY_VER(dev_priv) == 13 ||
>> +	     IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)) && crtc_state->has_psr &&
>>  	    type == DP_SDP_VSC)
>>  		return;
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
>> index 5b678916e6db..7982157fb1ff 100644
>> --- a/drivers/gpu/drm/i915/display/intel_psr.c
>> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
>> @@ -797,7 +797,7 @@ static bool psr2_granularity_check(struct intel_dp *intel_dp,
>>  		return intel_dp->psr.su_y_granularity == 4;
>>
>>  	/*
>> -	 * adl_p and display 14+ platforms has 1 line granularity.
>> +	 * adl_p and mtl platforms has 1 line granularity.
>>  	 * For other platforms with SW tracking we can adjust the y coordinates
>>  	 * to match sink requirement if multiple of 4.
>>  	 */
>> @@ -1170,11 +1170,14 @@ static void intel_psr_enable_source(struct intel_dp *intel_dp,
>>  				     PSR2_ADD_VERTICAL_LINE_COUNT);
>>
>>  		/*
>> -		 * Wa_16014451276:adlp
>> +		 * Wa_16014451276:adlp,mtl[a0,b0]
>
>These days we don't really add steppings in these comments; at best
>they're just reiterating information that can be easily seen from the
>code below, at worst they get out of sync and cause confusion.  I'd drop
>the "[a0,b0]" part (which also isn't accurate anyway if you're using
>range notation...it would be "[a0..b0)" in that case).
>
>Honestly even the list of platform names on workarounds is of
>questionable value and I'm thinking about writing a patch that just
>drops all of them throughout i915, leaving just the workaround lineage
>number.  Maybe I'd keep the platform names in the few cases where we
>have multiple workaround numbers (with different sets of platforms) all
>requesting the same programming of a register...

I'd be happy to ack such patch :)

>
>>  		 * All supported adlp panels have 1-based X granularity, this may
>>  		 * cause issues if non-supported panels are used.
>>  		 */
>> -		if (IS_ALDERLAKE_P(dev_priv))
>> +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
>> +			intel_de_rmw(dev_priv, MTL_CHICKEN_TRANS(cpu_transcoder), 0,
>> +				     ADLP_1_BASED_X_GRANULARITY);
>> +		else if (IS_ALDERLAKE_P(dev_priv))
>>  			intel_de_rmw(dev_priv, CHICKEN_TRANS(cpu_transcoder), 0,
>>  				     ADLP_1_BASED_X_GRANULARITY);
>>
>> @@ -1185,8 +1188,12 @@ static void intel_psr_enable_source(struct intel_dp *intel_dp,
>>  				     TRANS_SET_CONTEXT_LATENCY_MASK,
>>  				     TRANS_SET_CONTEXT_LATENCY_VALUE(1));
>>
>> -		/* Wa_16012604467:adlp */
>> -		if (IS_ALDERLAKE_P(dev_priv))
>> +		/* Wa_16012604467:adlp,mtl[a0,b0] */
>> +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
>> +			intel_de_rmw(dev_priv,
>> +				     MTL_CLKGATE_DIS_TRANS(cpu_transcoder), 0,
>> +				     MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS);
>> +		else if (IS_ALDERLAKE_P(dev_priv))
>>  			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC, 0,
>>  				     CLKGATE_DIS_MISC_DMASC_GATING_DIS);
>>
>> @@ -1362,8 +1369,12 @@ static void intel_psr_disable_locked(struct intel_dp *intel_dp)
>>  				     TRANS_SET_CONTEXT_LATENCY(intel_dp->psr.transcoder),
>>  				     TRANS_SET_CONTEXT_LATENCY_MASK, 0);
>>
>> -		/* Wa_16012604467:adlp */
>> -		if (IS_ALDERLAKE_P(dev_priv))
>> +		/* Wa_16012604467:adlp,mtl[a0,b0] */
>> +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
>> +			intel_de_rmw(dev_priv,
>> +				     MTL_CLKGATE_DIS_TRANS(intel_dp->psr.transcoder),
>> +				     MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS, 0);
>> +		else if (IS_ALDERLAKE_P(dev_priv))
>>  			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC,
>>  				     CLKGATE_DIS_MISC_DMASC_GATING_DIS, 0);
>>
>> @@ -1625,7 +1636,7 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
>>
>>  	if (full_update) {
>>  		/*
>> -		 * Not applying Wa_14014971508:adlp as we do not support the
>> +		 * Not applying Wa_14014971508:adlp,mtl as we do not support the
>>  		 * feature that requires this workaround.
>>  		 */
>>  		val |= man_trk_ctl_single_full_frame_bit_get(dev_priv);
>> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
>> index a8a5bd426e78..ecb027626a21 100644
>> --- a/drivers/gpu/drm/i915/i915_drv.h
>> +++ b/drivers/gpu/drm/i915/i915_drv.h
>> @@ -727,6 +727,10 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
>>  	(IS_SUBPLATFORM(__i915, INTEL_METEORLAKE, INTEL_SUBPLATFORM_##variant) && \
>>  	 IS_GRAPHICS_STEP(__i915, since, until))
>>
>> +#define IS_MTL_DISPLAY_STEP(__i915, since, until) \
>> +	(DISPLAY_VER(__i915) == 14 && \
>
>As Tvrtko noted, this could come back to bite us in the future if
>another platform shows up with 14.10, 14.50, etc.  MTL has exactly
>version 14.0, so best to make this
>
>        DISPLAY_VER_FULL(__i915) == IP_VER(14, 0)
>
>so that it won't automatically capture future platforms by accident.

I think it's better to do a platform check as the other platforms are
doing. See DG2 for example:

#define IS_DG2_DISPLAY_STEP(__i915, since, until) \
         (IS_DG2(__i915) && \
          IS_DISPLAY_STEP(__i915, since, until))

Lucas De Marchi

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

* Re: [Intel-gfx] [PATCH 1/2] drm/i915/mtl: Initial display workarounds
  2022-12-01 23:27   ` Lucas De Marchi
@ 2022-12-01 23:44     ` Matt Roper
  2022-12-02  1:18       ` Lucas De Marchi
  0 siblings, 1 reply; 17+ messages in thread
From: Matt Roper @ 2022-12-01 23:44 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-gfx

On Thu, Dec 01, 2022 at 03:27:25PM -0800, Lucas De Marchi wrote:
> On Thu, Dec 01, 2022 at 03:01:05PM -0800, Matt Roper wrote:
> > On Wed, Nov 30, 2022 at 03:17:08PM -0800, Matt Atwood wrote:
> > > From: Jouni Högander <jouni.hogander@intel.com>
> > > 
> > > This patch introduces initial workarounds for mtl platform
> > > 
> > > Bspec: 66624
> > > 
> > > Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com>
> > > Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> > > ---
> > >  drivers/gpu/drm/i915/display/intel_fbc.c  |  4 +++-
> > >  drivers/gpu/drm/i915/display/intel_hdmi.c |  3 ++-
> > >  drivers/gpu/drm/i915/display/intel_psr.c  | 27 ++++++++++++++++-------
> > >  drivers/gpu/drm/i915/i915_drv.h           |  4 ++++
> > >  4 files changed, 28 insertions(+), 10 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c
> > > index b5ee5ea0d010..8f269553d826 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_fbc.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_fbc.c
> > > @@ -1095,7 +1095,9 @@ static int intel_fbc_check_plane(struct intel_atomic_state *state,
> > >  	}
> > > 
> > >  	/* Wa_14016291713 */
> > > -	if (IS_DISPLAY_VER(i915, 12, 13) && crtc_state->has_psr) {
> > > +	if ((IS_DISPLAY_VER(i915, 12, 13) ||
> > > +	     IS_MTL_DISPLAY_STEP(i915, STEP_A0, STEP_C0)) &&
> > > +	    crtc_state->has_psr) {
> > >  		plane_state->no_fbc_reason = "PSR1 enabled (Wa_14016291713)";
> > >  		return 0;
> > >  	}
> > > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
> > > index e82f8a07e2b0..efa2da080f62 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> > > @@ -537,7 +537,8 @@ void hsw_write_infoframe(struct intel_encoder *encoder,
> > >  			       0);
> > > 
> > >  	/* Wa_14013475917 */
> > > -	if (DISPLAY_VER(dev_priv) == 13 && crtc_state->has_psr &&
> > > +	if ((DISPLAY_VER(dev_priv) == 13 ||
> > > +	     IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)) && crtc_state->has_psr &&
> > >  	    type == DP_SDP_VSC)
> > >  		return;
> > > 
> > > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> > > index 5b678916e6db..7982157fb1ff 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > > @@ -797,7 +797,7 @@ static bool psr2_granularity_check(struct intel_dp *intel_dp,
> > >  		return intel_dp->psr.su_y_granularity == 4;
> > > 
> > >  	/*
> > > -	 * adl_p and display 14+ platforms has 1 line granularity.
> > > +	 * adl_p and mtl platforms has 1 line granularity.
> > >  	 * For other platforms with SW tracking we can adjust the y coordinates
> > >  	 * to match sink requirement if multiple of 4.
> > >  	 */
> > > @@ -1170,11 +1170,14 @@ static void intel_psr_enable_source(struct intel_dp *intel_dp,
> > >  				     PSR2_ADD_VERTICAL_LINE_COUNT);
> > > 
> > >  		/*
> > > -		 * Wa_16014451276:adlp
> > > +		 * Wa_16014451276:adlp,mtl[a0,b0]
> > 
> > These days we don't really add steppings in these comments; at best
> > they're just reiterating information that can be easily seen from the
> > code below, at worst they get out of sync and cause confusion.  I'd drop
> > the "[a0,b0]" part (which also isn't accurate anyway if you're using
> > range notation...it would be "[a0..b0)" in that case).
> > 
> > Honestly even the list of platform names on workarounds is of
> > questionable value and I'm thinking about writing a patch that just
> > drops all of them throughout i915, leaving just the workaround lineage
> > number.  Maybe I'd keep the platform names in the few cases where we
> > have multiple workaround numbers (with different sets of platforms) all
> > requesting the same programming of a register...
> 
> I'd be happy to ack such patch :)
> 
> > 
> > >  		 * All supported adlp panels have 1-based X granularity, this may
> > >  		 * cause issues if non-supported panels are used.
> > >  		 */
> > > -		if (IS_ALDERLAKE_P(dev_priv))
> > > +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
> > > +			intel_de_rmw(dev_priv, MTL_CHICKEN_TRANS(cpu_transcoder), 0,
> > > +				     ADLP_1_BASED_X_GRANULARITY);
> > > +		else if (IS_ALDERLAKE_P(dev_priv))
> > >  			intel_de_rmw(dev_priv, CHICKEN_TRANS(cpu_transcoder), 0,
> > >  				     ADLP_1_BASED_X_GRANULARITY);
> > > 
> > > @@ -1185,8 +1188,12 @@ static void intel_psr_enable_source(struct intel_dp *intel_dp,
> > >  				     TRANS_SET_CONTEXT_LATENCY_MASK,
> > >  				     TRANS_SET_CONTEXT_LATENCY_VALUE(1));
> > > 
> > > -		/* Wa_16012604467:adlp */
> > > -		if (IS_ALDERLAKE_P(dev_priv))
> > > +		/* Wa_16012604467:adlp,mtl[a0,b0] */
> > > +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
> > > +			intel_de_rmw(dev_priv,
> > > +				     MTL_CLKGATE_DIS_TRANS(cpu_transcoder), 0,
> > > +				     MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS);
> > > +		else if (IS_ALDERLAKE_P(dev_priv))
> > >  			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC, 0,
> > >  				     CLKGATE_DIS_MISC_DMASC_GATING_DIS);
> > > 
> > > @@ -1362,8 +1369,12 @@ static void intel_psr_disable_locked(struct intel_dp *intel_dp)
> > >  				     TRANS_SET_CONTEXT_LATENCY(intel_dp->psr.transcoder),
> > >  				     TRANS_SET_CONTEXT_LATENCY_MASK, 0);
> > > 
> > > -		/* Wa_16012604467:adlp */
> > > -		if (IS_ALDERLAKE_P(dev_priv))
> > > +		/* Wa_16012604467:adlp,mtl[a0,b0] */
> > > +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
> > > +			intel_de_rmw(dev_priv,
> > > +				     MTL_CLKGATE_DIS_TRANS(intel_dp->psr.transcoder),
> > > +				     MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS, 0);
> > > +		else if (IS_ALDERLAKE_P(dev_priv))
> > >  			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC,
> > >  				     CLKGATE_DIS_MISC_DMASC_GATING_DIS, 0);
> > > 
> > > @@ -1625,7 +1636,7 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
> > > 
> > >  	if (full_update) {
> > >  		/*
> > > -		 * Not applying Wa_14014971508:adlp as we do not support the
> > > +		 * Not applying Wa_14014971508:adlp,mtl as we do not support the
> > >  		 * feature that requires this workaround.
> > >  		 */
> > >  		val |= man_trk_ctl_single_full_frame_bit_get(dev_priv);
> > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > > index a8a5bd426e78..ecb027626a21 100644
> > > --- a/drivers/gpu/drm/i915/i915_drv.h
> > > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > > @@ -727,6 +727,10 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
> > >  	(IS_SUBPLATFORM(__i915, INTEL_METEORLAKE, INTEL_SUBPLATFORM_##variant) && \
> > >  	 IS_GRAPHICS_STEP(__i915, since, until))
> > > 
> > > +#define IS_MTL_DISPLAY_STEP(__i915, since, until) \
> > > +	(DISPLAY_VER(__i915) == 14 && \
> > 
> > As Tvrtko noted, this could come back to bite us in the future if
> > another platform shows up with 14.10, 14.50, etc.  MTL has exactly
> > version 14.0, so best to make this
> > 
> >        DISPLAY_VER_FULL(__i915) == IP_VER(14, 0)
> > 
> > so that it won't automatically capture future platforms by accident.
> 
> I think it's better to do a platform check as the other platforms are
> doing. See DG2 for example:
> 
> #define IS_DG2_DISPLAY_STEP(__i915, since, until) \
>         (IS_DG2(__i915) && \
>          IS_DISPLAY_STEP(__i915, since, until))

I guess that's fine in the short term, but in the long term that's the
kind of thing we need to move away from.  We're really not supposed to
be using platform checks (which are derived from PCI ID) anymore going
forward.  At some point, even things like IS_MTL_DISPLAY_STEP() will get
replaced with something more along the lines of

   IS_GMDID_DISPLAY_STEP(12, 70, STEP_A0, STEP_C0)

because the expectation is that none of this is actually tied to the
platform anymore, just to the IP versions of the various chiplets (which
can be mixed-and-matched and in theory could be re-used on other
platforms).  But today MTL is the first/only hardware we have using this
design, so it doesn't matter too much; we don't have to clean this all
up immediately.


Matt

> 
> Lucas De Marchi

-- 
Matt Roper
Graphics Software Engineer
VTT-OSGC Platform Enablement
Intel Corporation

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

* Re: [Intel-gfx] [PATCH 1/2] drm/i915/mtl: Initial display workarounds
  2022-12-01 23:44     ` Matt Roper
@ 2022-12-02  1:18       ` Lucas De Marchi
  0 siblings, 0 replies; 17+ messages in thread
From: Lucas De Marchi @ 2022-12-02  1:18 UTC (permalink / raw)
  To: Matt Roper; +Cc: intel-gfx

On Thu, Dec 01, 2022 at 03:44:07PM -0800, Matt Roper wrote:
>On Thu, Dec 01, 2022 at 03:27:25PM -0800, Lucas De Marchi wrote:
>> On Thu, Dec 01, 2022 at 03:01:05PM -0800, Matt Roper wrote:
>> > On Wed, Nov 30, 2022 at 03:17:08PM -0800, Matt Atwood wrote:
>> > > From: Jouni Högander <jouni.hogander@intel.com>
>> > >
>> > > This patch introduces initial workarounds for mtl platform
>> > >
>> > > Bspec: 66624
>> > >
>> > > Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com>
>> > > Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
>> > > ---
>> > >  drivers/gpu/drm/i915/display/intel_fbc.c  |  4 +++-
>> > >  drivers/gpu/drm/i915/display/intel_hdmi.c |  3 ++-
>> > >  drivers/gpu/drm/i915/display/intel_psr.c  | 27 ++++++++++++++++-------
>> > >  drivers/gpu/drm/i915/i915_drv.h           |  4 ++++
>> > >  4 files changed, 28 insertions(+), 10 deletions(-)
>> > >
>> > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c
>> > > index b5ee5ea0d010..8f269553d826 100644
>> > > --- a/drivers/gpu/drm/i915/display/intel_fbc.c
>> > > +++ b/drivers/gpu/drm/i915/display/intel_fbc.c
>> > > @@ -1095,7 +1095,9 @@ static int intel_fbc_check_plane(struct intel_atomic_state *state,
>> > >  	}
>> > >
>> > >  	/* Wa_14016291713 */
>> > > -	if (IS_DISPLAY_VER(i915, 12, 13) && crtc_state->has_psr) {
>> > > +	if ((IS_DISPLAY_VER(i915, 12, 13) ||
>> > > +	     IS_MTL_DISPLAY_STEP(i915, STEP_A0, STEP_C0)) &&
>> > > +	    crtc_state->has_psr) {
>> > >  		plane_state->no_fbc_reason = "PSR1 enabled (Wa_14016291713)";
>> > >  		return 0;
>> > >  	}
>> > > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
>> > > index e82f8a07e2b0..efa2da080f62 100644
>> > > --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
>> > > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
>> > > @@ -537,7 +537,8 @@ void hsw_write_infoframe(struct intel_encoder *encoder,
>> > >  			       0);
>> > >
>> > >  	/* Wa_14013475917 */
>> > > -	if (DISPLAY_VER(dev_priv) == 13 && crtc_state->has_psr &&
>> > > +	if ((DISPLAY_VER(dev_priv) == 13 ||
>> > > +	     IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)) && crtc_state->has_psr &&
>> > >  	    type == DP_SDP_VSC)
>> > >  		return;
>> > >
>> > > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
>> > > index 5b678916e6db..7982157fb1ff 100644
>> > > --- a/drivers/gpu/drm/i915/display/intel_psr.c
>> > > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
>> > > @@ -797,7 +797,7 @@ static bool psr2_granularity_check(struct intel_dp *intel_dp,
>> > >  		return intel_dp->psr.su_y_granularity == 4;
>> > >
>> > >  	/*
>> > > -	 * adl_p and display 14+ platforms has 1 line granularity.
>> > > +	 * adl_p and mtl platforms has 1 line granularity.
>> > >  	 * For other platforms with SW tracking we can adjust the y coordinates
>> > >  	 * to match sink requirement if multiple of 4.
>> > >  	 */
>> > > @@ -1170,11 +1170,14 @@ static void intel_psr_enable_source(struct intel_dp *intel_dp,
>> > >  				     PSR2_ADD_VERTICAL_LINE_COUNT);
>> > >
>> > >  		/*
>> > > -		 * Wa_16014451276:adlp
>> > > +		 * Wa_16014451276:adlp,mtl[a0,b0]
>> >
>> > These days we don't really add steppings in these comments; at best
>> > they're just reiterating information that can be easily seen from the
>> > code below, at worst they get out of sync and cause confusion.  I'd drop
>> > the "[a0,b0]" part (which also isn't accurate anyway if you're using
>> > range notation...it would be "[a0..b0)" in that case).
>> >
>> > Honestly even the list of platform names on workarounds is of
>> > questionable value and I'm thinking about writing a patch that just
>> > drops all of them throughout i915, leaving just the workaround lineage
>> > number.  Maybe I'd keep the platform names in the few cases where we
>> > have multiple workaround numbers (with different sets of platforms) all
>> > requesting the same programming of a register...
>>
>> I'd be happy to ack such patch :)
>>
>> >
>> > >  		 * All supported adlp panels have 1-based X granularity, this may
>> > >  		 * cause issues if non-supported panels are used.
>> > >  		 */
>> > > -		if (IS_ALDERLAKE_P(dev_priv))
>> > > +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
>> > > +			intel_de_rmw(dev_priv, MTL_CHICKEN_TRANS(cpu_transcoder), 0,
>> > > +				     ADLP_1_BASED_X_GRANULARITY);
>> > > +		else if (IS_ALDERLAKE_P(dev_priv))
>> > >  			intel_de_rmw(dev_priv, CHICKEN_TRANS(cpu_transcoder), 0,
>> > >  				     ADLP_1_BASED_X_GRANULARITY);
>> > >
>> > > @@ -1185,8 +1188,12 @@ static void intel_psr_enable_source(struct intel_dp *intel_dp,
>> > >  				     TRANS_SET_CONTEXT_LATENCY_MASK,
>> > >  				     TRANS_SET_CONTEXT_LATENCY_VALUE(1));
>> > >
>> > > -		/* Wa_16012604467:adlp */
>> > > -		if (IS_ALDERLAKE_P(dev_priv))
>> > > +		/* Wa_16012604467:adlp,mtl[a0,b0] */
>> > > +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
>> > > +			intel_de_rmw(dev_priv,
>> > > +				     MTL_CLKGATE_DIS_TRANS(cpu_transcoder), 0,
>> > > +				     MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS);
>> > > +		else if (IS_ALDERLAKE_P(dev_priv))
>> > >  			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC, 0,
>> > >  				     CLKGATE_DIS_MISC_DMASC_GATING_DIS);
>> > >
>> > > @@ -1362,8 +1369,12 @@ static void intel_psr_disable_locked(struct intel_dp *intel_dp)
>> > >  				     TRANS_SET_CONTEXT_LATENCY(intel_dp->psr.transcoder),
>> > >  				     TRANS_SET_CONTEXT_LATENCY_MASK, 0);
>> > >
>> > > -		/* Wa_16012604467:adlp */
>> > > -		if (IS_ALDERLAKE_P(dev_priv))
>> > > +		/* Wa_16012604467:adlp,mtl[a0,b0] */
>> > > +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
>> > > +			intel_de_rmw(dev_priv,
>> > > +				     MTL_CLKGATE_DIS_TRANS(intel_dp->psr.transcoder),
>> > > +				     MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS, 0);
>> > > +		else if (IS_ALDERLAKE_P(dev_priv))
>> > >  			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC,
>> > >  				     CLKGATE_DIS_MISC_DMASC_GATING_DIS, 0);
>> > >
>> > > @@ -1625,7 +1636,7 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
>> > >
>> > >  	if (full_update) {
>> > >  		/*
>> > > -		 * Not applying Wa_14014971508:adlp as we do not support the
>> > > +		 * Not applying Wa_14014971508:adlp,mtl as we do not support the
>> > >  		 * feature that requires this workaround.
>> > >  		 */
>> > >  		val |= man_trk_ctl_single_full_frame_bit_get(dev_priv);
>> > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
>> > > index a8a5bd426e78..ecb027626a21 100644
>> > > --- a/drivers/gpu/drm/i915/i915_drv.h
>> > > +++ b/drivers/gpu/drm/i915/i915_drv.h
>> > > @@ -727,6 +727,10 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
>> > >  	(IS_SUBPLATFORM(__i915, INTEL_METEORLAKE, INTEL_SUBPLATFORM_##variant) && \
>> > >  	 IS_GRAPHICS_STEP(__i915, since, until))
>> > >
>> > > +#define IS_MTL_DISPLAY_STEP(__i915, since, until) \
>> > > +	(DISPLAY_VER(__i915) == 14 && \
>> >
>> > As Tvrtko noted, this could come back to bite us in the future if
>> > another platform shows up with 14.10, 14.50, etc.  MTL has exactly
>> > version 14.0, so best to make this
>> >
>> >        DISPLAY_VER_FULL(__i915) == IP_VER(14, 0)
>> >
>> > so that it won't automatically capture future platforms by accident.
>>
>> I think it's better to do a platform check as the other platforms are
>> doing. See DG2 for example:
>>
>> #define IS_DG2_DISPLAY_STEP(__i915, since, until) \
>>         (IS_DG2(__i915) && \
>>          IS_DISPLAY_STEP(__i915, since, until))
>
>I guess that's fine in the short term, but in the long term that's the
>kind of thing we need to move away from.  We're really not supposed to
>be using platform checks (which are derived from PCI ID) anymore going
>forward.  At some point, even things like IS_MTL_DISPLAY_STEP() will get
>replaced with something more along the lines of
>
>   IS_GMDID_DISPLAY_STEP(12, 70, STEP_A0, STEP_C0)

I think we should only check for the IP version if we eliminate IS_MTL_
from the name. Or... when the macro is renamed/reimplemented, it may be a good time to
change.


Lucas De Marchi

>because the expectation is that none of this is actually tied to the
>platform anymore, just to the IP versions of the various chiplets (which
>can be mixed-and-matched and in theory could be re-used on other
>platforms).  But today MTL is the first/only hardware we have using this
>design, so it doesn't matter too much; we don't have to clean this all
>up immediately.
>
>
>Matt
>
>>
>> Lucas De Marchi
>
>-- 
>Matt Roper
>Graphics Software Engineer
>VTT-OSGC Platform Enablement
>Intel Corporation

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

* Re: [Intel-gfx] [PATCH 2/2] drm/i915/mtl: Add initial gt workarounds
  2022-12-01 23:23       ` Matt Roper
@ 2022-12-02  8:59         ` Tvrtko Ursulin
  0 siblings, 0 replies; 17+ messages in thread
From: Tvrtko Ursulin @ 2022-12-02  8:59 UTC (permalink / raw)
  To: Matt Roper, Lucas De Marchi; +Cc: intel-gfx


On 01/12/2022 23:23, Matt Roper wrote:
> On Thu, Dec 01, 2022 at 09:23:07AM -0800, Lucas De Marchi wrote:
>> On Thu, Dec 01, 2022 at 01:15:35PM +0000, Tvrtko Ursulin wrote:
>>>
>>> On 30/11/2022 23:17, Matt Atwood wrote:
>>>> From: Matt Roper <matthew.d.roper@intel.com>
>>>>
>>>> This patch introduces initial workarounds for mtl platform
>>>>
>>>> Bspec:66622
>>>>
>>>> Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com>
>>>> Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
>>>> ---
>>>>   drivers/gpu/drm/i915/gt/intel_engine_cs.c     |   4 +-
>>>>   .../drm/i915/gt/intel_execlists_submission.c  |   4 +-
>>>>   drivers/gpu/drm/i915/gt/intel_gt_mcr.c        |  11 +-
>>>>   drivers/gpu/drm/i915/gt/intel_gt_regs.h       |   5 +
>>>>   drivers/gpu/drm/i915/gt/intel_workarounds.c   | 105 +++++++++++++-----
>>>>   drivers/gpu/drm/i915/gt/uc/intel_guc.c        |   9 +-
>>>>   .../gpu/drm/i915/gt/uc/intel_guc_submission.c |  10 +-
>>>>   drivers/gpu/drm/i915/i915_drv.h               |   4 +
>>>>   drivers/gpu/drm/i915/intel_device_info.c      |   6 +
>>>>   9 files changed, 121 insertions(+), 37 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
>>>> index c33e0d72d670..af88d8ab61c1 100644
>>>> --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
>>>> +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
>>>> @@ -1479,7 +1479,9 @@ static int __intel_engine_stop_cs(struct intel_engine_cs *engine,
>>>>   	 * Wa_22011802037 : gen11, gen12, Prior to doing a reset, ensure CS is
>>>>   	 * stopped, set ring stop bit and prefetch disable bit to halt CS
>>>>   	 */
>>>> -	if (IS_GRAPHICS_VER(engine->i915, 11, 12))
>>>> +	if (IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_A0, STEP_B0) ||
>>>> +	    (GRAPHICS_VER(engine->i915) >= 11 &&
>>>> +	    GRAPHICS_VER_FULL(engine->i915) < IP_VER(12, 70)))
>>>
>>> Does comment need updating to reflect the workaround applicability?
>>> Elsewhere as well. Some are left as dg2 only. Some gen11,gen12 only.
>>>
>>> Then there's a few of this same change logic throught the patch, so I
>>> assume a general situation of workarounds applying to only early MTL.
>>>
>>> if ((IS_GRAPHICS_VER(engine->i915, 11, 12)) &&
>>>      !IS_MTL_GRAPHICS_STEP(engine->i915, M, STEP_B1, STEP_FOREVER)
>>>
>>> Would this be correct and simpler? Not sure about STEP_B1 for start of
>>
>> should be STEP_B0 if doing this. The stepping check is inclusive on the
>> left, exclusive on the right, i.e:  [STEP_A0, STEP_B0).
>>
>> But even if the check is simpler, I'd avoid doing a negative check to
>> maintain consistency.
> 
> Agreed; if you have access to the internal workaround database, you can
> query a list of which platforms/steppings a given workaround applies to
> and get a list that basically lays things out something like
> 
>    Wa_XXXXXXXX:
>      MTL:        [a0..b0)
>      PVC:        not needed
>      DG2-G10:    [b1..c3)
>      DG2-G11:    [a0..a2)
>      XEHPSDV:    all steppings
>      ADL-P:      not needed
>      ...
> 
> Even if the code condition has a bunch of arms, it should translate
> pretty clearly to what's in the workaround database, so it's easier to
> audit and make sure we aren't missing anything.  With all the platforms
> we have these days, negative tests make it a lot harder to verify (and
> in your example here would cause problems if we get something like a new
> 12.80 or 12.90 platform down the road...presumably those wouldn't want
> this workaround either, but wouldn't be captured properly).
> 
> The corollary of that is that we should be really careful about using
> range checks like IS_GRAPHICS_VER() that only compare the major version
> number.  If we aren't sure we've fully moved past the upper end of the
> range, there's a possibility that new platforms may show up that
> shouldn't be included in that range (as MTL did in this case, breaking
> our "applies to all 11.x and 12.x" assumption).

Yeah okay, perhaps it is just a mix of major and full ver check which 
looked a bit naff in the code to me, and the unfortunate fact the 
workaround ends in the middle (stepping wise) of a part/major gen.

On the topic of comments ("/* Wa_16012604467:adlp,mtl[a0,b0] */" and 
such) and code getting out of sync - lets tidy that up. Either it's 
always correct (in sync), or it's completely removed. Having a mix is 
just bad an pointless.

If the tool you guys use to query the database can output the 
"Wa_NNNNNN:xxx,yyy,zzz" format, I'd say keep the comments (and fix them 
up) because then that is the reference which *can* be useful when 
reviewing and spotting things like (oh you've inverted the logic when 
adding the new platform). But if the tool can no to that then just drop 
the platform list from them? Although I am kind of hoping the tool can 
output that info and it's useful to have them sprinkled around the code.

Regards,

Tvrtko

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

end of thread, other threads:[~2022-12-02  9:01 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-30 23:17 [Intel-gfx] [PATCH 1/2] drm/i915/mtl: Initial display workarounds Matt Atwood
2022-11-30 23:17 ` [Intel-gfx] [PATCH 2/2] drm/i915/mtl: Add initial gt workarounds Matt Atwood
2022-12-01 13:15   ` Tvrtko Ursulin
2022-12-01 17:23     ` Lucas De Marchi
2022-12-01 23:23       ` Matt Roper
2022-12-02  8:59         ` Tvrtko Ursulin
2022-12-01 17:25     ` Lucas De Marchi
2022-12-01  0:27 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/2] drm/i915/mtl: Initial display workarounds Patchwork
2022-12-01  0:27 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2022-12-01  0:46 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2022-12-01 12:28 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
2022-12-01 12:51 ` [Intel-gfx] [PATCH 1/2] " Tvrtko Ursulin
2022-12-01 22:14   ` Matt Atwood
2022-12-01 23:01 ` Matt Roper
2022-12-01 23:27   ` Lucas De Marchi
2022-12-01 23:44     ` Matt Roper
2022-12-02  1:18       ` Lucas De Marchi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.