All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] i915: Extract, polish, and document multicast handling
@ 2022-06-15  0:10 ` Matt Roper
  0 siblings, 0 replies; 19+ messages in thread
From: Matt Roper @ 2022-06-15  0:10 UTC (permalink / raw)
  To: intel-gfx; +Cc: harish.chegondi, dri-devel

Multicast/replicated (MCR) registers on Intel hardware are a purely
GT-specific concept.  Rather than leaving MCR register handling spread
across several places throughout the driver (intel_uncore.c, intel_gt.c,
etc.) with confusing combinations of handler functions living in
different namespaces, let's consolidate it all into a single place
(intel_gt_mcr.c) and provide a more consistent and clearly-documented
interface for the rest of the driver to access such registers:

 * intel_gt_mcr_read -- unicast read from specific instance
 * intel_gt_mcr_read_any[_fw] -- unicast read from any non-terminated
   instance
 * intel_gt_mcr_unicast_write -- unicast write to specific instance
 * intel_gt_mcr_multicast_write[_fw] -- multicast write to all instances


v2:
 - Reference the new kerneldoc from i915.rst.  (Jani)
 - Tweak the wording of the documentation for a couple functions to
   clarify the difference between "_fw" and non-"_fw" forms.

Matt Roper (2):
  drm/i915/gt: Move multicast register handling to a dedicated file
  drm/i915/gt: Cleanup interface for MCR operations

 Documentation/gpu/i915.rst                  |  12 +
 drivers/gpu/drm/i915/Makefile               |   1 +
 drivers/gpu/drm/i915/gem/i915_gem_stolen.c  |   3 +-
 drivers/gpu/drm/i915/gt/intel_engine_cs.c   |  36 +-
 drivers/gpu/drm/i915/gt/intel_gt.c          | 297 +-----------
 drivers/gpu/drm/i915/gt/intel_gt.h          |  15 -
 drivers/gpu/drm/i915/gt/intel_gt_debugfs.c  |   3 +-
 drivers/gpu/drm/i915/gt/intel_gt_mcr.c      | 497 ++++++++++++++++++++
 drivers/gpu/drm/i915/gt/intel_gt_mcr.h      |  34 ++
 drivers/gpu/drm/i915/gt/intel_region_lmem.c |   5 +-
 drivers/gpu/drm/i915/gt/intel_workarounds.c |   9 +-
 drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c  |   3 +-
 drivers/gpu/drm/i915/i915_drv.h             |   2 -
 drivers/gpu/drm/i915/intel_uncore.c         | 112 -----
 drivers/gpu/drm/i915/intel_uncore.h         |   8 -
 15 files changed, 577 insertions(+), 460 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/gt/intel_gt_mcr.c
 create mode 100644 drivers/gpu/drm/i915/gt/intel_gt_mcr.h

-- 
2.35.3


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

* [Intel-gfx] [PATCH v2 0/2] i915: Extract, polish, and document multicast handling
@ 2022-06-15  0:10 ` Matt Roper
  0 siblings, 0 replies; 19+ messages in thread
From: Matt Roper @ 2022-06-15  0:10 UTC (permalink / raw)
  To: intel-gfx; +Cc: dri-devel

Multicast/replicated (MCR) registers on Intel hardware are a purely
GT-specific concept.  Rather than leaving MCR register handling spread
across several places throughout the driver (intel_uncore.c, intel_gt.c,
etc.) with confusing combinations of handler functions living in
different namespaces, let's consolidate it all into a single place
(intel_gt_mcr.c) and provide a more consistent and clearly-documented
interface for the rest of the driver to access such registers:

 * intel_gt_mcr_read -- unicast read from specific instance
 * intel_gt_mcr_read_any[_fw] -- unicast read from any non-terminated
   instance
 * intel_gt_mcr_unicast_write -- unicast write to specific instance
 * intel_gt_mcr_multicast_write[_fw] -- multicast write to all instances


v2:
 - Reference the new kerneldoc from i915.rst.  (Jani)
 - Tweak the wording of the documentation for a couple functions to
   clarify the difference between "_fw" and non-"_fw" forms.

Matt Roper (2):
  drm/i915/gt: Move multicast register handling to a dedicated file
  drm/i915/gt: Cleanup interface for MCR operations

 Documentation/gpu/i915.rst                  |  12 +
 drivers/gpu/drm/i915/Makefile               |   1 +
 drivers/gpu/drm/i915/gem/i915_gem_stolen.c  |   3 +-
 drivers/gpu/drm/i915/gt/intel_engine_cs.c   |  36 +-
 drivers/gpu/drm/i915/gt/intel_gt.c          | 297 +-----------
 drivers/gpu/drm/i915/gt/intel_gt.h          |  15 -
 drivers/gpu/drm/i915/gt/intel_gt_debugfs.c  |   3 +-
 drivers/gpu/drm/i915/gt/intel_gt_mcr.c      | 497 ++++++++++++++++++++
 drivers/gpu/drm/i915/gt/intel_gt_mcr.h      |  34 ++
 drivers/gpu/drm/i915/gt/intel_region_lmem.c |   5 +-
 drivers/gpu/drm/i915/gt/intel_workarounds.c |   9 +-
 drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c  |   3 +-
 drivers/gpu/drm/i915/i915_drv.h             |   2 -
 drivers/gpu/drm/i915/intel_uncore.c         | 112 -----
 drivers/gpu/drm/i915/intel_uncore.h         |   8 -
 15 files changed, 577 insertions(+), 460 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/gt/intel_gt_mcr.c
 create mode 100644 drivers/gpu/drm/i915/gt/intel_gt_mcr.h

-- 
2.35.3


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

* [PATCH v2 1/2] drm/i915/gt: Move multicast register handling to a dedicated file
  2022-06-15  0:10 ` [Intel-gfx] " Matt Roper
@ 2022-06-15  0:10   ` Matt Roper
  -1 siblings, 0 replies; 19+ messages in thread
From: Matt Roper @ 2022-06-15  0:10 UTC (permalink / raw)
  To: intel-gfx; +Cc: harish.chegondi, dri-devel

Handling of multicast/replicated registers is spread across intel_gt.c
and intel_uncore.c today.  As multicast handling and the related
steering logic gets more complicated with the addition of new platforms
and new rules it makes sense to centralize it all in one place.

For now the existing functions have been moved to the new .c/.h as-is.
Function renames and updates to operate in a more consistent manner will
be done in subsequent patches.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Acked-by: Jani Nikula <jani.nikula@linux.intel.com>
---
 drivers/gpu/drm/i915/Makefile               |   1 +
 drivers/gpu/drm/i915/gem/i915_gem_stolen.c  |   1 +
 drivers/gpu/drm/i915/gt/intel_engine_cs.c   |   3 +-
 drivers/gpu/drm/i915/gt/intel_gt.c          | 297 +------------
 drivers/gpu/drm/i915/gt/intel_gt.h          |  15 -
 drivers/gpu/drm/i915/gt/intel_gt_debugfs.c  |   1 +
 drivers/gpu/drm/i915/gt/intel_gt_mcr.c      | 448 ++++++++++++++++++++
 drivers/gpu/drm/i915/gt/intel_gt_mcr.h      |  37 ++
 drivers/gpu/drm/i915/gt/intel_region_lmem.c |   1 +
 drivers/gpu/drm/i915/gt/intel_workarounds.c |   1 +
 drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c  |   1 +
 drivers/gpu/drm/i915/i915_drv.h             |   2 -
 drivers/gpu/drm/i915/intel_uncore.c         | 112 -----
 drivers/gpu/drm/i915/intel_uncore.h         |   8 -
 14 files changed, 495 insertions(+), 433 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/gt/intel_gt_mcr.c
 create mode 100644 drivers/gpu/drm/i915/gt/intel_gt_mcr.h

diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index d2b18f03a33c..08f5d0d6e83a 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -103,6 +103,7 @@ gt-y += \
 	gt/intel_gt_debugfs.o \
 	gt/intel_gt_engines_debugfs.o \
 	gt/intel_gt_irq.o \
+	gt/intel_gt_mcr.o \
 	gt/intel_gt_pm.o \
 	gt/intel_gt_pm_debugfs.o \
 	gt/intel_gt_pm_irq.o \
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
index 47b5e0e342ab..da30503d3ca2 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
@@ -13,6 +13,7 @@
 #include "gem/i915_gem_lmem.h"
 #include "gem/i915_gem_region.h"
 #include "gt/intel_gt.h"
+#include "gt/intel_gt_mcr.h"
 #include "gt/intel_region_lmem.h"
 #include "i915_drv.h"
 #include "i915_gem_stolen.h"
diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
index f0acf8518a51..244af1bdb7db 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
@@ -21,8 +21,9 @@
 #include "intel_engine_user.h"
 #include "intel_execlists_submission.h"
 #include "intel_gt.h"
-#include "intel_gt_requests.h"
+#include "intel_gt_mcr.h"
 #include "intel_gt_pm.h"
+#include "intel_gt_requests.h"
 #include "intel_lrc.h"
 #include "intel_lrc_reg.h"
 #include "intel_reset.h"
diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c b/drivers/gpu/drm/i915/gt/intel_gt.c
index f33290358c51..be9877c4b496 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt.c
@@ -17,6 +17,7 @@
 #include "intel_gt_clock_utils.h"
 #include "intel_gt_debugfs.h"
 #include "intel_gt_gmch.h"
+#include "intel_gt_mcr.h"
 #include "intel_gt_pm.h"
 #include "intel_gt_regs.h"
 #include "intel_gt_requests.h"
@@ -102,107 +103,13 @@ int intel_gt_assign_ggtt(struct intel_gt *gt)
 	return gt->ggtt ? 0 : -ENOMEM;
 }
 
-static const char * const intel_steering_types[] = {
-	"L3BANK",
-	"MSLICE",
-	"LNCF",
-	"INSTANCE 0",
-};
-
-static const struct intel_mmio_range icl_l3bank_steering_table[] = {
-	{ 0x00B100, 0x00B3FF },
-	{},
-};
-
-static const struct intel_mmio_range xehpsdv_mslice_steering_table[] = {
-	{ 0x004000, 0x004AFF },
-	{ 0x00C800, 0x00CFFF },
-	{ 0x00DD00, 0x00DDFF },
-	{ 0x00E900, 0x00FFFF }, /* 0xEA00 - OxEFFF is unused */
-	{},
-};
-
-static const struct intel_mmio_range xehpsdv_lncf_steering_table[] = {
-	{ 0x00B000, 0x00B0FF },
-	{ 0x00D800, 0x00D8FF },
-	{},
-};
-
-static const struct intel_mmio_range dg2_lncf_steering_table[] = {
-	{ 0x00B000, 0x00B0FF },
-	{ 0x00D880, 0x00D8FF },
-	{},
-};
-
-/*
- * We have several types of MCR registers on PVC where steering to (0,0)
- * will always provide us with a non-terminated value.  We'll stick them
- * all in the same table for simplicity.
- */
-static const struct intel_mmio_range pvc_instance0_steering_table[] = {
-	{ 0x004000, 0x004AFF },		/* HALF-BSLICE */
-	{ 0x008800, 0x00887F },		/* CC */
-	{ 0x008A80, 0x008AFF },		/* TILEPSMI */
-	{ 0x00B000, 0x00B0FF },		/* HALF-BSLICE */
-	{ 0x00B100, 0x00B3FF },		/* L3BANK */
-	{ 0x00C800, 0x00CFFF },		/* HALF-BSLICE */
-	{ 0x00D800, 0x00D8FF },		/* HALF-BSLICE */
-	{ 0x00DD00, 0x00DDFF },		/* BSLICE */
-	{ 0x00E900, 0x00E9FF },		/* HALF-BSLICE */
-	{ 0x00EC00, 0x00EEFF },		/* HALF-BSLICE */
-	{ 0x00F000, 0x00FFFF },		/* HALF-BSLICE */
-	{ 0x024180, 0x0241FF },		/* HALF-BSLICE */
-	{},
-};
-
 int intel_gt_init_mmio(struct intel_gt *gt)
 {
-	struct drm_i915_private *i915 = gt->i915;
-
 	intel_gt_init_clock_frequency(gt);
 
 	intel_uc_init_mmio(&gt->uc);
 	intel_sseu_info_init(gt);
-
-	/*
-	 * An mslice is unavailable only if both the meml3 for the slice is
-	 * disabled *and* all of the DSS in the slice (quadrant) are disabled.
-	 */
-	if (HAS_MSLICE_STEERING(i915)) {
-		gt->info.mslice_mask =
-			intel_slicemask_from_xehp_dssmask(gt->info.sseu.subslice_mask,
-							  GEN_DSS_PER_MSLICE);
-		gt->info.mslice_mask |=
-			(intel_uncore_read(gt->uncore, GEN10_MIRROR_FUSE3) &
-			 GEN12_MEML3_EN_MASK);
-
-		if (!gt->info.mslice_mask) /* should be impossible! */
-			drm_warn(&i915->drm, "mslice mask all zero!\n");
-	}
-
-	if (IS_PONTEVECCHIO(i915)) {
-		gt->steering_table[INSTANCE0] = pvc_instance0_steering_table;
-	} else if (IS_DG2(i915)) {
-		gt->steering_table[MSLICE] = xehpsdv_mslice_steering_table;
-		gt->steering_table[LNCF] = dg2_lncf_steering_table;
-	} else if (IS_XEHPSDV(i915)) {
-		gt->steering_table[MSLICE] = xehpsdv_mslice_steering_table;
-		gt->steering_table[LNCF] = xehpsdv_lncf_steering_table;
-	} else if (GRAPHICS_VER(i915) >= 11 &&
-		   GRAPHICS_VER_FULL(i915) < IP_VER(12, 50)) {
-		gt->steering_table[L3BANK] = icl_l3bank_steering_table;
-		gt->info.l3bank_mask =
-			~intel_uncore_read(gt->uncore, GEN10_MIRROR_FUSE3) &
-			GEN10_L3BANK_MASK;
-		if (!gt->info.l3bank_mask) /* should be impossible! */
-			drm_warn(&i915->drm, "L3 bank mask is all zero!\n");
-	} else if (GRAPHICS_VER(i915) >= 11) {
-		/*
-		 * We expect all modern platforms to have at least some
-		 * type of steering that needs to be initialized.
-		 */
-		MISSING_CASE(INTEL_INFO(i915)->platform);
-	}
+	intel_gt_mcr_init(gt);
 
 	return intel_engines_init_mmio(gt);
 }
@@ -864,206 +771,6 @@ void intel_gt_driver_late_release_all(struct drm_i915_private *i915)
 	}
 }
 
-/**
- * intel_gt_reg_needs_read_steering - determine whether a register read
- *     requires explicit steering
- * @gt: GT structure
- * @reg: the register to check steering requirements for
- * @type: type of multicast steering to check
- *
- * Determines whether @reg needs explicit steering of a specific type for
- * reads.
- *
- * Returns false if @reg does not belong to a register range of the given
- * steering type, or if the default (subslice-based) steering IDs are suitable
- * for @type steering too.
- */
-static bool intel_gt_reg_needs_read_steering(struct intel_gt *gt,
-					     i915_reg_t reg,
-					     enum intel_steering_type type)
-{
-	const u32 offset = i915_mmio_reg_offset(reg);
-	const struct intel_mmio_range *entry;
-
-	if (likely(!intel_gt_needs_read_steering(gt, type)))
-		return false;
-
-	for (entry = gt->steering_table[type]; entry->end; entry++) {
-		if (offset >= entry->start && offset <= entry->end)
-			return true;
-	}
-
-	return false;
-}
-
-/**
- * intel_gt_get_valid_steering - determines valid IDs for a class of MCR steering
- * @gt: GT structure
- * @type: multicast register type
- * @sliceid: Slice ID returned
- * @subsliceid: Subslice ID returned
- *
- * Determines sliceid and subsliceid values that will steer reads
- * of a specific multicast register class to a valid value.
- */
-static void intel_gt_get_valid_steering(struct intel_gt *gt,
-					enum intel_steering_type type,
-					u8 *sliceid, u8 *subsliceid)
-{
-	switch (type) {
-	case L3BANK:
-		*sliceid = 0;		/* unused */
-		*subsliceid = __ffs(gt->info.l3bank_mask);
-		break;
-	case MSLICE:
-		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
-		*sliceid = __ffs(gt->info.mslice_mask);
-		*subsliceid = 0;	/* unused */
-		break;
-	case LNCF:
-		/*
-		 * An LNCF is always present if its mslice is present, so we
-		 * can safely just steer to LNCF 0 in all cases.
-		 */
-		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
-		*sliceid = __ffs(gt->info.mslice_mask) << 1;
-		*subsliceid = 0;	/* unused */
-		break;
-	case INSTANCE0:
-		/*
-		 * There are a lot of MCR types for which instance (0, 0)
-		 * will always provide a non-terminated value.
-		 */
-		*sliceid = 0;
-		*subsliceid = 0;
-		break;
-	default:
-		MISSING_CASE(type);
-		*sliceid = 0;
-		*subsliceid = 0;
-	}
-}
-
-/**
- * intel_gt_read_register_fw - reads a GT register with support for multicast
- * @gt: GT structure
- * @reg: register to read
- *
- * This function will read a GT register.  If the register is a multicast
- * register, the read will be steered to a valid instance (i.e., one that
- * isn't fused off or powered down by power gating).
- *
- * Returns the value from a valid instance of @reg.
- */
-u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg)
-{
-	int type;
-	u8 sliceid, subsliceid;
-
-	for (type = 0; type < NUM_STEERING_TYPES; type++) {
-		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
-			intel_gt_get_valid_steering(gt, type, &sliceid,
-						    &subsliceid);
-			return intel_uncore_read_with_mcr_steering_fw(gt->uncore,
-								      reg,
-								      sliceid,
-								      subsliceid);
-		}
-	}
-
-	return intel_uncore_read_fw(gt->uncore, reg);
-}
-
-/**
- * intel_gt_get_valid_steering_for_reg - get a valid steering for a register
- * @gt: GT structure
- * @reg: register for which the steering is required
- * @sliceid: return variable for slice steering
- * @subsliceid: return variable for subslice steering
- *
- * This function returns a slice/subslice pair that is guaranteed to work for
- * read steering of the given register. Note that a value will be returned even
- * if the register is not replicated and therefore does not actually require
- * steering.
- */
-void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
-					 u8 *sliceid, u8 *subsliceid)
-{
-	int type;
-
-	for (type = 0; type < NUM_STEERING_TYPES; type++) {
-		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
-			intel_gt_get_valid_steering(gt, type, sliceid,
-						    subsliceid);
-			return;
-		}
-	}
-
-	*sliceid = gt->default_steering.groupid;
-	*subsliceid = gt->default_steering.instanceid;
-}
-
-u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg)
-{
-	int type;
-	u8 sliceid, subsliceid;
-
-	for (type = 0; type < NUM_STEERING_TYPES; type++) {
-		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
-			intel_gt_get_valid_steering(gt, type, &sliceid,
-						    &subsliceid);
-			return intel_uncore_read_with_mcr_steering(gt->uncore,
-								   reg,
-								   sliceid,
-								   subsliceid);
-		}
-	}
-
-	return intel_uncore_read(gt->uncore, reg);
-}
-
-static void report_steering_type(struct drm_printer *p,
-				 struct intel_gt *gt,
-				 enum intel_steering_type type,
-				 bool dump_table)
-{
-	const struct intel_mmio_range *entry;
-	u8 slice, subslice;
-
-	BUILD_BUG_ON(ARRAY_SIZE(intel_steering_types) != NUM_STEERING_TYPES);
-
-	if (!gt->steering_table[type]) {
-		drm_printf(p, "%s steering: uses default steering\n",
-			   intel_steering_types[type]);
-		return;
-	}
-
-	intel_gt_get_valid_steering(gt, type, &slice, &subslice);
-	drm_printf(p, "%s steering: sliceid=0x%x, subsliceid=0x%x\n",
-		   intel_steering_types[type], slice, subslice);
-
-	if (!dump_table)
-		return;
-
-	for (entry = gt->steering_table[type]; entry->end; entry++)
-		drm_printf(p, "\t0x%06x - 0x%06x\n", entry->start, entry->end);
-}
-
-void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
-			      bool dump_table)
-{
-	drm_printf(p, "Default steering: sliceid=0x%x, subsliceid=0x%x\n",
-		   gt->default_steering.groupid,
-		   gt->default_steering.instanceid);
-
-	if (IS_PONTEVECCHIO(gt->i915)) {
-		report_steering_type(p, gt, INSTANCE0, dump_table);
-	} else if (HAS_MSLICE_STEERING(gt->i915)) {
-		report_steering_type(p, gt, MSLICE, dump_table);
-		report_steering_type(p, gt, LNCF, dump_table);
-	}
-}
-
 static int intel_gt_tile_setup(struct intel_gt *gt, phys_addr_t phys_addr)
 {
 	int ret;
diff --git a/drivers/gpu/drm/i915/gt/intel_gt.h b/drivers/gpu/drm/i915/gt/intel_gt.h
index 44c6cb63ccbc..61d30d5c7e90 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt.h
+++ b/drivers/gpu/drm/i915/gt/intel_gt.h
@@ -93,21 +93,6 @@ static inline bool intel_gt_is_wedged(const struct intel_gt *gt)
 	return unlikely(test_bit(I915_WEDGED, &gt->reset.flags));
 }
 
-static inline bool intel_gt_needs_read_steering(struct intel_gt *gt,
-						enum intel_steering_type type)
-{
-	return gt->steering_table[type];
-}
-
-void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
-					 u8 *sliceid, u8 *subsliceid);
-
-u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg);
-u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg);
-
-void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
-			      bool dump_table);
-
 int intel_gt_probe_all(struct drm_i915_private *i915);
 int intel_gt_tiles_init(struct drm_i915_private *i915);
 void intel_gt_release_all(struct drm_i915_private *i915);
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
index d886fdc2c694..ea07f2bb846f 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
@@ -9,6 +9,7 @@
 #include "intel_gt.h"
 #include "intel_gt_debugfs.h"
 #include "intel_gt_engines_debugfs.h"
+#include "intel_gt_mcr.h"
 #include "intel_gt_pm_debugfs.h"
 #include "intel_sseu_debugfs.h"
 #include "pxp/intel_pxp_debugfs.h"
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
new file mode 100644
index 000000000000..1279a1fe1001
--- /dev/null
+++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
@@ -0,0 +1,448 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2022 Intel Corporation
+ */
+
+#include "i915_drv.h"
+
+#include "intel_gt_mcr.h"
+#include "intel_gt_regs.h"
+
+/**
+ * DOC: GT Multicast/Replicated (MCR) Register Support
+ *
+ * Some GT registers are designed as "multicast" or "replicated" registers:
+ * multiple instances of the same register share a single MMIO offset.  MCR
+ * registers are generally used when the hardware needs to potentially track
+ * independent values of a register per hardware unit (e.g., per-subslice,
+ * per-L3bank, etc.).  The specific types of replication that exist vary
+ * per-platform.
+ *
+ * MMIO accesses to MCR registers are controlled according to the settings
+ * programmed in the platform's MCR_SELECTOR register(s).  MMIO writes to MCR
+ * registers can be done in either a (i.e., a single write updates all
+ * instances of the register to the same value) or unicast (a write updates only
+ * one specific instance).  Reads of MCR registers always operate in a unicast
+ * manner regardless of how the multicast/unicast bit is set in MCR_SELECTOR.
+ * Selection of a specific MCR instance for unicast operations is referred to
+ * as "steering."
+ *
+ * If MCR register operations are steered toward a hardware unit that is
+ * fused off or currently powered down due to power gating, the MMIO operation
+ * is "terminated" by the hardware.  Terminated read operations will return a
+ * value of zero and terminated unicast write operations will be silently
+ * ignored.
+ */
+
+#define HAS_MSLICE_STEERING(dev_priv)	(INTEL_INFO(dev_priv)->has_mslice_steering)
+
+static const char * const intel_steering_types[] = {
+	"L3BANK",
+	"MSLICE",
+	"LNCF",
+	"INSTANCE 0",
+};
+
+static const struct intel_mmio_range icl_l3bank_steering_table[] = {
+	{ 0x00B100, 0x00B3FF },
+	{},
+};
+
+static const struct intel_mmio_range xehpsdv_mslice_steering_table[] = {
+	{ 0x004000, 0x004AFF },
+	{ 0x00C800, 0x00CFFF },
+	{ 0x00DD00, 0x00DDFF },
+	{ 0x00E900, 0x00FFFF }, /* 0xEA00 - OxEFFF is unused */
+	{},
+};
+
+static const struct intel_mmio_range xehpsdv_lncf_steering_table[] = {
+	{ 0x00B000, 0x00B0FF },
+	{ 0x00D800, 0x00D8FF },
+	{},
+};
+
+static const struct intel_mmio_range dg2_lncf_steering_table[] = {
+	{ 0x00B000, 0x00B0FF },
+	{ 0x00D880, 0x00D8FF },
+	{},
+};
+
+/*
+ * We have several types of MCR registers on PVC where steering to (0,0)
+ * will always provide us with a non-terminated value.  We'll stick them
+ * all in the same table for simplicity.
+ */
+static const struct intel_mmio_range pvc_instance0_steering_table[] = {
+	{ 0x004000, 0x004AFF },		/* HALF-BSLICE */
+	{ 0x008800, 0x00887F },		/* CC */
+	{ 0x008A80, 0x008AFF },		/* TILEPSMI */
+	{ 0x00B000, 0x00B0FF },		/* HALF-BSLICE */
+	{ 0x00B100, 0x00B3FF },		/* L3BANK */
+	{ 0x00C800, 0x00CFFF },		/* HALF-BSLICE */
+	{ 0x00D800, 0x00D8FF },		/* HALF-BSLICE */
+	{ 0x00DD00, 0x00DDFF },		/* BSLICE */
+	{ 0x00E900, 0x00E9FF },		/* HALF-BSLICE */
+	{ 0x00EC00, 0x00EEFF },		/* HALF-BSLICE */
+	{ 0x00F000, 0x00FFFF },		/* HALF-BSLICE */
+	{ 0x024180, 0x0241FF },		/* HALF-BSLICE */
+	{},
+};
+
+void intel_gt_mcr_init(struct intel_gt *gt)
+{
+	struct drm_i915_private *i915 = gt->i915;
+
+	/*
+	 * An mslice is unavailable only if both the meml3 for the slice is
+	 * disabled *and* all of the DSS in the slice (quadrant) are disabled.
+	 */
+	if (HAS_MSLICE_STEERING(i915)) {
+		gt->info.mslice_mask =
+			intel_slicemask_from_xehp_dssmask(gt->info.sseu.subslice_mask,
+							  GEN_DSS_PER_MSLICE);
+		gt->info.mslice_mask |=
+			(intel_uncore_read(gt->uncore, GEN10_MIRROR_FUSE3) &
+			 GEN12_MEML3_EN_MASK);
+
+		if (!gt->info.mslice_mask) /* should be impossible! */
+			drm_warn(&i915->drm, "mslice mask all zero!\n");
+	}
+
+	if (IS_PONTEVECCHIO(i915)) {
+		gt->steering_table[INSTANCE0] = pvc_instance0_steering_table;
+	} else if (IS_DG2(i915)) {
+		gt->steering_table[MSLICE] = xehpsdv_mslice_steering_table;
+		gt->steering_table[LNCF] = dg2_lncf_steering_table;
+	} else if (IS_XEHPSDV(i915)) {
+		gt->steering_table[MSLICE] = xehpsdv_mslice_steering_table;
+		gt->steering_table[LNCF] = xehpsdv_lncf_steering_table;
+	} else if (GRAPHICS_VER(i915) >= 11 &&
+		   GRAPHICS_VER_FULL(i915) < IP_VER(12, 50)) {
+		gt->steering_table[L3BANK] = icl_l3bank_steering_table;
+		gt->info.l3bank_mask =
+			~intel_uncore_read(gt->uncore, GEN10_MIRROR_FUSE3) &
+			GEN10_L3BANK_MASK;
+		if (!gt->info.l3bank_mask) /* should be impossible! */
+			drm_warn(&i915->drm, "L3 bank mask is all zero!\n");
+	} else if (GRAPHICS_VER(i915) >= 11) {
+		/*
+		 * We expect all modern platforms to have at least some
+		 * type of steering that needs to be initialized.
+		 */
+		MISSING_CASE(INTEL_INFO(i915)->platform);
+	}
+}
+
+/**
+ * uncore_rw_with_mcr_steering_fw - Access a register after programming
+ *				    the MCR selector register.
+ * @uncore: pointer to struct intel_uncore
+ * @reg: register being accessed
+ * @rw_flag: FW_REG_READ for read access or FW_REG_WRITE for write access
+ * @slice: slice number (ignored for multi-cast write)
+ * @subslice: sub-slice number (ignored for multi-cast write)
+ * @value: register value to be written (ignored for read)
+ *
+ * Return: 0 for write access. register value for read access.
+ *
+ * Caller needs to make sure the relevant forcewake wells are up.
+ */
+static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
+					  i915_reg_t reg, u8 rw_flag,
+					  int slice, int subslice, u32 value)
+{
+	u32 mcr_mask, mcr_ss, mcr, old_mcr, val = 0;
+
+	lockdep_assert_held(&uncore->lock);
+
+	if (GRAPHICS_VER(uncore->i915) >= 11) {
+		mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
+		mcr_ss = GEN11_MCR_SLICE(slice) | GEN11_MCR_SUBSLICE(subslice);
+
+		/*
+		 * Wa_22013088509
+		 *
+		 * The setting of the multicast/unicast bit usually wouldn't
+		 * matter for read operations (which always return the value
+		 * from a single register instance regardless of how that bit
+		 * is set), but some platforms have a workaround requiring us
+		 * to remain in multicast mode for reads.  There's no real
+		 * downside to this, so we'll just go ahead and do so on all
+		 * platforms; we'll only clear the multicast bit from the mask
+		 * when exlicitly doing a write operation.
+		 */
+		if (rw_flag == FW_REG_WRITE)
+			mcr_mask |= GEN11_MCR_MULTICAST;
+	} else {
+		mcr_mask = GEN8_MCR_SLICE_MASK | GEN8_MCR_SUBSLICE_MASK;
+		mcr_ss = GEN8_MCR_SLICE(slice) | GEN8_MCR_SUBSLICE(subslice);
+	}
+
+	old_mcr = mcr = intel_uncore_read_fw(uncore, GEN8_MCR_SELECTOR);
+
+	mcr &= ~mcr_mask;
+	mcr |= mcr_ss;
+	intel_uncore_write_fw(uncore, GEN8_MCR_SELECTOR, mcr);
+
+	if (rw_flag == FW_REG_READ)
+		val = intel_uncore_read_fw(uncore, reg);
+	else
+		intel_uncore_write_fw(uncore, reg, value);
+
+	mcr &= ~mcr_mask;
+	mcr |= old_mcr & mcr_mask;
+
+	intel_uncore_write_fw(uncore, GEN8_MCR_SELECTOR, mcr);
+
+	return val;
+}
+
+static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
+				       i915_reg_t reg, u8 rw_flag,
+				       int slice, int subslice,
+				       u32 value)
+{
+	enum forcewake_domains fw_domains;
+	u32 val;
+
+	fw_domains = intel_uncore_forcewake_for_reg(uncore, reg,
+						    rw_flag);
+	fw_domains |= intel_uncore_forcewake_for_reg(uncore,
+						     GEN8_MCR_SELECTOR,
+						     FW_REG_READ | FW_REG_WRITE);
+
+	spin_lock_irq(&uncore->lock);
+	intel_uncore_forcewake_get__locked(uncore, fw_domains);
+
+	val = uncore_rw_with_mcr_steering_fw(uncore, reg, rw_flag,
+					     slice, subslice, value);
+
+	intel_uncore_forcewake_put__locked(uncore, fw_domains);
+	spin_unlock_irq(&uncore->lock);
+
+	return val;
+}
+
+u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
+					   i915_reg_t reg, int slice, int subslice)
+{
+	return uncore_rw_with_mcr_steering_fw(uncore, reg, FW_REG_READ,
+					      slice, subslice, 0);
+}
+
+u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
+					i915_reg_t reg, int slice, int subslice)
+{
+	return uncore_rw_with_mcr_steering(uncore, reg, FW_REG_READ,
+					   slice, subslice, 0);
+}
+
+void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
+					  i915_reg_t reg, u32 value,
+					  int slice, int subslice)
+{
+	uncore_rw_with_mcr_steering(uncore, reg, FW_REG_WRITE,
+				    slice, subslice, value);
+}
+
+/**
+ * intel_gt_reg_needs_read_steering - determine whether a register read
+ *     requires explicit steering
+ * @gt: GT structure
+ * @reg: the register to check steering requirements for
+ * @type: type of multicast steering to check
+ *
+ * Determines whether @reg needs explicit steering of a specific type for
+ * reads.
+ *
+ * Returns false if @reg does not belong to a register range of the given
+ * steering type, or if the default (subslice-based) steering IDs are suitable
+ * for @type steering too.
+ */
+static bool intel_gt_reg_needs_read_steering(struct intel_gt *gt,
+					     i915_reg_t reg,
+					     enum intel_steering_type type)
+{
+	const u32 offset = i915_mmio_reg_offset(reg);
+	const struct intel_mmio_range *entry;
+
+	if (likely(!intel_gt_needs_read_steering(gt, type)))
+		return false;
+
+	for (entry = gt->steering_table[type]; entry->end; entry++) {
+		if (offset >= entry->start && offset <= entry->end)
+			return true;
+	}
+
+	return false;
+}
+
+/**
+ * intel_gt_get_valid_steering - determines valid IDs for a class of MCR steering
+ * @gt: GT structure
+ * @type: multicast register type
+ * @sliceid: Slice ID returned
+ * @subsliceid: Subslice ID returned
+ *
+ * Determines sliceid and subsliceid values that will steer reads
+ * of a specific multicast register class to a valid value.
+ */
+static void intel_gt_get_valid_steering(struct intel_gt *gt,
+					enum intel_steering_type type,
+					u8 *sliceid, u8 *subsliceid)
+{
+	switch (type) {
+	case L3BANK:
+		*sliceid = 0;		/* unused */
+		*subsliceid = __ffs(gt->info.l3bank_mask);
+		break;
+	case MSLICE:
+		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
+		*sliceid = __ffs(gt->info.mslice_mask);
+		*subsliceid = 0;	/* unused */
+		break;
+	case LNCF:
+		/*
+		 * An LNCF is always present if its mslice is present, so we
+		 * can safely just steer to LNCF 0 in all cases.
+		 */
+		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
+		*sliceid = __ffs(gt->info.mslice_mask) << 1;
+		*subsliceid = 0;	/* unused */
+		break;
+	case INSTANCE0:
+		/*
+		 * There are a lot of MCR types for which instance (0, 0)
+		 * will always provide a non-terminated value.
+		 */
+		*sliceid = 0;
+		*subsliceid = 0;
+		break;
+	default:
+		MISSING_CASE(type);
+		*sliceid = 0;
+		*subsliceid = 0;
+	}
+}
+
+/**
+ * intel_gt_get_valid_steering_for_reg - get a valid steering for a register
+ * @gt: GT structure
+ * @reg: register for which the steering is required
+ * @sliceid: return variable for slice steering
+ * @subsliceid: return variable for subslice steering
+ *
+ * This function returns a slice/subslice pair that is guaranteed to work for
+ * read steering of the given register. Note that a value will be returned even
+ * if the register is not replicated and therefore does not actually require
+ * steering.
+ */
+void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
+					 u8 *sliceid, u8 *subsliceid)
+{
+	int type;
+
+	for (type = 0; type < NUM_STEERING_TYPES; type++) {
+		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
+			intel_gt_get_valid_steering(gt, type, sliceid,
+						    subsliceid);
+			return;
+		}
+	}
+
+	*sliceid = gt->default_steering.groupid;
+	*subsliceid = gt->default_steering.instanceid;
+}
+
+/**
+ * intel_gt_read_register_fw - reads a GT register with support for multicast
+ * @gt: GT structure
+ * @reg: register to read
+ *
+ * This function will read a GT register.  If the register is a multicast
+ * register, the read will be steered to a valid instance (i.e., one that
+ * isn't fused off or powered down by power gating).
+ *
+ * Returns the value from a valid instance of @reg.
+ */
+u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg)
+{
+	int type;
+	u8 sliceid, subsliceid;
+
+	for (type = 0; type < NUM_STEERING_TYPES; type++) {
+		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
+			intel_gt_get_valid_steering(gt, type, &sliceid,
+						    &subsliceid);
+			return intel_uncore_read_with_mcr_steering_fw(gt->uncore,
+								      reg,
+								      sliceid,
+								      subsliceid);
+		}
+	}
+
+	return intel_uncore_read_fw(gt->uncore, reg);
+}
+
+u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg)
+{
+	int type;
+	u8 sliceid, subsliceid;
+
+	for (type = 0; type < NUM_STEERING_TYPES; type++) {
+		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
+			intel_gt_get_valid_steering(gt, type, &sliceid,
+						    &subsliceid);
+			return intel_uncore_read_with_mcr_steering(gt->uncore,
+								   reg,
+								   sliceid,
+								   subsliceid);
+		}
+	}
+
+	return intel_uncore_read(gt->uncore, reg);
+}
+
+static void report_steering_type(struct drm_printer *p,
+				 struct intel_gt *gt,
+				 enum intel_steering_type type,
+				 bool dump_table)
+{
+	const struct intel_mmio_range *entry;
+	u8 slice, subslice;
+
+	BUILD_BUG_ON(ARRAY_SIZE(intel_steering_types) != NUM_STEERING_TYPES);
+
+	if (!gt->steering_table[type]) {
+		drm_printf(p, "%s steering: uses default steering\n",
+			   intel_steering_types[type]);
+		return;
+	}
+
+	intel_gt_get_valid_steering(gt, type, &slice, &subslice);
+	drm_printf(p, "%s steering: sliceid=0x%x, subsliceid=0x%x\n",
+		   intel_steering_types[type], slice, subslice);
+
+	if (!dump_table)
+		return;
+
+	for (entry = gt->steering_table[type]; entry->end; entry++)
+		drm_printf(p, "\t0x%06x - 0x%06x\n", entry->start, entry->end);
+}
+
+void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
+			      bool dump_table)
+{
+	drm_printf(p, "Default steering: sliceid=0x%x, subsliceid=0x%x\n",
+		   gt->default_steering.groupid,
+		   gt->default_steering.instanceid);
+
+	if (IS_PONTEVECCHIO(gt->i915)) {
+		report_steering_type(p, gt, INSTANCE0, dump_table);
+	} else if (HAS_MSLICE_STEERING(gt->i915)) {
+		report_steering_type(p, gt, MSLICE, dump_table);
+		report_steering_type(p, gt, LNCF, dump_table);
+	}
+}
+
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.h b/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
new file mode 100644
index 000000000000..b570c1571243
--- /dev/null
+++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2022 Intel Corporation
+ */
+
+#ifndef __INTEL_GT_MCR__
+#define __INTEL_GT_MCR__
+
+#include "intel_gt_types.h"
+
+void intel_gt_mcr_init(struct intel_gt *gt);
+
+u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
+					   i915_reg_t reg,
+					   int slice, int subslice);
+u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
+					i915_reg_t reg,	int slice, int subslice);
+void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
+					  i915_reg_t reg, u32 value,
+					  int slice, int subslice);
+
+u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg);
+u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg);
+
+static inline bool intel_gt_needs_read_steering(struct intel_gt *gt,
+						enum intel_steering_type type)
+{
+	return gt->steering_table[type];
+}
+
+void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
+					 u8 *sliceid, u8 *subsliceid);
+
+void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
+			      bool dump_table);
+
+#endif /* __INTEL_GT_MCR__ */
diff --git a/drivers/gpu/drm/i915/gt/intel_region_lmem.c b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
index e9c12e0d6f59..1f4e7237a924 100644
--- a/drivers/gpu/drm/i915/gt/intel_region_lmem.c
+++ b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
@@ -12,6 +12,7 @@
 #include "gem/i915_gem_region.h"
 #include "gem/i915_gem_ttm.h"
 #include "gt/intel_gt.h"
+#include "gt/intel_gt_mcr.h"
 #include "gt/intel_gt_regs.h"
 
 static int
diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
index 1e982ac931dc..97d7f30b1229 100644
--- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
+++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
@@ -9,6 +9,7 @@
 #include "intel_engine_regs.h"
 #include "intel_gpu_commands.h"
 #include "intel_gt.h"
+#include "intel_gt_mcr.h"
 #include "intel_gt_regs.h"
 #include "intel_ring.h"
 #include "intel_workarounds.h"
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
index bb197610fd5b..dea138d78111 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
@@ -7,6 +7,7 @@
 
 #include "gt/intel_engine_regs.h"
 #include "gt/intel_gt.h"
+#include "gt/intel_gt_mcr.h"
 #include "gt/intel_gt_regs.h"
 #include "gt/intel_lrc.h"
 #include "gt/shmem_utils.h"
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 9805c6e6d4da..5cf80fae8baa 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1282,8 +1282,6 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
 #define HAS_RUNTIME_PM(dev_priv) (INTEL_INFO(dev_priv)->has_runtime_pm)
 #define HAS_64BIT_RELOC(dev_priv) (INTEL_INFO(dev_priv)->has_64bit_reloc)
 
-#define HAS_MSLICE_STEERING(dev_priv)	(INTEL_INFO(dev_priv)->has_mslice_steering)
-
 /*
  * Set this flag, when platform requires 64K GTT page sizes or larger for
  * device local memory access.
diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
index 33304eb987e4..a852c471d1b3 100644
--- a/drivers/gpu/drm/i915/intel_uncore.c
+++ b/drivers/gpu/drm/i915/intel_uncore.c
@@ -2644,118 +2644,6 @@ intel_uncore_forcewake_for_reg(struct intel_uncore *uncore,
 	return fw_domains;
 }
 
-/**
- * uncore_rw_with_mcr_steering_fw - Access a register after programming
- *				    the MCR selector register.
- * @uncore: pointer to struct intel_uncore
- * @reg: register being accessed
- * @rw_flag: FW_REG_READ for read access or FW_REG_WRITE for write access
- * @slice: slice number (ignored for multi-cast write)
- * @subslice: sub-slice number (ignored for multi-cast write)
- * @value: register value to be written (ignored for read)
- *
- * Return: 0 for write access. register value for read access.
- *
- * Caller needs to make sure the relevant forcewake wells are up.
- */
-static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
-					  i915_reg_t reg, u8 rw_flag,
-					  int slice, int subslice, u32 value)
-{
-	u32 mcr_mask, mcr_ss, mcr, old_mcr, val = 0;
-
-	lockdep_assert_held(&uncore->lock);
-
-	if (GRAPHICS_VER(uncore->i915) >= 11) {
-		mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
-		mcr_ss = GEN11_MCR_SLICE(slice) | GEN11_MCR_SUBSLICE(subslice);
-
-		/*
-		 * Wa_22013088509
-		 *
-		 * The setting of the multicast/unicast bit usually wouldn't
-		 * matter for read operations (which always return the value
-		 * from a single register instance regardless of how that bit
-		 * is set), but some platforms have a workaround requiring us
-		 * to remain in multicast mode for reads.  There's no real
-		 * downside to this, so we'll just go ahead and do so on all
-		 * platforms; we'll only clear the multicast bit from the mask
-		 * when exlicitly doing a write operation.
-		 */
-		if (rw_flag == FW_REG_WRITE)
-			mcr_mask |= GEN11_MCR_MULTICAST;
-	} else {
-		mcr_mask = GEN8_MCR_SLICE_MASK | GEN8_MCR_SUBSLICE_MASK;
-		mcr_ss = GEN8_MCR_SLICE(slice) | GEN8_MCR_SUBSLICE(subslice);
-	}
-
-	old_mcr = mcr = intel_uncore_read_fw(uncore, GEN8_MCR_SELECTOR);
-
-	mcr &= ~mcr_mask;
-	mcr |= mcr_ss;
-	intel_uncore_write_fw(uncore, GEN8_MCR_SELECTOR, mcr);
-
-	if (rw_flag == FW_REG_READ)
-		val = intel_uncore_read_fw(uncore, reg);
-	else
-		intel_uncore_write_fw(uncore, reg, value);
-
-	mcr &= ~mcr_mask;
-	mcr |= old_mcr & mcr_mask;
-
-	intel_uncore_write_fw(uncore, GEN8_MCR_SELECTOR, mcr);
-
-	return val;
-}
-
-static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
-				       i915_reg_t reg, u8 rw_flag,
-				       int slice, int subslice,
-				       u32 value)
-{
-	enum forcewake_domains fw_domains;
-	u32 val;
-
-	fw_domains = intel_uncore_forcewake_for_reg(uncore, reg,
-						    rw_flag);
-	fw_domains |= intel_uncore_forcewake_for_reg(uncore,
-						     GEN8_MCR_SELECTOR,
-						     FW_REG_READ | FW_REG_WRITE);
-
-	spin_lock_irq(&uncore->lock);
-	intel_uncore_forcewake_get__locked(uncore, fw_domains);
-
-	val = uncore_rw_with_mcr_steering_fw(uncore, reg, rw_flag,
-					     slice, subslice, value);
-
-	intel_uncore_forcewake_put__locked(uncore, fw_domains);
-	spin_unlock_irq(&uncore->lock);
-
-	return val;
-}
-
-u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
-					   i915_reg_t reg, int slice, int subslice)
-{
-	return uncore_rw_with_mcr_steering_fw(uncore, reg, FW_REG_READ,
-					      slice, subslice, 0);
-}
-
-u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
-					i915_reg_t reg, int slice, int subslice)
-{
-	return uncore_rw_with_mcr_steering(uncore, reg, FW_REG_READ,
-					   slice, subslice, 0);
-}
-
-void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
-					  i915_reg_t reg, u32 value,
-					  int slice, int subslice)
-{
-	uncore_rw_with_mcr_steering(uncore, reg, FW_REG_WRITE,
-				    slice, subslice, value);
-}
-
 #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
 #include "selftests/mock_uncore.c"
 #include "selftests/intel_uncore.c"
diff --git a/drivers/gpu/drm/i915/intel_uncore.h b/drivers/gpu/drm/i915/intel_uncore.h
index 52fe3d89dd2b..b1fa912a65e7 100644
--- a/drivers/gpu/drm/i915/intel_uncore.h
+++ b/drivers/gpu/drm/i915/intel_uncore.h
@@ -210,14 +210,6 @@ intel_uncore_has_fifo(const struct intel_uncore *uncore)
 	return uncore->flags & UNCORE_HAS_FIFO;
 }
 
-u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
-					   i915_reg_t reg,
-					   int slice, int subslice);
-u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
-					i915_reg_t reg,	int slice, int subslice);
-void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
-					  i915_reg_t reg, u32 value,
-					  int slice, int subslice);
 void
 intel_uncore_mmio_debug_init_early(struct intel_uncore_mmio_debug *mmio_debug);
 void intel_uncore_init_early(struct intel_uncore *uncore,
-- 
2.35.3


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

* [Intel-gfx] [PATCH v2 1/2] drm/i915/gt: Move multicast register handling to a dedicated file
@ 2022-06-15  0:10   ` Matt Roper
  0 siblings, 0 replies; 19+ messages in thread
From: Matt Roper @ 2022-06-15  0:10 UTC (permalink / raw)
  To: intel-gfx; +Cc: dri-devel

Handling of multicast/replicated registers is spread across intel_gt.c
and intel_uncore.c today.  As multicast handling and the related
steering logic gets more complicated with the addition of new platforms
and new rules it makes sense to centralize it all in one place.

For now the existing functions have been moved to the new .c/.h as-is.
Function renames and updates to operate in a more consistent manner will
be done in subsequent patches.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Acked-by: Jani Nikula <jani.nikula@linux.intel.com>
---
 drivers/gpu/drm/i915/Makefile               |   1 +
 drivers/gpu/drm/i915/gem/i915_gem_stolen.c  |   1 +
 drivers/gpu/drm/i915/gt/intel_engine_cs.c   |   3 +-
 drivers/gpu/drm/i915/gt/intel_gt.c          | 297 +------------
 drivers/gpu/drm/i915/gt/intel_gt.h          |  15 -
 drivers/gpu/drm/i915/gt/intel_gt_debugfs.c  |   1 +
 drivers/gpu/drm/i915/gt/intel_gt_mcr.c      | 448 ++++++++++++++++++++
 drivers/gpu/drm/i915/gt/intel_gt_mcr.h      |  37 ++
 drivers/gpu/drm/i915/gt/intel_region_lmem.c |   1 +
 drivers/gpu/drm/i915/gt/intel_workarounds.c |   1 +
 drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c  |   1 +
 drivers/gpu/drm/i915/i915_drv.h             |   2 -
 drivers/gpu/drm/i915/intel_uncore.c         | 112 -----
 drivers/gpu/drm/i915/intel_uncore.h         |   8 -
 14 files changed, 495 insertions(+), 433 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/gt/intel_gt_mcr.c
 create mode 100644 drivers/gpu/drm/i915/gt/intel_gt_mcr.h

diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index d2b18f03a33c..08f5d0d6e83a 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -103,6 +103,7 @@ gt-y += \
 	gt/intel_gt_debugfs.o \
 	gt/intel_gt_engines_debugfs.o \
 	gt/intel_gt_irq.o \
+	gt/intel_gt_mcr.o \
 	gt/intel_gt_pm.o \
 	gt/intel_gt_pm_debugfs.o \
 	gt/intel_gt_pm_irq.o \
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
index 47b5e0e342ab..da30503d3ca2 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
@@ -13,6 +13,7 @@
 #include "gem/i915_gem_lmem.h"
 #include "gem/i915_gem_region.h"
 #include "gt/intel_gt.h"
+#include "gt/intel_gt_mcr.h"
 #include "gt/intel_region_lmem.h"
 #include "i915_drv.h"
 #include "i915_gem_stolen.h"
diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
index f0acf8518a51..244af1bdb7db 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
@@ -21,8 +21,9 @@
 #include "intel_engine_user.h"
 #include "intel_execlists_submission.h"
 #include "intel_gt.h"
-#include "intel_gt_requests.h"
+#include "intel_gt_mcr.h"
 #include "intel_gt_pm.h"
+#include "intel_gt_requests.h"
 #include "intel_lrc.h"
 #include "intel_lrc_reg.h"
 #include "intel_reset.h"
diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c b/drivers/gpu/drm/i915/gt/intel_gt.c
index f33290358c51..be9877c4b496 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt.c
@@ -17,6 +17,7 @@
 #include "intel_gt_clock_utils.h"
 #include "intel_gt_debugfs.h"
 #include "intel_gt_gmch.h"
+#include "intel_gt_mcr.h"
 #include "intel_gt_pm.h"
 #include "intel_gt_regs.h"
 #include "intel_gt_requests.h"
@@ -102,107 +103,13 @@ int intel_gt_assign_ggtt(struct intel_gt *gt)
 	return gt->ggtt ? 0 : -ENOMEM;
 }
 
-static const char * const intel_steering_types[] = {
-	"L3BANK",
-	"MSLICE",
-	"LNCF",
-	"INSTANCE 0",
-};
-
-static const struct intel_mmio_range icl_l3bank_steering_table[] = {
-	{ 0x00B100, 0x00B3FF },
-	{},
-};
-
-static const struct intel_mmio_range xehpsdv_mslice_steering_table[] = {
-	{ 0x004000, 0x004AFF },
-	{ 0x00C800, 0x00CFFF },
-	{ 0x00DD00, 0x00DDFF },
-	{ 0x00E900, 0x00FFFF }, /* 0xEA00 - OxEFFF is unused */
-	{},
-};
-
-static const struct intel_mmio_range xehpsdv_lncf_steering_table[] = {
-	{ 0x00B000, 0x00B0FF },
-	{ 0x00D800, 0x00D8FF },
-	{},
-};
-
-static const struct intel_mmio_range dg2_lncf_steering_table[] = {
-	{ 0x00B000, 0x00B0FF },
-	{ 0x00D880, 0x00D8FF },
-	{},
-};
-
-/*
- * We have several types of MCR registers on PVC where steering to (0,0)
- * will always provide us with a non-terminated value.  We'll stick them
- * all in the same table for simplicity.
- */
-static const struct intel_mmio_range pvc_instance0_steering_table[] = {
-	{ 0x004000, 0x004AFF },		/* HALF-BSLICE */
-	{ 0x008800, 0x00887F },		/* CC */
-	{ 0x008A80, 0x008AFF },		/* TILEPSMI */
-	{ 0x00B000, 0x00B0FF },		/* HALF-BSLICE */
-	{ 0x00B100, 0x00B3FF },		/* L3BANK */
-	{ 0x00C800, 0x00CFFF },		/* HALF-BSLICE */
-	{ 0x00D800, 0x00D8FF },		/* HALF-BSLICE */
-	{ 0x00DD00, 0x00DDFF },		/* BSLICE */
-	{ 0x00E900, 0x00E9FF },		/* HALF-BSLICE */
-	{ 0x00EC00, 0x00EEFF },		/* HALF-BSLICE */
-	{ 0x00F000, 0x00FFFF },		/* HALF-BSLICE */
-	{ 0x024180, 0x0241FF },		/* HALF-BSLICE */
-	{},
-};
-
 int intel_gt_init_mmio(struct intel_gt *gt)
 {
-	struct drm_i915_private *i915 = gt->i915;
-
 	intel_gt_init_clock_frequency(gt);
 
 	intel_uc_init_mmio(&gt->uc);
 	intel_sseu_info_init(gt);
-
-	/*
-	 * An mslice is unavailable only if both the meml3 for the slice is
-	 * disabled *and* all of the DSS in the slice (quadrant) are disabled.
-	 */
-	if (HAS_MSLICE_STEERING(i915)) {
-		gt->info.mslice_mask =
-			intel_slicemask_from_xehp_dssmask(gt->info.sseu.subslice_mask,
-							  GEN_DSS_PER_MSLICE);
-		gt->info.mslice_mask |=
-			(intel_uncore_read(gt->uncore, GEN10_MIRROR_FUSE3) &
-			 GEN12_MEML3_EN_MASK);
-
-		if (!gt->info.mslice_mask) /* should be impossible! */
-			drm_warn(&i915->drm, "mslice mask all zero!\n");
-	}
-
-	if (IS_PONTEVECCHIO(i915)) {
-		gt->steering_table[INSTANCE0] = pvc_instance0_steering_table;
-	} else if (IS_DG2(i915)) {
-		gt->steering_table[MSLICE] = xehpsdv_mslice_steering_table;
-		gt->steering_table[LNCF] = dg2_lncf_steering_table;
-	} else if (IS_XEHPSDV(i915)) {
-		gt->steering_table[MSLICE] = xehpsdv_mslice_steering_table;
-		gt->steering_table[LNCF] = xehpsdv_lncf_steering_table;
-	} else if (GRAPHICS_VER(i915) >= 11 &&
-		   GRAPHICS_VER_FULL(i915) < IP_VER(12, 50)) {
-		gt->steering_table[L3BANK] = icl_l3bank_steering_table;
-		gt->info.l3bank_mask =
-			~intel_uncore_read(gt->uncore, GEN10_MIRROR_FUSE3) &
-			GEN10_L3BANK_MASK;
-		if (!gt->info.l3bank_mask) /* should be impossible! */
-			drm_warn(&i915->drm, "L3 bank mask is all zero!\n");
-	} else if (GRAPHICS_VER(i915) >= 11) {
-		/*
-		 * We expect all modern platforms to have at least some
-		 * type of steering that needs to be initialized.
-		 */
-		MISSING_CASE(INTEL_INFO(i915)->platform);
-	}
+	intel_gt_mcr_init(gt);
 
 	return intel_engines_init_mmio(gt);
 }
@@ -864,206 +771,6 @@ void intel_gt_driver_late_release_all(struct drm_i915_private *i915)
 	}
 }
 
-/**
- * intel_gt_reg_needs_read_steering - determine whether a register read
- *     requires explicit steering
- * @gt: GT structure
- * @reg: the register to check steering requirements for
- * @type: type of multicast steering to check
- *
- * Determines whether @reg needs explicit steering of a specific type for
- * reads.
- *
- * Returns false if @reg does not belong to a register range of the given
- * steering type, or if the default (subslice-based) steering IDs are suitable
- * for @type steering too.
- */
-static bool intel_gt_reg_needs_read_steering(struct intel_gt *gt,
-					     i915_reg_t reg,
-					     enum intel_steering_type type)
-{
-	const u32 offset = i915_mmio_reg_offset(reg);
-	const struct intel_mmio_range *entry;
-
-	if (likely(!intel_gt_needs_read_steering(gt, type)))
-		return false;
-
-	for (entry = gt->steering_table[type]; entry->end; entry++) {
-		if (offset >= entry->start && offset <= entry->end)
-			return true;
-	}
-
-	return false;
-}
-
-/**
- * intel_gt_get_valid_steering - determines valid IDs for a class of MCR steering
- * @gt: GT structure
- * @type: multicast register type
- * @sliceid: Slice ID returned
- * @subsliceid: Subslice ID returned
- *
- * Determines sliceid and subsliceid values that will steer reads
- * of a specific multicast register class to a valid value.
- */
-static void intel_gt_get_valid_steering(struct intel_gt *gt,
-					enum intel_steering_type type,
-					u8 *sliceid, u8 *subsliceid)
-{
-	switch (type) {
-	case L3BANK:
-		*sliceid = 0;		/* unused */
-		*subsliceid = __ffs(gt->info.l3bank_mask);
-		break;
-	case MSLICE:
-		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
-		*sliceid = __ffs(gt->info.mslice_mask);
-		*subsliceid = 0;	/* unused */
-		break;
-	case LNCF:
-		/*
-		 * An LNCF is always present if its mslice is present, so we
-		 * can safely just steer to LNCF 0 in all cases.
-		 */
-		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
-		*sliceid = __ffs(gt->info.mslice_mask) << 1;
-		*subsliceid = 0;	/* unused */
-		break;
-	case INSTANCE0:
-		/*
-		 * There are a lot of MCR types for which instance (0, 0)
-		 * will always provide a non-terminated value.
-		 */
-		*sliceid = 0;
-		*subsliceid = 0;
-		break;
-	default:
-		MISSING_CASE(type);
-		*sliceid = 0;
-		*subsliceid = 0;
-	}
-}
-
-/**
- * intel_gt_read_register_fw - reads a GT register with support for multicast
- * @gt: GT structure
- * @reg: register to read
- *
- * This function will read a GT register.  If the register is a multicast
- * register, the read will be steered to a valid instance (i.e., one that
- * isn't fused off or powered down by power gating).
- *
- * Returns the value from a valid instance of @reg.
- */
-u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg)
-{
-	int type;
-	u8 sliceid, subsliceid;
-
-	for (type = 0; type < NUM_STEERING_TYPES; type++) {
-		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
-			intel_gt_get_valid_steering(gt, type, &sliceid,
-						    &subsliceid);
-			return intel_uncore_read_with_mcr_steering_fw(gt->uncore,
-								      reg,
-								      sliceid,
-								      subsliceid);
-		}
-	}
-
-	return intel_uncore_read_fw(gt->uncore, reg);
-}
-
-/**
- * intel_gt_get_valid_steering_for_reg - get a valid steering for a register
- * @gt: GT structure
- * @reg: register for which the steering is required
- * @sliceid: return variable for slice steering
- * @subsliceid: return variable for subslice steering
- *
- * This function returns a slice/subslice pair that is guaranteed to work for
- * read steering of the given register. Note that a value will be returned even
- * if the register is not replicated and therefore does not actually require
- * steering.
- */
-void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
-					 u8 *sliceid, u8 *subsliceid)
-{
-	int type;
-
-	for (type = 0; type < NUM_STEERING_TYPES; type++) {
-		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
-			intel_gt_get_valid_steering(gt, type, sliceid,
-						    subsliceid);
-			return;
-		}
-	}
-
-	*sliceid = gt->default_steering.groupid;
-	*subsliceid = gt->default_steering.instanceid;
-}
-
-u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg)
-{
-	int type;
-	u8 sliceid, subsliceid;
-
-	for (type = 0; type < NUM_STEERING_TYPES; type++) {
-		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
-			intel_gt_get_valid_steering(gt, type, &sliceid,
-						    &subsliceid);
-			return intel_uncore_read_with_mcr_steering(gt->uncore,
-								   reg,
-								   sliceid,
-								   subsliceid);
-		}
-	}
-
-	return intel_uncore_read(gt->uncore, reg);
-}
-
-static void report_steering_type(struct drm_printer *p,
-				 struct intel_gt *gt,
-				 enum intel_steering_type type,
-				 bool dump_table)
-{
-	const struct intel_mmio_range *entry;
-	u8 slice, subslice;
-
-	BUILD_BUG_ON(ARRAY_SIZE(intel_steering_types) != NUM_STEERING_TYPES);
-
-	if (!gt->steering_table[type]) {
-		drm_printf(p, "%s steering: uses default steering\n",
-			   intel_steering_types[type]);
-		return;
-	}
-
-	intel_gt_get_valid_steering(gt, type, &slice, &subslice);
-	drm_printf(p, "%s steering: sliceid=0x%x, subsliceid=0x%x\n",
-		   intel_steering_types[type], slice, subslice);
-
-	if (!dump_table)
-		return;
-
-	for (entry = gt->steering_table[type]; entry->end; entry++)
-		drm_printf(p, "\t0x%06x - 0x%06x\n", entry->start, entry->end);
-}
-
-void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
-			      bool dump_table)
-{
-	drm_printf(p, "Default steering: sliceid=0x%x, subsliceid=0x%x\n",
-		   gt->default_steering.groupid,
-		   gt->default_steering.instanceid);
-
-	if (IS_PONTEVECCHIO(gt->i915)) {
-		report_steering_type(p, gt, INSTANCE0, dump_table);
-	} else if (HAS_MSLICE_STEERING(gt->i915)) {
-		report_steering_type(p, gt, MSLICE, dump_table);
-		report_steering_type(p, gt, LNCF, dump_table);
-	}
-}
-
 static int intel_gt_tile_setup(struct intel_gt *gt, phys_addr_t phys_addr)
 {
 	int ret;
diff --git a/drivers/gpu/drm/i915/gt/intel_gt.h b/drivers/gpu/drm/i915/gt/intel_gt.h
index 44c6cb63ccbc..61d30d5c7e90 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt.h
+++ b/drivers/gpu/drm/i915/gt/intel_gt.h
@@ -93,21 +93,6 @@ static inline bool intel_gt_is_wedged(const struct intel_gt *gt)
 	return unlikely(test_bit(I915_WEDGED, &gt->reset.flags));
 }
 
-static inline bool intel_gt_needs_read_steering(struct intel_gt *gt,
-						enum intel_steering_type type)
-{
-	return gt->steering_table[type];
-}
-
-void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
-					 u8 *sliceid, u8 *subsliceid);
-
-u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg);
-u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg);
-
-void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
-			      bool dump_table);
-
 int intel_gt_probe_all(struct drm_i915_private *i915);
 int intel_gt_tiles_init(struct drm_i915_private *i915);
 void intel_gt_release_all(struct drm_i915_private *i915);
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
index d886fdc2c694..ea07f2bb846f 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
@@ -9,6 +9,7 @@
 #include "intel_gt.h"
 #include "intel_gt_debugfs.h"
 #include "intel_gt_engines_debugfs.h"
+#include "intel_gt_mcr.h"
 #include "intel_gt_pm_debugfs.h"
 #include "intel_sseu_debugfs.h"
 #include "pxp/intel_pxp_debugfs.h"
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
new file mode 100644
index 000000000000..1279a1fe1001
--- /dev/null
+++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
@@ -0,0 +1,448 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2022 Intel Corporation
+ */
+
+#include "i915_drv.h"
+
+#include "intel_gt_mcr.h"
+#include "intel_gt_regs.h"
+
+/**
+ * DOC: GT Multicast/Replicated (MCR) Register Support
+ *
+ * Some GT registers are designed as "multicast" or "replicated" registers:
+ * multiple instances of the same register share a single MMIO offset.  MCR
+ * registers are generally used when the hardware needs to potentially track
+ * independent values of a register per hardware unit (e.g., per-subslice,
+ * per-L3bank, etc.).  The specific types of replication that exist vary
+ * per-platform.
+ *
+ * MMIO accesses to MCR registers are controlled according to the settings
+ * programmed in the platform's MCR_SELECTOR register(s).  MMIO writes to MCR
+ * registers can be done in either a (i.e., a single write updates all
+ * instances of the register to the same value) or unicast (a write updates only
+ * one specific instance).  Reads of MCR registers always operate in a unicast
+ * manner regardless of how the multicast/unicast bit is set in MCR_SELECTOR.
+ * Selection of a specific MCR instance for unicast operations is referred to
+ * as "steering."
+ *
+ * If MCR register operations are steered toward a hardware unit that is
+ * fused off or currently powered down due to power gating, the MMIO operation
+ * is "terminated" by the hardware.  Terminated read operations will return a
+ * value of zero and terminated unicast write operations will be silently
+ * ignored.
+ */
+
+#define HAS_MSLICE_STEERING(dev_priv)	(INTEL_INFO(dev_priv)->has_mslice_steering)
+
+static const char * const intel_steering_types[] = {
+	"L3BANK",
+	"MSLICE",
+	"LNCF",
+	"INSTANCE 0",
+};
+
+static const struct intel_mmio_range icl_l3bank_steering_table[] = {
+	{ 0x00B100, 0x00B3FF },
+	{},
+};
+
+static const struct intel_mmio_range xehpsdv_mslice_steering_table[] = {
+	{ 0x004000, 0x004AFF },
+	{ 0x00C800, 0x00CFFF },
+	{ 0x00DD00, 0x00DDFF },
+	{ 0x00E900, 0x00FFFF }, /* 0xEA00 - OxEFFF is unused */
+	{},
+};
+
+static const struct intel_mmio_range xehpsdv_lncf_steering_table[] = {
+	{ 0x00B000, 0x00B0FF },
+	{ 0x00D800, 0x00D8FF },
+	{},
+};
+
+static const struct intel_mmio_range dg2_lncf_steering_table[] = {
+	{ 0x00B000, 0x00B0FF },
+	{ 0x00D880, 0x00D8FF },
+	{},
+};
+
+/*
+ * We have several types of MCR registers on PVC where steering to (0,0)
+ * will always provide us with a non-terminated value.  We'll stick them
+ * all in the same table for simplicity.
+ */
+static const struct intel_mmio_range pvc_instance0_steering_table[] = {
+	{ 0x004000, 0x004AFF },		/* HALF-BSLICE */
+	{ 0x008800, 0x00887F },		/* CC */
+	{ 0x008A80, 0x008AFF },		/* TILEPSMI */
+	{ 0x00B000, 0x00B0FF },		/* HALF-BSLICE */
+	{ 0x00B100, 0x00B3FF },		/* L3BANK */
+	{ 0x00C800, 0x00CFFF },		/* HALF-BSLICE */
+	{ 0x00D800, 0x00D8FF },		/* HALF-BSLICE */
+	{ 0x00DD00, 0x00DDFF },		/* BSLICE */
+	{ 0x00E900, 0x00E9FF },		/* HALF-BSLICE */
+	{ 0x00EC00, 0x00EEFF },		/* HALF-BSLICE */
+	{ 0x00F000, 0x00FFFF },		/* HALF-BSLICE */
+	{ 0x024180, 0x0241FF },		/* HALF-BSLICE */
+	{},
+};
+
+void intel_gt_mcr_init(struct intel_gt *gt)
+{
+	struct drm_i915_private *i915 = gt->i915;
+
+	/*
+	 * An mslice is unavailable only if both the meml3 for the slice is
+	 * disabled *and* all of the DSS in the slice (quadrant) are disabled.
+	 */
+	if (HAS_MSLICE_STEERING(i915)) {
+		gt->info.mslice_mask =
+			intel_slicemask_from_xehp_dssmask(gt->info.sseu.subslice_mask,
+							  GEN_DSS_PER_MSLICE);
+		gt->info.mslice_mask |=
+			(intel_uncore_read(gt->uncore, GEN10_MIRROR_FUSE3) &
+			 GEN12_MEML3_EN_MASK);
+
+		if (!gt->info.mslice_mask) /* should be impossible! */
+			drm_warn(&i915->drm, "mslice mask all zero!\n");
+	}
+
+	if (IS_PONTEVECCHIO(i915)) {
+		gt->steering_table[INSTANCE0] = pvc_instance0_steering_table;
+	} else if (IS_DG2(i915)) {
+		gt->steering_table[MSLICE] = xehpsdv_mslice_steering_table;
+		gt->steering_table[LNCF] = dg2_lncf_steering_table;
+	} else if (IS_XEHPSDV(i915)) {
+		gt->steering_table[MSLICE] = xehpsdv_mslice_steering_table;
+		gt->steering_table[LNCF] = xehpsdv_lncf_steering_table;
+	} else if (GRAPHICS_VER(i915) >= 11 &&
+		   GRAPHICS_VER_FULL(i915) < IP_VER(12, 50)) {
+		gt->steering_table[L3BANK] = icl_l3bank_steering_table;
+		gt->info.l3bank_mask =
+			~intel_uncore_read(gt->uncore, GEN10_MIRROR_FUSE3) &
+			GEN10_L3BANK_MASK;
+		if (!gt->info.l3bank_mask) /* should be impossible! */
+			drm_warn(&i915->drm, "L3 bank mask is all zero!\n");
+	} else if (GRAPHICS_VER(i915) >= 11) {
+		/*
+		 * We expect all modern platforms to have at least some
+		 * type of steering that needs to be initialized.
+		 */
+		MISSING_CASE(INTEL_INFO(i915)->platform);
+	}
+}
+
+/**
+ * uncore_rw_with_mcr_steering_fw - Access a register after programming
+ *				    the MCR selector register.
+ * @uncore: pointer to struct intel_uncore
+ * @reg: register being accessed
+ * @rw_flag: FW_REG_READ for read access or FW_REG_WRITE for write access
+ * @slice: slice number (ignored for multi-cast write)
+ * @subslice: sub-slice number (ignored for multi-cast write)
+ * @value: register value to be written (ignored for read)
+ *
+ * Return: 0 for write access. register value for read access.
+ *
+ * Caller needs to make sure the relevant forcewake wells are up.
+ */
+static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
+					  i915_reg_t reg, u8 rw_flag,
+					  int slice, int subslice, u32 value)
+{
+	u32 mcr_mask, mcr_ss, mcr, old_mcr, val = 0;
+
+	lockdep_assert_held(&uncore->lock);
+
+	if (GRAPHICS_VER(uncore->i915) >= 11) {
+		mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
+		mcr_ss = GEN11_MCR_SLICE(slice) | GEN11_MCR_SUBSLICE(subslice);
+
+		/*
+		 * Wa_22013088509
+		 *
+		 * The setting of the multicast/unicast bit usually wouldn't
+		 * matter for read operations (which always return the value
+		 * from a single register instance regardless of how that bit
+		 * is set), but some platforms have a workaround requiring us
+		 * to remain in multicast mode for reads.  There's no real
+		 * downside to this, so we'll just go ahead and do so on all
+		 * platforms; we'll only clear the multicast bit from the mask
+		 * when exlicitly doing a write operation.
+		 */
+		if (rw_flag == FW_REG_WRITE)
+			mcr_mask |= GEN11_MCR_MULTICAST;
+	} else {
+		mcr_mask = GEN8_MCR_SLICE_MASK | GEN8_MCR_SUBSLICE_MASK;
+		mcr_ss = GEN8_MCR_SLICE(slice) | GEN8_MCR_SUBSLICE(subslice);
+	}
+
+	old_mcr = mcr = intel_uncore_read_fw(uncore, GEN8_MCR_SELECTOR);
+
+	mcr &= ~mcr_mask;
+	mcr |= mcr_ss;
+	intel_uncore_write_fw(uncore, GEN8_MCR_SELECTOR, mcr);
+
+	if (rw_flag == FW_REG_READ)
+		val = intel_uncore_read_fw(uncore, reg);
+	else
+		intel_uncore_write_fw(uncore, reg, value);
+
+	mcr &= ~mcr_mask;
+	mcr |= old_mcr & mcr_mask;
+
+	intel_uncore_write_fw(uncore, GEN8_MCR_SELECTOR, mcr);
+
+	return val;
+}
+
+static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
+				       i915_reg_t reg, u8 rw_flag,
+				       int slice, int subslice,
+				       u32 value)
+{
+	enum forcewake_domains fw_domains;
+	u32 val;
+
+	fw_domains = intel_uncore_forcewake_for_reg(uncore, reg,
+						    rw_flag);
+	fw_domains |= intel_uncore_forcewake_for_reg(uncore,
+						     GEN8_MCR_SELECTOR,
+						     FW_REG_READ | FW_REG_WRITE);
+
+	spin_lock_irq(&uncore->lock);
+	intel_uncore_forcewake_get__locked(uncore, fw_domains);
+
+	val = uncore_rw_with_mcr_steering_fw(uncore, reg, rw_flag,
+					     slice, subslice, value);
+
+	intel_uncore_forcewake_put__locked(uncore, fw_domains);
+	spin_unlock_irq(&uncore->lock);
+
+	return val;
+}
+
+u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
+					   i915_reg_t reg, int slice, int subslice)
+{
+	return uncore_rw_with_mcr_steering_fw(uncore, reg, FW_REG_READ,
+					      slice, subslice, 0);
+}
+
+u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
+					i915_reg_t reg, int slice, int subslice)
+{
+	return uncore_rw_with_mcr_steering(uncore, reg, FW_REG_READ,
+					   slice, subslice, 0);
+}
+
+void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
+					  i915_reg_t reg, u32 value,
+					  int slice, int subslice)
+{
+	uncore_rw_with_mcr_steering(uncore, reg, FW_REG_WRITE,
+				    slice, subslice, value);
+}
+
+/**
+ * intel_gt_reg_needs_read_steering - determine whether a register read
+ *     requires explicit steering
+ * @gt: GT structure
+ * @reg: the register to check steering requirements for
+ * @type: type of multicast steering to check
+ *
+ * Determines whether @reg needs explicit steering of a specific type for
+ * reads.
+ *
+ * Returns false if @reg does not belong to a register range of the given
+ * steering type, or if the default (subslice-based) steering IDs are suitable
+ * for @type steering too.
+ */
+static bool intel_gt_reg_needs_read_steering(struct intel_gt *gt,
+					     i915_reg_t reg,
+					     enum intel_steering_type type)
+{
+	const u32 offset = i915_mmio_reg_offset(reg);
+	const struct intel_mmio_range *entry;
+
+	if (likely(!intel_gt_needs_read_steering(gt, type)))
+		return false;
+
+	for (entry = gt->steering_table[type]; entry->end; entry++) {
+		if (offset >= entry->start && offset <= entry->end)
+			return true;
+	}
+
+	return false;
+}
+
+/**
+ * intel_gt_get_valid_steering - determines valid IDs for a class of MCR steering
+ * @gt: GT structure
+ * @type: multicast register type
+ * @sliceid: Slice ID returned
+ * @subsliceid: Subslice ID returned
+ *
+ * Determines sliceid and subsliceid values that will steer reads
+ * of a specific multicast register class to a valid value.
+ */
+static void intel_gt_get_valid_steering(struct intel_gt *gt,
+					enum intel_steering_type type,
+					u8 *sliceid, u8 *subsliceid)
+{
+	switch (type) {
+	case L3BANK:
+		*sliceid = 0;		/* unused */
+		*subsliceid = __ffs(gt->info.l3bank_mask);
+		break;
+	case MSLICE:
+		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
+		*sliceid = __ffs(gt->info.mslice_mask);
+		*subsliceid = 0;	/* unused */
+		break;
+	case LNCF:
+		/*
+		 * An LNCF is always present if its mslice is present, so we
+		 * can safely just steer to LNCF 0 in all cases.
+		 */
+		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
+		*sliceid = __ffs(gt->info.mslice_mask) << 1;
+		*subsliceid = 0;	/* unused */
+		break;
+	case INSTANCE0:
+		/*
+		 * There are a lot of MCR types for which instance (0, 0)
+		 * will always provide a non-terminated value.
+		 */
+		*sliceid = 0;
+		*subsliceid = 0;
+		break;
+	default:
+		MISSING_CASE(type);
+		*sliceid = 0;
+		*subsliceid = 0;
+	}
+}
+
+/**
+ * intel_gt_get_valid_steering_for_reg - get a valid steering for a register
+ * @gt: GT structure
+ * @reg: register for which the steering is required
+ * @sliceid: return variable for slice steering
+ * @subsliceid: return variable for subslice steering
+ *
+ * This function returns a slice/subslice pair that is guaranteed to work for
+ * read steering of the given register. Note that a value will be returned even
+ * if the register is not replicated and therefore does not actually require
+ * steering.
+ */
+void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
+					 u8 *sliceid, u8 *subsliceid)
+{
+	int type;
+
+	for (type = 0; type < NUM_STEERING_TYPES; type++) {
+		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
+			intel_gt_get_valid_steering(gt, type, sliceid,
+						    subsliceid);
+			return;
+		}
+	}
+
+	*sliceid = gt->default_steering.groupid;
+	*subsliceid = gt->default_steering.instanceid;
+}
+
+/**
+ * intel_gt_read_register_fw - reads a GT register with support for multicast
+ * @gt: GT structure
+ * @reg: register to read
+ *
+ * This function will read a GT register.  If the register is a multicast
+ * register, the read will be steered to a valid instance (i.e., one that
+ * isn't fused off or powered down by power gating).
+ *
+ * Returns the value from a valid instance of @reg.
+ */
+u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg)
+{
+	int type;
+	u8 sliceid, subsliceid;
+
+	for (type = 0; type < NUM_STEERING_TYPES; type++) {
+		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
+			intel_gt_get_valid_steering(gt, type, &sliceid,
+						    &subsliceid);
+			return intel_uncore_read_with_mcr_steering_fw(gt->uncore,
+								      reg,
+								      sliceid,
+								      subsliceid);
+		}
+	}
+
+	return intel_uncore_read_fw(gt->uncore, reg);
+}
+
+u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg)
+{
+	int type;
+	u8 sliceid, subsliceid;
+
+	for (type = 0; type < NUM_STEERING_TYPES; type++) {
+		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
+			intel_gt_get_valid_steering(gt, type, &sliceid,
+						    &subsliceid);
+			return intel_uncore_read_with_mcr_steering(gt->uncore,
+								   reg,
+								   sliceid,
+								   subsliceid);
+		}
+	}
+
+	return intel_uncore_read(gt->uncore, reg);
+}
+
+static void report_steering_type(struct drm_printer *p,
+				 struct intel_gt *gt,
+				 enum intel_steering_type type,
+				 bool dump_table)
+{
+	const struct intel_mmio_range *entry;
+	u8 slice, subslice;
+
+	BUILD_BUG_ON(ARRAY_SIZE(intel_steering_types) != NUM_STEERING_TYPES);
+
+	if (!gt->steering_table[type]) {
+		drm_printf(p, "%s steering: uses default steering\n",
+			   intel_steering_types[type]);
+		return;
+	}
+
+	intel_gt_get_valid_steering(gt, type, &slice, &subslice);
+	drm_printf(p, "%s steering: sliceid=0x%x, subsliceid=0x%x\n",
+		   intel_steering_types[type], slice, subslice);
+
+	if (!dump_table)
+		return;
+
+	for (entry = gt->steering_table[type]; entry->end; entry++)
+		drm_printf(p, "\t0x%06x - 0x%06x\n", entry->start, entry->end);
+}
+
+void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
+			      bool dump_table)
+{
+	drm_printf(p, "Default steering: sliceid=0x%x, subsliceid=0x%x\n",
+		   gt->default_steering.groupid,
+		   gt->default_steering.instanceid);
+
+	if (IS_PONTEVECCHIO(gt->i915)) {
+		report_steering_type(p, gt, INSTANCE0, dump_table);
+	} else if (HAS_MSLICE_STEERING(gt->i915)) {
+		report_steering_type(p, gt, MSLICE, dump_table);
+		report_steering_type(p, gt, LNCF, dump_table);
+	}
+}
+
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.h b/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
new file mode 100644
index 000000000000..b570c1571243
--- /dev/null
+++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2022 Intel Corporation
+ */
+
+#ifndef __INTEL_GT_MCR__
+#define __INTEL_GT_MCR__
+
+#include "intel_gt_types.h"
+
+void intel_gt_mcr_init(struct intel_gt *gt);
+
+u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
+					   i915_reg_t reg,
+					   int slice, int subslice);
+u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
+					i915_reg_t reg,	int slice, int subslice);
+void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
+					  i915_reg_t reg, u32 value,
+					  int slice, int subslice);
+
+u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg);
+u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg);
+
+static inline bool intel_gt_needs_read_steering(struct intel_gt *gt,
+						enum intel_steering_type type)
+{
+	return gt->steering_table[type];
+}
+
+void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
+					 u8 *sliceid, u8 *subsliceid);
+
+void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
+			      bool dump_table);
+
+#endif /* __INTEL_GT_MCR__ */
diff --git a/drivers/gpu/drm/i915/gt/intel_region_lmem.c b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
index e9c12e0d6f59..1f4e7237a924 100644
--- a/drivers/gpu/drm/i915/gt/intel_region_lmem.c
+++ b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
@@ -12,6 +12,7 @@
 #include "gem/i915_gem_region.h"
 #include "gem/i915_gem_ttm.h"
 #include "gt/intel_gt.h"
+#include "gt/intel_gt_mcr.h"
 #include "gt/intel_gt_regs.h"
 
 static int
diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
index 1e982ac931dc..97d7f30b1229 100644
--- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
+++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
@@ -9,6 +9,7 @@
 #include "intel_engine_regs.h"
 #include "intel_gpu_commands.h"
 #include "intel_gt.h"
+#include "intel_gt_mcr.h"
 #include "intel_gt_regs.h"
 #include "intel_ring.h"
 #include "intel_workarounds.h"
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
index bb197610fd5b..dea138d78111 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
@@ -7,6 +7,7 @@
 
 #include "gt/intel_engine_regs.h"
 #include "gt/intel_gt.h"
+#include "gt/intel_gt_mcr.h"
 #include "gt/intel_gt_regs.h"
 #include "gt/intel_lrc.h"
 #include "gt/shmem_utils.h"
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 9805c6e6d4da..5cf80fae8baa 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1282,8 +1282,6 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
 #define HAS_RUNTIME_PM(dev_priv) (INTEL_INFO(dev_priv)->has_runtime_pm)
 #define HAS_64BIT_RELOC(dev_priv) (INTEL_INFO(dev_priv)->has_64bit_reloc)
 
-#define HAS_MSLICE_STEERING(dev_priv)	(INTEL_INFO(dev_priv)->has_mslice_steering)
-
 /*
  * Set this flag, when platform requires 64K GTT page sizes or larger for
  * device local memory access.
diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
index 33304eb987e4..a852c471d1b3 100644
--- a/drivers/gpu/drm/i915/intel_uncore.c
+++ b/drivers/gpu/drm/i915/intel_uncore.c
@@ -2644,118 +2644,6 @@ intel_uncore_forcewake_for_reg(struct intel_uncore *uncore,
 	return fw_domains;
 }
 
-/**
- * uncore_rw_with_mcr_steering_fw - Access a register after programming
- *				    the MCR selector register.
- * @uncore: pointer to struct intel_uncore
- * @reg: register being accessed
- * @rw_flag: FW_REG_READ for read access or FW_REG_WRITE for write access
- * @slice: slice number (ignored for multi-cast write)
- * @subslice: sub-slice number (ignored for multi-cast write)
- * @value: register value to be written (ignored for read)
- *
- * Return: 0 for write access. register value for read access.
- *
- * Caller needs to make sure the relevant forcewake wells are up.
- */
-static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
-					  i915_reg_t reg, u8 rw_flag,
-					  int slice, int subslice, u32 value)
-{
-	u32 mcr_mask, mcr_ss, mcr, old_mcr, val = 0;
-
-	lockdep_assert_held(&uncore->lock);
-
-	if (GRAPHICS_VER(uncore->i915) >= 11) {
-		mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
-		mcr_ss = GEN11_MCR_SLICE(slice) | GEN11_MCR_SUBSLICE(subslice);
-
-		/*
-		 * Wa_22013088509
-		 *
-		 * The setting of the multicast/unicast bit usually wouldn't
-		 * matter for read operations (which always return the value
-		 * from a single register instance regardless of how that bit
-		 * is set), but some platforms have a workaround requiring us
-		 * to remain in multicast mode for reads.  There's no real
-		 * downside to this, so we'll just go ahead and do so on all
-		 * platforms; we'll only clear the multicast bit from the mask
-		 * when exlicitly doing a write operation.
-		 */
-		if (rw_flag == FW_REG_WRITE)
-			mcr_mask |= GEN11_MCR_MULTICAST;
-	} else {
-		mcr_mask = GEN8_MCR_SLICE_MASK | GEN8_MCR_SUBSLICE_MASK;
-		mcr_ss = GEN8_MCR_SLICE(slice) | GEN8_MCR_SUBSLICE(subslice);
-	}
-
-	old_mcr = mcr = intel_uncore_read_fw(uncore, GEN8_MCR_SELECTOR);
-
-	mcr &= ~mcr_mask;
-	mcr |= mcr_ss;
-	intel_uncore_write_fw(uncore, GEN8_MCR_SELECTOR, mcr);
-
-	if (rw_flag == FW_REG_READ)
-		val = intel_uncore_read_fw(uncore, reg);
-	else
-		intel_uncore_write_fw(uncore, reg, value);
-
-	mcr &= ~mcr_mask;
-	mcr |= old_mcr & mcr_mask;
-
-	intel_uncore_write_fw(uncore, GEN8_MCR_SELECTOR, mcr);
-
-	return val;
-}
-
-static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
-				       i915_reg_t reg, u8 rw_flag,
-				       int slice, int subslice,
-				       u32 value)
-{
-	enum forcewake_domains fw_domains;
-	u32 val;
-
-	fw_domains = intel_uncore_forcewake_for_reg(uncore, reg,
-						    rw_flag);
-	fw_domains |= intel_uncore_forcewake_for_reg(uncore,
-						     GEN8_MCR_SELECTOR,
-						     FW_REG_READ | FW_REG_WRITE);
-
-	spin_lock_irq(&uncore->lock);
-	intel_uncore_forcewake_get__locked(uncore, fw_domains);
-
-	val = uncore_rw_with_mcr_steering_fw(uncore, reg, rw_flag,
-					     slice, subslice, value);
-
-	intel_uncore_forcewake_put__locked(uncore, fw_domains);
-	spin_unlock_irq(&uncore->lock);
-
-	return val;
-}
-
-u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
-					   i915_reg_t reg, int slice, int subslice)
-{
-	return uncore_rw_with_mcr_steering_fw(uncore, reg, FW_REG_READ,
-					      slice, subslice, 0);
-}
-
-u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
-					i915_reg_t reg, int slice, int subslice)
-{
-	return uncore_rw_with_mcr_steering(uncore, reg, FW_REG_READ,
-					   slice, subslice, 0);
-}
-
-void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
-					  i915_reg_t reg, u32 value,
-					  int slice, int subslice)
-{
-	uncore_rw_with_mcr_steering(uncore, reg, FW_REG_WRITE,
-				    slice, subslice, value);
-}
-
 #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
 #include "selftests/mock_uncore.c"
 #include "selftests/intel_uncore.c"
diff --git a/drivers/gpu/drm/i915/intel_uncore.h b/drivers/gpu/drm/i915/intel_uncore.h
index 52fe3d89dd2b..b1fa912a65e7 100644
--- a/drivers/gpu/drm/i915/intel_uncore.h
+++ b/drivers/gpu/drm/i915/intel_uncore.h
@@ -210,14 +210,6 @@ intel_uncore_has_fifo(const struct intel_uncore *uncore)
 	return uncore->flags & UNCORE_HAS_FIFO;
 }
 
-u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
-					   i915_reg_t reg,
-					   int slice, int subslice);
-u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
-					i915_reg_t reg,	int slice, int subslice);
-void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
-					  i915_reg_t reg, u32 value,
-					  int slice, int subslice);
 void
 intel_uncore_mmio_debug_init_early(struct intel_uncore_mmio_debug *mmio_debug);
 void intel_uncore_init_early(struct intel_uncore *uncore,
-- 
2.35.3


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

* [PATCH v2 2/2] drm/i915/gt: Cleanup interface for MCR operations
  2022-06-15  0:10 ` [Intel-gfx] " Matt Roper
@ 2022-06-15  0:10   ` Matt Roper
  -1 siblings, 0 replies; 19+ messages in thread
From: Matt Roper @ 2022-06-15  0:10 UTC (permalink / raw)
  To: intel-gfx; +Cc: harish.chegondi, dri-devel

Let's replace the assortment of intel_gt_* and intel_uncore_* functions
that operate on MCR registers with a cleaner set of interfaces:

  * intel_gt_mcr_read -- unicast read from specific instance
  * intel_gt_mcr_read_any[_fw] -- unicast read from any non-terminated
    instance
  * intel_gt_mcr_unicast_write -- unicast write to specific instance
  * intel_gt_mcr_multicast_write[_fw] -- multicast write to all instances

We'll also replace the historic "slice" and "subslice" terminology with
"group" and "instance" to match the documentation for more recent
platforms; these days MCR steering applies to more types of replication
than just slice/subslice.

v2:
 - Reference the new kerneldoc from i915.rst.  (Jani)
 - Tweak the wording of the documentation for a couple functions to
   clarify the difference between "_fw" and non-"_fw" forms.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Acked-by: Jani Nikula <jani.nikula@linux.intel.com>
---
 Documentation/gpu/i915.rst                  |  12 +
 drivers/gpu/drm/i915/gem/i915_gem_stolen.c  |   2 +-
 drivers/gpu/drm/i915/gt/intel_engine_cs.c   |  33 ++-
 drivers/gpu/drm/i915/gt/intel_gt_debugfs.c  |   2 +-
 drivers/gpu/drm/i915/gt/intel_gt_mcr.c      | 239 ++++++++++++--------
 drivers/gpu/drm/i915/gt/intel_gt_mcr.h      |  43 ++--
 drivers/gpu/drm/i915/gt/intel_region_lmem.c |   4 +-
 drivers/gpu/drm/i915/gt/intel_workarounds.c |   8 +-
 drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c  |   2 +-
 9 files changed, 200 insertions(+), 145 deletions(-)

diff --git a/Documentation/gpu/i915.rst b/Documentation/gpu/i915.rst
index 54060cd6c419..4e59db1cfb00 100644
--- a/Documentation/gpu/i915.rst
+++ b/Documentation/gpu/i915.rst
@@ -246,6 +246,18 @@ Display State Buffer
 .. kernel-doc:: drivers/gpu/drm/i915/display/intel_dsb.c
    :internal:
 
+GT Programming
+==============
+
+Multicast/Replicated (MCR) Registers
+------------------------------------
+
+.. kernel-doc:: drivers/gpu/drm/i915/gt/intel_gt_mcr.c
+   :doc: GT Multicast/Replicated (MCR) Register Support
+
+.. kernel-doc:: drivers/gpu/drm/i915/gt/intel_gt_mcr.c
+   :internal:
+
 Memory Management and Command Submission
 ========================================
 
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
index da30503d3ca2..fa54823d1219 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
@@ -835,7 +835,7 @@ i915_gem_stolen_lmem_setup(struct drm_i915_private *i915, u16 type,
 	} else {
 		resource_size_t lmem_range;
 
-		lmem_range = intel_gt_read_register(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
+		lmem_range = intel_gt_mcr_read_any(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
 		lmem_size = lmem_range >> XEHPSDV_TILE_LMEM_RANGE_SHIFT;
 		lmem_size *= SZ_1G;
 	}
diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
index 244af1bdb7db..136cc44c3deb 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
@@ -1428,14 +1428,6 @@ void intel_engine_cancel_stop_cs(struct intel_engine_cs *engine)
 	ENGINE_WRITE_FW(engine, RING_MI_MODE, _MASKED_BIT_DISABLE(STOP_RING));
 }
 
-static u32
-read_subslice_reg(const struct intel_engine_cs *engine,
-		  int slice, int subslice, i915_reg_t reg)
-{
-	return intel_uncore_read_with_mcr_steering(engine->uncore, reg,
-						   slice, subslice);
-}
-
 /* NB: please notice the memset */
 void intel_engine_get_instdone(const struct intel_engine_cs *engine,
 			       struct intel_instdone *instdone)
@@ -1469,28 +1461,33 @@ void intel_engine_get_instdone(const struct intel_engine_cs *engine,
 		if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 50)) {
 			for_each_instdone_gslice_dss_xehp(i915, sseu, iter, slice, subslice) {
 				instdone->sampler[slice][subslice] =
-					read_subslice_reg(engine, slice, subslice,
-							  GEN7_SAMPLER_INSTDONE);
+					intel_gt_mcr_read(engine->gt,
+							  GEN7_SAMPLER_INSTDONE,
+							  slice, subslice);
 				instdone->row[slice][subslice] =
-					read_subslice_reg(engine, slice, subslice,
-							  GEN7_ROW_INSTDONE);
+					intel_gt_mcr_read(engine->gt,
+							  GEN7_ROW_INSTDONE,
+							  slice, subslice);
 			}
 		} else {
 			for_each_instdone_slice_subslice(i915, sseu, slice, subslice) {
 				instdone->sampler[slice][subslice] =
-					read_subslice_reg(engine, slice, subslice,
-							  GEN7_SAMPLER_INSTDONE);
+					intel_gt_mcr_read(engine->gt,
+							  GEN7_SAMPLER_INSTDONE,
+							  slice, subslice);
 				instdone->row[slice][subslice] =
-					read_subslice_reg(engine, slice, subslice,
-							  GEN7_ROW_INSTDONE);
+					intel_gt_mcr_read(engine->gt,
+							  GEN7_ROW_INSTDONE,
+							  slice, subslice);
 			}
 		}
 
 		if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 55)) {
 			for_each_instdone_gslice_dss_xehp(i915, sseu, iter, slice, subslice)
 				instdone->geom_svg[slice][subslice] =
-					read_subslice_reg(engine, slice, subslice,
-							  XEHPG_INSTDONE_GEOM_SVG);
+					intel_gt_mcr_read(engine->gt,
+							  XEHPG_INSTDONE_GEOM_SVG,
+							  slice, subslice);
 		}
 	} else if (GRAPHICS_VER(i915) >= 7) {
 		instdone->instdone =
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
index ea07f2bb846f..dd53641f3637 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
@@ -65,7 +65,7 @@ static int steering_show(struct seq_file *m, void *data)
 	struct drm_printer p = drm_seq_file_printer(m);
 	struct intel_gt *gt = m->private;
 
-	intel_gt_report_steering(&p, gt, true);
+	intel_gt_mcr_report_steering(&p, gt, true);
 
 	return 0;
 }
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
index 1279a1fe1001..aa4fb308d468 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
@@ -134,23 +134,22 @@ void intel_gt_mcr_init(struct intel_gt *gt)
 	}
 }
 
-/**
- * uncore_rw_with_mcr_steering_fw - Access a register after programming
- *				    the MCR selector register.
+/*
+ * rw_with_mcr_steering_fw - Access a register with specific MCR steering
  * @uncore: pointer to struct intel_uncore
  * @reg: register being accessed
  * @rw_flag: FW_REG_READ for read access or FW_REG_WRITE for write access
- * @slice: slice number (ignored for multi-cast write)
- * @subslice: sub-slice number (ignored for multi-cast write)
+ * @group: group number (documented as "sliceid" on older platforms)
+ * @instance: instance number (documented as "subsliceid" on older platforms)
  * @value: register value to be written (ignored for read)
  *
  * Return: 0 for write access. register value for read access.
  *
  * Caller needs to make sure the relevant forcewake wells are up.
  */
-static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
-					  i915_reg_t reg, u8 rw_flag,
-					  int slice, int subslice, u32 value)
+static u32 rw_with_mcr_steering_fw(struct intel_uncore *uncore,
+				   i915_reg_t reg, u8 rw_flag,
+				   int group, int instance, u32 value)
 {
 	u32 mcr_mask, mcr_ss, mcr, old_mcr, val = 0;
 
@@ -158,7 +157,7 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
 
 	if (GRAPHICS_VER(uncore->i915) >= 11) {
 		mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
-		mcr_ss = GEN11_MCR_SLICE(slice) | GEN11_MCR_SUBSLICE(subslice);
+		mcr_ss = GEN11_MCR_SLICE(group) | GEN11_MCR_SUBSLICE(instance);
 
 		/*
 		 * Wa_22013088509
@@ -176,7 +175,7 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
 			mcr_mask |= GEN11_MCR_MULTICAST;
 	} else {
 		mcr_mask = GEN8_MCR_SLICE_MASK | GEN8_MCR_SUBSLICE_MASK;
-		mcr_ss = GEN8_MCR_SLICE(slice) | GEN8_MCR_SUBSLICE(subslice);
+		mcr_ss = GEN8_MCR_SLICE(group) | GEN8_MCR_SUBSLICE(instance);
 	}
 
 	old_mcr = mcr = intel_uncore_read_fw(uncore, GEN8_MCR_SELECTOR);
@@ -198,10 +197,10 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
 	return val;
 }
 
-static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
-				       i915_reg_t reg, u8 rw_flag,
-				       int slice, int subslice,
-				       u32 value)
+static u32 rw_with_mcr_steering(struct intel_uncore *uncore,
+				i915_reg_t reg, u8 rw_flag,
+				int group, int instance,
+				u32 value)
 {
 	enum forcewake_domains fw_domains;
 	u32 val;
@@ -215,8 +214,7 @@ static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
 	spin_lock_irq(&uncore->lock);
 	intel_uncore_forcewake_get__locked(uncore, fw_domains);
 
-	val = uncore_rw_with_mcr_steering_fw(uncore, reg, rw_flag,
-					     slice, subslice, value);
+	val = rw_with_mcr_steering_fw(uncore, reg, rw_flag, group, instance, value);
 
 	intel_uncore_forcewake_put__locked(uncore, fw_domains);
 	spin_unlock_irq(&uncore->lock);
@@ -224,31 +222,73 @@ static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
 	return val;
 }
 
-u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
-					   i915_reg_t reg, int slice, int subslice)
+/**
+ * intel_gt_mcr_read - read a specific instance of an MCR register
+ * @gt: GT structure
+ * @reg: the MCR register to read
+ * @group: the MCR group
+ * @instance: the MCR instance
+ *
+ * Returns the value read from an MCR register after steering toward a specific
+ * group/instance.
+ */
+u32 intel_gt_mcr_read(struct intel_gt *gt,
+		      i915_reg_t reg,
+		      int group, int instance)
 {
-	return uncore_rw_with_mcr_steering_fw(uncore, reg, FW_REG_READ,
-					      slice, subslice, 0);
+	return rw_with_mcr_steering(gt->uncore, reg, FW_REG_READ, group, instance, 0);
 }
 
-u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
-					i915_reg_t reg, int slice, int subslice)
+/**
+ * intel_gt_mcr_unicast_write - write a specific instance of an MCR register
+ * @gt: GT structure
+ * @reg: the MCR register to read
+ * @value: value to write
+ * @group: the MCR group
+ * @instance: the MCR instance
+ *
+ * Write an MCR register in unicast mode after steering toward a specific
+ * group/instance.
+ */
+void intel_gt_mcr_unicast_write(struct intel_gt *gt, i915_reg_t reg, u32 value,
+				int group, int instance)
 {
-	return uncore_rw_with_mcr_steering(uncore, reg, FW_REG_READ,
-					   slice, subslice, 0);
+	rw_with_mcr_steering(gt->uncore, reg, FW_REG_WRITE, group, instance, value);
 }
 
-void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
-					  i915_reg_t reg, u32 value,
-					  int slice, int subslice)
+/**
+ * intel_gt_mcr_multicast_write - write a value to all instances of an MCR register
+ * @gt: GT structure
+ * @reg: the MCR register to read
+ * @value: value to write
+ *
+ * Write an MCR register in multicast mode to update all instances.
+ */
+void intel_gt_mcr_multicast_write(struct intel_gt *gt,
+				i915_reg_t reg, u32 value)
 {
-	uncore_rw_with_mcr_steering(uncore, reg, FW_REG_WRITE,
-				    slice, subslice, value);
+	intel_uncore_write(gt->uncore, reg, value);
 }
 
 /**
- * intel_gt_reg_needs_read_steering - determine whether a register read
- *     requires explicit steering
+ * intel_gt_mcr_multicast_write_fw - write a value to all instances of an MCR register
+ * @gt: GT structure
+ * @reg: the MCR register to read
+ * @value: value to write
+ *
+ * Write an MCR register in multicast mode to update all instances.  This
+ * function assumes the caller is already holding any necessary forcewake
+ * domains; use intel_gt_mcr_multicast_write() in cases where forcewake should
+ * be obtained automatically.
+ */
+void intel_gt_mcr_multicast_write_fw(struct intel_gt *gt, i915_reg_t reg, u32 value)
+{
+	intel_uncore_write_fw(gt->uncore, reg, value);
+}
+
+/*
+ * reg_needs_read_steering - determine whether a register read requires
+ *     explicit steering
  * @gt: GT structure
  * @reg: the register to check steering requirements for
  * @type: type of multicast steering to check
@@ -260,14 +300,14 @@ void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
  * steering type, or if the default (subslice-based) steering IDs are suitable
  * for @type steering too.
  */
-static bool intel_gt_reg_needs_read_steering(struct intel_gt *gt,
-					     i915_reg_t reg,
-					     enum intel_steering_type type)
+static bool reg_needs_read_steering(struct intel_gt *gt,
+				    i915_reg_t reg,
+				    enum intel_steering_type type)
 {
 	const u32 offset = i915_mmio_reg_offset(reg);
 	const struct intel_mmio_range *entry;
 
-	if (likely(!intel_gt_needs_read_steering(gt, type)))
+	if (likely(!gt->steering_table[type]))
 		return false;
 
 	for (entry = gt->steering_table[type]; entry->end; entry++) {
@@ -278,29 +318,29 @@ static bool intel_gt_reg_needs_read_steering(struct intel_gt *gt,
 	return false;
 }
 
-/**
- * intel_gt_get_valid_steering - determines valid IDs for a class of MCR steering
+/*
+ * get_nonterminated_steering - determines valid IDs for a class of MCR steering
  * @gt: GT structure
  * @type: multicast register type
- * @sliceid: Slice ID returned
- * @subsliceid: Subslice ID returned
+ * @group: Group ID returned
+ * @instance: Instance ID returned
  *
- * Determines sliceid and subsliceid values that will steer reads
- * of a specific multicast register class to a valid value.
+ * Determines group and instance values that will steer reads of the specified
+ * MCR class to a non-terminated instance.
  */
-static void intel_gt_get_valid_steering(struct intel_gt *gt,
-					enum intel_steering_type type,
-					u8 *sliceid, u8 *subsliceid)
+static void get_nonterminated_steering(struct intel_gt *gt,
+				       enum intel_steering_type type,
+				       u8 *group, u8 *instance)
 {
 	switch (type) {
 	case L3BANK:
-		*sliceid = 0;		/* unused */
-		*subsliceid = __ffs(gt->info.l3bank_mask);
+		*group = 0;		/* unused */
+		*instance = __ffs(gt->info.l3bank_mask);
 		break;
 	case MSLICE:
 		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
-		*sliceid = __ffs(gt->info.mslice_mask);
-		*subsliceid = 0;	/* unused */
+		*group = __ffs(gt->info.mslice_mask);
+		*instance = 0;	/* unused */
 		break;
 	case LNCF:
 		/*
@@ -308,96 +348,105 @@ static void intel_gt_get_valid_steering(struct intel_gt *gt,
 		 * can safely just steer to LNCF 0 in all cases.
 		 */
 		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
-		*sliceid = __ffs(gt->info.mslice_mask) << 1;
-		*subsliceid = 0;	/* unused */
+		*group = __ffs(gt->info.mslice_mask) << 1;
+		*instance = 0;	/* unused */
 		break;
 	case INSTANCE0:
 		/*
 		 * There are a lot of MCR types for which instance (0, 0)
 		 * will always provide a non-terminated value.
 		 */
-		*sliceid = 0;
-		*subsliceid = 0;
+		*group = 0;
+		*instance = 0;
 		break;
 	default:
 		MISSING_CASE(type);
-		*sliceid = 0;
-		*subsliceid = 0;
+		*group = 0;
+		*instance = 0;
 	}
 }
 
 /**
- * intel_gt_get_valid_steering_for_reg - get a valid steering for a register
+ * intel_gt_mcr_get_nonterminated_steering - find group/instance values that
+ *    will steer a register to a non-terminated instance
  * @gt: GT structure
  * @reg: register for which the steering is required
- * @sliceid: return variable for slice steering
- * @subsliceid: return variable for subslice steering
+ * @group: return variable for group steering
+ * @instance: return variable for instance steering
  *
- * This function returns a slice/subslice pair that is guaranteed to work for
+ * This function returns a group/instance pair that is guaranteed to work for
  * read steering of the given register. Note that a value will be returned even
  * if the register is not replicated and therefore does not actually require
  * steering.
  */
-void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
-					 u8 *sliceid, u8 *subsliceid)
+void intel_gt_mcr_get_nonterminated_steering(struct intel_gt *gt,
+					     i915_reg_t reg,
+					     u8 *group, u8 *instance)
 {
 	int type;
 
 	for (type = 0; type < NUM_STEERING_TYPES; type++) {
-		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
-			intel_gt_get_valid_steering(gt, type, sliceid,
-						    subsliceid);
+		if (reg_needs_read_steering(gt, reg, type)) {
+			get_nonterminated_steering(gt, type, group, instance);
 			return;
 		}
 	}
 
-	*sliceid = gt->default_steering.groupid;
-	*subsliceid = gt->default_steering.instanceid;
+	*group = gt->default_steering.groupid;
+	*instance = gt->default_steering.instanceid;
 }
 
 /**
- * intel_gt_read_register_fw - reads a GT register with support for multicast
+ * intel_gt_mcr_read_any_fw - reads one instance of an MCR register
  * @gt: GT structure
  * @reg: register to read
  *
- * This function will read a GT register.  If the register is a multicast
- * register, the read will be steered to a valid instance (i.e., one that
- * isn't fused off or powered down by power gating).
+ * Reads a GT MCR register.  The read will be steered to a non-terminated
+ * instance (i.e., one that isn't fused off or powered down by power gating).
+ * This function assumes the caller is already holding any necessary forcewake
+ * domains; use intel_gt_mcr_read_any() in cases where forcewake should be
+ * obtained automatically.
  *
- * Returns the value from a valid instance of @reg.
+ * Returns the value from a non-terminated instance of @reg.
  */
-u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg)
+u32 intel_gt_mcr_read_any_fw(struct intel_gt *gt, i915_reg_t reg)
 {
 	int type;
-	u8 sliceid, subsliceid;
+	u8 group, instance;
 
 	for (type = 0; type < NUM_STEERING_TYPES; type++) {
-		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
-			intel_gt_get_valid_steering(gt, type, &sliceid,
-						    &subsliceid);
-			return intel_uncore_read_with_mcr_steering_fw(gt->uncore,
-								      reg,
-								      sliceid,
-								      subsliceid);
+		if (reg_needs_read_steering(gt, reg, type)) {
+			get_nonterminated_steering(gt, type, &group, &instance);
+			return rw_with_mcr_steering_fw(gt->uncore, reg,
+						       FW_REG_READ,
+						       group, instance, 0);
 		}
 	}
 
 	return intel_uncore_read_fw(gt->uncore, reg);
 }
 
-u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg)
+/**
+ * intel_gt_mcr_read_any - reads one instance of an MCR register
+ * @gt: GT structure
+ * @reg: register to read
+ *
+ * Reads a GT MCR register.  The read will be steered to a non-terminated
+ * instance (i.e., one that isn't fused off or powered down by power gating).
+ *
+ * Returns the value from a non-terminated instance of @reg.
+ */
+u32 intel_gt_mcr_read_any(struct intel_gt *gt, i915_reg_t reg)
 {
 	int type;
-	u8 sliceid, subsliceid;
+	u8 group, instance;
 
 	for (type = 0; type < NUM_STEERING_TYPES; type++) {
-		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
-			intel_gt_get_valid_steering(gt, type, &sliceid,
-						    &subsliceid);
-			return intel_uncore_read_with_mcr_steering(gt->uncore,
-								   reg,
-								   sliceid,
-								   subsliceid);
+		if (reg_needs_read_steering(gt, reg, type)) {
+			get_nonterminated_steering(gt, type, &group, &instance);
+			return rw_with_mcr_steering(gt->uncore, reg,
+						    FW_REG_READ,
+						    group, instance, 0);
 		}
 	}
 
@@ -410,7 +459,7 @@ static void report_steering_type(struct drm_printer *p,
 				 bool dump_table)
 {
 	const struct intel_mmio_range *entry;
-	u8 slice, subslice;
+	u8 group, instance;
 
 	BUILD_BUG_ON(ARRAY_SIZE(intel_steering_types) != NUM_STEERING_TYPES);
 
@@ -420,9 +469,9 @@ static void report_steering_type(struct drm_printer *p,
 		return;
 	}
 
-	intel_gt_get_valid_steering(gt, type, &slice, &subslice);
-	drm_printf(p, "%s steering: sliceid=0x%x, subsliceid=0x%x\n",
-		   intel_steering_types[type], slice, subslice);
+	get_nonterminated_steering(gt, type, &group, &instance);
+	drm_printf(p, "%s steering: group=0x%x, instance=0x%x\n",
+		   intel_steering_types[type], group, instance);
 
 	if (!dump_table)
 		return;
@@ -431,10 +480,10 @@ static void report_steering_type(struct drm_printer *p,
 		drm_printf(p, "\t0x%06x - 0x%06x\n", entry->start, entry->end);
 }
 
-void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
-			      bool dump_table)
+void intel_gt_mcr_report_steering(struct drm_printer *p, struct intel_gt *gt,
+				  bool dump_table)
 {
-	drm_printf(p, "Default steering: sliceid=0x%x, subsliceid=0x%x\n",
+	drm_printf(p, "Default steering: group=0x%x, instance=0x%x\n",
 		   gt->default_steering.groupid,
 		   gt->default_steering.instanceid);
 
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.h b/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
index b570c1571243..506b0cbc8db3 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
+++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
@@ -10,28 +10,25 @@
 
 void intel_gt_mcr_init(struct intel_gt *gt);
 
-u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
-					   i915_reg_t reg,
-					   int slice, int subslice);
-u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
-					i915_reg_t reg,	int slice, int subslice);
-void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
-					  i915_reg_t reg, u32 value,
-					  int slice, int subslice);
-
-u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg);
-u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg);
-
-static inline bool intel_gt_needs_read_steering(struct intel_gt *gt,
-						enum intel_steering_type type)
-{
-	return gt->steering_table[type];
-}
-
-void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
-					 u8 *sliceid, u8 *subsliceid);
-
-void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
-			      bool dump_table);
+u32 intel_gt_mcr_read(struct intel_gt *gt,
+		      i915_reg_t reg,
+		      int group, int instance);
+u32 intel_gt_mcr_read_any_fw(struct intel_gt *gt, i915_reg_t reg);
+u32 intel_gt_mcr_read_any(struct intel_gt *gt, i915_reg_t reg);
+
+void intel_gt_mcr_unicast_write(struct intel_gt *gt,
+				i915_reg_t reg, u32 value,
+				int group, int instance);
+void intel_gt_mcr_multicast_write(struct intel_gt *gt,
+				  i915_reg_t reg, u32 value);
+void intel_gt_mcr_multicast_write_fw(struct intel_gt *gt,
+				     i915_reg_t reg, u32 value);
+
+void intel_gt_mcr_get_nonterminated_steering(struct intel_gt *gt,
+					     i915_reg_t reg,
+					     u8 *group, u8 *instance);
+
+void intel_gt_mcr_report_steering(struct drm_printer *p, struct intel_gt *gt,
+				  bool dump_table);
 
 #endif /* __INTEL_GT_MCR__ */
diff --git a/drivers/gpu/drm/i915/gt/intel_region_lmem.c b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
index 1f4e7237a924..2ff448047020 100644
--- a/drivers/gpu/drm/i915/gt/intel_region_lmem.c
+++ b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
@@ -105,11 +105,11 @@ static struct intel_memory_region *setup_lmem(struct intel_gt *gt)
 		resource_size_t lmem_range;
 		u64 tile_stolen, flat_ccs_base;
 
-		lmem_range = intel_gt_read_register(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
+		lmem_range = intel_gt_mcr_read_any(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
 		lmem_size = lmem_range >> XEHPSDV_TILE_LMEM_RANGE_SHIFT;
 		lmem_size *= SZ_1G;
 
-		flat_ccs_base = intel_gt_read_register(gt, XEHPSDV_FLAT_CCS_BASE_ADDR);
+		flat_ccs_base = intel_gt_mcr_read_any(gt, XEHPSDV_FLAT_CCS_BASE_ADDR);
 		flat_ccs_base = (flat_ccs_base >> XEHPSDV_CCS_BASE_SHIFT) * SZ_64K;
 
 		/* FIXME: Remove this when we have small-bar enabled */
diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
index 97d7f30b1229..e42fbb982bb3 100644
--- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
+++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
@@ -1083,7 +1083,7 @@ static void __add_mcr_wa(struct intel_gt *gt, struct i915_wa_list *wal,
 	gt->default_steering.instanceid = subslice;
 
 	if (drm_debug_enabled(DRM_UT_DRIVER))
-		intel_gt_report_steering(&p, gt, false);
+		intel_gt_mcr_report_steering(&p, gt, false);
 }
 
 static void
@@ -1624,13 +1624,13 @@ wa_list_apply(struct intel_gt *gt, const struct i915_wa_list *wal)
 		u32 val, old = 0;
 
 		/* open-coded rmw due to steering */
-		old = wa->clr ? intel_gt_read_register_fw(gt, wa->reg) : 0;
+		old = wa->clr ? intel_gt_mcr_read_any_fw(gt, wa->reg) : 0;
 		val = (old & ~wa->clr) | wa->set;
 		if (val != old || !wa->clr)
 			intel_uncore_write_fw(uncore, wa->reg, val);
 
 		if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
-			wa_verify(wa, intel_gt_read_register_fw(gt, wa->reg),
+			wa_verify(wa, intel_gt_mcr_read_any_fw(gt, wa->reg),
 				  wal->name, "application");
 	}
 
@@ -1661,7 +1661,7 @@ static bool wa_list_verify(struct intel_gt *gt,
 
 	for (i = 0, wa = wal->list; i < wal->count; i++, wa++)
 		ok &= wa_verify(wa,
-				intel_gt_read_register_fw(gt, wa->reg),
+				intel_gt_mcr_read_any_fw(gt, wa->reg),
 				wal->name, from);
 
 	intel_uncore_forcewake_put__locked(uncore, fw);
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
index dea138d78111..ba7541f3ca61 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
@@ -314,7 +314,7 @@ static long __must_check guc_mmio_reg_add(struct intel_gt *gt,
 	 * tracking, it is easier to just program the default steering for all
 	 * regs that don't need a non-default one.
 	 */
-	intel_gt_get_valid_steering_for_reg(gt, reg, &group, &inst);
+	intel_gt_mcr_get_nonterminated_steering(gt, reg, &group, &inst);
 	entry.flags |= GUC_REGSET_STEERING(group, inst);
 
 	slot = __mmio_reg_add(regset, &entry);
-- 
2.35.3


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

* [Intel-gfx] [PATCH v2 2/2] drm/i915/gt: Cleanup interface for MCR operations
@ 2022-06-15  0:10   ` Matt Roper
  0 siblings, 0 replies; 19+ messages in thread
From: Matt Roper @ 2022-06-15  0:10 UTC (permalink / raw)
  To: intel-gfx; +Cc: dri-devel

Let's replace the assortment of intel_gt_* and intel_uncore_* functions
that operate on MCR registers with a cleaner set of interfaces:

  * intel_gt_mcr_read -- unicast read from specific instance
  * intel_gt_mcr_read_any[_fw] -- unicast read from any non-terminated
    instance
  * intel_gt_mcr_unicast_write -- unicast write to specific instance
  * intel_gt_mcr_multicast_write[_fw] -- multicast write to all instances

We'll also replace the historic "slice" and "subslice" terminology with
"group" and "instance" to match the documentation for more recent
platforms; these days MCR steering applies to more types of replication
than just slice/subslice.

v2:
 - Reference the new kerneldoc from i915.rst.  (Jani)
 - Tweak the wording of the documentation for a couple functions to
   clarify the difference between "_fw" and non-"_fw" forms.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Acked-by: Jani Nikula <jani.nikula@linux.intel.com>
---
 Documentation/gpu/i915.rst                  |  12 +
 drivers/gpu/drm/i915/gem/i915_gem_stolen.c  |   2 +-
 drivers/gpu/drm/i915/gt/intel_engine_cs.c   |  33 ++-
 drivers/gpu/drm/i915/gt/intel_gt_debugfs.c  |   2 +-
 drivers/gpu/drm/i915/gt/intel_gt_mcr.c      | 239 ++++++++++++--------
 drivers/gpu/drm/i915/gt/intel_gt_mcr.h      |  43 ++--
 drivers/gpu/drm/i915/gt/intel_region_lmem.c |   4 +-
 drivers/gpu/drm/i915/gt/intel_workarounds.c |   8 +-
 drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c  |   2 +-
 9 files changed, 200 insertions(+), 145 deletions(-)

diff --git a/Documentation/gpu/i915.rst b/Documentation/gpu/i915.rst
index 54060cd6c419..4e59db1cfb00 100644
--- a/Documentation/gpu/i915.rst
+++ b/Documentation/gpu/i915.rst
@@ -246,6 +246,18 @@ Display State Buffer
 .. kernel-doc:: drivers/gpu/drm/i915/display/intel_dsb.c
    :internal:
 
+GT Programming
+==============
+
+Multicast/Replicated (MCR) Registers
+------------------------------------
+
+.. kernel-doc:: drivers/gpu/drm/i915/gt/intel_gt_mcr.c
+   :doc: GT Multicast/Replicated (MCR) Register Support
+
+.. kernel-doc:: drivers/gpu/drm/i915/gt/intel_gt_mcr.c
+   :internal:
+
 Memory Management and Command Submission
 ========================================
 
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
index da30503d3ca2..fa54823d1219 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
@@ -835,7 +835,7 @@ i915_gem_stolen_lmem_setup(struct drm_i915_private *i915, u16 type,
 	} else {
 		resource_size_t lmem_range;
 
-		lmem_range = intel_gt_read_register(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
+		lmem_range = intel_gt_mcr_read_any(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
 		lmem_size = lmem_range >> XEHPSDV_TILE_LMEM_RANGE_SHIFT;
 		lmem_size *= SZ_1G;
 	}
diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
index 244af1bdb7db..136cc44c3deb 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
@@ -1428,14 +1428,6 @@ void intel_engine_cancel_stop_cs(struct intel_engine_cs *engine)
 	ENGINE_WRITE_FW(engine, RING_MI_MODE, _MASKED_BIT_DISABLE(STOP_RING));
 }
 
-static u32
-read_subslice_reg(const struct intel_engine_cs *engine,
-		  int slice, int subslice, i915_reg_t reg)
-{
-	return intel_uncore_read_with_mcr_steering(engine->uncore, reg,
-						   slice, subslice);
-}
-
 /* NB: please notice the memset */
 void intel_engine_get_instdone(const struct intel_engine_cs *engine,
 			       struct intel_instdone *instdone)
@@ -1469,28 +1461,33 @@ void intel_engine_get_instdone(const struct intel_engine_cs *engine,
 		if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 50)) {
 			for_each_instdone_gslice_dss_xehp(i915, sseu, iter, slice, subslice) {
 				instdone->sampler[slice][subslice] =
-					read_subslice_reg(engine, slice, subslice,
-							  GEN7_SAMPLER_INSTDONE);
+					intel_gt_mcr_read(engine->gt,
+							  GEN7_SAMPLER_INSTDONE,
+							  slice, subslice);
 				instdone->row[slice][subslice] =
-					read_subslice_reg(engine, slice, subslice,
-							  GEN7_ROW_INSTDONE);
+					intel_gt_mcr_read(engine->gt,
+							  GEN7_ROW_INSTDONE,
+							  slice, subslice);
 			}
 		} else {
 			for_each_instdone_slice_subslice(i915, sseu, slice, subslice) {
 				instdone->sampler[slice][subslice] =
-					read_subslice_reg(engine, slice, subslice,
-							  GEN7_SAMPLER_INSTDONE);
+					intel_gt_mcr_read(engine->gt,
+							  GEN7_SAMPLER_INSTDONE,
+							  slice, subslice);
 				instdone->row[slice][subslice] =
-					read_subslice_reg(engine, slice, subslice,
-							  GEN7_ROW_INSTDONE);
+					intel_gt_mcr_read(engine->gt,
+							  GEN7_ROW_INSTDONE,
+							  slice, subslice);
 			}
 		}
 
 		if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 55)) {
 			for_each_instdone_gslice_dss_xehp(i915, sseu, iter, slice, subslice)
 				instdone->geom_svg[slice][subslice] =
-					read_subslice_reg(engine, slice, subslice,
-							  XEHPG_INSTDONE_GEOM_SVG);
+					intel_gt_mcr_read(engine->gt,
+							  XEHPG_INSTDONE_GEOM_SVG,
+							  slice, subslice);
 		}
 	} else if (GRAPHICS_VER(i915) >= 7) {
 		instdone->instdone =
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
index ea07f2bb846f..dd53641f3637 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
@@ -65,7 +65,7 @@ static int steering_show(struct seq_file *m, void *data)
 	struct drm_printer p = drm_seq_file_printer(m);
 	struct intel_gt *gt = m->private;
 
-	intel_gt_report_steering(&p, gt, true);
+	intel_gt_mcr_report_steering(&p, gt, true);
 
 	return 0;
 }
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
index 1279a1fe1001..aa4fb308d468 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
@@ -134,23 +134,22 @@ void intel_gt_mcr_init(struct intel_gt *gt)
 	}
 }
 
-/**
- * uncore_rw_with_mcr_steering_fw - Access a register after programming
- *				    the MCR selector register.
+/*
+ * rw_with_mcr_steering_fw - Access a register with specific MCR steering
  * @uncore: pointer to struct intel_uncore
  * @reg: register being accessed
  * @rw_flag: FW_REG_READ for read access or FW_REG_WRITE for write access
- * @slice: slice number (ignored for multi-cast write)
- * @subslice: sub-slice number (ignored for multi-cast write)
+ * @group: group number (documented as "sliceid" on older platforms)
+ * @instance: instance number (documented as "subsliceid" on older platforms)
  * @value: register value to be written (ignored for read)
  *
  * Return: 0 for write access. register value for read access.
  *
  * Caller needs to make sure the relevant forcewake wells are up.
  */
-static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
-					  i915_reg_t reg, u8 rw_flag,
-					  int slice, int subslice, u32 value)
+static u32 rw_with_mcr_steering_fw(struct intel_uncore *uncore,
+				   i915_reg_t reg, u8 rw_flag,
+				   int group, int instance, u32 value)
 {
 	u32 mcr_mask, mcr_ss, mcr, old_mcr, val = 0;
 
@@ -158,7 +157,7 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
 
 	if (GRAPHICS_VER(uncore->i915) >= 11) {
 		mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
-		mcr_ss = GEN11_MCR_SLICE(slice) | GEN11_MCR_SUBSLICE(subslice);
+		mcr_ss = GEN11_MCR_SLICE(group) | GEN11_MCR_SUBSLICE(instance);
 
 		/*
 		 * Wa_22013088509
@@ -176,7 +175,7 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
 			mcr_mask |= GEN11_MCR_MULTICAST;
 	} else {
 		mcr_mask = GEN8_MCR_SLICE_MASK | GEN8_MCR_SUBSLICE_MASK;
-		mcr_ss = GEN8_MCR_SLICE(slice) | GEN8_MCR_SUBSLICE(subslice);
+		mcr_ss = GEN8_MCR_SLICE(group) | GEN8_MCR_SUBSLICE(instance);
 	}
 
 	old_mcr = mcr = intel_uncore_read_fw(uncore, GEN8_MCR_SELECTOR);
@@ -198,10 +197,10 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
 	return val;
 }
 
-static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
-				       i915_reg_t reg, u8 rw_flag,
-				       int slice, int subslice,
-				       u32 value)
+static u32 rw_with_mcr_steering(struct intel_uncore *uncore,
+				i915_reg_t reg, u8 rw_flag,
+				int group, int instance,
+				u32 value)
 {
 	enum forcewake_domains fw_domains;
 	u32 val;
@@ -215,8 +214,7 @@ static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
 	spin_lock_irq(&uncore->lock);
 	intel_uncore_forcewake_get__locked(uncore, fw_domains);
 
-	val = uncore_rw_with_mcr_steering_fw(uncore, reg, rw_flag,
-					     slice, subslice, value);
+	val = rw_with_mcr_steering_fw(uncore, reg, rw_flag, group, instance, value);
 
 	intel_uncore_forcewake_put__locked(uncore, fw_domains);
 	spin_unlock_irq(&uncore->lock);
@@ -224,31 +222,73 @@ static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
 	return val;
 }
 
-u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
-					   i915_reg_t reg, int slice, int subslice)
+/**
+ * intel_gt_mcr_read - read a specific instance of an MCR register
+ * @gt: GT structure
+ * @reg: the MCR register to read
+ * @group: the MCR group
+ * @instance: the MCR instance
+ *
+ * Returns the value read from an MCR register after steering toward a specific
+ * group/instance.
+ */
+u32 intel_gt_mcr_read(struct intel_gt *gt,
+		      i915_reg_t reg,
+		      int group, int instance)
 {
-	return uncore_rw_with_mcr_steering_fw(uncore, reg, FW_REG_READ,
-					      slice, subslice, 0);
+	return rw_with_mcr_steering(gt->uncore, reg, FW_REG_READ, group, instance, 0);
 }
 
-u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
-					i915_reg_t reg, int slice, int subslice)
+/**
+ * intel_gt_mcr_unicast_write - write a specific instance of an MCR register
+ * @gt: GT structure
+ * @reg: the MCR register to read
+ * @value: value to write
+ * @group: the MCR group
+ * @instance: the MCR instance
+ *
+ * Write an MCR register in unicast mode after steering toward a specific
+ * group/instance.
+ */
+void intel_gt_mcr_unicast_write(struct intel_gt *gt, i915_reg_t reg, u32 value,
+				int group, int instance)
 {
-	return uncore_rw_with_mcr_steering(uncore, reg, FW_REG_READ,
-					   slice, subslice, 0);
+	rw_with_mcr_steering(gt->uncore, reg, FW_REG_WRITE, group, instance, value);
 }
 
-void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
-					  i915_reg_t reg, u32 value,
-					  int slice, int subslice)
+/**
+ * intel_gt_mcr_multicast_write - write a value to all instances of an MCR register
+ * @gt: GT structure
+ * @reg: the MCR register to read
+ * @value: value to write
+ *
+ * Write an MCR register in multicast mode to update all instances.
+ */
+void intel_gt_mcr_multicast_write(struct intel_gt *gt,
+				i915_reg_t reg, u32 value)
 {
-	uncore_rw_with_mcr_steering(uncore, reg, FW_REG_WRITE,
-				    slice, subslice, value);
+	intel_uncore_write(gt->uncore, reg, value);
 }
 
 /**
- * intel_gt_reg_needs_read_steering - determine whether a register read
- *     requires explicit steering
+ * intel_gt_mcr_multicast_write_fw - write a value to all instances of an MCR register
+ * @gt: GT structure
+ * @reg: the MCR register to read
+ * @value: value to write
+ *
+ * Write an MCR register in multicast mode to update all instances.  This
+ * function assumes the caller is already holding any necessary forcewake
+ * domains; use intel_gt_mcr_multicast_write() in cases where forcewake should
+ * be obtained automatically.
+ */
+void intel_gt_mcr_multicast_write_fw(struct intel_gt *gt, i915_reg_t reg, u32 value)
+{
+	intel_uncore_write_fw(gt->uncore, reg, value);
+}
+
+/*
+ * reg_needs_read_steering - determine whether a register read requires
+ *     explicit steering
  * @gt: GT structure
  * @reg: the register to check steering requirements for
  * @type: type of multicast steering to check
@@ -260,14 +300,14 @@ void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
  * steering type, or if the default (subslice-based) steering IDs are suitable
  * for @type steering too.
  */
-static bool intel_gt_reg_needs_read_steering(struct intel_gt *gt,
-					     i915_reg_t reg,
-					     enum intel_steering_type type)
+static bool reg_needs_read_steering(struct intel_gt *gt,
+				    i915_reg_t reg,
+				    enum intel_steering_type type)
 {
 	const u32 offset = i915_mmio_reg_offset(reg);
 	const struct intel_mmio_range *entry;
 
-	if (likely(!intel_gt_needs_read_steering(gt, type)))
+	if (likely(!gt->steering_table[type]))
 		return false;
 
 	for (entry = gt->steering_table[type]; entry->end; entry++) {
@@ -278,29 +318,29 @@ static bool intel_gt_reg_needs_read_steering(struct intel_gt *gt,
 	return false;
 }
 
-/**
- * intel_gt_get_valid_steering - determines valid IDs for a class of MCR steering
+/*
+ * get_nonterminated_steering - determines valid IDs for a class of MCR steering
  * @gt: GT structure
  * @type: multicast register type
- * @sliceid: Slice ID returned
- * @subsliceid: Subslice ID returned
+ * @group: Group ID returned
+ * @instance: Instance ID returned
  *
- * Determines sliceid and subsliceid values that will steer reads
- * of a specific multicast register class to a valid value.
+ * Determines group and instance values that will steer reads of the specified
+ * MCR class to a non-terminated instance.
  */
-static void intel_gt_get_valid_steering(struct intel_gt *gt,
-					enum intel_steering_type type,
-					u8 *sliceid, u8 *subsliceid)
+static void get_nonterminated_steering(struct intel_gt *gt,
+				       enum intel_steering_type type,
+				       u8 *group, u8 *instance)
 {
 	switch (type) {
 	case L3BANK:
-		*sliceid = 0;		/* unused */
-		*subsliceid = __ffs(gt->info.l3bank_mask);
+		*group = 0;		/* unused */
+		*instance = __ffs(gt->info.l3bank_mask);
 		break;
 	case MSLICE:
 		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
-		*sliceid = __ffs(gt->info.mslice_mask);
-		*subsliceid = 0;	/* unused */
+		*group = __ffs(gt->info.mslice_mask);
+		*instance = 0;	/* unused */
 		break;
 	case LNCF:
 		/*
@@ -308,96 +348,105 @@ static void intel_gt_get_valid_steering(struct intel_gt *gt,
 		 * can safely just steer to LNCF 0 in all cases.
 		 */
 		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
-		*sliceid = __ffs(gt->info.mslice_mask) << 1;
-		*subsliceid = 0;	/* unused */
+		*group = __ffs(gt->info.mslice_mask) << 1;
+		*instance = 0;	/* unused */
 		break;
 	case INSTANCE0:
 		/*
 		 * There are a lot of MCR types for which instance (0, 0)
 		 * will always provide a non-terminated value.
 		 */
-		*sliceid = 0;
-		*subsliceid = 0;
+		*group = 0;
+		*instance = 0;
 		break;
 	default:
 		MISSING_CASE(type);
-		*sliceid = 0;
-		*subsliceid = 0;
+		*group = 0;
+		*instance = 0;
 	}
 }
 
 /**
- * intel_gt_get_valid_steering_for_reg - get a valid steering for a register
+ * intel_gt_mcr_get_nonterminated_steering - find group/instance values that
+ *    will steer a register to a non-terminated instance
  * @gt: GT structure
  * @reg: register for which the steering is required
- * @sliceid: return variable for slice steering
- * @subsliceid: return variable for subslice steering
+ * @group: return variable for group steering
+ * @instance: return variable for instance steering
  *
- * This function returns a slice/subslice pair that is guaranteed to work for
+ * This function returns a group/instance pair that is guaranteed to work for
  * read steering of the given register. Note that a value will be returned even
  * if the register is not replicated and therefore does not actually require
  * steering.
  */
-void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
-					 u8 *sliceid, u8 *subsliceid)
+void intel_gt_mcr_get_nonterminated_steering(struct intel_gt *gt,
+					     i915_reg_t reg,
+					     u8 *group, u8 *instance)
 {
 	int type;
 
 	for (type = 0; type < NUM_STEERING_TYPES; type++) {
-		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
-			intel_gt_get_valid_steering(gt, type, sliceid,
-						    subsliceid);
+		if (reg_needs_read_steering(gt, reg, type)) {
+			get_nonterminated_steering(gt, type, group, instance);
 			return;
 		}
 	}
 
-	*sliceid = gt->default_steering.groupid;
-	*subsliceid = gt->default_steering.instanceid;
+	*group = gt->default_steering.groupid;
+	*instance = gt->default_steering.instanceid;
 }
 
 /**
- * intel_gt_read_register_fw - reads a GT register with support for multicast
+ * intel_gt_mcr_read_any_fw - reads one instance of an MCR register
  * @gt: GT structure
  * @reg: register to read
  *
- * This function will read a GT register.  If the register is a multicast
- * register, the read will be steered to a valid instance (i.e., one that
- * isn't fused off or powered down by power gating).
+ * Reads a GT MCR register.  The read will be steered to a non-terminated
+ * instance (i.e., one that isn't fused off or powered down by power gating).
+ * This function assumes the caller is already holding any necessary forcewake
+ * domains; use intel_gt_mcr_read_any() in cases where forcewake should be
+ * obtained automatically.
  *
- * Returns the value from a valid instance of @reg.
+ * Returns the value from a non-terminated instance of @reg.
  */
-u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg)
+u32 intel_gt_mcr_read_any_fw(struct intel_gt *gt, i915_reg_t reg)
 {
 	int type;
-	u8 sliceid, subsliceid;
+	u8 group, instance;
 
 	for (type = 0; type < NUM_STEERING_TYPES; type++) {
-		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
-			intel_gt_get_valid_steering(gt, type, &sliceid,
-						    &subsliceid);
-			return intel_uncore_read_with_mcr_steering_fw(gt->uncore,
-								      reg,
-								      sliceid,
-								      subsliceid);
+		if (reg_needs_read_steering(gt, reg, type)) {
+			get_nonterminated_steering(gt, type, &group, &instance);
+			return rw_with_mcr_steering_fw(gt->uncore, reg,
+						       FW_REG_READ,
+						       group, instance, 0);
 		}
 	}
 
 	return intel_uncore_read_fw(gt->uncore, reg);
 }
 
-u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg)
+/**
+ * intel_gt_mcr_read_any - reads one instance of an MCR register
+ * @gt: GT structure
+ * @reg: register to read
+ *
+ * Reads a GT MCR register.  The read will be steered to a non-terminated
+ * instance (i.e., one that isn't fused off or powered down by power gating).
+ *
+ * Returns the value from a non-terminated instance of @reg.
+ */
+u32 intel_gt_mcr_read_any(struct intel_gt *gt, i915_reg_t reg)
 {
 	int type;
-	u8 sliceid, subsliceid;
+	u8 group, instance;
 
 	for (type = 0; type < NUM_STEERING_TYPES; type++) {
-		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
-			intel_gt_get_valid_steering(gt, type, &sliceid,
-						    &subsliceid);
-			return intel_uncore_read_with_mcr_steering(gt->uncore,
-								   reg,
-								   sliceid,
-								   subsliceid);
+		if (reg_needs_read_steering(gt, reg, type)) {
+			get_nonterminated_steering(gt, type, &group, &instance);
+			return rw_with_mcr_steering(gt->uncore, reg,
+						    FW_REG_READ,
+						    group, instance, 0);
 		}
 	}
 
@@ -410,7 +459,7 @@ static void report_steering_type(struct drm_printer *p,
 				 bool dump_table)
 {
 	const struct intel_mmio_range *entry;
-	u8 slice, subslice;
+	u8 group, instance;
 
 	BUILD_BUG_ON(ARRAY_SIZE(intel_steering_types) != NUM_STEERING_TYPES);
 
@@ -420,9 +469,9 @@ static void report_steering_type(struct drm_printer *p,
 		return;
 	}
 
-	intel_gt_get_valid_steering(gt, type, &slice, &subslice);
-	drm_printf(p, "%s steering: sliceid=0x%x, subsliceid=0x%x\n",
-		   intel_steering_types[type], slice, subslice);
+	get_nonterminated_steering(gt, type, &group, &instance);
+	drm_printf(p, "%s steering: group=0x%x, instance=0x%x\n",
+		   intel_steering_types[type], group, instance);
 
 	if (!dump_table)
 		return;
@@ -431,10 +480,10 @@ static void report_steering_type(struct drm_printer *p,
 		drm_printf(p, "\t0x%06x - 0x%06x\n", entry->start, entry->end);
 }
 
-void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
-			      bool dump_table)
+void intel_gt_mcr_report_steering(struct drm_printer *p, struct intel_gt *gt,
+				  bool dump_table)
 {
-	drm_printf(p, "Default steering: sliceid=0x%x, subsliceid=0x%x\n",
+	drm_printf(p, "Default steering: group=0x%x, instance=0x%x\n",
 		   gt->default_steering.groupid,
 		   gt->default_steering.instanceid);
 
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.h b/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
index b570c1571243..506b0cbc8db3 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
+++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
@@ -10,28 +10,25 @@
 
 void intel_gt_mcr_init(struct intel_gt *gt);
 
-u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
-					   i915_reg_t reg,
-					   int slice, int subslice);
-u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
-					i915_reg_t reg,	int slice, int subslice);
-void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
-					  i915_reg_t reg, u32 value,
-					  int slice, int subslice);
-
-u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg);
-u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg);
-
-static inline bool intel_gt_needs_read_steering(struct intel_gt *gt,
-						enum intel_steering_type type)
-{
-	return gt->steering_table[type];
-}
-
-void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
-					 u8 *sliceid, u8 *subsliceid);
-
-void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
-			      bool dump_table);
+u32 intel_gt_mcr_read(struct intel_gt *gt,
+		      i915_reg_t reg,
+		      int group, int instance);
+u32 intel_gt_mcr_read_any_fw(struct intel_gt *gt, i915_reg_t reg);
+u32 intel_gt_mcr_read_any(struct intel_gt *gt, i915_reg_t reg);
+
+void intel_gt_mcr_unicast_write(struct intel_gt *gt,
+				i915_reg_t reg, u32 value,
+				int group, int instance);
+void intel_gt_mcr_multicast_write(struct intel_gt *gt,
+				  i915_reg_t reg, u32 value);
+void intel_gt_mcr_multicast_write_fw(struct intel_gt *gt,
+				     i915_reg_t reg, u32 value);
+
+void intel_gt_mcr_get_nonterminated_steering(struct intel_gt *gt,
+					     i915_reg_t reg,
+					     u8 *group, u8 *instance);
+
+void intel_gt_mcr_report_steering(struct drm_printer *p, struct intel_gt *gt,
+				  bool dump_table);
 
 #endif /* __INTEL_GT_MCR__ */
diff --git a/drivers/gpu/drm/i915/gt/intel_region_lmem.c b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
index 1f4e7237a924..2ff448047020 100644
--- a/drivers/gpu/drm/i915/gt/intel_region_lmem.c
+++ b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
@@ -105,11 +105,11 @@ static struct intel_memory_region *setup_lmem(struct intel_gt *gt)
 		resource_size_t lmem_range;
 		u64 tile_stolen, flat_ccs_base;
 
-		lmem_range = intel_gt_read_register(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
+		lmem_range = intel_gt_mcr_read_any(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
 		lmem_size = lmem_range >> XEHPSDV_TILE_LMEM_RANGE_SHIFT;
 		lmem_size *= SZ_1G;
 
-		flat_ccs_base = intel_gt_read_register(gt, XEHPSDV_FLAT_CCS_BASE_ADDR);
+		flat_ccs_base = intel_gt_mcr_read_any(gt, XEHPSDV_FLAT_CCS_BASE_ADDR);
 		flat_ccs_base = (flat_ccs_base >> XEHPSDV_CCS_BASE_SHIFT) * SZ_64K;
 
 		/* FIXME: Remove this when we have small-bar enabled */
diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
index 97d7f30b1229..e42fbb982bb3 100644
--- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
+++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
@@ -1083,7 +1083,7 @@ static void __add_mcr_wa(struct intel_gt *gt, struct i915_wa_list *wal,
 	gt->default_steering.instanceid = subslice;
 
 	if (drm_debug_enabled(DRM_UT_DRIVER))
-		intel_gt_report_steering(&p, gt, false);
+		intel_gt_mcr_report_steering(&p, gt, false);
 }
 
 static void
@@ -1624,13 +1624,13 @@ wa_list_apply(struct intel_gt *gt, const struct i915_wa_list *wal)
 		u32 val, old = 0;
 
 		/* open-coded rmw due to steering */
-		old = wa->clr ? intel_gt_read_register_fw(gt, wa->reg) : 0;
+		old = wa->clr ? intel_gt_mcr_read_any_fw(gt, wa->reg) : 0;
 		val = (old & ~wa->clr) | wa->set;
 		if (val != old || !wa->clr)
 			intel_uncore_write_fw(uncore, wa->reg, val);
 
 		if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
-			wa_verify(wa, intel_gt_read_register_fw(gt, wa->reg),
+			wa_verify(wa, intel_gt_mcr_read_any_fw(gt, wa->reg),
 				  wal->name, "application");
 	}
 
@@ -1661,7 +1661,7 @@ static bool wa_list_verify(struct intel_gt *gt,
 
 	for (i = 0, wa = wal->list; i < wal->count; i++, wa++)
 		ok &= wa_verify(wa,
-				intel_gt_read_register_fw(gt, wa->reg),
+				intel_gt_mcr_read_any_fw(gt, wa->reg),
 				wal->name, from);
 
 	intel_uncore_forcewake_put__locked(uncore, fw);
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
index dea138d78111..ba7541f3ca61 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
@@ -314,7 +314,7 @@ static long __must_check guc_mmio_reg_add(struct intel_gt *gt,
 	 * tracking, it is easier to just program the default steering for all
 	 * regs that don't need a non-default one.
 	 */
-	intel_gt_get_valid_steering_for_reg(gt, reg, &group, &inst);
+	intel_gt_mcr_get_nonterminated_steering(gt, reg, &group, &inst);
 	entry.flags |= GUC_REGSET_STEERING(group, inst);
 
 	slot = __mmio_reg_add(regset, &entry);
-- 
2.35.3


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

* [Intel-gfx] ✗ Fi.CI.SPARSE: warning for i915: Extract, polish, and document multicast handling
  2022-06-15  0:10 ` [Intel-gfx] " Matt Roper
                   ` (2 preceding siblings ...)
  (?)
@ 2022-06-15  0:34 ` Patchwork
  -1 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2022-06-15  0:34 UTC (permalink / raw)
  To: Matt Roper; +Cc: intel-gfx

== Series Details ==

Series: i915: Extract, polish, and document multicast handling
URL   : https://patchwork.freedesktop.org/series/105134/
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] 19+ messages in thread

* [Intel-gfx] ✗ Fi.CI.BAT: failure for i915: Extract, polish, and document multicast handling
  2022-06-15  0:10 ` [Intel-gfx] " Matt Roper
                   ` (3 preceding siblings ...)
  (?)
@ 2022-06-15  1:03 ` Patchwork
  2022-06-15 21:05   ` Matt Roper
  -1 siblings, 1 reply; 19+ messages in thread
From: Patchwork @ 2022-06-15  1:03 UTC (permalink / raw)
  To: Matt Roper; +Cc: intel-gfx

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

== Series Details ==

Series: i915: Extract, polish, and document multicast handling
URL   : https://patchwork.freedesktop.org/series/105134/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_11758 -> Patchwork_105134v1
====================================================

Summary
-------

  **FAILURE**

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

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

Participating hosts (43 -> 43)
------------------------------

  Additional (2): fi-hsw-4770 bat-dg2-9 
  Missing    (2): bat-atsm-1 fi-bdw-samus 

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@i915_module_load@load:
    - fi-hsw-4770:        NOTRUN -> [DMESG-WARN][1]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-hsw-4770/igt@i915_module_load@load.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@i915_selftest@live@gem:
    - fi-blb-e6850:       NOTRUN -> [DMESG-FAIL][2] ([i915#4528])
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-blb-e6850/igt@i915_selftest@live@gem.html
    - fi-pnv-d510:        NOTRUN -> [DMESG-FAIL][3] ([i915#4528])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-pnv-d510/igt@i915_selftest@live@gem.html

  * igt@i915_selftest@live@hangcheck:
    - bat-dg1-6:          [PASS][4] -> [DMESG-FAIL][5] ([i915#4494] / [i915#4957])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/bat-dg1-6/igt@i915_selftest@live@hangcheck.html
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-dg1-6/igt@i915_selftest@live@hangcheck.html

  * igt@i915_suspend@basic-s2idle-without-i915:
    - bat-dg1-5:          NOTRUN -> [INCOMPLETE][6] ([i915#6011])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-dg1-5/igt@i915_suspend@basic-s2idle-without-i915.html

  * igt@kms_chamelium@common-hpd-after-suspend:
    - fi-bsw-n3050:       NOTRUN -> [SKIP][7] ([fdo#109271] / [fdo#111827])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-bsw-n3050/igt@kms_chamelium@common-hpd-after-suspend.html

  * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a:
    - fi-bsw-n3050:       NOTRUN -> [SKIP][8] ([fdo#109271])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-bsw-n3050/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html

  * igt@runner@aborted:
    - fi-hsw-4770:        NOTRUN -> [FAIL][9] ([i915#4312] / [i915#5594])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-hsw-4770/igt@runner@aborted.html

  
#### Possible fixes ####

  * igt@i915_pm_rpm@module-reload:
    - bat-adlp-4:         [DMESG-WARN][10] ([i915#3576]) -> [PASS][11] +2 similar issues
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/bat-adlp-4/igt@i915_pm_rpm@module-reload.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-adlp-4/igt@i915_pm_rpm@module-reload.html

  * igt@i915_selftest@live@execlists:
    - fi-bsw-n3050:       [INCOMPLETE][12] ([i915#2940]) -> [PASS][13]
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-bsw-n3050/igt@i915_selftest@live@execlists.html
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-bsw-n3050/igt@i915_selftest@live@execlists.html

  * igt@i915_selftest@live@gt_engines:
    - bat-dg1-5:          [INCOMPLETE][14] ([i915#4418]) -> [PASS][15]
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/bat-dg1-5/igt@i915_selftest@live@gt_engines.html
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-dg1-5/igt@i915_selftest@live@gt_engines.html

  * igt@i915_selftest@live@requests:
    - fi-pnv-d510:        [DMESG-FAIL][16] ([i915#4528]) -> [PASS][17]
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-pnv-d510/igt@i915_selftest@live@requests.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-pnv-d510/igt@i915_selftest@live@requests.html
    - fi-blb-e6850:       [DMESG-FAIL][18] ([i915#4528]) -> [PASS][19]
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-blb-e6850/igt@i915_selftest@live@requests.html
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-blb-e6850/igt@i915_selftest@live@requests.html

  * igt@kms_busy@basic@flip:
    - {bat-adlp-6}:       [DMESG-WARN][20] ([i915#3576]) -> [PASS][21] +1 similar issue
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/bat-adlp-6/igt@kms_busy@basic@flip.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-adlp-6/igt@kms_busy@basic@flip.html

  * igt@kms_flip@basic-flip-vs-modeset@a-edp1:
    - fi-tgl-u2:          [DMESG-WARN][22] ([i915#402]) -> [PASS][23]
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-tgl-u2/igt@kms_flip@basic-flip-vs-modeset@a-edp1.html
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-tgl-u2/igt@kms_flip@basic-flip-vs-modeset@a-edp1.html

  
#### Warnings ####

  * igt@i915_selftest@live@hangcheck:
    - fi-bdw-5557u:       [INCOMPLETE][24] ([i915#3921] / [i915#6105]) -> [INCOMPLETE][25] ([i915#3921])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-bdw-5557u/igt@i915_selftest@live@hangcheck.html
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-bdw-5557u/igt@i915_selftest@live@hangcheck.html

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

  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1155]: https://gitlab.freedesktop.org/drm/intel/issues/1155
  [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
  [i915#2940]: https://gitlab.freedesktop.org/drm/intel/issues/2940
  [i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3576]: https://gitlab.freedesktop.org/drm/intel/issues/3576
  [i915#3595]: https://gitlab.freedesktop.org/drm/intel/issues/3595
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#3921]: https://gitlab.freedesktop.org/drm/intel/issues/3921
  [i915#402]: https://gitlab.freedesktop.org/drm/intel/issues/402
  [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#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#4215]: https://gitlab.freedesktop.org/drm/intel/issues/4215
  [i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
  [i915#4418]: https://gitlab.freedesktop.org/drm/intel/issues/4418
  [i915#4494]: https://gitlab.freedesktop.org/drm/intel/issues/4494
  [i915#4528]: https://gitlab.freedesktop.org/drm/intel/issues/4528
  [i915#4579]: https://gitlab.freedesktop.org/drm/intel/issues/4579
  [i915#4873]: https://gitlab.freedesktop.org/drm/intel/issues/4873
  [i915#4957]: https://gitlab.freedesktop.org/drm/intel/issues/4957
  [i915#5174]: https://gitlab.freedesktop.org/drm/intel/issues/5174
  [i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190
  [i915#5274]: https://gitlab.freedesktop.org/drm/intel/issues/5274
  [i915#5356]: https://gitlab.freedesktop.org/drm/intel/issues/5356
  [i915#5594]: https://gitlab.freedesktop.org/drm/intel/issues/5594
  [i915#5763]: https://gitlab.freedesktop.org/drm/intel/issues/5763
  [i915#5885]: https://gitlab.freedesktop.org/drm/intel/issues/5885
  [i915#6011]: https://gitlab.freedesktop.org/drm/intel/issues/6011
  [i915#6105]: https://gitlab.freedesktop.org/drm/intel/issues/6105
  [i915#6227]: https://gitlab.freedesktop.org/drm/intel/issues/6227


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

  * Linux: CI_DRM_11758 -> Patchwork_105134v1

  CI-20190529: 20190529
  CI_DRM_11758: a2644b16f1f05a1a6eff99d7076bfa0e770bdeb6 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_6526: 02888400228efbb29437726aa04114575ea939c3 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_105134v1: a2644b16f1f05a1a6eff99d7076bfa0e770bdeb6 @ git://anongit.freedesktop.org/gfx-ci/linux


### Linux commits

aa8c692ba084 drm/i915/gt: Cleanup interface for MCR operations
6be8d7758465 drm/i915/gt: Move multicast register handling to a dedicated file

== Logs ==

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

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

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

* Re: [Intel-gfx]  ✗ Fi.CI.BAT: failure for i915: Extract, polish, and document multicast handling
  2022-06-15  1:03 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
@ 2022-06-15 21:05   ` Matt Roper
  2022-06-15 21:14     ` Vudum, Lakshminarayana
  0 siblings, 1 reply; 19+ messages in thread
From: Matt Roper @ 2022-06-15 21:05 UTC (permalink / raw)
  To: intel-gfx; +Cc: Ville Syrjälä, Vudum, Lakshminarayana

On Wed, Jun 15, 2022 at 01:03:06AM +0000, Patchwork wrote:
> == Series Details ==
> 
> Series: i915: Extract, polish, and document multicast handling
> URL   : https://patchwork.freedesktop.org/series/105134/
> State : failure
> 
> == Summary ==
> 
> CI Bug Log - changes from CI_DRM_11758 -> Patchwork_105134v1
> ====================================================
> 
> Summary
> -------
> 
>   **FAILURE**
> 
>   Serious unknown changes coming with Patchwork_105134v1 absolutely need to be
>   verified manually.
>   
>   If you think the reported changes have nothing to do with the changes
>   introduced in Patchwork_105134v1, please notify your bug team to allow them
>   to document this new failure mode, which will reduce false positives in CI.
> 
>   External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/index.html
> 
> Participating hosts (43 -> 43)
> ------------------------------
> 
>   Additional (2): fi-hsw-4770 bat-dg2-9 
>   Missing    (2): bat-atsm-1 fi-bdw-samus 
> 
> Possible new issues
> -------------------
> 
>   Here are the unknown changes that may have been introduced in Patchwork_105134v1:
> 
> ### IGT changes ###
> 
> #### Possible regressions ####
> 
>   * igt@i915_module_load@load:
>     - fi-hsw-4770:        NOTRUN -> [DMESG-WARN][1]
>    [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-hsw-4770/igt@i915_module_load@load.html

  <4> [25.955765] i915 0000:00:02.0: drm_WARN_ON(lpt_iclkip_freq(&p) != clock)
  <4> [25.955785] WARNING: CPU: 3 PID: 99 at drivers/gpu/drm/i915/display/intel_pch_refclk.c:182 lpt_program_iclkip+0x268/0x2f0 [i915]

This display warning is unrelated to GT multicast, so not caused by this
series.

I don't see any similar gitlab issues that match this, but the warning
itself only landed in i915 yesterday in this series:
https://patchwork.freedesktop.org/series/103491/ so it's possible this
is a known preexisting problem that just has a new warning signature
now and needs a new filter.  +Cc Ville as the author of that series.


Matt

> 
>   
> Known issues
> ------------
> 
>   Here are the changes found in Patchwork_105134v1 that come from known issues:
> 
> ### IGT changes ###
> 
> #### Issues hit ####
> 
>   * igt@i915_selftest@live@gem:
>     - fi-blb-e6850:       NOTRUN -> [DMESG-FAIL][2] ([i915#4528])
>    [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-blb-e6850/igt@i915_selftest@live@gem.html
>     - fi-pnv-d510:        NOTRUN -> [DMESG-FAIL][3] ([i915#4528])
>    [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-pnv-d510/igt@i915_selftest@live@gem.html
> 
>   * igt@i915_selftest@live@hangcheck:
>     - bat-dg1-6:          [PASS][4] -> [DMESG-FAIL][5] ([i915#4494] / [i915#4957])
>    [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/bat-dg1-6/igt@i915_selftest@live@hangcheck.html
>    [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-dg1-6/igt@i915_selftest@live@hangcheck.html
> 
>   * igt@i915_suspend@basic-s2idle-without-i915:
>     - bat-dg1-5:          NOTRUN -> [INCOMPLETE][6] ([i915#6011])
>    [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-dg1-5/igt@i915_suspend@basic-s2idle-without-i915.html
> 
>   * igt@kms_chamelium@common-hpd-after-suspend:
>     - fi-bsw-n3050:       NOTRUN -> [SKIP][7] ([fdo#109271] / [fdo#111827])
>    [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-bsw-n3050/igt@kms_chamelium@common-hpd-after-suspend.html
> 
>   * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a:
>     - fi-bsw-n3050:       NOTRUN -> [SKIP][8] ([fdo#109271])
>    [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-bsw-n3050/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html
> 
>   * igt@runner@aborted:
>     - fi-hsw-4770:        NOTRUN -> [FAIL][9] ([i915#4312] / [i915#5594])
>    [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-hsw-4770/igt@runner@aborted.html
> 
>   
> #### Possible fixes ####
> 
>   * igt@i915_pm_rpm@module-reload:
>     - bat-adlp-4:         [DMESG-WARN][10] ([i915#3576]) -> [PASS][11] +2 similar issues
>    [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/bat-adlp-4/igt@i915_pm_rpm@module-reload.html
>    [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-adlp-4/igt@i915_pm_rpm@module-reload.html
> 
>   * igt@i915_selftest@live@execlists:
>     - fi-bsw-n3050:       [INCOMPLETE][12] ([i915#2940]) -> [PASS][13]
>    [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-bsw-n3050/igt@i915_selftest@live@execlists.html
>    [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-bsw-n3050/igt@i915_selftest@live@execlists.html
> 
>   * igt@i915_selftest@live@gt_engines:
>     - bat-dg1-5:          [INCOMPLETE][14] ([i915#4418]) -> [PASS][15]
>    [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/bat-dg1-5/igt@i915_selftest@live@gt_engines.html
>    [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-dg1-5/igt@i915_selftest@live@gt_engines.html
> 
>   * igt@i915_selftest@live@requests:
>     - fi-pnv-d510:        [DMESG-FAIL][16] ([i915#4528]) -> [PASS][17]
>    [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-pnv-d510/igt@i915_selftest@live@requests.html
>    [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-pnv-d510/igt@i915_selftest@live@requests.html
>     - fi-blb-e6850:       [DMESG-FAIL][18] ([i915#4528]) -> [PASS][19]
>    [18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-blb-e6850/igt@i915_selftest@live@requests.html
>    [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-blb-e6850/igt@i915_selftest@live@requests.html
> 
>   * igt@kms_busy@basic@flip:
>     - {bat-adlp-6}:       [DMESG-WARN][20] ([i915#3576]) -> [PASS][21] +1 similar issue
>    [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/bat-adlp-6/igt@kms_busy@basic@flip.html
>    [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-adlp-6/igt@kms_busy@basic@flip.html
> 
>   * igt@kms_flip@basic-flip-vs-modeset@a-edp1:
>     - fi-tgl-u2:          [DMESG-WARN][22] ([i915#402]) -> [PASS][23]
>    [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-tgl-u2/igt@kms_flip@basic-flip-vs-modeset@a-edp1.html
>    [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-tgl-u2/igt@kms_flip@basic-flip-vs-modeset@a-edp1.html
> 
>   
> #### Warnings ####
> 
>   * igt@i915_selftest@live@hangcheck:
>     - fi-bdw-5557u:       [INCOMPLETE][24] ([i915#3921] / [i915#6105]) -> [INCOMPLETE][25] ([i915#3921])
>    [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-bdw-5557u/igt@i915_selftest@live@hangcheck.html
>    [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-bdw-5557u/igt@i915_selftest@live@hangcheck.html
> 
>   
>   {name}: This element is suppressed. This means it is ignored when computing
>           the status of the difference (SUCCESS, WARNING, or FAILURE).
> 
>   [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
>   [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
>   [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
>   [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
>   [i915#1155]: https://gitlab.freedesktop.org/drm/intel/issues/1155
>   [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
>   [i915#2940]: https://gitlab.freedesktop.org/drm/intel/issues/2940
>   [i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
>   [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
>   [i915#3576]: https://gitlab.freedesktop.org/drm/intel/issues/3576
>   [i915#3595]: https://gitlab.freedesktop.org/drm/intel/issues/3595
>   [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
>   [i915#3921]: https://gitlab.freedesktop.org/drm/intel/issues/3921
>   [i915#402]: https://gitlab.freedesktop.org/drm/intel/issues/402
>   [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#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#4215]: https://gitlab.freedesktop.org/drm/intel/issues/4215
>   [i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
>   [i915#4418]: https://gitlab.freedesktop.org/drm/intel/issues/4418
>   [i915#4494]: https://gitlab.freedesktop.org/drm/intel/issues/4494
>   [i915#4528]: https://gitlab.freedesktop.org/drm/intel/issues/4528
>   [i915#4579]: https://gitlab.freedesktop.org/drm/intel/issues/4579
>   [i915#4873]: https://gitlab.freedesktop.org/drm/intel/issues/4873
>   [i915#4957]: https://gitlab.freedesktop.org/drm/intel/issues/4957
>   [i915#5174]: https://gitlab.freedesktop.org/drm/intel/issues/5174
>   [i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190
>   [i915#5274]: https://gitlab.freedesktop.org/drm/intel/issues/5274
>   [i915#5356]: https://gitlab.freedesktop.org/drm/intel/issues/5356
>   [i915#5594]: https://gitlab.freedesktop.org/drm/intel/issues/5594
>   [i915#5763]: https://gitlab.freedesktop.org/drm/intel/issues/5763
>   [i915#5885]: https://gitlab.freedesktop.org/drm/intel/issues/5885
>   [i915#6011]: https://gitlab.freedesktop.org/drm/intel/issues/6011
>   [i915#6105]: https://gitlab.freedesktop.org/drm/intel/issues/6105
>   [i915#6227]: https://gitlab.freedesktop.org/drm/intel/issues/6227
> 
> 
> Build changes
> -------------
> 
>   * Linux: CI_DRM_11758 -> Patchwork_105134v1
> 
>   CI-20190529: 20190529
>   CI_DRM_11758: a2644b16f1f05a1a6eff99d7076bfa0e770bdeb6 @ git://anongit.freedesktop.org/gfx-ci/linux
>   IGT_6526: 02888400228efbb29437726aa04114575ea939c3 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
>   Patchwork_105134v1: a2644b16f1f05a1a6eff99d7076bfa0e770bdeb6 @ git://anongit.freedesktop.org/gfx-ci/linux
> 
> 
> ### Linux commits
> 
> aa8c692ba084 drm/i915/gt: Cleanup interface for MCR operations
> 6be8d7758465 drm/i915/gt: Move multicast register handling to a dedicated file
> 
> == Logs ==
> 
> For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/index.html

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

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

* Re: [Intel-gfx]  ✗ Fi.CI.BAT: failure for i915: Extract, polish, and document multicast handling
  2022-06-15 21:05   ` Matt Roper
@ 2022-06-15 21:14     ` Vudum, Lakshminarayana
  0 siblings, 0 replies; 19+ messages in thread
From: Vudum, Lakshminarayana @ 2022-06-15 21:14 UTC (permalink / raw)
  To: Roper, Matthew D, intel-gfx; +Cc: Syrjala, Ville

Yes, I see we don't have an issue. So I have created https://gitlab.freedesktop.org/drm/intel/-/issues/6246
igt@i915_module_load@load - dmesg-warn - drm_WARN_ON(lpt_iclkip_freq(&p) != clock), WARNING: .* at drivers/gpu/drm/i915/display/intel_pch_refclk.c:\d+ lpt_program_iclkip

Thanks,
Lakshmi.

-----Original Message-----
From: Roper, Matthew D <matthew.d.roper@intel.com> 
Sent: Wednesday, June 15, 2022 2:05 PM
To: intel-gfx@lists.freedesktop.org
Cc: Vudum, Lakshminarayana <lakshminarayana.vudum@intel.com>; Syrjala, Ville <ville.syrjala@intel.com>
Subject: Re: ✗ Fi.CI.BAT: failure for i915: Extract, polish, and document multicast handling

On Wed, Jun 15, 2022 at 01:03:06AM +0000, Patchwork wrote:
> == Series Details ==
> 
> Series: i915: Extract, polish, and document multicast handling
> URL   : https://patchwork.freedesktop.org/series/105134/
> State : failure
> 
> == Summary ==
> 
> CI Bug Log - changes from CI_DRM_11758 -> Patchwork_105134v1 
> ====================================================
> 
> Summary
> -------
> 
>   **FAILURE**
> 
>   Serious unknown changes coming with Patchwork_105134v1 absolutely need to be
>   verified manually.
>   
>   If you think the reported changes have nothing to do with the changes
>   introduced in Patchwork_105134v1, please notify your bug team to allow them
>   to document this new failure mode, which will reduce false positives in CI.
> 
>   External URL: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/index.html
> 
> Participating hosts (43 -> 43)
> ------------------------------
> 
>   Additional (2): fi-hsw-4770 bat-dg2-9 
>   Missing    (2): bat-atsm-1 fi-bdw-samus 
> 
> Possible new issues
> -------------------
> 
>   Here are the unknown changes that may have been introduced in Patchwork_105134v1:
> 
> ### IGT changes ###
> 
> #### Possible regressions ####
> 
>   * igt@i915_module_load@load:
>     - fi-hsw-4770:        NOTRUN -> [DMESG-WARN][1]
>    [1]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-hsw-477
> 0/igt@i915_module_load@load.html

  <4> [25.955765] i915 0000:00:02.0: drm_WARN_ON(lpt_iclkip_freq(&p) != clock)
  <4> [25.955785] WARNING: CPU: 3 PID: 99 at drivers/gpu/drm/i915/display/intel_pch_refclk.c:182 lpt_program_iclkip+0x268/0x2f0 [i915]

This display warning is unrelated to GT multicast, so not caused by this series.

I don't see any similar gitlab issues that match this, but the warning itself only landed in i915 yesterday in this series:
https://patchwork.freedesktop.org/series/103491/ so it's possible this is a known preexisting problem that just has a new warning signature now and needs a new filter.  +Cc Ville as the author of that series.


Matt

> 
>   
> Known issues
> ------------
> 
>   Here are the changes found in Patchwork_105134v1 that come from known issues:
> 
> ### IGT changes ###
> 
> #### Issues hit ####
> 
>   * igt@i915_selftest@live@gem:
>     - fi-blb-e6850:       NOTRUN -> [DMESG-FAIL][2] ([i915#4528])
>    [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-blb-e6850/igt@i915_selftest@live@gem.html
>     - fi-pnv-d510:        NOTRUN -> [DMESG-FAIL][3] ([i915#4528])
>    [3]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-pnv-d51
> 0/igt@i915_selftest@live@gem.html
> 
>   * igt@i915_selftest@live@hangcheck:
>     - bat-dg1-6:          [PASS][4] -> [DMESG-FAIL][5] ([i915#4494] / [i915#4957])
>    [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/bat-dg1-6/igt@i915_selftest@live@hangcheck.html
>    [5]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-dg1-6/
> igt@i915_selftest@live@hangcheck.html
> 
>   * igt@i915_suspend@basic-s2idle-without-i915:
>     - bat-dg1-5:          NOTRUN -> [INCOMPLETE][6] ([i915#6011])
>    [6]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-dg1-5/
> igt@i915_suspend@basic-s2idle-without-i915.html
> 
>   * igt@kms_chamelium@common-hpd-after-suspend:
>     - fi-bsw-n3050:       NOTRUN -> [SKIP][7] ([fdo#109271] / [fdo#111827])
>    [7]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-bsw-n30
> 50/igt@kms_chamelium@common-hpd-after-suspend.html
> 
>   * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a:
>     - fi-bsw-n3050:       NOTRUN -> [SKIP][8] ([fdo#109271])
>    [8]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-bsw-n30
> 50/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html
> 
>   * igt@runner@aborted:
>     - fi-hsw-4770:        NOTRUN -> [FAIL][9] ([i915#4312] / [i915#5594])
>    [9]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-hsw-477
> 0/igt@runner@aborted.html
> 
>   
> #### Possible fixes ####
> 
>   * igt@i915_pm_rpm@module-reload:
>     - bat-adlp-4:         [DMESG-WARN][10] ([i915#3576]) -> [PASS][11] +2 similar issues
>    [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/bat-adlp-4/igt@i915_pm_rpm@module-reload.html
>    [11]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-adlp-4
> /igt@i915_pm_rpm@module-reload.html
> 
>   * igt@i915_selftest@live@execlists:
>     - fi-bsw-n3050:       [INCOMPLETE][12] ([i915#2940]) -> [PASS][13]
>    [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-bsw-n3050/igt@i915_selftest@live@execlists.html
>    [13]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-bsw-n30
> 50/igt@i915_selftest@live@execlists.html
> 
>   * igt@i915_selftest@live@gt_engines:
>     - bat-dg1-5:          [INCOMPLETE][14] ([i915#4418]) -> [PASS][15]
>    [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/bat-dg1-5/igt@i915_selftest@live@gt_engines.html
>    [15]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-dg1-5/
> igt@i915_selftest@live@gt_engines.html
> 
>   * igt@i915_selftest@live@requests:
>     - fi-pnv-d510:        [DMESG-FAIL][16] ([i915#4528]) -> [PASS][17]
>    [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-pnv-d510/igt@i915_selftest@live@requests.html
>    [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-pnv-d510/igt@i915_selftest@live@requests.html
>     - fi-blb-e6850:       [DMESG-FAIL][18] ([i915#4528]) -> [PASS][19]
>    [18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-blb-e6850/igt@i915_selftest@live@requests.html
>    [19]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-blb-e68
> 50/igt@i915_selftest@live@requests.html
> 
>   * igt@kms_busy@basic@flip:
>     - {bat-adlp-6}:       [DMESG-WARN][20] ([i915#3576]) -> [PASS][21] +1 similar issue
>    [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/bat-adlp-6/igt@kms_busy@basic@flip.html
>    [21]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-adlp-6
> /igt@kms_busy@basic@flip.html
> 
>   * igt@kms_flip@basic-flip-vs-modeset@a-edp1:
>     - fi-tgl-u2:          [DMESG-WARN][22] ([i915#402]) -> [PASS][23]
>    [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-tgl-u2/igt@kms_flip@basic-flip-vs-modeset@a-edp1.html
>    [23]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-tgl-u2/
> igt@kms_flip@basic-flip-vs-modeset@a-edp1.html
> 
>   
> #### Warnings ####
> 
>   * igt@i915_selftest@live@hangcheck:
>     - fi-bdw-5557u:       [INCOMPLETE][24] ([i915#3921] / [i915#6105]) -> [INCOMPLETE][25] ([i915#3921])
>    [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-bdw-5557u/igt@i915_selftest@live@hangcheck.html
>    [25]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-bdw-555
> 7u/igt@i915_selftest@live@hangcheck.html
> 
>   
>   {name}: This element is suppressed. This means it is ignored when computing
>           the status of the difference (SUCCESS, WARNING, or FAILURE).
> 
>   [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
>   [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
>   [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
>   [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
>   [i915#1155]: https://gitlab.freedesktop.org/drm/intel/issues/1155
>   [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
>   [i915#2940]: https://gitlab.freedesktop.org/drm/intel/issues/2940
>   [i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
>   [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
>   [i915#3576]: https://gitlab.freedesktop.org/drm/intel/issues/3576
>   [i915#3595]: https://gitlab.freedesktop.org/drm/intel/issues/3595
>   [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
>   [i915#3921]: https://gitlab.freedesktop.org/drm/intel/issues/3921
>   [i915#402]: https://gitlab.freedesktop.org/drm/intel/issues/402
>   [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#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#4215]: https://gitlab.freedesktop.org/drm/intel/issues/4215
>   [i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
>   [i915#4418]: https://gitlab.freedesktop.org/drm/intel/issues/4418
>   [i915#4494]: https://gitlab.freedesktop.org/drm/intel/issues/4494
>   [i915#4528]: https://gitlab.freedesktop.org/drm/intel/issues/4528
>   [i915#4579]: https://gitlab.freedesktop.org/drm/intel/issues/4579
>   [i915#4873]: https://gitlab.freedesktop.org/drm/intel/issues/4873
>   [i915#4957]: https://gitlab.freedesktop.org/drm/intel/issues/4957
>   [i915#5174]: https://gitlab.freedesktop.org/drm/intel/issues/5174
>   [i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190
>   [i915#5274]: https://gitlab.freedesktop.org/drm/intel/issues/5274
>   [i915#5356]: https://gitlab.freedesktop.org/drm/intel/issues/5356
>   [i915#5594]: https://gitlab.freedesktop.org/drm/intel/issues/5594
>   [i915#5763]: https://gitlab.freedesktop.org/drm/intel/issues/5763
>   [i915#5885]: https://gitlab.freedesktop.org/drm/intel/issues/5885
>   [i915#6011]: https://gitlab.freedesktop.org/drm/intel/issues/6011
>   [i915#6105]: https://gitlab.freedesktop.org/drm/intel/issues/6105
>   [i915#6227]: https://gitlab.freedesktop.org/drm/intel/issues/6227
> 
> 
> Build changes
> -------------
> 
>   * Linux: CI_DRM_11758 -> Patchwork_105134v1
> 
>   CI-20190529: 20190529
>   CI_DRM_11758: a2644b16f1f05a1a6eff99d7076bfa0e770bdeb6 @ git://anongit.freedesktop.org/gfx-ci/linux
>   IGT_6526: 02888400228efbb29437726aa04114575ea939c3 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
>   Patchwork_105134v1: a2644b16f1f05a1a6eff99d7076bfa0e770bdeb6 @ 
> git://anongit.freedesktop.org/gfx-ci/linux
> 
> 
> ### Linux commits
> 
> aa8c692ba084 drm/i915/gt: Cleanup interface for MCR operations
> 6be8d7758465 drm/i915/gt: Move multicast register handling to a 
> dedicated file
> 
> == Logs ==
> 
> For more details see: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/index.html

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

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

* [Intel-gfx] ✓ Fi.CI.BAT: success for i915: Extract, polish, and document multicast handling
  2022-06-15  0:10 ` [Intel-gfx] " Matt Roper
                   ` (4 preceding siblings ...)
  (?)
@ 2022-06-15 21:20 ` Patchwork
  -1 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2022-06-15 21:20 UTC (permalink / raw)
  To: Matt Roper; +Cc: intel-gfx

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

== Series Details ==

Series: i915: Extract, polish, and document multicast handling
URL   : https://patchwork.freedesktop.org/series/105134/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_11758 -> Patchwork_105134v1
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (43 -> 43)
------------------------------

  Additional (2): fi-hsw-4770 bat-dg2-9 
  Missing    (2): bat-atsm-1 fi-bdw-samus 

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

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

### IGT changes ###

#### Issues hit ####

  * igt@i915_module_load@load:
    - fi-hsw-4770:        NOTRUN -> [DMESG-WARN][1] ([i915#6246])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-hsw-4770/igt@i915_module_load@load.html

  * igt@i915_selftest@live@gem:
    - fi-blb-e6850:       NOTRUN -> [DMESG-FAIL][2] ([i915#4528])
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-blb-e6850/igt@i915_selftest@live@gem.html
    - fi-pnv-d510:        NOTRUN -> [DMESG-FAIL][3] ([i915#4528])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-pnv-d510/igt@i915_selftest@live@gem.html

  * igt@i915_selftest@live@hangcheck:
    - bat-dg1-6:          [PASS][4] -> [DMESG-FAIL][5] ([i915#4494] / [i915#4957])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/bat-dg1-6/igt@i915_selftest@live@hangcheck.html
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-dg1-6/igt@i915_selftest@live@hangcheck.html

  * igt@i915_suspend@basic-s2idle-without-i915:
    - bat-dg1-5:          NOTRUN -> [INCOMPLETE][6] ([i915#6011])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-dg1-5/igt@i915_suspend@basic-s2idle-without-i915.html

  * igt@kms_chamelium@common-hpd-after-suspend:
    - fi-bsw-n3050:       NOTRUN -> [SKIP][7] ([fdo#109271] / [fdo#111827])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-bsw-n3050/igt@kms_chamelium@common-hpd-after-suspend.html

  * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a:
    - fi-bsw-n3050:       NOTRUN -> [SKIP][8] ([fdo#109271])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-bsw-n3050/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html

  * igt@runner@aborted:
    - fi-hsw-4770:        NOTRUN -> [FAIL][9] ([i915#4312] / [i915#5594])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-hsw-4770/igt@runner@aborted.html

  
#### Possible fixes ####

  * igt@i915_pm_rpm@module-reload:
    - bat-adlp-4:         [DMESG-WARN][10] ([i915#3576]) -> [PASS][11] +2 similar issues
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/bat-adlp-4/igt@i915_pm_rpm@module-reload.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-adlp-4/igt@i915_pm_rpm@module-reload.html

  * igt@i915_selftest@live@execlists:
    - fi-bsw-n3050:       [INCOMPLETE][12] ([i915#2940]) -> [PASS][13]
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-bsw-n3050/igt@i915_selftest@live@execlists.html
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-bsw-n3050/igt@i915_selftest@live@execlists.html

  * igt@i915_selftest@live@gt_engines:
    - bat-dg1-5:          [INCOMPLETE][14] ([i915#4418]) -> [PASS][15]
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/bat-dg1-5/igt@i915_selftest@live@gt_engines.html
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-dg1-5/igt@i915_selftest@live@gt_engines.html

  * igt@i915_selftest@live@requests:
    - fi-pnv-d510:        [DMESG-FAIL][16] ([i915#4528]) -> [PASS][17]
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-pnv-d510/igt@i915_selftest@live@requests.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-pnv-d510/igt@i915_selftest@live@requests.html
    - fi-blb-e6850:       [DMESG-FAIL][18] ([i915#4528]) -> [PASS][19]
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-blb-e6850/igt@i915_selftest@live@requests.html
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-blb-e6850/igt@i915_selftest@live@requests.html

  * igt@kms_busy@basic@flip:
    - {bat-adlp-6}:       [DMESG-WARN][20] ([i915#3576]) -> [PASS][21] +1 similar issue
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/bat-adlp-6/igt@kms_busy@basic@flip.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/bat-adlp-6/igt@kms_busy@basic@flip.html

  * igt@kms_flip@basic-flip-vs-modeset@a-edp1:
    - fi-tgl-u2:          [DMESG-WARN][22] ([i915#402]) -> [PASS][23]
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-tgl-u2/igt@kms_flip@basic-flip-vs-modeset@a-edp1.html
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-tgl-u2/igt@kms_flip@basic-flip-vs-modeset@a-edp1.html

  
#### Warnings ####

  * igt@i915_selftest@live@hangcheck:
    - fi-bdw-5557u:       [INCOMPLETE][24] ([i915#3921] / [i915#6105]) -> [INCOMPLETE][25] ([i915#3921])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/fi-bdw-5557u/igt@i915_selftest@live@hangcheck.html
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/fi-bdw-5557u/igt@i915_selftest@live@hangcheck.html

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

  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1155]: https://gitlab.freedesktop.org/drm/intel/issues/1155
  [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
  [i915#2940]: https://gitlab.freedesktop.org/drm/intel/issues/2940
  [i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3576]: https://gitlab.freedesktop.org/drm/intel/issues/3576
  [i915#3595]: https://gitlab.freedesktop.org/drm/intel/issues/3595
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#3921]: https://gitlab.freedesktop.org/drm/intel/issues/3921
  [i915#402]: https://gitlab.freedesktop.org/drm/intel/issues/402
  [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#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#4215]: https://gitlab.freedesktop.org/drm/intel/issues/4215
  [i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
  [i915#4418]: https://gitlab.freedesktop.org/drm/intel/issues/4418
  [i915#4494]: https://gitlab.freedesktop.org/drm/intel/issues/4494
  [i915#4528]: https://gitlab.freedesktop.org/drm/intel/issues/4528
  [i915#4579]: https://gitlab.freedesktop.org/drm/intel/issues/4579
  [i915#4873]: https://gitlab.freedesktop.org/drm/intel/issues/4873
  [i915#4957]: https://gitlab.freedesktop.org/drm/intel/issues/4957
  [i915#5174]: https://gitlab.freedesktop.org/drm/intel/issues/5174
  [i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190
  [i915#5274]: https://gitlab.freedesktop.org/drm/intel/issues/5274
  [i915#5356]: https://gitlab.freedesktop.org/drm/intel/issues/5356
  [i915#5594]: https://gitlab.freedesktop.org/drm/intel/issues/5594
  [i915#5763]: https://gitlab.freedesktop.org/drm/intel/issues/5763
  [i915#5885]: https://gitlab.freedesktop.org/drm/intel/issues/5885
  [i915#6011]: https://gitlab.freedesktop.org/drm/intel/issues/6011
  [i915#6105]: https://gitlab.freedesktop.org/drm/intel/issues/6105
  [i915#6227]: https://gitlab.freedesktop.org/drm/intel/issues/6227
  [i915#6246]: https://gitlab.freedesktop.org/drm/intel/issues/6246


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

  * Linux: CI_DRM_11758 -> Patchwork_105134v1

  CI-20190529: 20190529
  CI_DRM_11758: a2644b16f1f05a1a6eff99d7076bfa0e770bdeb6 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_6526: 02888400228efbb29437726aa04114575ea939c3 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_105134v1: a2644b16f1f05a1a6eff99d7076bfa0e770bdeb6 @ git://anongit.freedesktop.org/gfx-ci/linux


### Linux commits

aa8c692ba084 drm/i915/gt: Cleanup interface for MCR operations
6be8d7758465 drm/i915/gt: Move multicast register handling to a dedicated file

== Logs ==

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

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

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

* [Intel-gfx] ✗ Fi.CI.IGT: failure for i915: Extract, polish, and document multicast handling
  2022-06-15  0:10 ` [Intel-gfx] " Matt Roper
                   ` (5 preceding siblings ...)
  (?)
@ 2022-06-16  3:11 ` Patchwork
  2022-06-16  4:33   ` Matt Roper
  -1 siblings, 1 reply; 19+ messages in thread
From: Patchwork @ 2022-06-16  3:11 UTC (permalink / raw)
  To: Matt Roper; +Cc: intel-gfx

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

== Series Details ==

Series: i915: Extract, polish, and document multicast handling
URL   : https://patchwork.freedesktop.org/series/105134/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_11758_full -> Patchwork_105134v1_full
====================================================

Summary
-------

  **FAILURE**

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

  

Participating hosts (13 -> 12)
------------------------------

  Missing    (1): shard-dg1 

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@kms_cursor_legacy@pipe-c-torture-bo:
    - shard-skl:          [PASS][1] -> [INCOMPLETE][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl2/igt@kms_cursor_legacy@pipe-c-torture-bo.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl4/igt@kms_cursor_legacy@pipe-c-torture-bo.html

  
#### Suppressed ####

  The following results come from untrusted machines, tests, or statuses.
  They do not affect the overall result.

  * {igt@kms_plane_lowres@tiling-y@pipe-a-edp-1}:
    - {shard-rkl}:        NOTRUN -> [SKIP][3] +3 similar issues
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_plane_lowres@tiling-y@pipe-a-edp-1.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_ctx_persistence@smoketest:
    - shard-apl:          [PASS][4] -> [FAIL][5] ([i915#5099])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-apl7/igt@gem_ctx_persistence@smoketest.html
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl1/igt@gem_ctx_persistence@smoketest.html

  * igt@gem_eio@unwedge-stress:
    - shard-iclb:         [PASS][6] -> [TIMEOUT][7] ([i915#3070])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb6/igt@gem_eio@unwedge-stress.html
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb6/igt@gem_eio@unwedge-stress.html

  * igt@gem_exec_balancer@parallel-keep-submit-fence:
    - shard-iclb:         [PASS][8] -> [SKIP][9] ([i915#4525]) +2 similar issues
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@gem_exec_balancer@parallel-keep-submit-fence.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb8/igt@gem_exec_balancer@parallel-keep-submit-fence.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_11758/shard-apl3/igt@gem_exec_fair@basic-none-solo@rcs0.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl6/igt@gem_exec_fair@basic-none-solo@rcs0.html

  * igt@gem_exec_fair@basic-none@vcs1:
    - shard-iclb:         NOTRUN -> [FAIL][12] ([i915#2842])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb1/igt@gem_exec_fair@basic-none@vcs1.html

  * igt@gem_exec_fair@basic-pace-solo@rcs0:
    - shard-iclb:         [PASS][13] -> [FAIL][14] ([i915#2842])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb8/igt@gem_exec_fair@basic-pace-solo@rcs0.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb5/igt@gem_exec_fair@basic-pace-solo@rcs0.html
    - shard-kbl:          [PASS][15] -> [FAIL][16] ([i915#2842])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@gem_exec_fair@basic-pace-solo@rcs0.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@gem_exec_fair@basic-pace-solo@rcs0.html

  * igt@gem_lmem_swapping@parallel-random-engines:
    - shard-apl:          NOTRUN -> [SKIP][17] ([fdo#109271] / [i915#4613])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8/igt@gem_lmem_swapping@parallel-random-engines.html

  * igt@gem_lmem_swapping@random:
    - shard-glk:          NOTRUN -> [SKIP][18] ([fdo#109271] / [i915#4613])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3/igt@gem_lmem_swapping@random.html
    - shard-kbl:          NOTRUN -> [SKIP][19] ([fdo#109271] / [i915#4613]) +3 similar issues
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl1/igt@gem_lmem_swapping@random.html

  * igt@gem_mmap_gtt@fault-concurrent-y:
    - shard-snb:          [PASS][20] -> [INCOMPLETE][21] ([i915#5161])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-snb2/igt@gem_mmap_gtt@fault-concurrent-y.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-snb6/igt@gem_mmap_gtt@fault-concurrent-y.html

  * igt@gem_softpin@evict-single-offset:
    - shard-kbl:          NOTRUN -> [FAIL][22] ([i915#4171])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@gem_softpin@evict-single-offset.html

  * igt@i915_pm_dc@dc9-dpms:
    - shard-iclb:         [PASS][23] -> [SKIP][24] ([i915#4281])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb7/igt@i915_pm_dc@dc9-dpms.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb3/igt@i915_pm_dc@dc9-dpms.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip:
    - shard-apl:          NOTRUN -> [SKIP][25] ([fdo#109271]) +53 similar issues
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip.html

  * igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_mc_ccs:
    - shard-kbl:          NOTRUN -> [SKIP][26] ([fdo#109271] / [i915#3886]) +6 similar issues
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_mc_ccs.html

  * igt@kms_ccs@pipe-b-bad-pixel-format-4_tiled_dg2_rc_ccs:
    - shard-kbl:          NOTRUN -> [SKIP][27] ([fdo#109271]) +234 similar issues
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@kms_ccs@pipe-b-bad-pixel-format-4_tiled_dg2_rc_ccs.html

  * igt@kms_ccs@pipe-b-bad-rotation-90-y_tiled_gen12_rc_ccs_cc:
    - shard-apl:          NOTRUN -> [SKIP][28] ([fdo#109271] / [i915#3886])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8/igt@kms_ccs@pipe-b-bad-rotation-90-y_tiled_gen12_rc_ccs_cc.html

  * igt@kms_ccs@pipe-c-random-ccs-data-y_tiled_gen12_rc_ccs_cc:
    - shard-glk:          NOTRUN -> [SKIP][29] ([fdo#109271] / [i915#3886]) +2 similar issues
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3/igt@kms_ccs@pipe-c-random-ccs-data-y_tiled_gen12_rc_ccs_cc.html

  * igt@kms_color_chamelium@pipe-a-ctm-negative:
    - shard-glk:          NOTRUN -> [SKIP][30] ([fdo#109271] / [fdo#111827]) +1 similar issue
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3/igt@kms_color_chamelium@pipe-a-ctm-negative.html

  * igt@kms_color_chamelium@pipe-b-ctm-red-to-blue:
    - shard-apl:          NOTRUN -> [SKIP][31] ([fdo#109271] / [fdo#111827]) +1 similar issue
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8/igt@kms_color_chamelium@pipe-b-ctm-red-to-blue.html

  * igt@kms_color_chamelium@pipe-c-ctm-0-5:
    - shard-kbl:          NOTRUN -> [SKIP][32] ([fdo#109271] / [fdo#111827]) +18 similar issues
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@kms_color_chamelium@pipe-c-ctm-0-5.html

  * igt@kms_content_protection@atomic-dpms:
    - shard-kbl:          NOTRUN -> [TIMEOUT][33] ([i915#1319])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@kms_content_protection@atomic-dpms.html

  * igt@kms_dither@fb-8bpc-vs-panel-8bpc@hdmi-a-1-pipe-a:
    - shard-glk:          [PASS][34] -> [SKIP][35] ([fdo#109271])
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-glk1/igt@kms_dither@fb-8bpc-vs-panel-8bpc@hdmi-a-1-pipe-a.html
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk8/igt@kms_dither@fb-8bpc-vs-panel-8bpc@hdmi-a-1-pipe-a.html

  * igt@kms_fbcon_fbt@fbc-suspend:
    - shard-apl:          [PASS][36] -> [FAIL][37] ([i915#4767])
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-apl1/igt@kms_fbcon_fbt@fbc-suspend.html
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl2/igt@kms_fbcon_fbt@fbc-suspend.html

  * igt@kms_flip@flip-vs-suspend-interruptible@c-edp1:
    - shard-skl:          [PASS][38] -> [INCOMPLETE][39] ([i915#4939])
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl7/igt@kms_flip@flip-vs-suspend-interruptible@c-edp1.html
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl6/igt@kms_flip@flip-vs-suspend-interruptible@c-edp1.html

  * igt@kms_flip@plain-flip-ts-check@a-edp1:
    - shard-skl:          [PASS][40] -> [FAIL][41] ([i915#2122])
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl7/igt@kms_flip@plain-flip-ts-check@a-edp1.html
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl7/igt@kms_flip@plain-flip-ts-check@a-edp1.html

  * igt@kms_hdr@bpc-switch-dpms@pipe-a-dp-1:
    - shard-kbl:          [PASS][42] -> [FAIL][43] ([i915#1188])
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@kms_hdr@bpc-switch-dpms@pipe-a-dp-1.html
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@kms_hdr@bpc-switch-dpms@pipe-a-dp-1.html

  * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
    - shard-apl:          [PASS][44] -> [DMESG-WARN][45] ([i915#180]) +2 similar issues
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-apl8/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b.html
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl2/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b.html

  * igt@kms_plane_alpha_blend@pipe-a-alpha-basic:
    - shard-kbl:          NOTRUN -> [FAIL][46] ([fdo#108145] / [i915#265]) +1 similar issue
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@kms_plane_alpha_blend@pipe-a-alpha-basic.html

  * igt@kms_plane_alpha_blend@pipe-b-alpha-transparent-fb:
    - shard-kbl:          NOTRUN -> [FAIL][47] ([i915#265])
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@kms_plane_alpha_blend@pipe-b-alpha-transparent-fb.html

  * igt@kms_plane_multiple@atomic-pipe-b-tiling-4:
    - shard-glk:          NOTRUN -> [SKIP][48] ([fdo#109271]) +45 similar issues
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3/igt@kms_plane_multiple@atomic-pipe-b-tiling-4.html

  * igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b-edp-1:
    - shard-iclb:         [PASS][49] -> [SKIP][50] ([i915#5176]) +1 similar issue
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb7/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b-edp-1.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb3/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b-edp-1.html

  * igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5@pipe-a-edp-1:
    - shard-iclb:         [PASS][51] -> [SKIP][52] ([i915#5235]) +2 similar issues
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb5/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5@pipe-a-edp-1.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb2/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5@pipe-a-edp-1.html

  * igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-sf:
    - shard-kbl:          NOTRUN -> [SKIP][53] ([fdo#109271] / [i915#658]) +3 similar issues
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-fully-sf:
    - shard-glk:          NOTRUN -> [SKIP][54] ([fdo#109271] / [i915#658])
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3/igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr@psr2_sprite_blt:
    - shard-iclb:         [PASS][55] -> [SKIP][56] ([fdo#109441]) +2 similar issues
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@kms_psr@psr2_sprite_blt.html
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb8/igt@kms_psr@psr2_sprite_blt.html

  * igt@kms_writeback@writeback-fb-id:
    - shard-kbl:          NOTRUN -> [SKIP][57] ([fdo#109271] / [i915#2437]) +1 similar issue
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@kms_writeback@writeback-fb-id.html

  * igt@perf@polling-small-buf:
    - shard-skl:          [PASS][58] -> [FAIL][59] ([i915#1722])
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl4/igt@perf@polling-small-buf.html
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl6/igt@perf@polling-small-buf.html

  * igt@sysfs_clients@fair-7:
    - shard-apl:          NOTRUN -> [SKIP][60] ([fdo#109271] / [i915#2994])
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8/igt@sysfs_clients@fair-7.html

  * igt@sysfs_clients@sema-25:
    - shard-kbl:          NOTRUN -> [SKIP][61] ([fdo#109271] / [i915#2994]) +2 similar issues
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@sysfs_clients@sema-25.html

  
#### Possible fixes ####

  * igt@gem_ctx_isolation@preservation-s3@vcs0:
    - shard-kbl:          [DMESG-WARN][62] ([i915#180]) -> [PASS][63] +10 similar issues
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl4/igt@gem_ctx_isolation@preservation-s3@vcs0.html
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@gem_ctx_isolation@preservation-s3@vcs0.html

  * igt@gem_eio@in-flight-contexts-1us:
    - shard-iclb:         [TIMEOUT][64] ([i915#3070]) -> [PASS][65]
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb3/igt@gem_eio@in-flight-contexts-1us.html
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb5/igt@gem_eio@in-flight-contexts-1us.html

  * igt@gem_eio@in-flight-contexts-immediate:
    - {shard-tglu}:       [TIMEOUT][66] ([i915#3063]) -> [PASS][67]
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglu-1/igt@gem_eio@in-flight-contexts-immediate.html
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglu-1/igt@gem_eio@in-flight-contexts-immediate.html

  * igt@gem_eio@in-flight-immediate:
    - shard-tglb:         [TIMEOUT][68] ([i915#3063]) -> [PASS][69]
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglb1/igt@gem_eio@in-flight-immediate.html
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglb1/igt@gem_eio@in-flight-immediate.html

  * igt@gem_exec_endless@dispatch@vecs0:
    - shard-tglb:         [INCOMPLETE][70] ([i915#3778]) -> [PASS][71]
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglb8/igt@gem_exec_endless@dispatch@vecs0.html
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglb6/igt@gem_exec_endless@dispatch@vecs0.html

  * igt@gem_exec_fair@basic-none-share@rcs0:
    - {shard-tglu}:       [FAIL][72] ([i915#2842]) -> [PASS][73]
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglu-5/igt@gem_exec_fair@basic-none-share@rcs0.html
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglu-5/igt@gem_exec_fair@basic-none-share@rcs0.html
    - shard-iclb:         [FAIL][74] ([i915#2842]) -> [PASS][75]
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb6/igt@gem_exec_fair@basic-none-share@rcs0.html
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb8/igt@gem_exec_fair@basic-none-share@rcs0.html

  * igt@gem_exec_fair@basic-none@vcs0:
    - shard-kbl:          [FAIL][76] ([i915#2842]) -> [PASS][77]
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl3/igt@gem_exec_fair@basic-none@vcs0.html
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@gem_exec_fair@basic-none@vcs0.html

  * igt@gem_mmap_wc@set-cache-level:
    - {shard-rkl}:        [SKIP][78] ([i915#1850]) -> [PASS][79]
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@gem_mmap_wc@set-cache-level.html
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@gem_mmap_wc@set-cache-level.html

  * igt@gen9_exec_parse@allowed-single:
    - shard-kbl:          [DMESG-WARN][80] ([i915#5566] / [i915#716]) -> [PASS][81]
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@gen9_exec_parse@allowed-single.html
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@gen9_exec_parse@allowed-single.html

  * igt@i915_pm_backlight@fade:
    - {shard-rkl}:        [SKIP][82] ([i915#3012]) -> [PASS][83]
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@i915_pm_backlight@fade.html
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@i915_pm_backlight@fade.html

  * igt@i915_pm_rpm@i2c:
    - {shard-rkl}:        [SKIP][84] ([fdo#109308]) -> [PASS][85] +1 similar issue
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@i915_pm_rpm@i2c.html
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@i915_pm_rpm@i2c.html

  * igt@i915_pm_rpm@modeset-lpsp-stress-no-wait:
    - {shard-rkl}:        [SKIP][86] ([i915#1397]) -> [PASS][87] +1 similar issue
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@i915_pm_rpm@modeset-lpsp-stress-no-wait.html
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@i915_pm_rpm@modeset-lpsp-stress-no-wait.html

  * igt@i915_selftest@live@hangcheck:
    - shard-tglb:         [DMESG-WARN][88] ([i915#5591]) -> [PASS][89]
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglb8/igt@i915_selftest@live@hangcheck.html
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglb6/igt@i915_selftest@live@hangcheck.html

  * igt@kms_color@pipe-a-ctm-green-to-red:
    - {shard-rkl}:        [SKIP][90] ([i915#1149] / [i915#1849] / [i915#4070] / [i915#4098]) -> [PASS][91] +1 similar issue
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_color@pipe-a-ctm-green-to-red.html
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_color@pipe-a-ctm-green-to-red.html

  * igt@kms_cursor_crc@pipe-b-cursor-128x42-onscreen:
    - {shard-rkl}:        [SKIP][92] ([fdo#112022] / [i915#4070]) -> [PASS][93] +8 similar issues
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@kms_cursor_crc@pipe-b-cursor-128x42-onscreen.html
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_cursor_crc@pipe-b-cursor-128x42-onscreen.html

  * igt@kms_cursor_legacy@cursora-vs-flipa-atomic:
    - {shard-rkl}:        [SKIP][94] ([fdo#111825] / [i915#4070]) -> [PASS][95] +1 similar issue
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_cursor_legacy@cursora-vs-flipa-atomic.html
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_cursor_legacy@cursora-vs-flipa-atomic.html

  * igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled:
    - {shard-rkl}:        [SKIP][96] ([fdo#111314] / [i915#4098] / [i915#4369]) -> [PASS][97] +2 similar issues
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled.html
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled.html

  * igt@kms_fbcon_fbt@psr-suspend:
    - {shard-rkl}:        [SKIP][98] ([fdo#110189] / [i915#3955]) -> [PASS][99]
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_fbcon_fbt@psr-suspend.html
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_fbcon_fbt@psr-suspend.html

  * igt@kms_flip@flip-vs-suspend@a-dp1:
    - shard-apl:          [DMESG-WARN][100] ([i915#180]) -> [PASS][101] +2 similar issues
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-apl1/igt@kms_flip@flip-vs-suspend@a-dp1.html
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl2/igt@kms_flip@flip-vs-suspend@a-dp1.html

  * igt@kms_frontbuffer_tracking@fbc-badstride:
    - {shard-rkl}:        [SKIP][102] ([i915#1849] / [i915#4098]) -> [PASS][103] +31 similar issues
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_frontbuffer_tracking@fbc-badstride.html
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-badstride.html

  * igt@kms_plane@plane-panning-bottom-right@pipe-b-planes:
    - {shard-rkl}:        [SKIP][104] ([i915#1849] / [i915#3558]) -> [PASS][105] +1 similar issue
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@kms_plane@plane-panning-bottom-right@pipe-b-planes.html
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_plane@plane-panning-bottom-right@pipe-b-planes.html

  * igt@kms_plane_alpha_blend@pipe-a-alpha-basic:
    - {shard-rkl}:        [SKIP][106] ([i915#1849] / [i915#4070] / [i915#4098]) -> [PASS][107] +2 similar issues
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_plane_alpha_blend@pipe-a-alpha-basic.html
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_plane_alpha_blend@pipe-a-alpha-basic.html

  * igt@kms_plane_multiple@atomic-pipe-a-tiling-none:
    - {shard-rkl}:        [SKIP][108] ([i915#3558] / [i915#4070]) -> [PASS][109]
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_plane_multiple@atomic-pipe-a-tiling-none.html
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_plane_multiple@atomic-pipe-a-tiling-none.html

  * igt@kms_plane_multiple@atomic-pipe-a-tiling-x:
    - {shard-rkl}:        [SKIP][110] ([i915#1849] / [i915#3558] / [i915#4070]) -> [PASS][111]
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@kms_plane_multiple@atomic-pipe-a-tiling-x.html
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_plane_multiple@atomic-pipe-a-tiling-x.html

  * igt@kms_properties@crtc-properties-atomic:
    - {shard-rkl}:        [SKIP][112] ([i915#1849]) -> [PASS][113]
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_properties@crtc-properties-atomic.html
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_properties@crtc-properties-atomic.html

  * igt@kms_psr@primary_render:
    - {shard-rkl}:        [SKIP][114] ([i915#1072]) -> [PASS][115] +3 similar issues
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_psr@primary_render.html
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_psr@primary_render.html

  * igt@kms_psr@psr2_sprite_plane_move:
    - shard-iclb:         [SKIP][116] ([fdo#109441]) -> [PASS][117] +3 similar issues
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb5/igt@kms_psr@psr2_sprite_plane_move.html
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb2/igt@kms_psr@psr2_sprite_plane_move.html

  * igt@kms_universal_plane@universal-plane-gen9-features-pipe-a:
    - {shard-rkl}:        [SKIP][118] ([i915#1845] / [i915#4070] / [i915#4098]) -> [PASS][119] +1 similar issue
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_universal_plane@universal-plane-gen9-features-pipe-a.html
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_universal_plane@universal-plane-gen9-features-pipe-a.html

  * igt@kms_vblank@pipe-b-query-forked:
    - {shard-rkl}:        [SKIP][120] ([i915#1845] / [i915#4098]) -> [PASS][121] +33 similar issues
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_vblank@pipe-b-query-forked.html
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_vblank@pipe-b-query-forked.html

  * igt@perf@polling-small-buf:
    - {shard-rkl}:        [FAIL][122] ([i915#1722]) -> [PASS][123]
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@perf@polling-small-buf.html
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@perf@polling-small-buf.html

  * igt@perf@short-reads:
    - shard-skl:          [FAIL][124] ([i915#51]) -> [PASS][125]
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl4/igt@perf@short-reads.html
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl10/igt@perf@short-reads.html

  
#### Warnings ####

  * igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf:
    - shard-iclb:         [SKIP][126] ([i915#2920]) -> [SKIP][127] ([i915#658])
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf.html
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb8/igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_sf@overlay-plane-update-continuous-sf:
    - shard-iclb:         [SKIP][128] ([i915#2920]) -> [SKIP][129] ([fdo#111068] / [i915#658])
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@kms_psr2_sf@overlay-plane-update-continuous-sf.html
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb8/igt@kms_psr2_sf@overlay-plane-update-continuous-sf.html

  * igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area:
    - shard-iclb:         [SKIP][130] ([fdo#111068] / [i915#658]) -> [SKIP][131] ([i915#2920])
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb5/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area.html
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb2/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_su@page_flip-nv12:
    - shard-iclb:         [FAIL][132] ([i915#5939]) -> [SKIP][133] ([fdo#109642] / [fdo#111068] / [i915#658])
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@kms_psr2_su@page_flip-nv12.html
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb4/igt@kms_psr2_su@page_flip-nv12.html

  * igt@kms_psr2_su@page_flip-p010:
    - shard-iclb:         [SKIP][134] ([fdo#109642] / [fdo#111068] / [i915#658]) -> [FAIL][135] ([i915#5939])
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb4/igt@kms_psr2_su@page_flip-p010.html
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb2/igt@kms_psr2_su@page_flip-p010.html

  * igt@runner@aborted:
    - shard-kbl:          ([FAIL][136], [FAIL][137], [FAIL][138], [FAIL][139], [FAIL][140], [FAIL][141], [FAIL][142], [FAIL][143], [FAIL][144], [FAIL][145], [FAIL][146]) ([fdo#109271] / [i915#180] / [i915#3002] / [i915#4312] / [i915#5257] / [i915#716]) -> ([FAIL][147], [FAIL][148]) ([i915#3002] / [i915#4312] / [i915#5257])
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@runner@aborted.html
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@runner@aborted.html
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl7/igt@runner@aborted.html
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl3/igt@runner@aborted.html
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@runner@aborted.html
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl4/igt@runner@aborted.html
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl4/igt@runner@aborted.html
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@runner@aborted.html
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl7/igt@runner@aborted.html
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl4/igt@runner@aborted.html
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl7/igt@runner@aborted.html
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@runner@aborted.html
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl3/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).

  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
  [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#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
  [fdo#109291]: https://bugs.freedesktop.org/show_bug.cgi?id=109291
  [fdo#109300]: https://bugs.freedesktop.org/show_bug.cgi?id=109300
  [fdo#109308]: https://bugs.freedesktop.org/show_bug.cgi?id=109308
  [fdo#109314]: https://bugs.freedesktop.org/show_bug.cgi?id=109314
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [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#111314]: https://bugs.freedesktop.org/show_bug.cgi?id=111314
  [fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
  [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
  [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [fdo#112022]: https://bugs.freedesktop.org/show_bug.cgi?id=112022
  [i915#1063]: https://gitlab.freedesktop.org/drm/intel/issues/1063
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1149]: https://gitlab.freedesktop.org/drm/intel/issues/1149
  [i915#1188]: https://gitlab.freedesktop.org/drm/intel/issues/1188
  [i915#1319]: https://gitlab.freedesktop.org/drm/intel/issues/1319
  [i915#132]: https://gitlab.freedesktop.org/drm/intel/issues/132
  [i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397
  [i915#1722]: https://gitlab.freedesktop.org/drm/intel/issues/1722
  [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#1850]: https://gitlab.freedesktop.org/drm/intel/issues/1850
  [i915#1911]: https://gitlab.freedesktop.org/drm/intel/issues/1911
  [i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
  [i915#2232]: https://gitlab.freedesktop.org/drm/intel/issues/2232
  [i915#2434]: https://gitlab.freedesktop.org/drm/intel/issues/2434
  [i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
  [i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
  [i915#2530]: https://gitlab.freedesktop.org/drm/intel/issues/2530
  [i915#2582]: https://gitlab.freedesktop.org/drm/intel/issues/2582
  [i915#265]: https://gitlab.freedesktop.org/drm/intel/issues/265
  [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
  [i915#2705]: https://gitlab.freedesktop.org/drm/intel/issues/2705
  [i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
  [i915#284]: https://gitlab.freedesktop.org/drm/intel/issues/284
  [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
  [i915#2849]: https://gitlab.freedesktop.org/drm/intel/issues/2849
  [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#3012]: https://gitlab.freedesktop.org/drm/intel/issues/3012
  [i915#3063]: https://gitlab.freedesktop.org/drm/intel/issues/3063
  [i915#3070]: https://gitlab.freedesktop.org/drm/intel/issues/3070
  [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
  [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
  [i915#3319]: https://gitlab.freedesktop.org/drm/intel/issues/3319
  [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
  [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#3701]: https://gitlab.freedesktop.org/drm/intel/issues/3701
  [i915#3734]: https://gitlab.freedesktop.org/drm/intel/issues/3734
  [i915#3742]: https://gitlab.freedesktop.org/drm/intel/issues/3742
  [i915#3778]: https://gitlab.freedesktop.org/drm/intel/issues/3778
  [i915#3828]: https://gitlab.freedesktop.org/drm/intel/issues/3828
  [i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
  [i915#3955]: https://gitlab.freedesktop.org/drm/intel/issues/3955
  [i915#404]: https://gitlab.freedesktop.org/drm/intel/issues/404
  [i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
  [i915#4098]: https://gitlab.freedesktop.org/drm/intel/issues/4098
  [i915#4171]: https://gitlab.freedesktop.org/drm/intel/issues/4171
  [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
  [i915#4278]: https://gitlab.freedesktop.org/drm/intel/issues/4278
  [i915#4281]: https://gitlab.freedesktop.org/drm/intel/issues/4281
  [i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
  [i915#4369]: https://gitlab.freedesktop.org/drm/intel/issues/4369
  [i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4767]: https://gitlab.freedesktop.org/drm/intel/issues/4767
  [i915#4893]: https://gitlab.freedesktop.org/drm/intel/issues/4893
  [i915#4939]: https://gitlab.freedesktop.org/drm/intel/issues/4939
  [i915#5099]: https://gitlab.freedesktop.org/drm/intel/issues/5099
  [i915#51]: https://gitlab.freedesktop.org/drm/intel/issues/51
  [i915#5161]: https://gitlab.freedesktop.org/drm/intel/issues/5161
  [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
  [i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
  [i915#5257]: https://gitlab.freedesktop.org/drm/intel/issues/5257
  [i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
  [i915#5287]: https://gitlab.freedesktop.org/drm/intel/issues/5287
  [i915#5288]: https://gitlab.freedesktop.org/drm/intel/issues/5288
  [i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
  [i915#5325]: https://gitlab.freedesktop.org/drm/intel/issues/5325
  [i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
  [i915#5439]: https://gitlab.freedesktop.org/drm/intel/issues/5439
  [i915#5461]: https://gitlab.freedesktop.org/drm/intel/issues/5461
  [i915#5566]: https://gitlab.freedesktop.org/drm/intel/issues/5566
  [i915#5591]: https://gitlab.freedesktop.org/drm/intel/issues/5591
  [i915#5939]: https://gitlab.freedesktop.org/drm/intel/issues/5939
  [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
  [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
  [i915#716]: https://gitlab.freedesktop.org/drm/intel/issues/716


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

  * Linux: CI_DRM_11758 -> Patchwork_105134v1

  CI-20190529: 20190529
  CI_DRM_11758: a2644b16f1f05a1a6eff99d7076bfa0e770bdeb6 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_6526: 02888400228efbb29437726aa04114575ea939c3 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_105134v1: a2644b16f1f05a1a6eff99d7076bfa0e770bdeb6 @ 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_105134v1/index.html

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

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

* Re: [Intel-gfx]  ✗ Fi.CI.IGT: failure for i915: Extract, polish, and document multicast handling
  2022-06-16  3:11 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
@ 2022-06-16  4:33   ` Matt Roper
  2022-06-16 15:27     ` Vudum, Lakshminarayana
  0 siblings, 1 reply; 19+ messages in thread
From: Matt Roper @ 2022-06-16  4:33 UTC (permalink / raw)
  To: intel-gfx; +Cc: Vudum, Lakshminarayana

On Thu, Jun 16, 2022 at 03:11:40AM +0000, Patchwork wrote:
> == Series Details ==
> 
> Series: i915: Extract, polish, and document multicast handling
> URL   : https://patchwork.freedesktop.org/series/105134/
> State : failure
> 
> == Summary ==
> 
> CI Bug Log - changes from CI_DRM_11758_full -> Patchwork_105134v1_full
> ====================================================
> 
> Summary
> -------
> 
>   **FAILURE**
> 
>   Serious unknown changes coming with Patchwork_105134v1_full absolutely need to be
>   verified manually.
>   
>   If you think the reported changes have nothing to do with the changes
>   introduced in Patchwork_105134v1_full, please notify your bug team to allow them
>   to document this new failure mode, which will reduce false positives in CI.
> 
>   
> 
> Participating hosts (13 -> 12)
> ------------------------------
> 
>   Missing    (1): shard-dg1 
> 
> Possible new issues
> -------------------
> 
>   Here are the unknown changes that may have been introduced in Patchwork_105134v1_full:
> 
> ### IGT changes ###
> 
> #### Possible regressions ####
> 
>   * igt@kms_cursor_legacy@pipe-c-torture-bo:
>     - shard-skl:          [PASS][1] -> [INCOMPLETE][2]
>    [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl2/igt@kms_cursor_legacy@pipe-c-torture-bo.html
>    [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl4/igt@kms_cursor_legacy@pipe-c-torture-bo.html

Appears to be a deadlock:

  <3> [923.922958] INFO: task kms_cursor_lega:1361 blocked for more than 61 seconds.
  <3> [923.923073]       Tainted: G     U  W 5.19.0-rc2-Patchwork_105134v1-ga2644b16f1f0+ #1
  <3> [923.923104] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.

This display test wouldn't be affected by the changes to multicast
registers in this series, so it seems unrelated.

I don't see any matching issue signatures in gitlab, although there are
a couple incompletes filed against similar tests due to timeout that might
have a related root cause (e.g., #6216).


Matt

> 
>   
> #### Suppressed ####
> 
>   The following results come from untrusted machines, tests, or statuses.
>   They do not affect the overall result.
> 
>   * {igt@kms_plane_lowres@tiling-y@pipe-a-edp-1}:
>     - {shard-rkl}:        NOTRUN -> [SKIP][3] +3 similar issues
>    [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_plane_lowres@tiling-y@pipe-a-edp-1.html
> 
>   
> Known issues
> ------------
> 
>   Here are the changes found in Patchwork_105134v1_full that come from known issues:
> 
> ### IGT changes ###
> 
> #### Issues hit ####
> 
>   * igt@gem_ctx_persistence@smoketest:
>     - shard-apl:          [PASS][4] -> [FAIL][5] ([i915#5099])
>    [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-apl7/igt@gem_ctx_persistence@smoketest.html
>    [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl1/igt@gem_ctx_persistence@smoketest.html
> 
>   * igt@gem_eio@unwedge-stress:
>     - shard-iclb:         [PASS][6] -> [TIMEOUT][7] ([i915#3070])
>    [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb6/igt@gem_eio@unwedge-stress.html
>    [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb6/igt@gem_eio@unwedge-stress.html
> 
>   * igt@gem_exec_balancer@parallel-keep-submit-fence:
>     - shard-iclb:         [PASS][8] -> [SKIP][9] ([i915#4525]) +2 similar issues
>    [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@gem_exec_balancer@parallel-keep-submit-fence.html
>    [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb8/igt@gem_exec_balancer@parallel-keep-submit-fence.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_11758/shard-apl3/igt@gem_exec_fair@basic-none-solo@rcs0.html
>    [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl6/igt@gem_exec_fair@basic-none-solo@rcs0.html
> 
>   * igt@gem_exec_fair@basic-none@vcs1:
>     - shard-iclb:         NOTRUN -> [FAIL][12] ([i915#2842])
>    [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb1/igt@gem_exec_fair@basic-none@vcs1.html
> 
>   * igt@gem_exec_fair@basic-pace-solo@rcs0:
>     - shard-iclb:         [PASS][13] -> [FAIL][14] ([i915#2842])
>    [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb8/igt@gem_exec_fair@basic-pace-solo@rcs0.html
>    [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb5/igt@gem_exec_fair@basic-pace-solo@rcs0.html
>     - shard-kbl:          [PASS][15] -> [FAIL][16] ([i915#2842])
>    [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@gem_exec_fair@basic-pace-solo@rcs0.html
>    [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@gem_exec_fair@basic-pace-solo@rcs0.html
> 
>   * igt@gem_lmem_swapping@parallel-random-engines:
>     - shard-apl:          NOTRUN -> [SKIP][17] ([fdo#109271] / [i915#4613])
>    [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8/igt@gem_lmem_swapping@parallel-random-engines.html
> 
>   * igt@gem_lmem_swapping@random:
>     - shard-glk:          NOTRUN -> [SKIP][18] ([fdo#109271] / [i915#4613])
>    [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3/igt@gem_lmem_swapping@random.html
>     - shard-kbl:          NOTRUN -> [SKIP][19] ([fdo#109271] / [i915#4613]) +3 similar issues
>    [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl1/igt@gem_lmem_swapping@random.html
> 
>   * igt@gem_mmap_gtt@fault-concurrent-y:
>     - shard-snb:          [PASS][20] -> [INCOMPLETE][21] ([i915#5161])
>    [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-snb2/igt@gem_mmap_gtt@fault-concurrent-y.html
>    [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-snb6/igt@gem_mmap_gtt@fault-concurrent-y.html
> 
>   * igt@gem_softpin@evict-single-offset:
>     - shard-kbl:          NOTRUN -> [FAIL][22] ([i915#4171])
>    [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@gem_softpin@evict-single-offset.html
> 
>   * igt@i915_pm_dc@dc9-dpms:
>     - shard-iclb:         [PASS][23] -> [SKIP][24] ([i915#4281])
>    [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb7/igt@i915_pm_dc@dc9-dpms.html
>    [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb3/igt@i915_pm_dc@dc9-dpms.html
> 
>   * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip:
>     - shard-apl:          NOTRUN -> [SKIP][25] ([fdo#109271]) +53 similar issues
>    [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip.html
> 
>   * igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_mc_ccs:
>     - shard-kbl:          NOTRUN -> [SKIP][26] ([fdo#109271] / [i915#3886]) +6 similar issues
>    [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_mc_ccs.html
> 
>   * igt@kms_ccs@pipe-b-bad-pixel-format-4_tiled_dg2_rc_ccs:
>     - shard-kbl:          NOTRUN -> [SKIP][27] ([fdo#109271]) +234 similar issues
>    [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@kms_ccs@pipe-b-bad-pixel-format-4_tiled_dg2_rc_ccs.html
> 
>   * igt@kms_ccs@pipe-b-bad-rotation-90-y_tiled_gen12_rc_ccs_cc:
>     - shard-apl:          NOTRUN -> [SKIP][28] ([fdo#109271] / [i915#3886])
>    [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8/igt@kms_ccs@pipe-b-bad-rotation-90-y_tiled_gen12_rc_ccs_cc.html
> 
>   * igt@kms_ccs@pipe-c-random-ccs-data-y_tiled_gen12_rc_ccs_cc:
>     - shard-glk:          NOTRUN -> [SKIP][29] ([fdo#109271] / [i915#3886]) +2 similar issues
>    [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3/igt@kms_ccs@pipe-c-random-ccs-data-y_tiled_gen12_rc_ccs_cc.html
> 
>   * igt@kms_color_chamelium@pipe-a-ctm-negative:
>     - shard-glk:          NOTRUN -> [SKIP][30] ([fdo#109271] / [fdo#111827]) +1 similar issue
>    [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3/igt@kms_color_chamelium@pipe-a-ctm-negative.html
> 
>   * igt@kms_color_chamelium@pipe-b-ctm-red-to-blue:
>     - shard-apl:          NOTRUN -> [SKIP][31] ([fdo#109271] / [fdo#111827]) +1 similar issue
>    [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8/igt@kms_color_chamelium@pipe-b-ctm-red-to-blue.html
> 
>   * igt@kms_color_chamelium@pipe-c-ctm-0-5:
>     - shard-kbl:          NOTRUN -> [SKIP][32] ([fdo#109271] / [fdo#111827]) +18 similar issues
>    [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@kms_color_chamelium@pipe-c-ctm-0-5.html
> 
>   * igt@kms_content_protection@atomic-dpms:
>     - shard-kbl:          NOTRUN -> [TIMEOUT][33] ([i915#1319])
>    [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@kms_content_protection@atomic-dpms.html
> 
>   * igt@kms_dither@fb-8bpc-vs-panel-8bpc@hdmi-a-1-pipe-a:
>     - shard-glk:          [PASS][34] -> [SKIP][35] ([fdo#109271])
>    [34]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-glk1/igt@kms_dither@fb-8bpc-vs-panel-8bpc@hdmi-a-1-pipe-a.html
>    [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk8/igt@kms_dither@fb-8bpc-vs-panel-8bpc@hdmi-a-1-pipe-a.html
> 
>   * igt@kms_fbcon_fbt@fbc-suspend:
>     - shard-apl:          [PASS][36] -> [FAIL][37] ([i915#4767])
>    [36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-apl1/igt@kms_fbcon_fbt@fbc-suspend.html
>    [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl2/igt@kms_fbcon_fbt@fbc-suspend.html
> 
>   * igt@kms_flip@flip-vs-suspend-interruptible@c-edp1:
>     - shard-skl:          [PASS][38] -> [INCOMPLETE][39] ([i915#4939])
>    [38]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl7/igt@kms_flip@flip-vs-suspend-interruptible@c-edp1.html
>    [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl6/igt@kms_flip@flip-vs-suspend-interruptible@c-edp1.html
> 
>   * igt@kms_flip@plain-flip-ts-check@a-edp1:
>     - shard-skl:          [PASS][40] -> [FAIL][41] ([i915#2122])
>    [40]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl7/igt@kms_flip@plain-flip-ts-check@a-edp1.html
>    [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl7/igt@kms_flip@plain-flip-ts-check@a-edp1.html
> 
>   * igt@kms_hdr@bpc-switch-dpms@pipe-a-dp-1:
>     - shard-kbl:          [PASS][42] -> [FAIL][43] ([i915#1188])
>    [42]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@kms_hdr@bpc-switch-dpms@pipe-a-dp-1.html
>    [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@kms_hdr@bpc-switch-dpms@pipe-a-dp-1.html
> 
>   * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
>     - shard-apl:          [PASS][44] -> [DMESG-WARN][45] ([i915#180]) +2 similar issues
>    [44]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-apl8/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b.html
>    [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl2/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b.html
> 
>   * igt@kms_plane_alpha_blend@pipe-a-alpha-basic:
>     - shard-kbl:          NOTRUN -> [FAIL][46] ([fdo#108145] / [i915#265]) +1 similar issue
>    [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@kms_plane_alpha_blend@pipe-a-alpha-basic.html
> 
>   * igt@kms_plane_alpha_blend@pipe-b-alpha-transparent-fb:
>     - shard-kbl:          NOTRUN -> [FAIL][47] ([i915#265])
>    [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@kms_plane_alpha_blend@pipe-b-alpha-transparent-fb.html
> 
>   * igt@kms_plane_multiple@atomic-pipe-b-tiling-4:
>     - shard-glk:          NOTRUN -> [SKIP][48] ([fdo#109271]) +45 similar issues
>    [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3/igt@kms_plane_multiple@atomic-pipe-b-tiling-4.html
> 
>   * igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b-edp-1:
>     - shard-iclb:         [PASS][49] -> [SKIP][50] ([i915#5176]) +1 similar issue
>    [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb7/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b-edp-1.html
>    [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb3/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b-edp-1.html
> 
>   * igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5@pipe-a-edp-1:
>     - shard-iclb:         [PASS][51] -> [SKIP][52] ([i915#5235]) +2 similar issues
>    [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb5/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5@pipe-a-edp-1.html
>    [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb2/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5@pipe-a-edp-1.html
> 
>   * igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-sf:
>     - shard-kbl:          NOTRUN -> [SKIP][53] ([fdo#109271] / [i915#658]) +3 similar issues
>    [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-sf.html
> 
>   * igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-fully-sf:
>     - shard-glk:          NOTRUN -> [SKIP][54] ([fdo#109271] / [i915#658])
>    [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3/igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-fully-sf.html
> 
>   * igt@kms_psr@psr2_sprite_blt:
>     - shard-iclb:         [PASS][55] -> [SKIP][56] ([fdo#109441]) +2 similar issues
>    [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@kms_psr@psr2_sprite_blt.html
>    [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb8/igt@kms_psr@psr2_sprite_blt.html
> 
>   * igt@kms_writeback@writeback-fb-id:
>     - shard-kbl:          NOTRUN -> [SKIP][57] ([fdo#109271] / [i915#2437]) +1 similar issue
>    [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@kms_writeback@writeback-fb-id.html
> 
>   * igt@perf@polling-small-buf:
>     - shard-skl:          [PASS][58] -> [FAIL][59] ([i915#1722])
>    [58]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl4/igt@perf@polling-small-buf.html
>    [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl6/igt@perf@polling-small-buf.html
> 
>   * igt@sysfs_clients@fair-7:
>     - shard-apl:          NOTRUN -> [SKIP][60] ([fdo#109271] / [i915#2994])
>    [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8/igt@sysfs_clients@fair-7.html
> 
>   * igt@sysfs_clients@sema-25:
>     - shard-kbl:          NOTRUN -> [SKIP][61] ([fdo#109271] / [i915#2994]) +2 similar issues
>    [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@sysfs_clients@sema-25.html
> 
>   
> #### Possible fixes ####
> 
>   * igt@gem_ctx_isolation@preservation-s3@vcs0:
>     - shard-kbl:          [DMESG-WARN][62] ([i915#180]) -> [PASS][63] +10 similar issues
>    [62]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl4/igt@gem_ctx_isolation@preservation-s3@vcs0.html
>    [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@gem_ctx_isolation@preservation-s3@vcs0.html
> 
>   * igt@gem_eio@in-flight-contexts-1us:
>     - shard-iclb:         [TIMEOUT][64] ([i915#3070]) -> [PASS][65]
>    [64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb3/igt@gem_eio@in-flight-contexts-1us.html
>    [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb5/igt@gem_eio@in-flight-contexts-1us.html
> 
>   * igt@gem_eio@in-flight-contexts-immediate:
>     - {shard-tglu}:       [TIMEOUT][66] ([i915#3063]) -> [PASS][67]
>    [66]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglu-1/igt@gem_eio@in-flight-contexts-immediate.html
>    [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglu-1/igt@gem_eio@in-flight-contexts-immediate.html
> 
>   * igt@gem_eio@in-flight-immediate:
>     - shard-tglb:         [TIMEOUT][68] ([i915#3063]) -> [PASS][69]
>    [68]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglb1/igt@gem_eio@in-flight-immediate.html
>    [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglb1/igt@gem_eio@in-flight-immediate.html
> 
>   * igt@gem_exec_endless@dispatch@vecs0:
>     - shard-tglb:         [INCOMPLETE][70] ([i915#3778]) -> [PASS][71]
>    [70]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglb8/igt@gem_exec_endless@dispatch@vecs0.html
>    [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglb6/igt@gem_exec_endless@dispatch@vecs0.html
> 
>   * igt@gem_exec_fair@basic-none-share@rcs0:
>     - {shard-tglu}:       [FAIL][72] ([i915#2842]) -> [PASS][73]
>    [72]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglu-5/igt@gem_exec_fair@basic-none-share@rcs0.html
>    [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglu-5/igt@gem_exec_fair@basic-none-share@rcs0.html
>     - shard-iclb:         [FAIL][74] ([i915#2842]) -> [PASS][75]
>    [74]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb6/igt@gem_exec_fair@basic-none-share@rcs0.html
>    [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb8/igt@gem_exec_fair@basic-none-share@rcs0.html
> 
>   * igt@gem_exec_fair@basic-none@vcs0:
>     - shard-kbl:          [FAIL][76] ([i915#2842]) -> [PASS][77]
>    [76]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl3/igt@gem_exec_fair@basic-none@vcs0.html
>    [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@gem_exec_fair@basic-none@vcs0.html
> 
>   * igt@gem_mmap_wc@set-cache-level:
>     - {shard-rkl}:        [SKIP][78] ([i915#1850]) -> [PASS][79]
>    [78]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@gem_mmap_wc@set-cache-level.html
>    [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@gem_mmap_wc@set-cache-level.html
> 
>   * igt@gen9_exec_parse@allowed-single:
>     - shard-kbl:          [DMESG-WARN][80] ([i915#5566] / [i915#716]) -> [PASS][81]
>    [80]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@gen9_exec_parse@allowed-single.html
>    [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@gen9_exec_parse@allowed-single.html
> 
>   * igt@i915_pm_backlight@fade:
>     - {shard-rkl}:        [SKIP][82] ([i915#3012]) -> [PASS][83]
>    [82]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@i915_pm_backlight@fade.html
>    [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@i915_pm_backlight@fade.html
> 
>   * igt@i915_pm_rpm@i2c:
>     - {shard-rkl}:        [SKIP][84] ([fdo#109308]) -> [PASS][85] +1 similar issue
>    [84]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@i915_pm_rpm@i2c.html
>    [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@i915_pm_rpm@i2c.html
> 
>   * igt@i915_pm_rpm@modeset-lpsp-stress-no-wait:
>     - {shard-rkl}:        [SKIP][86] ([i915#1397]) -> [PASS][87] +1 similar issue
>    [86]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@i915_pm_rpm@modeset-lpsp-stress-no-wait.html
>    [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@i915_pm_rpm@modeset-lpsp-stress-no-wait.html
> 
>   * igt@i915_selftest@live@hangcheck:
>     - shard-tglb:         [DMESG-WARN][88] ([i915#5591]) -> [PASS][89]
>    [88]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglb8/igt@i915_selftest@live@hangcheck.html
>    [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglb6/igt@i915_selftest@live@hangcheck.html
> 
>   * igt@kms_color@pipe-a-ctm-green-to-red:
>     - {shard-rkl}:        [SKIP][90] ([i915#1149] / [i915#1849] / [i915#4070] / [i915#4098]) -> [PASS][91] +1 similar issue
>    [90]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_color@pipe-a-ctm-green-to-red.html
>    [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_color@pipe-a-ctm-green-to-red.html
> 
>   * igt@kms_cursor_crc@pipe-b-cursor-128x42-onscreen:
>     - {shard-rkl}:        [SKIP][92] ([fdo#112022] / [i915#4070]) -> [PASS][93] +8 similar issues
>    [92]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@kms_cursor_crc@pipe-b-cursor-128x42-onscreen.html
>    [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_cursor_crc@pipe-b-cursor-128x42-onscreen.html
> 
>   * igt@kms_cursor_legacy@cursora-vs-flipa-atomic:
>     - {shard-rkl}:        [SKIP][94] ([fdo#111825] / [i915#4070]) -> [PASS][95] +1 similar issue
>    [94]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_cursor_legacy@cursora-vs-flipa-atomic.html
>    [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_cursor_legacy@cursora-vs-flipa-atomic.html
> 
>   * igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled:
>     - {shard-rkl}:        [SKIP][96] ([fdo#111314] / [i915#4098] / [i915#4369]) -> [PASS][97] +2 similar issues
>    [96]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled.html
>    [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled.html
> 
>   * igt@kms_fbcon_fbt@psr-suspend:
>     - {shard-rkl}:        [SKIP][98] ([fdo#110189] / [i915#3955]) -> [PASS][99]
>    [98]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_fbcon_fbt@psr-suspend.html
>    [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_fbcon_fbt@psr-suspend.html
> 
>   * igt@kms_flip@flip-vs-suspend@a-dp1:
>     - shard-apl:          [DMESG-WARN][100] ([i915#180]) -> [PASS][101] +2 similar issues
>    [100]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-apl1/igt@kms_flip@flip-vs-suspend@a-dp1.html
>    [101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl2/igt@kms_flip@flip-vs-suspend@a-dp1.html
> 
>   * igt@kms_frontbuffer_tracking@fbc-badstride:
>     - {shard-rkl}:        [SKIP][102] ([i915#1849] / [i915#4098]) -> [PASS][103] +31 similar issues
>    [102]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_frontbuffer_tracking@fbc-badstride.html
>    [103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-badstride.html
> 
>   * igt@kms_plane@plane-panning-bottom-right@pipe-b-planes:
>     - {shard-rkl}:        [SKIP][104] ([i915#1849] / [i915#3558]) -> [PASS][105] +1 similar issue
>    [104]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@kms_plane@plane-panning-bottom-right@pipe-b-planes.html
>    [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_plane@plane-panning-bottom-right@pipe-b-planes.html
> 
>   * igt@kms_plane_alpha_blend@pipe-a-alpha-basic:
>     - {shard-rkl}:        [SKIP][106] ([i915#1849] / [i915#4070] / [i915#4098]) -> [PASS][107] +2 similar issues
>    [106]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_plane_alpha_blend@pipe-a-alpha-basic.html
>    [107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_plane_alpha_blend@pipe-a-alpha-basic.html
> 
>   * igt@kms_plane_multiple@atomic-pipe-a-tiling-none:
>     - {shard-rkl}:        [SKIP][108] ([i915#3558] / [i915#4070]) -> [PASS][109]
>    [108]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_plane_multiple@atomic-pipe-a-tiling-none.html
>    [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_plane_multiple@atomic-pipe-a-tiling-none.html
> 
>   * igt@kms_plane_multiple@atomic-pipe-a-tiling-x:
>     - {shard-rkl}:        [SKIP][110] ([i915#1849] / [i915#3558] / [i915#4070]) -> [PASS][111]
>    [110]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@kms_plane_multiple@atomic-pipe-a-tiling-x.html
>    [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_plane_multiple@atomic-pipe-a-tiling-x.html
> 
>   * igt@kms_properties@crtc-properties-atomic:
>     - {shard-rkl}:        [SKIP][112] ([i915#1849]) -> [PASS][113]
>    [112]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_properties@crtc-properties-atomic.html
>    [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_properties@crtc-properties-atomic.html
> 
>   * igt@kms_psr@primary_render:
>     - {shard-rkl}:        [SKIP][114] ([i915#1072]) -> [PASS][115] +3 similar issues
>    [114]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_psr@primary_render.html
>    [115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_psr@primary_render.html
> 
>   * igt@kms_psr@psr2_sprite_plane_move:
>     - shard-iclb:         [SKIP][116] ([fdo#109441]) -> [PASS][117] +3 similar issues
>    [116]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb5/igt@kms_psr@psr2_sprite_plane_move.html
>    [117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb2/igt@kms_psr@psr2_sprite_plane_move.html
> 
>   * igt@kms_universal_plane@universal-plane-gen9-features-pipe-a:
>     - {shard-rkl}:        [SKIP][118] ([i915#1845] / [i915#4070] / [i915#4098]) -> [PASS][119] +1 similar issue
>    [118]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_universal_plane@universal-plane-gen9-features-pipe-a.html
>    [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_universal_plane@universal-plane-gen9-features-pipe-a.html
> 
>   * igt@kms_vblank@pipe-b-query-forked:
>     - {shard-rkl}:        [SKIP][120] ([i915#1845] / [i915#4098]) -> [PASS][121] +33 similar issues
>    [120]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_vblank@pipe-b-query-forked.html
>    [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_vblank@pipe-b-query-forked.html
> 
>   * igt@perf@polling-small-buf:
>     - {shard-rkl}:        [FAIL][122] ([i915#1722]) -> [PASS][123]
>    [122]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@perf@polling-small-buf.html
>    [123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@perf@polling-small-buf.html
> 
>   * igt@perf@short-reads:
>     - shard-skl:          [FAIL][124] ([i915#51]) -> [PASS][125]
>    [124]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl4/igt@perf@short-reads.html
>    [125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl10/igt@perf@short-reads.html
> 
>   
> #### Warnings ####
> 
>   * igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf:
>     - shard-iclb:         [SKIP][126] ([i915#2920]) -> [SKIP][127] ([i915#658])
>    [126]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf.html
>    [127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb8/igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf.html
> 
>   * igt@kms_psr2_sf@overlay-plane-update-continuous-sf:
>     - shard-iclb:         [SKIP][128] ([i915#2920]) -> [SKIP][129] ([fdo#111068] / [i915#658])
>    [128]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@kms_psr2_sf@overlay-plane-update-continuous-sf.html
>    [129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb8/igt@kms_psr2_sf@overlay-plane-update-continuous-sf.html
> 
>   * igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area:
>     - shard-iclb:         [SKIP][130] ([fdo#111068] / [i915#658]) -> [SKIP][131] ([i915#2920])
>    [130]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb5/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area.html
>    [131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb2/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area.html
> 
>   * igt@kms_psr2_su@page_flip-nv12:
>     - shard-iclb:         [FAIL][132] ([i915#5939]) -> [SKIP][133] ([fdo#109642] / [fdo#111068] / [i915#658])
>    [132]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@kms_psr2_su@page_flip-nv12.html
>    [133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb4/igt@kms_psr2_su@page_flip-nv12.html
> 
>   * igt@kms_psr2_su@page_flip-p010:
>     - shard-iclb:         [SKIP][134] ([fdo#109642] / [fdo#111068] / [i915#658]) -> [FAIL][135] ([i915#5939])
>    [134]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb4/igt@kms_psr2_su@page_flip-p010.html
>    [135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb2/igt@kms_psr2_su@page_flip-p010.html
> 
>   * igt@runner@aborted:
>     - shard-kbl:          ([FAIL][136], [FAIL][137], [FAIL][138], [FAIL][139], [FAIL][140], [FAIL][141], [FAIL][142], [FAIL][143], [FAIL][144], [FAIL][145], [FAIL][146]) ([fdo#109271] / [i915#180] / [i915#3002] / [i915#4312] / [i915#5257] / [i915#716]) -> ([FAIL][147], [FAIL][148]) ([i915#3002] / [i915#4312] / [i915#5257])
>    [136]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@runner@aborted.html
>    [137]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@runner@aborted.html
>    [138]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl7/igt@runner@aborted.html
>    [139]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl3/igt@runner@aborted.html
>    [140]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@runner@aborted.html
>    [141]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl4/igt@runner@aborted.html
>    [142]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl4/igt@runner@aborted.html
>    [143]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@runner@aborted.html
>    [144]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl7/igt@runner@aborted.html
>    [145]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl4/igt@runner@aborted.html
>    [146]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl7/igt@runner@aborted.html
>    [147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@runner@aborted.html
>    [148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl3/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).
> 
>   [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
>   [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
>   [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
>   [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#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
>   [fdo#109291]: https://bugs.freedesktop.org/show_bug.cgi?id=109291
>   [fdo#109300]: https://bugs.freedesktop.org/show_bug.cgi?id=109300
>   [fdo#109308]: https://bugs.freedesktop.org/show_bug.cgi?id=109308
>   [fdo#109314]: https://bugs.freedesktop.org/show_bug.cgi?id=109314
>   [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
>   [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#111314]: https://bugs.freedesktop.org/show_bug.cgi?id=111314
>   [fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
>   [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
>   [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
>   [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
>   [fdo#112022]: https://bugs.freedesktop.org/show_bug.cgi?id=112022
>   [i915#1063]: https://gitlab.freedesktop.org/drm/intel/issues/1063
>   [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
>   [i915#1149]: https://gitlab.freedesktop.org/drm/intel/issues/1149
>   [i915#1188]: https://gitlab.freedesktop.org/drm/intel/issues/1188
>   [i915#1319]: https://gitlab.freedesktop.org/drm/intel/issues/1319
>   [i915#132]: https://gitlab.freedesktop.org/drm/intel/issues/132
>   [i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397
>   [i915#1722]: https://gitlab.freedesktop.org/drm/intel/issues/1722
>   [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#1850]: https://gitlab.freedesktop.org/drm/intel/issues/1850
>   [i915#1911]: https://gitlab.freedesktop.org/drm/intel/issues/1911
>   [i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
>   [i915#2232]: https://gitlab.freedesktop.org/drm/intel/issues/2232
>   [i915#2434]: https://gitlab.freedesktop.org/drm/intel/issues/2434
>   [i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
>   [i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
>   [i915#2530]: https://gitlab.freedesktop.org/drm/intel/issues/2530
>   [i915#2582]: https://gitlab.freedesktop.org/drm/intel/issues/2582
>   [i915#265]: https://gitlab.freedesktop.org/drm/intel/issues/265
>   [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
>   [i915#2705]: https://gitlab.freedesktop.org/drm/intel/issues/2705
>   [i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
>   [i915#284]: https://gitlab.freedesktop.org/drm/intel/issues/284
>   [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
>   [i915#2849]: https://gitlab.freedesktop.org/drm/intel/issues/2849
>   [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#3012]: https://gitlab.freedesktop.org/drm/intel/issues/3012
>   [i915#3063]: https://gitlab.freedesktop.org/drm/intel/issues/3063
>   [i915#3070]: https://gitlab.freedesktop.org/drm/intel/issues/3070
>   [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
>   [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
>   [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
>   [i915#3319]: https://gitlab.freedesktop.org/drm/intel/issues/3319
>   [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
>   [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#3701]: https://gitlab.freedesktop.org/drm/intel/issues/3701
>   [i915#3734]: https://gitlab.freedesktop.org/drm/intel/issues/3734
>   [i915#3742]: https://gitlab.freedesktop.org/drm/intel/issues/3742
>   [i915#3778]: https://gitlab.freedesktop.org/drm/intel/issues/3778
>   [i915#3828]: https://gitlab.freedesktop.org/drm/intel/issues/3828
>   [i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
>   [i915#3955]: https://gitlab.freedesktop.org/drm/intel/issues/3955
>   [i915#404]: https://gitlab.freedesktop.org/drm/intel/issues/404
>   [i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
>   [i915#4098]: https://gitlab.freedesktop.org/drm/intel/issues/4098
>   [i915#4171]: https://gitlab.freedesktop.org/drm/intel/issues/4171
>   [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
>   [i915#4278]: https://gitlab.freedesktop.org/drm/intel/issues/4278
>   [i915#4281]: https://gitlab.freedesktop.org/drm/intel/issues/4281
>   [i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
>   [i915#4369]: https://gitlab.freedesktop.org/drm/intel/issues/4369
>   [i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
>   [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
>   [i915#4767]: https://gitlab.freedesktop.org/drm/intel/issues/4767
>   [i915#4893]: https://gitlab.freedesktop.org/drm/intel/issues/4893
>   [i915#4939]: https://gitlab.freedesktop.org/drm/intel/issues/4939
>   [i915#5099]: https://gitlab.freedesktop.org/drm/intel/issues/5099
>   [i915#51]: https://gitlab.freedesktop.org/drm/intel/issues/51
>   [i915#5161]: https://gitlab.freedesktop.org/drm/intel/issues/5161
>   [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
>   [i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
>   [i915#5257]: https://gitlab.freedesktop.org/drm/intel/issues/5257
>   [i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
>   [i915#5287]: https://gitlab.freedesktop.org/drm/intel/issues/5287
>   [i915#5288]: https://gitlab.freedesktop.org/drm/intel/issues/5288
>   [i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
>   [i915#5325]: https://gitlab.freedesktop.org/drm/intel/issues/5325
>   [i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
>   [i915#5439]: https://gitlab.freedesktop.org/drm/intel/issues/5439
>   [i915#5461]: https://gitlab.freedesktop.org/drm/intel/issues/5461
>   [i915#5566]: https://gitlab.freedesktop.org/drm/intel/issues/5566
>   [i915#5591]: https://gitlab.freedesktop.org/drm/intel/issues/5591
>   [i915#5939]: https://gitlab.freedesktop.org/drm/intel/issues/5939
>   [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
>   [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
>   [i915#716]: https://gitlab.freedesktop.org/drm/intel/issues/716
> 
> 
> Build changes
> -------------
> 
>   * Linux: CI_DRM_11758 -> Patchwork_105134v1
> 
>   CI-20190529: 20190529
>   CI_DRM_11758: a2644b16f1f05a1a6eff99d7076bfa0e770bdeb6 @ git://anongit.freedesktop.org/gfx-ci/linux
>   IGT_6526: 02888400228efbb29437726aa04114575ea939c3 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
>   Patchwork_105134v1: a2644b16f1f05a1a6eff99d7076bfa0e770bdeb6 @ 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_105134v1/index.html

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

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

* [Intel-gfx] ✓ Fi.CI.IGT: success for i915: Extract, polish, and document multicast handling
  2022-06-15  0:10 ` [Intel-gfx] " Matt Roper
                   ` (6 preceding siblings ...)
  (?)
@ 2022-06-16  6:05 ` Patchwork
  -1 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2022-06-16  6:05 UTC (permalink / raw)
  To: Matt Roper; +Cc: intel-gfx

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

== Series Details ==

Series: i915: Extract, polish, and document multicast handling
URL   : https://patchwork.freedesktop.org/series/105134/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_11758_full -> Patchwork_105134v1_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (13 -> 13)
------------------------------

  No changes in participating hosts

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_ctx_persistence@smoketest:
    - shard-apl:          [PASS][1] -> [FAIL][2] ([i915#5099])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-apl7/igt@gem_ctx_persistence@smoketest.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl1/igt@gem_ctx_persistence@smoketest.html

  * igt@gem_eio@unwedge-stress:
    - shard-iclb:         [PASS][3] -> [TIMEOUT][4] ([i915#3070])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb6/igt@gem_eio@unwedge-stress.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb6/igt@gem_eio@unwedge-stress.html

  * igt@gem_exec_balancer@parallel-keep-submit-fence:
    - shard-iclb:         [PASS][5] -> [SKIP][6] ([i915#4525]) +2 similar issues
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@gem_exec_balancer@parallel-keep-submit-fence.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb8/igt@gem_exec_balancer@parallel-keep-submit-fence.html

  * igt@gem_exec_fair@basic-none-solo@rcs0:
    - shard-apl:          [PASS][7] -> [FAIL][8] ([i915#2842])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-apl3/igt@gem_exec_fair@basic-none-solo@rcs0.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl6/igt@gem_exec_fair@basic-none-solo@rcs0.html

  * igt@gem_exec_fair@basic-none@vcs1:
    - shard-iclb:         NOTRUN -> [FAIL][9] ([i915#2842])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb1/igt@gem_exec_fair@basic-none@vcs1.html

  * igt@gem_exec_fair@basic-pace-solo@rcs0:
    - shard-iclb:         [PASS][10] -> [FAIL][11] ([i915#2842])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb8/igt@gem_exec_fair@basic-pace-solo@rcs0.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb5/igt@gem_exec_fair@basic-pace-solo@rcs0.html
    - shard-kbl:          [PASS][12] -> [FAIL][13] ([i915#2842])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@gem_exec_fair@basic-pace-solo@rcs0.html
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@gem_exec_fair@basic-pace-solo@rcs0.html

  * igt@gem_lmem_swapping@parallel-random-engines:
    - shard-apl:          NOTRUN -> [SKIP][14] ([fdo#109271] / [i915#4613])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8/igt@gem_lmem_swapping@parallel-random-engines.html

  * igt@gem_lmem_swapping@random:
    - shard-glk:          NOTRUN -> [SKIP][15] ([fdo#109271] / [i915#4613])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3/igt@gem_lmem_swapping@random.html
    - shard-kbl:          NOTRUN -> [SKIP][16] ([fdo#109271] / [i915#4613]) +3 similar issues
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl1/igt@gem_lmem_swapping@random.html

  * igt@gem_mmap_gtt@fault-concurrent-y:
    - shard-snb:          [PASS][17] -> [INCOMPLETE][18] ([i915#5161])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-snb2/igt@gem_mmap_gtt@fault-concurrent-y.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-snb6/igt@gem_mmap_gtt@fault-concurrent-y.html

  * igt@gem_softpin@evict-single-offset:
    - shard-kbl:          NOTRUN -> [FAIL][19] ([i915#4171])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@gem_softpin@evict-single-offset.html

  * igt@i915_pm_dc@dc9-dpms:
    - shard-iclb:         [PASS][20] -> [SKIP][21] ([i915#4281])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb7/igt@i915_pm_dc@dc9-dpms.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb3/igt@i915_pm_dc@dc9-dpms.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip:
    - shard-apl:          NOTRUN -> [SKIP][22] ([fdo#109271]) +53 similar issues
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip.html

  * igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_mc_ccs:
    - shard-kbl:          NOTRUN -> [SKIP][23] ([fdo#109271] / [i915#3886]) +6 similar issues
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_mc_ccs.html

  * igt@kms_ccs@pipe-b-bad-pixel-format-4_tiled_dg2_rc_ccs:
    - shard-kbl:          NOTRUN -> [SKIP][24] ([fdo#109271]) +234 similar issues
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@kms_ccs@pipe-b-bad-pixel-format-4_tiled_dg2_rc_ccs.html

  * igt@kms_ccs@pipe-b-bad-rotation-90-y_tiled_gen12_rc_ccs_cc:
    - shard-apl:          NOTRUN -> [SKIP][25] ([fdo#109271] / [i915#3886])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8/igt@kms_ccs@pipe-b-bad-rotation-90-y_tiled_gen12_rc_ccs_cc.html

  * igt@kms_ccs@pipe-c-random-ccs-data-y_tiled_gen12_rc_ccs_cc:
    - shard-glk:          NOTRUN -> [SKIP][26] ([fdo#109271] / [i915#3886]) +2 similar issues
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3/igt@kms_ccs@pipe-c-random-ccs-data-y_tiled_gen12_rc_ccs_cc.html

  * igt@kms_color_chamelium@pipe-a-ctm-negative:
    - shard-glk:          NOTRUN -> [SKIP][27] ([fdo#109271] / [fdo#111827]) +1 similar issue
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3/igt@kms_color_chamelium@pipe-a-ctm-negative.html

  * igt@kms_color_chamelium@pipe-b-ctm-red-to-blue:
    - shard-apl:          NOTRUN -> [SKIP][28] ([fdo#109271] / [fdo#111827]) +1 similar issue
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8/igt@kms_color_chamelium@pipe-b-ctm-red-to-blue.html

  * igt@kms_color_chamelium@pipe-c-ctm-0-5:
    - shard-kbl:          NOTRUN -> [SKIP][29] ([fdo#109271] / [fdo#111827]) +18 similar issues
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@kms_color_chamelium@pipe-c-ctm-0-5.html

  * igt@kms_content_protection@atomic-dpms:
    - shard-kbl:          NOTRUN -> [TIMEOUT][30] ([i915#1319])
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@kms_content_protection@atomic-dpms.html

  * igt@kms_cursor_legacy@pipe-c-torture-bo:
    - shard-skl:          [PASS][31] -> [INCOMPLETE][32] ([i915#6048])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl2/igt@kms_cursor_legacy@pipe-c-torture-bo.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl4/igt@kms_cursor_legacy@pipe-c-torture-bo.html

  * igt@kms_dither@fb-8bpc-vs-panel-8bpc@hdmi-a-1-pipe-a:
    - shard-glk:          [PASS][33] -> [SKIP][34] ([fdo#109271])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-glk1/igt@kms_dither@fb-8bpc-vs-panel-8bpc@hdmi-a-1-pipe-a.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk8/igt@kms_dither@fb-8bpc-vs-panel-8bpc@hdmi-a-1-pipe-a.html

  * igt@kms_fbcon_fbt@fbc-suspend:
    - shard-apl:          [PASS][35] -> [FAIL][36] ([i915#4767])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-apl1/igt@kms_fbcon_fbt@fbc-suspend.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl2/igt@kms_fbcon_fbt@fbc-suspend.html

  * igt@kms_flip@flip-vs-suspend-interruptible@c-edp1:
    - shard-skl:          [PASS][37] -> [INCOMPLETE][38] ([i915#4939])
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl7/igt@kms_flip@flip-vs-suspend-interruptible@c-edp1.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl6/igt@kms_flip@flip-vs-suspend-interruptible@c-edp1.html

  * igt@kms_flip@plain-flip-ts-check@a-edp1:
    - shard-skl:          [PASS][39] -> [FAIL][40] ([i915#2122])
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl7/igt@kms_flip@plain-flip-ts-check@a-edp1.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl7/igt@kms_flip@plain-flip-ts-check@a-edp1.html

  * igt@kms_hdr@bpc-switch-dpms@pipe-a-dp-1:
    - shard-kbl:          [PASS][41] -> [FAIL][42] ([i915#1188])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@kms_hdr@bpc-switch-dpms@pipe-a-dp-1.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@kms_hdr@bpc-switch-dpms@pipe-a-dp-1.html

  * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
    - shard-apl:          [PASS][43] -> [DMESG-WARN][44] ([i915#180]) +2 similar issues
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-apl8/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl2/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b.html

  * igt@kms_plane_alpha_blend@pipe-a-alpha-basic:
    - shard-kbl:          NOTRUN -> [FAIL][45] ([fdo#108145] / [i915#265]) +1 similar issue
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@kms_plane_alpha_blend@pipe-a-alpha-basic.html

  * igt@kms_plane_alpha_blend@pipe-b-alpha-transparent-fb:
    - shard-kbl:          NOTRUN -> [FAIL][46] ([i915#265])
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@kms_plane_alpha_blend@pipe-b-alpha-transparent-fb.html

  * igt@kms_plane_multiple@atomic-pipe-b-tiling-4:
    - shard-glk:          NOTRUN -> [SKIP][47] ([fdo#109271]) +45 similar issues
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3/igt@kms_plane_multiple@atomic-pipe-b-tiling-4.html

  * igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b-edp-1:
    - shard-iclb:         [PASS][48] -> [SKIP][49] ([i915#5176]) +1 similar issue
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb7/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b-edp-1.html
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb3/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b-edp-1.html

  * igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5@pipe-a-edp-1:
    - shard-iclb:         [PASS][50] -> [SKIP][51] ([i915#5235]) +2 similar issues
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb5/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5@pipe-a-edp-1.html
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb2/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5@pipe-a-edp-1.html

  * igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-sf:
    - shard-kbl:          NOTRUN -> [SKIP][52] ([fdo#109271] / [i915#658]) +3 similar issues
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-fully-sf:
    - shard-glk:          NOTRUN -> [SKIP][53] ([fdo#109271] / [i915#658])
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3/igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr@psr2_sprite_blt:
    - shard-iclb:         [PASS][54] -> [SKIP][55] ([fdo#109441]) +2 similar issues
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@kms_psr@psr2_sprite_blt.html
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb8/igt@kms_psr@psr2_sprite_blt.html

  * igt@kms_writeback@writeback-fb-id:
    - shard-kbl:          NOTRUN -> [SKIP][56] ([fdo#109271] / [i915#2437]) +1 similar issue
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@kms_writeback@writeback-fb-id.html

  * igt@perf@polling-small-buf:
    - shard-skl:          [PASS][57] -> [FAIL][58] ([i915#1722])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl4/igt@perf@polling-small-buf.html
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl6/igt@perf@polling-small-buf.html

  * igt@sysfs_clients@fair-7:
    - shard-apl:          NOTRUN -> [SKIP][59] ([fdo#109271] / [i915#2994])
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8/igt@sysfs_clients@fair-7.html

  * igt@sysfs_clients@sema-25:
    - shard-kbl:          NOTRUN -> [SKIP][60] ([fdo#109271] / [i915#2994]) +2 similar issues
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@sysfs_clients@sema-25.html

  
#### Possible fixes ####

  * igt@gem_ctx_isolation@preservation-s3@vcs0:
    - shard-kbl:          [DMESG-WARN][61] ([i915#180]) -> [PASS][62] +10 similar issues
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl4/igt@gem_ctx_isolation@preservation-s3@vcs0.html
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@gem_ctx_isolation@preservation-s3@vcs0.html

  * igt@gem_eio@in-flight-contexts-1us:
    - shard-iclb:         [TIMEOUT][63] ([i915#3070]) -> [PASS][64]
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb3/igt@gem_eio@in-flight-contexts-1us.html
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb5/igt@gem_eio@in-flight-contexts-1us.html

  * igt@gem_eio@in-flight-contexts-immediate:
    - {shard-tglu}:       [TIMEOUT][65] ([i915#3063]) -> [PASS][66]
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglu-1/igt@gem_eio@in-flight-contexts-immediate.html
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglu-1/igt@gem_eio@in-flight-contexts-immediate.html

  * igt@gem_eio@in-flight-immediate:
    - shard-tglb:         [TIMEOUT][67] ([i915#3063]) -> [PASS][68]
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglb1/igt@gem_eio@in-flight-immediate.html
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglb1/igt@gem_eio@in-flight-immediate.html

  * igt@gem_exec_endless@dispatch@vecs0:
    - shard-tglb:         [INCOMPLETE][69] ([i915#3778]) -> [PASS][70]
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglb8/igt@gem_exec_endless@dispatch@vecs0.html
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglb6/igt@gem_exec_endless@dispatch@vecs0.html

  * igt@gem_exec_fair@basic-none-share@rcs0:
    - {shard-tglu}:       [FAIL][71] ([i915#2842]) -> [PASS][72]
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglu-5/igt@gem_exec_fair@basic-none-share@rcs0.html
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglu-5/igt@gem_exec_fair@basic-none-share@rcs0.html
    - shard-iclb:         [FAIL][73] ([i915#2842]) -> [PASS][74]
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb6/igt@gem_exec_fair@basic-none-share@rcs0.html
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb8/igt@gem_exec_fair@basic-none-share@rcs0.html

  * igt@gem_exec_fair@basic-none@vcs0:
    - shard-kbl:          [FAIL][75] ([i915#2842]) -> [PASS][76]
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl3/igt@gem_exec_fair@basic-none@vcs0.html
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@gem_exec_fair@basic-none@vcs0.html

  * igt@gem_mmap_wc@set-cache-level:
    - {shard-rkl}:        [SKIP][77] ([i915#1850]) -> [PASS][78]
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@gem_mmap_wc@set-cache-level.html
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@gem_mmap_wc@set-cache-level.html

  * igt@gen9_exec_parse@allowed-single:
    - shard-kbl:          [DMESG-WARN][79] ([i915#5566] / [i915#716]) -> [PASS][80]
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@gen9_exec_parse@allowed-single.html
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7/igt@gen9_exec_parse@allowed-single.html

  * igt@i915_pm_backlight@fade:
    - {shard-rkl}:        [SKIP][81] ([i915#3012]) -> [PASS][82]
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@i915_pm_backlight@fade.html
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@i915_pm_backlight@fade.html

  * igt@i915_pm_rpm@i2c:
    - {shard-rkl}:        [SKIP][83] ([fdo#109308]) -> [PASS][84] +1 similar issue
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@i915_pm_rpm@i2c.html
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@i915_pm_rpm@i2c.html

  * igt@i915_pm_rpm@modeset-lpsp-stress-no-wait:
    - {shard-rkl}:        [SKIP][85] ([i915#1397]) -> [PASS][86] +1 similar issue
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@i915_pm_rpm@modeset-lpsp-stress-no-wait.html
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@i915_pm_rpm@modeset-lpsp-stress-no-wait.html

  * igt@i915_selftest@live@hangcheck:
    - shard-tglb:         [DMESG-WARN][87] ([i915#5591]) -> [PASS][88]
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglb8/igt@i915_selftest@live@hangcheck.html
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglb6/igt@i915_selftest@live@hangcheck.html

  * igt@kms_color@pipe-a-ctm-green-to-red:
    - {shard-rkl}:        [SKIP][89] ([i915#1149] / [i915#1849] / [i915#4070] / [i915#4098]) -> [PASS][90] +1 similar issue
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_color@pipe-a-ctm-green-to-red.html
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_color@pipe-a-ctm-green-to-red.html

  * igt@kms_cursor_crc@pipe-b-cursor-128x42-onscreen:
    - {shard-rkl}:        [SKIP][91] ([fdo#112022] / [i915#4070]) -> [PASS][92] +8 similar issues
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@kms_cursor_crc@pipe-b-cursor-128x42-onscreen.html
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_cursor_crc@pipe-b-cursor-128x42-onscreen.html

  * igt@kms_cursor_legacy@cursora-vs-flipa-atomic:
    - {shard-rkl}:        [SKIP][93] ([fdo#111825] / [i915#4070]) -> [PASS][94] +1 similar issue
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_cursor_legacy@cursora-vs-flipa-atomic.html
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_cursor_legacy@cursora-vs-flipa-atomic.html

  * igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled:
    - {shard-rkl}:        [SKIP][95] ([fdo#111314] / [i915#4098] / [i915#4369]) -> [PASS][96] +2 similar issues
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled.html
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled.html

  * igt@kms_fbcon_fbt@psr-suspend:
    - {shard-rkl}:        [SKIP][97] ([fdo#110189] / [i915#3955]) -> [PASS][98]
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_fbcon_fbt@psr-suspend.html
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_fbcon_fbt@psr-suspend.html

  * igt@kms_flip@flip-vs-suspend@a-dp1:
    - shard-apl:          [DMESG-WARN][99] ([i915#180]) -> [PASS][100] +2 similar issues
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-apl1/igt@kms_flip@flip-vs-suspend@a-dp1.html
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl2/igt@kms_flip@flip-vs-suspend@a-dp1.html

  * igt@kms_frontbuffer_tracking@fbc-badstride:
    - {shard-rkl}:        [SKIP][101] ([i915#1849] / [i915#4098]) -> [PASS][102] +31 similar issues
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_frontbuffer_tracking@fbc-badstride.html
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-badstride.html

  * igt@kms_plane@plane-panning-bottom-right@pipe-b-planes:
    - {shard-rkl}:        [SKIP][103] ([i915#1849] / [i915#3558]) -> [PASS][104] +1 similar issue
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@kms_plane@plane-panning-bottom-right@pipe-b-planes.html
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_plane@plane-panning-bottom-right@pipe-b-planes.html

  * igt@kms_plane_alpha_blend@pipe-a-alpha-basic:
    - {shard-rkl}:        [SKIP][105] ([i915#1849] / [i915#4070] / [i915#4098]) -> [PASS][106] +2 similar issues
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_plane_alpha_blend@pipe-a-alpha-basic.html
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_plane_alpha_blend@pipe-a-alpha-basic.html

  * igt@kms_plane_multiple@atomic-pipe-a-tiling-none:
    - {shard-rkl}:        [SKIP][107] ([i915#3558] / [i915#4070]) -> [PASS][108]
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_plane_multiple@atomic-pipe-a-tiling-none.html
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_plane_multiple@atomic-pipe-a-tiling-none.html

  * igt@kms_plane_multiple@atomic-pipe-a-tiling-x:
    - {shard-rkl}:        [SKIP][109] ([i915#1849] / [i915#3558] / [i915#4070]) -> [PASS][110]
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@kms_plane_multiple@atomic-pipe-a-tiling-x.html
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_plane_multiple@atomic-pipe-a-tiling-x.html

  * igt@kms_properties@crtc-properties-atomic:
    - {shard-rkl}:        [SKIP][111] ([i915#1849]) -> [PASS][112]
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_properties@crtc-properties-atomic.html
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_properties@crtc-properties-atomic.html

  * igt@kms_psr@primary_render:
    - {shard-rkl}:        [SKIP][113] ([i915#1072]) -> [PASS][114] +3 similar issues
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_psr@primary_render.html
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_psr@primary_render.html

  * igt@kms_psr@psr2_sprite_plane_move:
    - shard-iclb:         [SKIP][115] ([fdo#109441]) -> [PASS][116] +3 similar issues
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb5/igt@kms_psr@psr2_sprite_plane_move.html
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb2/igt@kms_psr@psr2_sprite_plane_move.html

  * igt@kms_universal_plane@universal-plane-gen9-features-pipe-a:
    - {shard-rkl}:        [SKIP][117] ([i915#1845] / [i915#4070] / [i915#4098]) -> [PASS][118] +1 similar issue
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_universal_plane@universal-plane-gen9-features-pipe-a.html
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_universal_plane@universal-plane-gen9-features-pipe-a.html

  * igt@kms_vblank@pipe-b-query-forked:
    - {shard-rkl}:        [SKIP][119] ([i915#1845] / [i915#4098]) -> [PASS][120] +33 similar issues
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_vblank@pipe-b-query-forked.html
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@kms_vblank@pipe-b-query-forked.html

  * igt@perf@polling-small-buf:
    - {shard-rkl}:        [FAIL][121] ([i915#1722]) -> [PASS][122]
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@perf@polling-small-buf.html
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-6/igt@perf@polling-small-buf.html

  * igt@perf@short-reads:
    - shard-skl:          [FAIL][123] ([i915#51]) -> [PASS][124]
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl4/igt@perf@short-reads.html
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl10/igt@perf@short-reads.html

  
#### Warnings ####

  * igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf:
    - shard-iclb:         [SKIP][125] ([i915#2920]) -> [SKIP][126] ([i915#658])
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf.html
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb8/igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_sf@overlay-plane-update-continuous-sf:
    - shard-iclb:         [SKIP][127] ([i915#2920]) -> [SKIP][128] ([fdo#111068] / [i915#658])
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@kms_psr2_sf@overlay-plane-update-continuous-sf.html
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb8/igt@kms_psr2_sf@overlay-plane-update-continuous-sf.html

  * igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area:
    - shard-iclb:         [SKIP][129] ([fdo#111068] / [i915#658]) -> [SKIP][130] ([i915#2920])
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb5/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area.html
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb2/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_su@page_flip-nv12:
    - shard-iclb:         [FAIL][131] ([i915#5939]) -> [SKIP][132] ([fdo#109642] / [fdo#111068] / [i915#658])
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@kms_psr2_su@page_flip-nv12.html
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb4/igt@kms_psr2_su@page_flip-nv12.html

  * igt@kms_psr2_su@page_flip-p010:
    - shard-iclb:         [SKIP][133] ([fdo#109642] / [fdo#111068] / [i915#658]) -> [FAIL][134] ([i915#5939])
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb4/igt@kms_psr2_su@page_flip-p010.html
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb2/igt@kms_psr2_su@page_flip-p010.html

  * igt@runner@aborted:
    - shard-kbl:          ([FAIL][135], [FAIL][136], [FAIL][137], [FAIL][138], [FAIL][139], [FAIL][140], [FAIL][141], [FAIL][142], [FAIL][143], [FAIL][144], [FAIL][145]) ([fdo#109271] / [i915#180] / [i915#3002] / [i915#4312] / [i915#5257] / [i915#716]) -> ([FAIL][146], [FAIL][147]) ([i915#3002] / [i915#4312] / [i915#5257])
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@runner@aborted.html
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@runner@aborted.html
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl7/igt@runner@aborted.html
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl3/igt@runner@aborted.html
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@runner@aborted.html
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl4/igt@runner@aborted.html
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl4/igt@runner@aborted.html
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@runner@aborted.html
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl7/igt@runner@aborted.html
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl4/igt@runner@aborted.html
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl7/igt@runner@aborted.html
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@runner@aborted.html
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl3/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#2]: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/2
  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
  [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#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
  [fdo#109291]: https://bugs.freedesktop.org/show_bug.cgi?id=109291
  [fdo#109300]: https://bugs.freedesktop.org/show_bug.cgi?id=109300
  [fdo#109308]: https://bugs.freedesktop.org/show_bug.cgi?id=109308
  [fdo#109314]: https://bugs.freedesktop.org/show_bug.cgi?id=109314
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [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#111314]: https://bugs.freedesktop.org/show_bug.cgi?id=111314
  [fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
  [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
  [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [fdo#112022]: https://bugs.freedesktop.org/show_bug.cgi?id=112022
  [fdo#112283]: https://bugs.freedesktop.org/show_bug.cgi?id=112283
  [i915#1063]: https://gitlab.freedesktop.org/drm/intel/issues/1063
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1149]: https://gitlab.freedesktop.org/drm/intel/issues/1149
  [i915#1188]: https://gitlab.freedesktop.org/drm/intel/issues/1188
  [i915#1319]: https://gitlab.freedesktop.org/drm/intel/issues/1319
  [i915#132]: https://gitlab.freedesktop.org/drm/intel/issues/132
  [i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397
  [i915#1722]: https://gitlab.freedesktop.org/drm/intel/issues/1722
  [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#1850]: https://gitlab.freedesktop.org/drm/intel/issues/1850
  [i915#1911]: https://gitlab.freedesktop.org/drm/intel/issues/1911
  [i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
  [i915#2232]: https://gitlab.freedesktop.org/drm/intel/issues/2232
  [i915#2433]: https://gitlab.freedesktop.org/drm/intel/issues/2433
  [i915#2434]: https://gitlab.freedesktop.org/drm/intel/issues/2434
  [i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
  [i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
  [i915#2530]: https://gitlab.freedesktop.org/drm/intel/issues/2530
  [i915#2582]: https://gitlab.freedesktop.org/drm/intel/issues/2582
  [i915#2587]: https://gitlab.freedesktop.org/drm/intel/issues/2587
  [i915#265]: https://gitlab.freedesktop.org/drm/intel/issues/265
  [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
  [i915#2705]: https://gitlab.freedesktop.org/drm/intel/issues/2705
  [i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
  [i915#284]: https://gitlab.freedesktop.org/drm/intel/issues/284
  [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
  [i915#2849]: https://gitlab.freedesktop.org/drm/intel/issues/2849
  [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#3012]: https://gitlab.freedesktop.org/drm/intel/issues/3012
  [i915#3063]: https://gitlab.freedesktop.org/drm/intel/issues/3063
  [i915#3070]: https://gitlab.freedesktop.org/drm/intel/issues/3070
  [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
  [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
  [i915#3319]: https://gitlab.freedesktop.org/drm/intel/issues/3319
  [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
  [i915#3361]: https://gitlab.freedesktop.org/drm/intel/issues/3361
  [i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
  [i915#3536]: https://gitlab.freedesktop.org/drm/intel/issues/3536
  [i915#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539
  [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#3701]: https://gitlab.freedesktop.org/drm/intel/issues/3701
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#3734]: https://gitlab.freedesktop.org/drm/intel/issues/3734
  [i915#3778]: https://gitlab.freedesktop.org/drm/intel/issues/3778
  [i915#3828]: https://gitlab.freedesktop.org/drm/intel/issues/3828
  [i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
  [i915#3952]: https://gitlab.freedesktop.org/drm/intel/issues/3952
  [i915#3955]: https://gitlab.freedesktop.org/drm/intel/issues/3955
  [i915#404]: https://gitlab.freedesktop.org/drm/intel/issues/404
  [i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4078]: https://gitlab.freedesktop.org/drm/intel/issues/4078
  [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#4171]: https://gitlab.freedesktop.org/drm/intel/issues/4171
  [i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212
  [i915#426]: https://gitlab.freedesktop.org/drm/intel/issues/426
  [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
  [i915#4278]: https://gitlab.freedesktop.org/drm/intel/issues/4278
  [i915#4281]: https://gitlab.freedesktop.org/drm/intel/issues/4281
  [i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
  [i915#4369]: https://gitlab.freedesktop.org/drm/intel/issues/4369
  [i915#4387]: https://gitlab.freedesktop.org/drm/intel/issues/4387
  [i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
  [i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
  [i915#4565]: https://gitlab.freedesktop.org/drm/intel/issues/4565
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4767]: https://gitlab.freedesktop.org/drm/intel/issues/4767
  [i915#4771]: https://gitlab.freedesktop.org/drm/intel/issues/4771
  [i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812
  [i915#4833]: https://gitlab.freedesktop.org/drm/intel/issues/4833
  [i915#4842]: https://gitlab.freedesktop.org/drm/intel/issues/4842
  [i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852
  [i915#4853]: https://gitlab.freedesktop.org/drm/intel/issues/4853
  [i915#4873]: https://gitlab.freedesktop.org/drm/intel/issues/4873
  [i915#4880]: https://gitlab.freedesktop.org/drm/intel/issues/4880
  [i915#4881]: https://gitlab.freedesktop.org/drm/intel/issues/4881
  [i915#4893]: https://gitlab.freedesktop.org/drm/intel/issues/4893
  [i915#4939]: https://gitlab.freedesktop.org/drm/intel/issues/4939
  [i915#5099]: https://gitlab.freedesktop.org/drm/intel/issues/5099
  [i915#51]: https://gitlab.freedesktop.org/drm/intel/issues/51
  [i915#5161]: https://gitlab.freedesktop.org/drm/intel/issues/5161
  [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
  [i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
  [i915#5257]: https://gitlab.freedesktop.org/drm/intel/issues/5257
  [i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
  [i915#5287]: https://gitlab.freedesktop.org/drm/intel/issues/5287
  [i915#5288]: https://gitlab.freedesktop.org/drm/intel/issues/5288
  [i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
  [i915#5325]: https://gitlab.freedesktop.org/drm/intel/issues/5325
  [i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
  [i915#5439]: https://gitlab.freedesktop.org/drm/intel/issues/5439
  [i915#5461]: https://gitlab.freedesktop.org/drm/intel/issues/5461
  [i915#5563]: https://gitlab.freedesktop.org/drm/intel/issues/5563
  [i915#5566]: https://gitlab.freedesktop.org/drm/intel/issues/5566
  [i915#5591]: https://gitlab.freedesktop.org/drm/intel/issues/5591
  [i915#5939]: https://gitlab.freedesktop.org/drm/intel/issues/5939
  [i915#6048]: https://gitlab.freedesktop.org/drm/intel/issues/6048
  [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
  [i915#6230]: https://gitlab.freedesktop.org/drm/intel/issues/6230
  [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
  [i915#716]: https://gitlab.freedesktop.org/drm/intel/issues/716


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

  * Linux: CI_DRM_11758 -> Patchwork_105134v1

  CI-20190529: 20190529
  CI_DRM_11758: a2644b16f1f05a1a6eff99d7076bfa0e770bdeb6 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_6526: 02888400228efbb29437726aa04114575ea939c3 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_105134v1: a2644b16f1f05a1a6eff99d7076bfa0e770bdeb6 @ 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_105134v1/index.html

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

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

* Re: [Intel-gfx]  ✗ Fi.CI.IGT: failure for i915: Extract, polish, and document multicast handling
  2022-06-16  4:33   ` Matt Roper
@ 2022-06-16 15:27     ` Vudum, Lakshminarayana
  0 siblings, 0 replies; 19+ messages in thread
From: Vudum, Lakshminarayana @ 2022-06-16 15:27 UTC (permalink / raw)
  To: Roper, Matthew D, intel-gfx

We have a bug for a similar test timeout on KBL
https://gitlab.freedesktop.org/drm/intel/-/issues/6048
igt@kms_cursor_legacy@pipe-b-torture-move - incomplete - Received signal SIGQUIT. Per-test timeout exceeded. Killing the current test with SIGQUIT.

Thanks,
Lakshmi.

-----Original Message-----
From: Roper, Matthew D <matthew.d.roper@intel.com> 
Sent: Wednesday, June 15, 2022 9:34 PM
To: intel-gfx@lists.freedesktop.org
Cc: Vudum, Lakshminarayana <lakshminarayana.vudum@intel.com>
Subject: Re: ✗ Fi.CI.IGT: failure for i915: Extract, polish, and document multicast handling

On Thu, Jun 16, 2022 at 03:11:40AM +0000, Patchwork wrote:
> == Series Details ==
> 
> Series: i915: Extract, polish, and document multicast handling
> URL   : https://patchwork.freedesktop.org/series/105134/
> State : failure
> 
> == Summary ==
> 
> CI Bug Log - changes from CI_DRM_11758_full -> Patchwork_105134v1_full 
> ====================================================
> 
> Summary
> -------
> 
>   **FAILURE**
> 
>   Serious unknown changes coming with Patchwork_105134v1_full absolutely need to be
>   verified manually.
>   
>   If you think the reported changes have nothing to do with the changes
>   introduced in Patchwork_105134v1_full, please notify your bug team to allow them
>   to document this new failure mode, which will reduce false positives in CI.
> 
>   
> 
> Participating hosts (13 -> 12)
> ------------------------------
> 
>   Missing    (1): shard-dg1 
> 
> Possible new issues
> -------------------
> 
>   Here are the unknown changes that may have been introduced in Patchwork_105134v1_full:
> 
> ### IGT changes ###
> 
> #### Possible regressions ####
> 
>   * igt@kms_cursor_legacy@pipe-c-torture-bo:
>     - shard-skl:          [PASS][1] -> [INCOMPLETE][2]
>    [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl2/igt@kms_cursor_legacy@pipe-c-torture-bo.html
>    [2]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl4
> /igt@kms_cursor_legacy@pipe-c-torture-bo.html

Appears to be a deadlock:

  <3> [923.922958] INFO: task kms_cursor_lega:1361 blocked for more than 61 seconds.
  <3> [923.923073]       Tainted: G     U  W 5.19.0-rc2-Patchwork_105134v1-ga2644b16f1f0+ #1
  <3> [923.923104] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.

This display test wouldn't be affected by the changes to multicast registers in this series, so it seems unrelated.

I don't see any matching issue signatures in gitlab, although there are a couple incompletes filed against similar tests due to timeout that might have a related root cause (e.g., #6216).


Matt

> 
>   
> #### Suppressed ####
> 
>   The following results come from untrusted machines, tests, or statuses.
>   They do not affect the overall result.
> 
>   * {igt@kms_plane_lowres@tiling-y@pipe-a-edp-1}:
>     - {shard-rkl}:        NOTRUN -> [SKIP][3] +3 similar issues
>    [3]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@kms_plane_lowres@tiling-y@pipe-a-edp-1.html
> 
>   
> Known issues
> ------------
> 
>   Here are the changes found in Patchwork_105134v1_full that come from known issues:
> 
> ### IGT changes ###
> 
> #### Issues hit ####
> 
>   * igt@gem_ctx_persistence@smoketest:
>     - shard-apl:          [PASS][4] -> [FAIL][5] ([i915#5099])
>    [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-apl7/igt@gem_ctx_persistence@smoketest.html
>    [5]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl1
> /igt@gem_ctx_persistence@smoketest.html
> 
>   * igt@gem_eio@unwedge-stress:
>     - shard-iclb:         [PASS][6] -> [TIMEOUT][7] ([i915#3070])
>    [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb6/igt@gem_eio@unwedge-stress.html
>    [7]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb
> 6/igt@gem_eio@unwedge-stress.html
> 
>   * igt@gem_exec_balancer@parallel-keep-submit-fence:
>     - shard-iclb:         [PASS][8] -> [SKIP][9] ([i915#4525]) +2 similar issues
>    [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@gem_exec_balancer@parallel-keep-submit-fence.html
>    [9]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb
> 8/igt@gem_exec_balancer@parallel-keep-submit-fence.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_11758/shard-apl3/igt@gem_exec_fair@basic-none-solo@rcs0.html
>    [11]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl6
> /igt@gem_exec_fair@basic-none-solo@rcs0.html
> 
>   * igt@gem_exec_fair@basic-none@vcs1:
>     - shard-iclb:         NOTRUN -> [FAIL][12] ([i915#2842])
>    [12]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb
> 1/igt@gem_exec_fair@basic-none@vcs1.html
> 
>   * igt@gem_exec_fair@basic-pace-solo@rcs0:
>     - shard-iclb:         [PASS][13] -> [FAIL][14] ([i915#2842])
>    [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb8/igt@gem_exec_fair@basic-pace-solo@rcs0.html
>    [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb5/igt@gem_exec_fair@basic-pace-solo@rcs0.html
>     - shard-kbl:          [PASS][15] -> [FAIL][16] ([i915#2842])
>    [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@gem_exec_fair@basic-pace-solo@rcs0.html
>    [16]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4
> /igt@gem_exec_fair@basic-pace-solo@rcs0.html
> 
>   * igt@gem_lmem_swapping@parallel-random-engines:
>     - shard-apl:          NOTRUN -> [SKIP][17] ([fdo#109271] / [i915#4613])
>    [17]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8
> /igt@gem_lmem_swapping@parallel-random-engines.html
> 
>   * igt@gem_lmem_swapping@random:
>     - shard-glk:          NOTRUN -> [SKIP][18] ([fdo#109271] / [i915#4613])
>    [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3/igt@gem_lmem_swapping@random.html
>     - shard-kbl:          NOTRUN -> [SKIP][19] ([fdo#109271] / [i915#4613]) +3 similar issues
>    [19]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl1
> /igt@gem_lmem_swapping@random.html
> 
>   * igt@gem_mmap_gtt@fault-concurrent-y:
>     - shard-snb:          [PASS][20] -> [INCOMPLETE][21] ([i915#5161])
>    [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-snb2/igt@gem_mmap_gtt@fault-concurrent-y.html
>    [21]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-snb6
> /igt@gem_mmap_gtt@fault-concurrent-y.html
> 
>   * igt@gem_softpin@evict-single-offset:
>     - shard-kbl:          NOTRUN -> [FAIL][22] ([i915#4171])
>    [22]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7
> /igt@gem_softpin@evict-single-offset.html
> 
>   * igt@i915_pm_dc@dc9-dpms:
>     - shard-iclb:         [PASS][23] -> [SKIP][24] ([i915#4281])
>    [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb7/igt@i915_pm_dc@dc9-dpms.html
>    [24]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb
> 3/igt@i915_pm_dc@dc9-dpms.html
> 
>   * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip:
>     - shard-apl:          NOTRUN -> [SKIP][25] ([fdo#109271]) +53 similar issues
>    [25]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8
> /igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-fli
> p.html
> 
>   * igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_mc_ccs:
>     - shard-kbl:          NOTRUN -> [SKIP][26] ([fdo#109271] / [i915#3886]) +6 similar issues
>    [26]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4
> /igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_mc_ccs.html
> 
>   * igt@kms_ccs@pipe-b-bad-pixel-format-4_tiled_dg2_rc_ccs:
>     - shard-kbl:          NOTRUN -> [SKIP][27] ([fdo#109271]) +234 similar issues
>    [27]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7
> /igt@kms_ccs@pipe-b-bad-pixel-format-4_tiled_dg2_rc_ccs.html
> 
>   * igt@kms_ccs@pipe-b-bad-rotation-90-y_tiled_gen12_rc_ccs_cc:
>     - shard-apl:          NOTRUN -> [SKIP][28] ([fdo#109271] / [i915#3886])
>    [28]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8
> /igt@kms_ccs@pipe-b-bad-rotation-90-y_tiled_gen12_rc_ccs_cc.html
> 
>   * igt@kms_ccs@pipe-c-random-ccs-data-y_tiled_gen12_rc_ccs_cc:
>     - shard-glk:          NOTRUN -> [SKIP][29] ([fdo#109271] / [i915#3886]) +2 similar issues
>    [29]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3
> /igt@kms_ccs@pipe-c-random-ccs-data-y_tiled_gen12_rc_ccs_cc.html
> 
>   * igt@kms_color_chamelium@pipe-a-ctm-negative:
>     - shard-glk:          NOTRUN -> [SKIP][30] ([fdo#109271] / [fdo#111827]) +1 similar issue
>    [30]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3
> /igt@kms_color_chamelium@pipe-a-ctm-negative.html
> 
>   * igt@kms_color_chamelium@pipe-b-ctm-red-to-blue:
>     - shard-apl:          NOTRUN -> [SKIP][31] ([fdo#109271] / [fdo#111827]) +1 similar issue
>    [31]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8
> /igt@kms_color_chamelium@pipe-b-ctm-red-to-blue.html
> 
>   * igt@kms_color_chamelium@pipe-c-ctm-0-5:
>     - shard-kbl:          NOTRUN -> [SKIP][32] ([fdo#109271] / [fdo#111827]) +18 similar issues
>    [32]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7
> /igt@kms_color_chamelium@pipe-c-ctm-0-5.html
> 
>   * igt@kms_content_protection@atomic-dpms:
>     - shard-kbl:          NOTRUN -> [TIMEOUT][33] ([i915#1319])
>    [33]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4
> /igt@kms_content_protection@atomic-dpms.html
> 
>   * igt@kms_dither@fb-8bpc-vs-panel-8bpc@hdmi-a-1-pipe-a:
>     - shard-glk:          [PASS][34] -> [SKIP][35] ([fdo#109271])
>    [34]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-glk1/igt@kms_dither@fb-8bpc-vs-panel-8bpc@hdmi-a-1-pipe-a.html
>    [35]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk8
> /igt@kms_dither@fb-8bpc-vs-panel-8bpc@hdmi-a-1-pipe-a.html
> 
>   * igt@kms_fbcon_fbt@fbc-suspend:
>     - shard-apl:          [PASS][36] -> [FAIL][37] ([i915#4767])
>    [36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-apl1/igt@kms_fbcon_fbt@fbc-suspend.html
>    [37]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl2
> /igt@kms_fbcon_fbt@fbc-suspend.html
> 
>   * igt@kms_flip@flip-vs-suspend-interruptible@c-edp1:
>     - shard-skl:          [PASS][38] -> [INCOMPLETE][39] ([i915#4939])
>    [38]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl7/igt@kms_flip@flip-vs-suspend-interruptible@c-edp1.html
>    [39]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl6
> /igt@kms_flip@flip-vs-suspend-interruptible@c-edp1.html
> 
>   * igt@kms_flip@plain-flip-ts-check@a-edp1:
>     - shard-skl:          [PASS][40] -> [FAIL][41] ([i915#2122])
>    [40]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl7/igt@kms_flip@plain-flip-ts-check@a-edp1.html
>    [41]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl7
> /igt@kms_flip@plain-flip-ts-check@a-edp1.html
> 
>   * igt@kms_hdr@bpc-switch-dpms@pipe-a-dp-1:
>     - shard-kbl:          [PASS][42] -> [FAIL][43] ([i915#1188])
>    [42]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@kms_hdr@bpc-switch-dpms@pipe-a-dp-1.html
>    [43]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4
> /igt@kms_hdr@bpc-switch-dpms@pipe-a-dp-1.html
> 
>   * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
>     - shard-apl:          [PASS][44] -> [DMESG-WARN][45] ([i915#180]) +2 similar issues
>    [44]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-apl8/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b.html
>    [45]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl2
> /igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b.html
> 
>   * igt@kms_plane_alpha_blend@pipe-a-alpha-basic:
>     - shard-kbl:          NOTRUN -> [FAIL][46] ([fdo#108145] / [i915#265]) +1 similar issue
>    [46]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7
> /igt@kms_plane_alpha_blend@pipe-a-alpha-basic.html
> 
>   * igt@kms_plane_alpha_blend@pipe-b-alpha-transparent-fb:
>     - shard-kbl:          NOTRUN -> [FAIL][47] ([i915#265])
>    [47]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4
> /igt@kms_plane_alpha_blend@pipe-b-alpha-transparent-fb.html
> 
>   * igt@kms_plane_multiple@atomic-pipe-b-tiling-4:
>     - shard-glk:          NOTRUN -> [SKIP][48] ([fdo#109271]) +45 similar issues
>    [48]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3
> /igt@kms_plane_multiple@atomic-pipe-b-tiling-4.html
> 
>   * igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b-edp-1:
>     - shard-iclb:         [PASS][49] -> [SKIP][50] ([i915#5176]) +1 similar issue
>    [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb7/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b-edp-1.html
>    [50]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb
> 3/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-form
> ats@pipe-b-edp-1.html
> 
>   * igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5@pipe-a-edp-1:
>     - shard-iclb:         [PASS][51] -> [SKIP][52] ([i915#5235]) +2 similar issues
>    [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb5/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5@pipe-a-edp-1.html
>    [52]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb
> 2/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5@pipe
> -a-edp-1.html
> 
>   * igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-sf:
>     - shard-kbl:          NOTRUN -> [SKIP][53] ([fdo#109271] / [i915#658]) +3 similar issues
>    [53]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7
> /igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-sf.html
> 
>   * igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-fully-sf:
>     - shard-glk:          NOTRUN -> [SKIP][54] ([fdo#109271] / [i915#658])
>    [54]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-glk3
> /igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-fully-sf.html
> 
>   * igt@kms_psr@psr2_sprite_blt:
>     - shard-iclb:         [PASS][55] -> [SKIP][56] ([fdo#109441]) +2 similar issues
>    [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@kms_psr@psr2_sprite_blt.html
>    [56]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb
> 8/igt@kms_psr@psr2_sprite_blt.html
> 
>   * igt@kms_writeback@writeback-fb-id:
>     - shard-kbl:          NOTRUN -> [SKIP][57] ([fdo#109271] / [i915#2437]) +1 similar issue
>    [57]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7
> /igt@kms_writeback@writeback-fb-id.html
> 
>   * igt@perf@polling-small-buf:
>     - shard-skl:          [PASS][58] -> [FAIL][59] ([i915#1722])
>    [58]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl4/igt@perf@polling-small-buf.html
>    [59]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl6
> /igt@perf@polling-small-buf.html
> 
>   * igt@sysfs_clients@fair-7:
>     - shard-apl:          NOTRUN -> [SKIP][60] ([fdo#109271] / [i915#2994])
>    [60]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl8
> /igt@sysfs_clients@fair-7.html
> 
>   * igt@sysfs_clients@sema-25:
>     - shard-kbl:          NOTRUN -> [SKIP][61] ([fdo#109271] / [i915#2994]) +2 similar issues
>    [61]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7
> /igt@sysfs_clients@sema-25.html
> 
>   
> #### Possible fixes ####
> 
>   * igt@gem_ctx_isolation@preservation-s3@vcs0:
>     - shard-kbl:          [DMESG-WARN][62] ([i915#180]) -> [PASS][63] +10 similar issues
>    [62]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl4/igt@gem_ctx_isolation@preservation-s3@vcs0.html
>    [63]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4
> /igt@gem_ctx_isolation@preservation-s3@vcs0.html
> 
>   * igt@gem_eio@in-flight-contexts-1us:
>     - shard-iclb:         [TIMEOUT][64] ([i915#3070]) -> [PASS][65]
>    [64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb3/igt@gem_eio@in-flight-contexts-1us.html
>    [65]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb
> 5/igt@gem_eio@in-flight-contexts-1us.html
> 
>   * igt@gem_eio@in-flight-contexts-immediate:
>     - {shard-tglu}:       [TIMEOUT][66] ([i915#3063]) -> [PASS][67]
>    [66]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglu-1/igt@gem_eio@in-flight-contexts-immediate.html
>    [67]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglu
> -1/igt@gem_eio@in-flight-contexts-immediate.html
> 
>   * igt@gem_eio@in-flight-immediate:
>     - shard-tglb:         [TIMEOUT][68] ([i915#3063]) -> [PASS][69]
>    [68]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglb1/igt@gem_eio@in-flight-immediate.html
>    [69]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglb
> 1/igt@gem_eio@in-flight-immediate.html
> 
>   * igt@gem_exec_endless@dispatch@vecs0:
>     - shard-tglb:         [INCOMPLETE][70] ([i915#3778]) -> [PASS][71]
>    [70]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglb8/igt@gem_exec_endless@dispatch@vecs0.html
>    [71]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglb
> 6/igt@gem_exec_endless@dispatch@vecs0.html
> 
>   * igt@gem_exec_fair@basic-none-share@rcs0:
>     - {shard-tglu}:       [FAIL][72] ([i915#2842]) -> [PASS][73]
>    [72]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglu-5/igt@gem_exec_fair@basic-none-share@rcs0.html
>    [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglu-5/igt@gem_exec_fair@basic-none-share@rcs0.html
>     - shard-iclb:         [FAIL][74] ([i915#2842]) -> [PASS][75]
>    [74]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb6/igt@gem_exec_fair@basic-none-share@rcs0.html
>    [75]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb
> 8/igt@gem_exec_fair@basic-none-share@rcs0.html
> 
>   * igt@gem_exec_fair@basic-none@vcs0:
>     - shard-kbl:          [FAIL][76] ([i915#2842]) -> [PASS][77]
>    [76]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl3/igt@gem_exec_fair@basic-none@vcs0.html
>    [77]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4
> /igt@gem_exec_fair@basic-none@vcs0.html
> 
>   * igt@gem_mmap_wc@set-cache-level:
>     - {shard-rkl}:        [SKIP][78] ([i915#1850]) -> [PASS][79]
>    [78]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@gem_mmap_wc@set-cache-level.html
>    [79]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@gem_mmap_wc@set-cache-level.html
> 
>   * igt@gen9_exec_parse@allowed-single:
>     - shard-kbl:          [DMESG-WARN][80] ([i915#5566] / [i915#716]) -> [PASS][81]
>    [80]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@gen9_exec_parse@allowed-single.html
>    [81]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl7
> /igt@gen9_exec_parse@allowed-single.html
> 
>   * igt@i915_pm_backlight@fade:
>     - {shard-rkl}:        [SKIP][82] ([i915#3012]) -> [PASS][83]
>    [82]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@i915_pm_backlight@fade.html
>    [83]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@i915_pm_backlight@fade.html
> 
>   * igt@i915_pm_rpm@i2c:
>     - {shard-rkl}:        [SKIP][84] ([fdo#109308]) -> [PASS][85] +1 similar issue
>    [84]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@i915_pm_rpm@i2c.html
>    [85]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@i915_pm_rpm@i2c.html
> 
>   * igt@i915_pm_rpm@modeset-lpsp-stress-no-wait:
>     - {shard-rkl}:        [SKIP][86] ([i915#1397]) -> [PASS][87] +1 similar issue
>    [86]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@i915_pm_rpm@modeset-lpsp-stress-no-wait.html
>    [87]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@i915_pm_rpm@modeset-lpsp-stress-no-wait.html
> 
>   * igt@i915_selftest@live@hangcheck:
>     - shard-tglb:         [DMESG-WARN][88] ([i915#5591]) -> [PASS][89]
>    [88]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-tglb8/igt@i915_selftest@live@hangcheck.html
>    [89]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-tglb
> 6/igt@i915_selftest@live@hangcheck.html
> 
>   * igt@kms_color@pipe-a-ctm-green-to-red:
>     - {shard-rkl}:        [SKIP][90] ([i915#1149] / [i915#1849] / [i915#4070] / [i915#4098]) -> [PASS][91] +1 similar issue
>    [90]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_color@pipe-a-ctm-green-to-red.html
>    [91]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@kms_color@pipe-a-ctm-green-to-red.html
> 
>   * igt@kms_cursor_crc@pipe-b-cursor-128x42-onscreen:
>     - {shard-rkl}:        [SKIP][92] ([fdo#112022] / [i915#4070]) -> [PASS][93] +8 similar issues
>    [92]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@kms_cursor_crc@pipe-b-cursor-128x42-onscreen.html
>    [93]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@kms_cursor_crc@pipe-b-cursor-128x42-onscreen.html
> 
>   * igt@kms_cursor_legacy@cursora-vs-flipa-atomic:
>     - {shard-rkl}:        [SKIP][94] ([fdo#111825] / [i915#4070]) -> [PASS][95] +1 similar issue
>    [94]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_cursor_legacy@cursora-vs-flipa-atomic.html
>    [95]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@kms_cursor_legacy@cursora-vs-flipa-atomic.html
> 
>   * igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled:
>     - {shard-rkl}:        [SKIP][96] ([fdo#111314] / [i915#4098] / [i915#4369]) -> [PASS][97] +2 similar issues
>    [96]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled.html
>    [97]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled.html
> 
>   * igt@kms_fbcon_fbt@psr-suspend:
>     - {shard-rkl}:        [SKIP][98] ([fdo#110189] / [i915#3955]) -> [PASS][99]
>    [98]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_fbcon_fbt@psr-suspend.html
>    [99]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@kms_fbcon_fbt@psr-suspend.html
> 
>   * igt@kms_flip@flip-vs-suspend@a-dp1:
>     - shard-apl:          [DMESG-WARN][100] ([i915#180]) -> [PASS][101] +2 similar issues
>    [100]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-apl1/igt@kms_flip@flip-vs-suspend@a-dp1.html
>    [101]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-apl2
> /igt@kms_flip@flip-vs-suspend@a-dp1.html
> 
>   * igt@kms_frontbuffer_tracking@fbc-badstride:
>     - {shard-rkl}:        [SKIP][102] ([i915#1849] / [i915#4098]) -> [PASS][103] +31 similar issues
>    [102]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_frontbuffer_tracking@fbc-badstride.html
>    [103]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@kms_frontbuffer_tracking@fbc-badstride.html
> 
>   * igt@kms_plane@plane-panning-bottom-right@pipe-b-planes:
>     - {shard-rkl}:        [SKIP][104] ([i915#1849] / [i915#3558]) -> [PASS][105] +1 similar issue
>    [104]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@kms_plane@plane-panning-bottom-right@pipe-b-planes.html
>    [105]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@kms_plane@plane-panning-bottom-right@pipe-b-planes.html
> 
>   * igt@kms_plane_alpha_blend@pipe-a-alpha-basic:
>     - {shard-rkl}:        [SKIP][106] ([i915#1849] / [i915#4070] / [i915#4098]) -> [PASS][107] +2 similar issues
>    [106]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_plane_alpha_blend@pipe-a-alpha-basic.html
>    [107]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@kms_plane_alpha_blend@pipe-a-alpha-basic.html
> 
>   * igt@kms_plane_multiple@atomic-pipe-a-tiling-none:
>     - {shard-rkl}:        [SKIP][108] ([i915#3558] / [i915#4070]) -> [PASS][109]
>    [108]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_plane_multiple@atomic-pipe-a-tiling-none.html
>    [109]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@kms_plane_multiple@atomic-pipe-a-tiling-none.html
> 
>   * igt@kms_plane_multiple@atomic-pipe-a-tiling-x:
>     - {shard-rkl}:        [SKIP][110] ([i915#1849] / [i915#3558] / [i915#4070]) -> [PASS][111]
>    [110]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-2/igt@kms_plane_multiple@atomic-pipe-a-tiling-x.html
>    [111]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@kms_plane_multiple@atomic-pipe-a-tiling-x.html
> 
>   * igt@kms_properties@crtc-properties-atomic:
>     - {shard-rkl}:        [SKIP][112] ([i915#1849]) -> [PASS][113]
>    [112]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_properties@crtc-properties-atomic.html
>    [113]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@kms_properties@crtc-properties-atomic.html
> 
>   * igt@kms_psr@primary_render:
>     - {shard-rkl}:        [SKIP][114] ([i915#1072]) -> [PASS][115] +3 similar issues
>    [114]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_psr@primary_render.html
>    [115]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@kms_psr@primary_render.html
> 
>   * igt@kms_psr@psr2_sprite_plane_move:
>     - shard-iclb:         [SKIP][116] ([fdo#109441]) -> [PASS][117] +3 similar issues
>    [116]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb5/igt@kms_psr@psr2_sprite_plane_move.html
>    [117]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb
> 2/igt@kms_psr@psr2_sprite_plane_move.html
> 
>   * igt@kms_universal_plane@universal-plane-gen9-features-pipe-a:
>     - {shard-rkl}:        [SKIP][118] ([i915#1845] / [i915#4070] / [i915#4098]) -> [PASS][119] +1 similar issue
>    [118]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_universal_plane@universal-plane-gen9-features-pipe-a.html
>    [119]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@kms_universal_plane@universal-plane-gen9-features-pipe-a.html
> 
>   * igt@kms_vblank@pipe-b-query-forked:
>     - {shard-rkl}:        [SKIP][120] ([i915#1845] / [i915#4098]) -> [PASS][121] +33 similar issues
>    [120]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@kms_vblank@pipe-b-query-forked.html
>    [121]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@kms_vblank@pipe-b-query-forked.html
> 
>   * igt@perf@polling-small-buf:
>     - {shard-rkl}:        [FAIL][122] ([i915#1722]) -> [PASS][123]
>    [122]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-rkl-1/igt@perf@polling-small-buf.html
>    [123]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-rkl-
> 6/igt@perf@polling-small-buf.html
> 
>   * igt@perf@short-reads:
>     - shard-skl:          [FAIL][124] ([i915#51]) -> [PASS][125]
>    [124]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-skl4/igt@perf@short-reads.html
>    [125]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-skl1
> 0/igt@perf@short-reads.html
> 
>   
> #### Warnings ####
> 
>   * igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf:
>     - shard-iclb:         [SKIP][126] ([i915#2920]) -> [SKIP][127] ([i915#658])
>    [126]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf.html
>    [127]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb
> 8/igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf.html
> 
>   * igt@kms_psr2_sf@overlay-plane-update-continuous-sf:
>     - shard-iclb:         [SKIP][128] ([i915#2920]) -> [SKIP][129] ([fdo#111068] / [i915#658])
>    [128]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@kms_psr2_sf@overlay-plane-update-continuous-sf.html
>    [129]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb
> 8/igt@kms_psr2_sf@overlay-plane-update-continuous-sf.html
> 
>   * igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area:
>     - shard-iclb:         [SKIP][130] ([fdo#111068] / [i915#658]) -> [SKIP][131] ([i915#2920])
>    [130]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb5/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area.html
>    [131]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb
> 2/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area.html
> 
>   * igt@kms_psr2_su@page_flip-nv12:
>     - shard-iclb:         [FAIL][132] ([i915#5939]) -> [SKIP][133] ([fdo#109642] / [fdo#111068] / [i915#658])
>    [132]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb2/igt@kms_psr2_su@page_flip-nv12.html
>    [133]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb
> 4/igt@kms_psr2_su@page_flip-nv12.html
> 
>   * igt@kms_psr2_su@page_flip-p010:
>     - shard-iclb:         [SKIP][134] ([fdo#109642] / [fdo#111068] / [i915#658]) -> [FAIL][135] ([i915#5939])
>    [134]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-iclb4/igt@kms_psr2_su@page_flip-p010.html
>    [135]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-iclb
> 2/igt@kms_psr2_su@page_flip-p010.html
> 
>   * igt@runner@aborted:
>     - shard-kbl:          ([FAIL][136], [FAIL][137], [FAIL][138], [FAIL][139], [FAIL][140], [FAIL][141], [FAIL][142], [FAIL][143], [FAIL][144], [FAIL][145], [FAIL][146]) ([fdo#109271] / [i915#180] / [i915#3002] / [i915#4312] / [i915#5257] / [i915#716]) -> ([FAIL][147], [FAIL][148]) ([i915#3002] / [i915#4312] / [i915#5257])
>    [136]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@runner@aborted.html
>    [137]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@runner@aborted.html
>    [138]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl7/igt@runner@aborted.html
>    [139]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl3/igt@runner@aborted.html
>    [140]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@runner@aborted.html
>    [141]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl4/igt@runner@aborted.html
>    [142]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl4/igt@runner@aborted.html
>    [143]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl1/igt@runner@aborted.html
>    [144]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl7/igt@runner@aborted.html
>    [145]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl4/igt@runner@aborted.html
>    [146]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11758/shard-kbl7/igt@runner@aborted.html
>    [147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl4/igt@runner@aborted.html
>    [148]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_105134v1/shard-kbl3
> /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).
> 
>   [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
>   [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
>   [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
>   [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#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
>   [fdo#109291]: https://bugs.freedesktop.org/show_bug.cgi?id=109291
>   [fdo#109300]: https://bugs.freedesktop.org/show_bug.cgi?id=109300
>   [fdo#109308]: https://bugs.freedesktop.org/show_bug.cgi?id=109308
>   [fdo#109314]: https://bugs.freedesktop.org/show_bug.cgi?id=109314
>   [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
>   [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#111314]: https://bugs.freedesktop.org/show_bug.cgi?id=111314
>   [fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
>   [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
>   [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
>   [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
>   [fdo#112022]: https://bugs.freedesktop.org/show_bug.cgi?id=112022
>   [i915#1063]: https://gitlab.freedesktop.org/drm/intel/issues/1063
>   [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
>   [i915#1149]: https://gitlab.freedesktop.org/drm/intel/issues/1149
>   [i915#1188]: https://gitlab.freedesktop.org/drm/intel/issues/1188
>   [i915#1319]: https://gitlab.freedesktop.org/drm/intel/issues/1319
>   [i915#132]: https://gitlab.freedesktop.org/drm/intel/issues/132
>   [i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397
>   [i915#1722]: https://gitlab.freedesktop.org/drm/intel/issues/1722
>   [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#1850]: https://gitlab.freedesktop.org/drm/intel/issues/1850
>   [i915#1911]: https://gitlab.freedesktop.org/drm/intel/issues/1911
>   [i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
>   [i915#2232]: https://gitlab.freedesktop.org/drm/intel/issues/2232
>   [i915#2434]: https://gitlab.freedesktop.org/drm/intel/issues/2434
>   [i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
>   [i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
>   [i915#2530]: https://gitlab.freedesktop.org/drm/intel/issues/2530
>   [i915#2582]: https://gitlab.freedesktop.org/drm/intel/issues/2582
>   [i915#265]: https://gitlab.freedesktop.org/drm/intel/issues/265
>   [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
>   [i915#2705]: https://gitlab.freedesktop.org/drm/intel/issues/2705
>   [i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
>   [i915#284]: https://gitlab.freedesktop.org/drm/intel/issues/284
>   [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
>   [i915#2849]: https://gitlab.freedesktop.org/drm/intel/issues/2849
>   [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#3012]: https://gitlab.freedesktop.org/drm/intel/issues/3012
>   [i915#3063]: https://gitlab.freedesktop.org/drm/intel/issues/3063
>   [i915#3070]: https://gitlab.freedesktop.org/drm/intel/issues/3070
>   [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
>   [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
>   [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
>   [i915#3319]: https://gitlab.freedesktop.org/drm/intel/issues/3319
>   [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
>   [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#3701]: https://gitlab.freedesktop.org/drm/intel/issues/3701
>   [i915#3734]: https://gitlab.freedesktop.org/drm/intel/issues/3734
>   [i915#3742]: https://gitlab.freedesktop.org/drm/intel/issues/3742
>   [i915#3778]: https://gitlab.freedesktop.org/drm/intel/issues/3778
>   [i915#3828]: https://gitlab.freedesktop.org/drm/intel/issues/3828
>   [i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
>   [i915#3955]: https://gitlab.freedesktop.org/drm/intel/issues/3955
>   [i915#404]: https://gitlab.freedesktop.org/drm/intel/issues/404
>   [i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
>   [i915#4098]: https://gitlab.freedesktop.org/drm/intel/issues/4098
>   [i915#4171]: https://gitlab.freedesktop.org/drm/intel/issues/4171
>   [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
>   [i915#4278]: https://gitlab.freedesktop.org/drm/intel/issues/4278
>   [i915#4281]: https://gitlab.freedesktop.org/drm/intel/issues/4281
>   [i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
>   [i915#4369]: https://gitlab.freedesktop.org/drm/intel/issues/4369
>   [i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
>   [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
>   [i915#4767]: https://gitlab.freedesktop.org/drm/intel/issues/4767
>   [i915#4893]: https://gitlab.freedesktop.org/drm/intel/issues/4893
>   [i915#4939]: https://gitlab.freedesktop.org/drm/intel/issues/4939
>   [i915#5099]: https://gitlab.freedesktop.org/drm/intel/issues/5099
>   [i915#51]: https://gitlab.freedesktop.org/drm/intel/issues/51
>   [i915#5161]: https://gitlab.freedesktop.org/drm/intel/issues/5161
>   [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
>   [i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
>   [i915#5257]: https://gitlab.freedesktop.org/drm/intel/issues/5257
>   [i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
>   [i915#5287]: https://gitlab.freedesktop.org/drm/intel/issues/5287
>   [i915#5288]: https://gitlab.freedesktop.org/drm/intel/issues/5288
>   [i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
>   [i915#5325]: https://gitlab.freedesktop.org/drm/intel/issues/5325
>   [i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
>   [i915#5439]: https://gitlab.freedesktop.org/drm/intel/issues/5439
>   [i915#5461]: https://gitlab.freedesktop.org/drm/intel/issues/5461
>   [i915#5566]: https://gitlab.freedesktop.org/drm/intel/issues/5566
>   [i915#5591]: https://gitlab.freedesktop.org/drm/intel/issues/5591
>   [i915#5939]: https://gitlab.freedesktop.org/drm/intel/issues/5939
>   [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
>   [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
>   [i915#716]: https://gitlab.freedesktop.org/drm/intel/issues/716
> 
> 
> Build changes
> -------------
> 
>   * Linux: CI_DRM_11758 -> Patchwork_105134v1
> 
>   CI-20190529: 20190529
>   CI_DRM_11758: a2644b16f1f05a1a6eff99d7076bfa0e770bdeb6 @ git://anongit.freedesktop.org/gfx-ci/linux
>   IGT_6526: 02888400228efbb29437726aa04114575ea939c3 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
>   Patchwork_105134v1: a2644b16f1f05a1a6eff99d7076bfa0e770bdeb6 @ 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_105134v1/index.html

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

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

* Re: [PATCH v2 2/2] drm/i915/gt: Cleanup interface for MCR operations
  2022-06-15  0:10   ` [Intel-gfx] " Matt Roper
@ 2022-06-17 13:57     ` Harish Chegondi
  -1 siblings, 0 replies; 19+ messages in thread
From: Harish Chegondi @ 2022-06-17 13:57 UTC (permalink / raw)
  To: Matt Roper; +Cc: intel-gfx, dri-devel

On Tue, Jun 14, 2022 at 05:10:19PM -0700, Matt Roper wrote:
> Let's replace the assortment of intel_gt_* and intel_uncore_* functions
> that operate on MCR registers with a cleaner set of interfaces:
> 
>   * intel_gt_mcr_read -- unicast read from specific instance
>   * intel_gt_mcr_read_any[_fw] -- unicast read from any non-terminated
>     instance
>   * intel_gt_mcr_unicast_write -- unicast write to specific instance
>   * intel_gt_mcr_multicast_write[_fw] -- multicast write to all instances
> 
> We'll also replace the historic "slice" and "subslice" terminology with
> "group" and "instance" to match the documentation for more recent
> platforms; these days MCR steering applies to more types of replication
> than just slice/subslice.
> 
> v2:
>  - Reference the new kerneldoc from i915.rst.  (Jani)
>  - Tweak the wording of the documentation for a couple functions to
>    clarify the difference between "_fw" and non-"_fw" forms.
> 
> Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
> Acked-by: Jani Nikula <jani.nikula@linux.intel.com>
> ---
>  Documentation/gpu/i915.rst                  |  12 +
>  drivers/gpu/drm/i915/gem/i915_gem_stolen.c  |   2 +-
>  drivers/gpu/drm/i915/gt/intel_engine_cs.c   |  33 ++-
>  drivers/gpu/drm/i915/gt/intel_gt_debugfs.c  |   2 +-
>  drivers/gpu/drm/i915/gt/intel_gt_mcr.c      | 239 ++++++++++++--------
>  drivers/gpu/drm/i915/gt/intel_gt_mcr.h      |  43 ++--
>  drivers/gpu/drm/i915/gt/intel_region_lmem.c |   4 +-
>  drivers/gpu/drm/i915/gt/intel_workarounds.c |   8 +-
>  drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c  |   2 +-
>  9 files changed, 200 insertions(+), 145 deletions(-)
> 
> diff --git a/Documentation/gpu/i915.rst b/Documentation/gpu/i915.rst
> index 54060cd6c419..4e59db1cfb00 100644
> --- a/Documentation/gpu/i915.rst
> +++ b/Documentation/gpu/i915.rst
> @@ -246,6 +246,18 @@ Display State Buffer
>  .. kernel-doc:: drivers/gpu/drm/i915/display/intel_dsb.c
>     :internal:
>  
> +GT Programming
> +==============
> +
> +Multicast/Replicated (MCR) Registers
> +------------------------------------
> +
> +.. kernel-doc:: drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> +   :doc: GT Multicast/Replicated (MCR) Register Support
> +
> +.. kernel-doc:: drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> +   :internal:
> +
>  Memory Management and Command Submission
>  ========================================
>  
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
> index da30503d3ca2..fa54823d1219 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
> @@ -835,7 +835,7 @@ i915_gem_stolen_lmem_setup(struct drm_i915_private *i915, u16 type,
>  	} else {
>  		resource_size_t lmem_range;
>  
> -		lmem_range = intel_gt_read_register(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
> +		lmem_range = intel_gt_mcr_read_any(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
>  		lmem_size = lmem_range >> XEHPSDV_TILE_LMEM_RANGE_SHIFT;
>  		lmem_size *= SZ_1G;
>  	}
> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> index 244af1bdb7db..136cc44c3deb 100644
> --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> @@ -1428,14 +1428,6 @@ void intel_engine_cancel_stop_cs(struct intel_engine_cs *engine)
>  	ENGINE_WRITE_FW(engine, RING_MI_MODE, _MASKED_BIT_DISABLE(STOP_RING));
>  }
>  
> -static u32
> -read_subslice_reg(const struct intel_engine_cs *engine,
> -		  int slice, int subslice, i915_reg_t reg)
> -{
> -	return intel_uncore_read_with_mcr_steering(engine->uncore, reg,
> -						   slice, subslice);
> -}
> -
>  /* NB: please notice the memset */
>  void intel_engine_get_instdone(const struct intel_engine_cs *engine,
>  			       struct intel_instdone *instdone)
> @@ -1469,28 +1461,33 @@ void intel_engine_get_instdone(const struct intel_engine_cs *engine,
>  		if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 50)) {
>  			for_each_instdone_gslice_dss_xehp(i915, sseu, iter, slice, subslice) {
>  				instdone->sampler[slice][subslice] =
> -					read_subslice_reg(engine, slice, subslice,
> -							  GEN7_SAMPLER_INSTDONE);
> +					intel_gt_mcr_read(engine->gt,
> +							  GEN7_SAMPLER_INSTDONE,
> +							  slice, subslice);
>  				instdone->row[slice][subslice] =
> -					read_subslice_reg(engine, slice, subslice,
> -							  GEN7_ROW_INSTDONE);
> +					intel_gt_mcr_read(engine->gt,
> +							  GEN7_ROW_INSTDONE,
> +							  slice, subslice);
>  			}
>  		} else {
>  			for_each_instdone_slice_subslice(i915, sseu, slice, subslice) {
>  				instdone->sampler[slice][subslice] =
> -					read_subslice_reg(engine, slice, subslice,
> -							  GEN7_SAMPLER_INSTDONE);
> +					intel_gt_mcr_read(engine->gt,
> +							  GEN7_SAMPLER_INSTDONE,
> +							  slice, subslice);
>  				instdone->row[slice][subslice] =
> -					read_subslice_reg(engine, slice, subslice,
> -							  GEN7_ROW_INSTDONE);
> +					intel_gt_mcr_read(engine->gt,
> +							  GEN7_ROW_INSTDONE,
> +							  slice, subslice);
>  			}
>  		}
>  
>  		if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 55)) {
>  			for_each_instdone_gslice_dss_xehp(i915, sseu, iter, slice, subslice)
>  				instdone->geom_svg[slice][subslice] =
> -					read_subslice_reg(engine, slice, subslice,
> -							  XEHPG_INSTDONE_GEOM_SVG);
> +					intel_gt_mcr_read(engine->gt,
> +							  XEHPG_INSTDONE_GEOM_SVG,
> +							  slice, subslice);
>  		}
>  	} else if (GRAPHICS_VER(i915) >= 7) {
>  		instdone->instdone =
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
> index ea07f2bb846f..dd53641f3637 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
> @@ -65,7 +65,7 @@ static int steering_show(struct seq_file *m, void *data)
>  	struct drm_printer p = drm_seq_file_printer(m);
>  	struct intel_gt *gt = m->private;
>  
> -	intel_gt_report_steering(&p, gt, true);
> +	intel_gt_mcr_report_steering(&p, gt, true);
>  
>  	return 0;
>  }
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> index 1279a1fe1001..aa4fb308d468 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> @@ -134,23 +134,22 @@ void intel_gt_mcr_init(struct intel_gt *gt)
>  	}
>  }
>  
> -/**
> - * uncore_rw_with_mcr_steering_fw - Access a register after programming
> - *				    the MCR selector register.
> +/*
> + * rw_with_mcr_steering_fw - Access a register with specific MCR steering
>   * @uncore: pointer to struct intel_uncore
>   * @reg: register being accessed
>   * @rw_flag: FW_REG_READ for read access or FW_REG_WRITE for write access
> - * @slice: slice number (ignored for multi-cast write)
> - * @subslice: sub-slice number (ignored for multi-cast write)
> + * @group: group number (documented as "sliceid" on older platforms)
> + * @instance: instance number (documented as "subsliceid" on older platforms)
>   * @value: register value to be written (ignored for read)
>   *
>   * Return: 0 for write access. register value for read access.
>   *
>   * Caller needs to make sure the relevant forcewake wells are up.
>   */
> -static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
> -					  i915_reg_t reg, u8 rw_flag,
> -					  int slice, int subslice, u32 value)
> +static u32 rw_with_mcr_steering_fw(struct intel_uncore *uncore,
> +				   i915_reg_t reg, u8 rw_flag,
> +				   int group, int instance, u32 value)
>  {
>  	u32 mcr_mask, mcr_ss, mcr, old_mcr, val = 0;
>  
> @@ -158,7 +157,7 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
>  
>  	if (GRAPHICS_VER(uncore->i915) >= 11) {
>  		mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
> -		mcr_ss = GEN11_MCR_SLICE(slice) | GEN11_MCR_SUBSLICE(subslice);
> +		mcr_ss = GEN11_MCR_SLICE(group) | GEN11_MCR_SUBSLICE(instance);
>  
>  		/*
>  		 * Wa_22013088509
> @@ -176,7 +175,7 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
>  			mcr_mask |= GEN11_MCR_MULTICAST;
>  	} else {
>  		mcr_mask = GEN8_MCR_SLICE_MASK | GEN8_MCR_SUBSLICE_MASK;
> -		mcr_ss = GEN8_MCR_SLICE(slice) | GEN8_MCR_SUBSLICE(subslice);
> +		mcr_ss = GEN8_MCR_SLICE(group) | GEN8_MCR_SUBSLICE(instance);
>  	}
>  
>  	old_mcr = mcr = intel_uncore_read_fw(uncore, GEN8_MCR_SELECTOR);
> @@ -198,10 +197,10 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
>  	return val;
>  }
>  
> -static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
> -				       i915_reg_t reg, u8 rw_flag,
> -				       int slice, int subslice,
> -				       u32 value)
> +static u32 rw_with_mcr_steering(struct intel_uncore *uncore,
> +				i915_reg_t reg, u8 rw_flag,
> +				int group, int instance,
> +				u32 value)
>  {
>  	enum forcewake_domains fw_domains;
>  	u32 val;
> @@ -215,8 +214,7 @@ static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
>  	spin_lock_irq(&uncore->lock);
>  	intel_uncore_forcewake_get__locked(uncore, fw_domains);
>  
> -	val = uncore_rw_with_mcr_steering_fw(uncore, reg, rw_flag,
> -					     slice, subslice, value);
> +	val = rw_with_mcr_steering_fw(uncore, reg, rw_flag, group, instance, value);
>  
>  	intel_uncore_forcewake_put__locked(uncore, fw_domains);
>  	spin_unlock_irq(&uncore->lock);
> @@ -224,31 +222,73 @@ static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
>  	return val;
>  }
>  
> -u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
> -					   i915_reg_t reg, int slice, int subslice)
> +/**
> + * intel_gt_mcr_read - read a specific instance of an MCR register
> + * @gt: GT structure
> + * @reg: the MCR register to read
> + * @group: the MCR group
> + * @instance: the MCR instance
> + *
> + * Returns the value read from an MCR register after steering toward a specific
> + * group/instance.
> + */
> +u32 intel_gt_mcr_read(struct intel_gt *gt,
> +		      i915_reg_t reg,
> +		      int group, int instance)
>  {
> -	return uncore_rw_with_mcr_steering_fw(uncore, reg, FW_REG_READ,
> -					      slice, subslice, 0);
> +	return rw_with_mcr_steering(gt->uncore, reg, FW_REG_READ, group, instance, 0);
>  }
>  
> -u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
> -					i915_reg_t reg, int slice, int subslice)
> +/**
> + * intel_gt_mcr_unicast_write - write a specific instance of an MCR register
> + * @gt: GT structure
> + * @reg: the MCR register to read
to write
> + * @value: value to write
> + * @group: the MCR group
> + * @instance: the MCR instance
> + *
> + * Write an MCR register in unicast mode after steering toward a specific
> + * group/instance.
> + */
> +void intel_gt_mcr_unicast_write(struct intel_gt *gt, i915_reg_t reg, u32 value,
> +				int group, int instance)
>  {
> -	return uncore_rw_with_mcr_steering(uncore, reg, FW_REG_READ,
> -					   slice, subslice, 0);
> +	rw_with_mcr_steering(gt->uncore, reg, FW_REG_WRITE, group, instance, value);
>  }
>  
> -void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
> -					  i915_reg_t reg, u32 value,
> -					  int slice, int subslice)
> +/**
> + * intel_gt_mcr_multicast_write - write a value to all instances of an MCR register
> + * @gt: GT structure
> + * @reg: the MCR register to read
to write
> + * @value: value to write
> + *
> + * Write an MCR register in multicast mode to update all instances.
> + */
> +void intel_gt_mcr_multicast_write(struct intel_gt *gt,
> +				i915_reg_t reg, u32 value)
>  {
> -	uncore_rw_with_mcr_steering(uncore, reg, FW_REG_WRITE,
> -				    slice, subslice, value);
> +	intel_uncore_write(gt->uncore, reg, value);
>  }
>  
>  /**
> - * intel_gt_reg_needs_read_steering - determine whether a register read
> - *     requires explicit steering
> + * intel_gt_mcr_multicast_write_fw - write a value to all instances of an MCR register
> + * @gt: GT structure
> + * @reg: the MCR register to read
to write
> + * @value: value to write
> + *
> + * Write an MCR register in multicast mode to update all instances.  This
> + * function assumes the caller is already holding any necessary forcewake
> + * domains; use intel_gt_mcr_multicast_write() in cases where forcewake should
> + * be obtained automatically.
> + */
> +void intel_gt_mcr_multicast_write_fw(struct intel_gt *gt, i915_reg_t reg, u32 value)
> +{
> +	intel_uncore_write_fw(gt->uncore, reg, value);
> +}
> +
> +/*
> + * reg_needs_read_steering - determine whether a register read requires
> + *     explicit steering
>   * @gt: GT structure
>   * @reg: the register to check steering requirements for
>   * @type: type of multicast steering to check
> @@ -260,14 +300,14 @@ void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
>   * steering type, or if the default (subslice-based) steering IDs are suitable
>   * for @type steering too.
>   */
> -static bool intel_gt_reg_needs_read_steering(struct intel_gt *gt,
> -					     i915_reg_t reg,
> -					     enum intel_steering_type type)
> +static bool reg_needs_read_steering(struct intel_gt *gt,
> +				    i915_reg_t reg,
> +				    enum intel_steering_type type)
>  {
>  	const u32 offset = i915_mmio_reg_offset(reg);
>  	const struct intel_mmio_range *entry;
>  
> -	if (likely(!intel_gt_needs_read_steering(gt, type)))
> +	if (likely(!gt->steering_table[type]))
>  		return false;
>  
>  	for (entry = gt->steering_table[type]; entry->end; entry++) {
> @@ -278,29 +318,29 @@ static bool intel_gt_reg_needs_read_steering(struct intel_gt *gt,
>  	return false;
>  }
>  
> -/**
> - * intel_gt_get_valid_steering - determines valid IDs for a class of MCR steering
> +/*
> + * get_nonterminated_steering - determines valid IDs for a class of MCR steering
>   * @gt: GT structure
>   * @type: multicast register type
> - * @sliceid: Slice ID returned
> - * @subsliceid: Subslice ID returned
> + * @group: Group ID returned
> + * @instance: Instance ID returned
>   *
> - * Determines sliceid and subsliceid values that will steer reads
> - * of a specific multicast register class to a valid value.
> + * Determines group and instance values that will steer reads of the specified
> + * MCR class to a non-terminated instance.
>   */
> -static void intel_gt_get_valid_steering(struct intel_gt *gt,
> -					enum intel_steering_type type,
> -					u8 *sliceid, u8 *subsliceid)
> +static void get_nonterminated_steering(struct intel_gt *gt,
> +				       enum intel_steering_type type,
> +				       u8 *group, u8 *instance)
>  {
>  	switch (type) {
>  	case L3BANK:
> -		*sliceid = 0;		/* unused */
> -		*subsliceid = __ffs(gt->info.l3bank_mask);
> +		*group = 0;		/* unused */
> +		*instance = __ffs(gt->info.l3bank_mask);
>  		break;
>  	case MSLICE:
>  		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
> -		*sliceid = __ffs(gt->info.mslice_mask);
> -		*subsliceid = 0;	/* unused */
> +		*group = __ffs(gt->info.mslice_mask);
> +		*instance = 0;	/* unused */
>  		break;
>  	case LNCF:
>  		/*
> @@ -308,96 +348,105 @@ static void intel_gt_get_valid_steering(struct intel_gt *gt,
>  		 * can safely just steer to LNCF 0 in all cases.
>  		 */
>  		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
> -		*sliceid = __ffs(gt->info.mslice_mask) << 1;
> -		*subsliceid = 0;	/* unused */
> +		*group = __ffs(gt->info.mslice_mask) << 1;
> +		*instance = 0;	/* unused */
>  		break;
>  	case INSTANCE0:
>  		/*
>  		 * There are a lot of MCR types for which instance (0, 0)
>  		 * will always provide a non-terminated value.
>  		 */
> -		*sliceid = 0;
> -		*subsliceid = 0;
> +		*group = 0;
> +		*instance = 0;
>  		break;
>  	default:
>  		MISSING_CASE(type);
> -		*sliceid = 0;
> -		*subsliceid = 0;
> +		*group = 0;
> +		*instance = 0;
>  	}
>  }
>  
>  /**
> - * intel_gt_get_valid_steering_for_reg - get a valid steering for a register
> + * intel_gt_mcr_get_nonterminated_steering - find group/instance values that
> + *    will steer a register to a non-terminated instance
>   * @gt: GT structure
>   * @reg: register for which the steering is required
> - * @sliceid: return variable for slice steering
> - * @subsliceid: return variable for subslice steering
> + * @group: return variable for group steering
> + * @instance: return variable for instance steering
>   *
> - * This function returns a slice/subslice pair that is guaranteed to work for
> + * This function returns a group/instance pair that is guaranteed to work for
>   * read steering of the given register. Note that a value will be returned even
>   * if the register is not replicated and therefore does not actually require
>   * steering.
>   */
> -void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
> -					 u8 *sliceid, u8 *subsliceid)
> +void intel_gt_mcr_get_nonterminated_steering(struct intel_gt *gt,
> +					     i915_reg_t reg,
> +					     u8 *group, u8 *instance)
>  {
>  	int type;
>  
>  	for (type = 0; type < NUM_STEERING_TYPES; type++) {
> -		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
> -			intel_gt_get_valid_steering(gt, type, sliceid,
> -						    subsliceid);
> +		if (reg_needs_read_steering(gt, reg, type)) {
> +			get_nonterminated_steering(gt, type, group, instance);
>  			return;
>  		}
>  	}
>  
> -	*sliceid = gt->default_steering.groupid;
> -	*subsliceid = gt->default_steering.instanceid;
> +	*group = gt->default_steering.groupid;
> +	*instance = gt->default_steering.instanceid;
>  }
>  
>  /**
> - * intel_gt_read_register_fw - reads a GT register with support for multicast
> + * intel_gt_mcr_read_any_fw - reads one instance of an MCR register
>   * @gt: GT structure
>   * @reg: register to read
>   *
> - * This function will read a GT register.  If the register is a multicast
> - * register, the read will be steered to a valid instance (i.e., one that
> - * isn't fused off or powered down by power gating).
> + * Reads a GT MCR register.  The read will be steered to a non-terminated
> + * instance (i.e., one that isn't fused off or powered down by power gating).
> + * This function assumes the caller is already holding any necessary forcewake
> + * domains; use intel_gt_mcr_read_any() in cases where forcewake should be
> + * obtained automatically.
>   *
> - * Returns the value from a valid instance of @reg.
> + * Returns the value from a non-terminated instance of @reg.
>   */
> -u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg)
> +u32 intel_gt_mcr_read_any_fw(struct intel_gt *gt, i915_reg_t reg)
>  {
>  	int type;
> -	u8 sliceid, subsliceid;
> +	u8 group, instance;
>  
>  	for (type = 0; type < NUM_STEERING_TYPES; type++) {
> -		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
> -			intel_gt_get_valid_steering(gt, type, &sliceid,
> -						    &subsliceid);
> -			return intel_uncore_read_with_mcr_steering_fw(gt->uncore,
> -								      reg,
> -								      sliceid,
> -								      subsliceid);
> +		if (reg_needs_read_steering(gt, reg, type)) {
> +			get_nonterminated_steering(gt, type, &group, &instance);
> +			return rw_with_mcr_steering_fw(gt->uncore, reg,
> +						       FW_REG_READ,
> +						       group, instance, 0);
>  		}
>  	}
>  
>  	return intel_uncore_read_fw(gt->uncore, reg);
>  }
>  
> -u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg)
> +/**
> + * intel_gt_mcr_read_any - reads one instance of an MCR register
> + * @gt: GT structure
> + * @reg: register to read
> + *
> + * Reads a GT MCR register.  The read will be steered to a non-terminated
> + * instance (i.e., one that isn't fused off or powered down by power gating).
> + *
> + * Returns the value from a non-terminated instance of @reg.
> + */
> +u32 intel_gt_mcr_read_any(struct intel_gt *gt, i915_reg_t reg)
>  {
>  	int type;
> -	u8 sliceid, subsliceid;
> +	u8 group, instance;
>  
>  	for (type = 0; type < NUM_STEERING_TYPES; type++) {
> -		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
> -			intel_gt_get_valid_steering(gt, type, &sliceid,
> -						    &subsliceid);
> -			return intel_uncore_read_with_mcr_steering(gt->uncore,
> -								   reg,
> -								   sliceid,
> -								   subsliceid);
> +		if (reg_needs_read_steering(gt, reg, type)) {
> +			get_nonterminated_steering(gt, type, &group, &instance);
> +			return rw_with_mcr_steering(gt->uncore, reg,
> +						    FW_REG_READ,
> +						    group, instance, 0);
>  		}
>  	}
>  
> @@ -410,7 +459,7 @@ static void report_steering_type(struct drm_printer *p,
>  				 bool dump_table)
>  {
>  	const struct intel_mmio_range *entry;
> -	u8 slice, subslice;
> +	u8 group, instance;
>  
>  	BUILD_BUG_ON(ARRAY_SIZE(intel_steering_types) != NUM_STEERING_TYPES);
>  
> @@ -420,9 +469,9 @@ static void report_steering_type(struct drm_printer *p,
>  		return;
>  	}
>  
> -	intel_gt_get_valid_steering(gt, type, &slice, &subslice);
> -	drm_printf(p, "%s steering: sliceid=0x%x, subsliceid=0x%x\n",
> -		   intel_steering_types[type], slice, subslice);
> +	get_nonterminated_steering(gt, type, &group, &instance);
> +	drm_printf(p, "%s steering: group=0x%x, instance=0x%x\n",
> +		   intel_steering_types[type], group, instance);
>  
>  	if (!dump_table)
>  		return;
> @@ -431,10 +480,10 @@ static void report_steering_type(struct drm_printer *p,
>  		drm_printf(p, "\t0x%06x - 0x%06x\n", entry->start, entry->end);
>  }
>  
> -void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
> -			      bool dump_table)
> +void intel_gt_mcr_report_steering(struct drm_printer *p, struct intel_gt *gt,
> +				  bool dump_table)
>  {
> -	drm_printf(p, "Default steering: sliceid=0x%x, subsliceid=0x%x\n",
> +	drm_printf(p, "Default steering: group=0x%x, instance=0x%x\n",
>  		   gt->default_steering.groupid,
>  		   gt->default_steering.instanceid);
>  
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.h b/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
> index b570c1571243..506b0cbc8db3 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
> @@ -10,28 +10,25 @@
>  
>  void intel_gt_mcr_init(struct intel_gt *gt);
>  
> -u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
> -					   i915_reg_t reg,
> -					   int slice, int subslice);
> -u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
> -					i915_reg_t reg,	int slice, int subslice);
> -void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
> -					  i915_reg_t reg, u32 value,
> -					  int slice, int subslice);
> -
> -u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg);
> -u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg);
> -
> -static inline bool intel_gt_needs_read_steering(struct intel_gt *gt,
> -						enum intel_steering_type type)
> -{
> -	return gt->steering_table[type];
> -}
> -
> -void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
> -					 u8 *sliceid, u8 *subsliceid);
> -
> -void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
> -			      bool dump_table);
> +u32 intel_gt_mcr_read(struct intel_gt *gt,
> +		      i915_reg_t reg,
> +		      int group, int instance);
> +u32 intel_gt_mcr_read_any_fw(struct intel_gt *gt, i915_reg_t reg);
> +u32 intel_gt_mcr_read_any(struct intel_gt *gt, i915_reg_t reg);
> +
> +void intel_gt_mcr_unicast_write(struct intel_gt *gt,
> +				i915_reg_t reg, u32 value,
> +				int group, int instance);
> +void intel_gt_mcr_multicast_write(struct intel_gt *gt,
> +				  i915_reg_t reg, u32 value);
> +void intel_gt_mcr_multicast_write_fw(struct intel_gt *gt,
> +				     i915_reg_t reg, u32 value);
> +
> +void intel_gt_mcr_get_nonterminated_steering(struct intel_gt *gt,
> +					     i915_reg_t reg,
> +					     u8 *group, u8 *instance);
> +
> +void intel_gt_mcr_report_steering(struct drm_printer *p, struct intel_gt *gt,
> +				  bool dump_table);
>  
>  #endif /* __INTEL_GT_MCR__ */
> diff --git a/drivers/gpu/drm/i915/gt/intel_region_lmem.c b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
> index 1f4e7237a924..2ff448047020 100644
> --- a/drivers/gpu/drm/i915/gt/intel_region_lmem.c
> +++ b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
> @@ -105,11 +105,11 @@ static struct intel_memory_region *setup_lmem(struct intel_gt *gt)
>  		resource_size_t lmem_range;
>  		u64 tile_stolen, flat_ccs_base;
>  
> -		lmem_range = intel_gt_read_register(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
> +		lmem_range = intel_gt_mcr_read_any(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
>  		lmem_size = lmem_range >> XEHPSDV_TILE_LMEM_RANGE_SHIFT;
>  		lmem_size *= SZ_1G;
>  
> -		flat_ccs_base = intel_gt_read_register(gt, XEHPSDV_FLAT_CCS_BASE_ADDR);
> +		flat_ccs_base = intel_gt_mcr_read_any(gt, XEHPSDV_FLAT_CCS_BASE_ADDR);
>  		flat_ccs_base = (flat_ccs_base >> XEHPSDV_CCS_BASE_SHIFT) * SZ_64K;
>  
>  		/* FIXME: Remove this when we have small-bar enabled */
> diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> index 97d7f30b1229..e42fbb982bb3 100644
> --- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
> +++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> @@ -1083,7 +1083,7 @@ static void __add_mcr_wa(struct intel_gt *gt, struct i915_wa_list *wal,
>  	gt->default_steering.instanceid = subslice;
>  
>  	if (drm_debug_enabled(DRM_UT_DRIVER))
> -		intel_gt_report_steering(&p, gt, false);
> +		intel_gt_mcr_report_steering(&p, gt, false);
>  }
>  
>  static void
> @@ -1624,13 +1624,13 @@ wa_list_apply(struct intel_gt *gt, const struct i915_wa_list *wal)
>  		u32 val, old = 0;
>  
>  		/* open-coded rmw due to steering */
> -		old = wa->clr ? intel_gt_read_register_fw(gt, wa->reg) : 0;
> +		old = wa->clr ? intel_gt_mcr_read_any_fw(gt, wa->reg) : 0;
>  		val = (old & ~wa->clr) | wa->set;
>  		if (val != old || !wa->clr)
>  			intel_uncore_write_fw(uncore, wa->reg, val);
>  
>  		if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
> -			wa_verify(wa, intel_gt_read_register_fw(gt, wa->reg),
> +			wa_verify(wa, intel_gt_mcr_read_any_fw(gt, wa->reg),
>  				  wal->name, "application");
>  	}
>  
> @@ -1661,7 +1661,7 @@ static bool wa_list_verify(struct intel_gt *gt,
>  
>  	for (i = 0, wa = wal->list; i < wal->count; i++, wa++)
>  		ok &= wa_verify(wa,
> -				intel_gt_read_register_fw(gt, wa->reg),
> +				intel_gt_mcr_read_any_fw(gt, wa->reg),
>  				wal->name, from);
>  
>  	intel_uncore_forcewake_put__locked(uncore, fw);
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> index dea138d78111..ba7541f3ca61 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> @@ -314,7 +314,7 @@ static long __must_check guc_mmio_reg_add(struct intel_gt *gt,
>  	 * tracking, it is easier to just program the default steering for all
>  	 * regs that don't need a non-default one.
>  	 */
> -	intel_gt_get_valid_steering_for_reg(gt, reg, &group, &inst);
> +	intel_gt_mcr_get_nonterminated_steering(gt, reg, &group, &inst);
>  	entry.flags |= GUC_REGSET_STEERING(group, inst);
>  
>  	slot = __mmio_reg_add(regset, &entry);
With the above minor fixes to comments

Reviewed-by: Harish Chegondi <harish.chegondi@intel.com>
> -- 
> 2.35.3
> 

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

* Re: [Intel-gfx] [PATCH v2 2/2] drm/i915/gt: Cleanup interface for MCR operations
@ 2022-06-17 13:57     ` Harish Chegondi
  0 siblings, 0 replies; 19+ messages in thread
From: Harish Chegondi @ 2022-06-17 13:57 UTC (permalink / raw)
  To: Matt Roper; +Cc: intel-gfx, dri-devel

On Tue, Jun 14, 2022 at 05:10:19PM -0700, Matt Roper wrote:
> Let's replace the assortment of intel_gt_* and intel_uncore_* functions
> that operate on MCR registers with a cleaner set of interfaces:
> 
>   * intel_gt_mcr_read -- unicast read from specific instance
>   * intel_gt_mcr_read_any[_fw] -- unicast read from any non-terminated
>     instance
>   * intel_gt_mcr_unicast_write -- unicast write to specific instance
>   * intel_gt_mcr_multicast_write[_fw] -- multicast write to all instances
> 
> We'll also replace the historic "slice" and "subslice" terminology with
> "group" and "instance" to match the documentation for more recent
> platforms; these days MCR steering applies to more types of replication
> than just slice/subslice.
> 
> v2:
>  - Reference the new kerneldoc from i915.rst.  (Jani)
>  - Tweak the wording of the documentation for a couple functions to
>    clarify the difference between "_fw" and non-"_fw" forms.
> 
> Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
> Acked-by: Jani Nikula <jani.nikula@linux.intel.com>
> ---
>  Documentation/gpu/i915.rst                  |  12 +
>  drivers/gpu/drm/i915/gem/i915_gem_stolen.c  |   2 +-
>  drivers/gpu/drm/i915/gt/intel_engine_cs.c   |  33 ++-
>  drivers/gpu/drm/i915/gt/intel_gt_debugfs.c  |   2 +-
>  drivers/gpu/drm/i915/gt/intel_gt_mcr.c      | 239 ++++++++++++--------
>  drivers/gpu/drm/i915/gt/intel_gt_mcr.h      |  43 ++--
>  drivers/gpu/drm/i915/gt/intel_region_lmem.c |   4 +-
>  drivers/gpu/drm/i915/gt/intel_workarounds.c |   8 +-
>  drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c  |   2 +-
>  9 files changed, 200 insertions(+), 145 deletions(-)
> 
> diff --git a/Documentation/gpu/i915.rst b/Documentation/gpu/i915.rst
> index 54060cd6c419..4e59db1cfb00 100644
> --- a/Documentation/gpu/i915.rst
> +++ b/Documentation/gpu/i915.rst
> @@ -246,6 +246,18 @@ Display State Buffer
>  .. kernel-doc:: drivers/gpu/drm/i915/display/intel_dsb.c
>     :internal:
>  
> +GT Programming
> +==============
> +
> +Multicast/Replicated (MCR) Registers
> +------------------------------------
> +
> +.. kernel-doc:: drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> +   :doc: GT Multicast/Replicated (MCR) Register Support
> +
> +.. kernel-doc:: drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> +   :internal:
> +
>  Memory Management and Command Submission
>  ========================================
>  
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
> index da30503d3ca2..fa54823d1219 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
> @@ -835,7 +835,7 @@ i915_gem_stolen_lmem_setup(struct drm_i915_private *i915, u16 type,
>  	} else {
>  		resource_size_t lmem_range;
>  
> -		lmem_range = intel_gt_read_register(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
> +		lmem_range = intel_gt_mcr_read_any(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
>  		lmem_size = lmem_range >> XEHPSDV_TILE_LMEM_RANGE_SHIFT;
>  		lmem_size *= SZ_1G;
>  	}
> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> index 244af1bdb7db..136cc44c3deb 100644
> --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> @@ -1428,14 +1428,6 @@ void intel_engine_cancel_stop_cs(struct intel_engine_cs *engine)
>  	ENGINE_WRITE_FW(engine, RING_MI_MODE, _MASKED_BIT_DISABLE(STOP_RING));
>  }
>  
> -static u32
> -read_subslice_reg(const struct intel_engine_cs *engine,
> -		  int slice, int subslice, i915_reg_t reg)
> -{
> -	return intel_uncore_read_with_mcr_steering(engine->uncore, reg,
> -						   slice, subslice);
> -}
> -
>  /* NB: please notice the memset */
>  void intel_engine_get_instdone(const struct intel_engine_cs *engine,
>  			       struct intel_instdone *instdone)
> @@ -1469,28 +1461,33 @@ void intel_engine_get_instdone(const struct intel_engine_cs *engine,
>  		if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 50)) {
>  			for_each_instdone_gslice_dss_xehp(i915, sseu, iter, slice, subslice) {
>  				instdone->sampler[slice][subslice] =
> -					read_subslice_reg(engine, slice, subslice,
> -							  GEN7_SAMPLER_INSTDONE);
> +					intel_gt_mcr_read(engine->gt,
> +							  GEN7_SAMPLER_INSTDONE,
> +							  slice, subslice);
>  				instdone->row[slice][subslice] =
> -					read_subslice_reg(engine, slice, subslice,
> -							  GEN7_ROW_INSTDONE);
> +					intel_gt_mcr_read(engine->gt,
> +							  GEN7_ROW_INSTDONE,
> +							  slice, subslice);
>  			}
>  		} else {
>  			for_each_instdone_slice_subslice(i915, sseu, slice, subslice) {
>  				instdone->sampler[slice][subslice] =
> -					read_subslice_reg(engine, slice, subslice,
> -							  GEN7_SAMPLER_INSTDONE);
> +					intel_gt_mcr_read(engine->gt,
> +							  GEN7_SAMPLER_INSTDONE,
> +							  slice, subslice);
>  				instdone->row[slice][subslice] =
> -					read_subslice_reg(engine, slice, subslice,
> -							  GEN7_ROW_INSTDONE);
> +					intel_gt_mcr_read(engine->gt,
> +							  GEN7_ROW_INSTDONE,
> +							  slice, subslice);
>  			}
>  		}
>  
>  		if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 55)) {
>  			for_each_instdone_gslice_dss_xehp(i915, sseu, iter, slice, subslice)
>  				instdone->geom_svg[slice][subslice] =
> -					read_subslice_reg(engine, slice, subslice,
> -							  XEHPG_INSTDONE_GEOM_SVG);
> +					intel_gt_mcr_read(engine->gt,
> +							  XEHPG_INSTDONE_GEOM_SVG,
> +							  slice, subslice);
>  		}
>  	} else if (GRAPHICS_VER(i915) >= 7) {
>  		instdone->instdone =
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
> index ea07f2bb846f..dd53641f3637 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
> @@ -65,7 +65,7 @@ static int steering_show(struct seq_file *m, void *data)
>  	struct drm_printer p = drm_seq_file_printer(m);
>  	struct intel_gt *gt = m->private;
>  
> -	intel_gt_report_steering(&p, gt, true);
> +	intel_gt_mcr_report_steering(&p, gt, true);
>  
>  	return 0;
>  }
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> index 1279a1fe1001..aa4fb308d468 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> @@ -134,23 +134,22 @@ void intel_gt_mcr_init(struct intel_gt *gt)
>  	}
>  }
>  
> -/**
> - * uncore_rw_with_mcr_steering_fw - Access a register after programming
> - *				    the MCR selector register.
> +/*
> + * rw_with_mcr_steering_fw - Access a register with specific MCR steering
>   * @uncore: pointer to struct intel_uncore
>   * @reg: register being accessed
>   * @rw_flag: FW_REG_READ for read access or FW_REG_WRITE for write access
> - * @slice: slice number (ignored for multi-cast write)
> - * @subslice: sub-slice number (ignored for multi-cast write)
> + * @group: group number (documented as "sliceid" on older platforms)
> + * @instance: instance number (documented as "subsliceid" on older platforms)
>   * @value: register value to be written (ignored for read)
>   *
>   * Return: 0 for write access. register value for read access.
>   *
>   * Caller needs to make sure the relevant forcewake wells are up.
>   */
> -static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
> -					  i915_reg_t reg, u8 rw_flag,
> -					  int slice, int subslice, u32 value)
> +static u32 rw_with_mcr_steering_fw(struct intel_uncore *uncore,
> +				   i915_reg_t reg, u8 rw_flag,
> +				   int group, int instance, u32 value)
>  {
>  	u32 mcr_mask, mcr_ss, mcr, old_mcr, val = 0;
>  
> @@ -158,7 +157,7 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
>  
>  	if (GRAPHICS_VER(uncore->i915) >= 11) {
>  		mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
> -		mcr_ss = GEN11_MCR_SLICE(slice) | GEN11_MCR_SUBSLICE(subslice);
> +		mcr_ss = GEN11_MCR_SLICE(group) | GEN11_MCR_SUBSLICE(instance);
>  
>  		/*
>  		 * Wa_22013088509
> @@ -176,7 +175,7 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
>  			mcr_mask |= GEN11_MCR_MULTICAST;
>  	} else {
>  		mcr_mask = GEN8_MCR_SLICE_MASK | GEN8_MCR_SUBSLICE_MASK;
> -		mcr_ss = GEN8_MCR_SLICE(slice) | GEN8_MCR_SUBSLICE(subslice);
> +		mcr_ss = GEN8_MCR_SLICE(group) | GEN8_MCR_SUBSLICE(instance);
>  	}
>  
>  	old_mcr = mcr = intel_uncore_read_fw(uncore, GEN8_MCR_SELECTOR);
> @@ -198,10 +197,10 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
>  	return val;
>  }
>  
> -static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
> -				       i915_reg_t reg, u8 rw_flag,
> -				       int slice, int subslice,
> -				       u32 value)
> +static u32 rw_with_mcr_steering(struct intel_uncore *uncore,
> +				i915_reg_t reg, u8 rw_flag,
> +				int group, int instance,
> +				u32 value)
>  {
>  	enum forcewake_domains fw_domains;
>  	u32 val;
> @@ -215,8 +214,7 @@ static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
>  	spin_lock_irq(&uncore->lock);
>  	intel_uncore_forcewake_get__locked(uncore, fw_domains);
>  
> -	val = uncore_rw_with_mcr_steering_fw(uncore, reg, rw_flag,
> -					     slice, subslice, value);
> +	val = rw_with_mcr_steering_fw(uncore, reg, rw_flag, group, instance, value);
>  
>  	intel_uncore_forcewake_put__locked(uncore, fw_domains);
>  	spin_unlock_irq(&uncore->lock);
> @@ -224,31 +222,73 @@ static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
>  	return val;
>  }
>  
> -u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
> -					   i915_reg_t reg, int slice, int subslice)
> +/**
> + * intel_gt_mcr_read - read a specific instance of an MCR register
> + * @gt: GT structure
> + * @reg: the MCR register to read
> + * @group: the MCR group
> + * @instance: the MCR instance
> + *
> + * Returns the value read from an MCR register after steering toward a specific
> + * group/instance.
> + */
> +u32 intel_gt_mcr_read(struct intel_gt *gt,
> +		      i915_reg_t reg,
> +		      int group, int instance)
>  {
> -	return uncore_rw_with_mcr_steering_fw(uncore, reg, FW_REG_READ,
> -					      slice, subslice, 0);
> +	return rw_with_mcr_steering(gt->uncore, reg, FW_REG_READ, group, instance, 0);
>  }
>  
> -u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
> -					i915_reg_t reg, int slice, int subslice)
> +/**
> + * intel_gt_mcr_unicast_write - write a specific instance of an MCR register
> + * @gt: GT structure
> + * @reg: the MCR register to read
to write
> + * @value: value to write
> + * @group: the MCR group
> + * @instance: the MCR instance
> + *
> + * Write an MCR register in unicast mode after steering toward a specific
> + * group/instance.
> + */
> +void intel_gt_mcr_unicast_write(struct intel_gt *gt, i915_reg_t reg, u32 value,
> +				int group, int instance)
>  {
> -	return uncore_rw_with_mcr_steering(uncore, reg, FW_REG_READ,
> -					   slice, subslice, 0);
> +	rw_with_mcr_steering(gt->uncore, reg, FW_REG_WRITE, group, instance, value);
>  }
>  
> -void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
> -					  i915_reg_t reg, u32 value,
> -					  int slice, int subslice)
> +/**
> + * intel_gt_mcr_multicast_write - write a value to all instances of an MCR register
> + * @gt: GT structure
> + * @reg: the MCR register to read
to write
> + * @value: value to write
> + *
> + * Write an MCR register in multicast mode to update all instances.
> + */
> +void intel_gt_mcr_multicast_write(struct intel_gt *gt,
> +				i915_reg_t reg, u32 value)
>  {
> -	uncore_rw_with_mcr_steering(uncore, reg, FW_REG_WRITE,
> -				    slice, subslice, value);
> +	intel_uncore_write(gt->uncore, reg, value);
>  }
>  
>  /**
> - * intel_gt_reg_needs_read_steering - determine whether a register read
> - *     requires explicit steering
> + * intel_gt_mcr_multicast_write_fw - write a value to all instances of an MCR register
> + * @gt: GT structure
> + * @reg: the MCR register to read
to write
> + * @value: value to write
> + *
> + * Write an MCR register in multicast mode to update all instances.  This
> + * function assumes the caller is already holding any necessary forcewake
> + * domains; use intel_gt_mcr_multicast_write() in cases where forcewake should
> + * be obtained automatically.
> + */
> +void intel_gt_mcr_multicast_write_fw(struct intel_gt *gt, i915_reg_t reg, u32 value)
> +{
> +	intel_uncore_write_fw(gt->uncore, reg, value);
> +}
> +
> +/*
> + * reg_needs_read_steering - determine whether a register read requires
> + *     explicit steering
>   * @gt: GT structure
>   * @reg: the register to check steering requirements for
>   * @type: type of multicast steering to check
> @@ -260,14 +300,14 @@ void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
>   * steering type, or if the default (subslice-based) steering IDs are suitable
>   * for @type steering too.
>   */
> -static bool intel_gt_reg_needs_read_steering(struct intel_gt *gt,
> -					     i915_reg_t reg,
> -					     enum intel_steering_type type)
> +static bool reg_needs_read_steering(struct intel_gt *gt,
> +				    i915_reg_t reg,
> +				    enum intel_steering_type type)
>  {
>  	const u32 offset = i915_mmio_reg_offset(reg);
>  	const struct intel_mmio_range *entry;
>  
> -	if (likely(!intel_gt_needs_read_steering(gt, type)))
> +	if (likely(!gt->steering_table[type]))
>  		return false;
>  
>  	for (entry = gt->steering_table[type]; entry->end; entry++) {
> @@ -278,29 +318,29 @@ static bool intel_gt_reg_needs_read_steering(struct intel_gt *gt,
>  	return false;
>  }
>  
> -/**
> - * intel_gt_get_valid_steering - determines valid IDs for a class of MCR steering
> +/*
> + * get_nonterminated_steering - determines valid IDs for a class of MCR steering
>   * @gt: GT structure
>   * @type: multicast register type
> - * @sliceid: Slice ID returned
> - * @subsliceid: Subslice ID returned
> + * @group: Group ID returned
> + * @instance: Instance ID returned
>   *
> - * Determines sliceid and subsliceid values that will steer reads
> - * of a specific multicast register class to a valid value.
> + * Determines group and instance values that will steer reads of the specified
> + * MCR class to a non-terminated instance.
>   */
> -static void intel_gt_get_valid_steering(struct intel_gt *gt,
> -					enum intel_steering_type type,
> -					u8 *sliceid, u8 *subsliceid)
> +static void get_nonterminated_steering(struct intel_gt *gt,
> +				       enum intel_steering_type type,
> +				       u8 *group, u8 *instance)
>  {
>  	switch (type) {
>  	case L3BANK:
> -		*sliceid = 0;		/* unused */
> -		*subsliceid = __ffs(gt->info.l3bank_mask);
> +		*group = 0;		/* unused */
> +		*instance = __ffs(gt->info.l3bank_mask);
>  		break;
>  	case MSLICE:
>  		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
> -		*sliceid = __ffs(gt->info.mslice_mask);
> -		*subsliceid = 0;	/* unused */
> +		*group = __ffs(gt->info.mslice_mask);
> +		*instance = 0;	/* unused */
>  		break;
>  	case LNCF:
>  		/*
> @@ -308,96 +348,105 @@ static void intel_gt_get_valid_steering(struct intel_gt *gt,
>  		 * can safely just steer to LNCF 0 in all cases.
>  		 */
>  		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
> -		*sliceid = __ffs(gt->info.mslice_mask) << 1;
> -		*subsliceid = 0;	/* unused */
> +		*group = __ffs(gt->info.mslice_mask) << 1;
> +		*instance = 0;	/* unused */
>  		break;
>  	case INSTANCE0:
>  		/*
>  		 * There are a lot of MCR types for which instance (0, 0)
>  		 * will always provide a non-terminated value.
>  		 */
> -		*sliceid = 0;
> -		*subsliceid = 0;
> +		*group = 0;
> +		*instance = 0;
>  		break;
>  	default:
>  		MISSING_CASE(type);
> -		*sliceid = 0;
> -		*subsliceid = 0;
> +		*group = 0;
> +		*instance = 0;
>  	}
>  }
>  
>  /**
> - * intel_gt_get_valid_steering_for_reg - get a valid steering for a register
> + * intel_gt_mcr_get_nonterminated_steering - find group/instance values that
> + *    will steer a register to a non-terminated instance
>   * @gt: GT structure
>   * @reg: register for which the steering is required
> - * @sliceid: return variable for slice steering
> - * @subsliceid: return variable for subslice steering
> + * @group: return variable for group steering
> + * @instance: return variable for instance steering
>   *
> - * This function returns a slice/subslice pair that is guaranteed to work for
> + * This function returns a group/instance pair that is guaranteed to work for
>   * read steering of the given register. Note that a value will be returned even
>   * if the register is not replicated and therefore does not actually require
>   * steering.
>   */
> -void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
> -					 u8 *sliceid, u8 *subsliceid)
> +void intel_gt_mcr_get_nonterminated_steering(struct intel_gt *gt,
> +					     i915_reg_t reg,
> +					     u8 *group, u8 *instance)
>  {
>  	int type;
>  
>  	for (type = 0; type < NUM_STEERING_TYPES; type++) {
> -		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
> -			intel_gt_get_valid_steering(gt, type, sliceid,
> -						    subsliceid);
> +		if (reg_needs_read_steering(gt, reg, type)) {
> +			get_nonterminated_steering(gt, type, group, instance);
>  			return;
>  		}
>  	}
>  
> -	*sliceid = gt->default_steering.groupid;
> -	*subsliceid = gt->default_steering.instanceid;
> +	*group = gt->default_steering.groupid;
> +	*instance = gt->default_steering.instanceid;
>  }
>  
>  /**
> - * intel_gt_read_register_fw - reads a GT register with support for multicast
> + * intel_gt_mcr_read_any_fw - reads one instance of an MCR register
>   * @gt: GT structure
>   * @reg: register to read
>   *
> - * This function will read a GT register.  If the register is a multicast
> - * register, the read will be steered to a valid instance (i.e., one that
> - * isn't fused off or powered down by power gating).
> + * Reads a GT MCR register.  The read will be steered to a non-terminated
> + * instance (i.e., one that isn't fused off or powered down by power gating).
> + * This function assumes the caller is already holding any necessary forcewake
> + * domains; use intel_gt_mcr_read_any() in cases where forcewake should be
> + * obtained automatically.
>   *
> - * Returns the value from a valid instance of @reg.
> + * Returns the value from a non-terminated instance of @reg.
>   */
> -u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg)
> +u32 intel_gt_mcr_read_any_fw(struct intel_gt *gt, i915_reg_t reg)
>  {
>  	int type;
> -	u8 sliceid, subsliceid;
> +	u8 group, instance;
>  
>  	for (type = 0; type < NUM_STEERING_TYPES; type++) {
> -		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
> -			intel_gt_get_valid_steering(gt, type, &sliceid,
> -						    &subsliceid);
> -			return intel_uncore_read_with_mcr_steering_fw(gt->uncore,
> -								      reg,
> -								      sliceid,
> -								      subsliceid);
> +		if (reg_needs_read_steering(gt, reg, type)) {
> +			get_nonterminated_steering(gt, type, &group, &instance);
> +			return rw_with_mcr_steering_fw(gt->uncore, reg,
> +						       FW_REG_READ,
> +						       group, instance, 0);
>  		}
>  	}
>  
>  	return intel_uncore_read_fw(gt->uncore, reg);
>  }
>  
> -u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg)
> +/**
> + * intel_gt_mcr_read_any - reads one instance of an MCR register
> + * @gt: GT structure
> + * @reg: register to read
> + *
> + * Reads a GT MCR register.  The read will be steered to a non-terminated
> + * instance (i.e., one that isn't fused off or powered down by power gating).
> + *
> + * Returns the value from a non-terminated instance of @reg.
> + */
> +u32 intel_gt_mcr_read_any(struct intel_gt *gt, i915_reg_t reg)
>  {
>  	int type;
> -	u8 sliceid, subsliceid;
> +	u8 group, instance;
>  
>  	for (type = 0; type < NUM_STEERING_TYPES; type++) {
> -		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
> -			intel_gt_get_valid_steering(gt, type, &sliceid,
> -						    &subsliceid);
> -			return intel_uncore_read_with_mcr_steering(gt->uncore,
> -								   reg,
> -								   sliceid,
> -								   subsliceid);
> +		if (reg_needs_read_steering(gt, reg, type)) {
> +			get_nonterminated_steering(gt, type, &group, &instance);
> +			return rw_with_mcr_steering(gt->uncore, reg,
> +						    FW_REG_READ,
> +						    group, instance, 0);
>  		}
>  	}
>  
> @@ -410,7 +459,7 @@ static void report_steering_type(struct drm_printer *p,
>  				 bool dump_table)
>  {
>  	const struct intel_mmio_range *entry;
> -	u8 slice, subslice;
> +	u8 group, instance;
>  
>  	BUILD_BUG_ON(ARRAY_SIZE(intel_steering_types) != NUM_STEERING_TYPES);
>  
> @@ -420,9 +469,9 @@ static void report_steering_type(struct drm_printer *p,
>  		return;
>  	}
>  
> -	intel_gt_get_valid_steering(gt, type, &slice, &subslice);
> -	drm_printf(p, "%s steering: sliceid=0x%x, subsliceid=0x%x\n",
> -		   intel_steering_types[type], slice, subslice);
> +	get_nonterminated_steering(gt, type, &group, &instance);
> +	drm_printf(p, "%s steering: group=0x%x, instance=0x%x\n",
> +		   intel_steering_types[type], group, instance);
>  
>  	if (!dump_table)
>  		return;
> @@ -431,10 +480,10 @@ static void report_steering_type(struct drm_printer *p,
>  		drm_printf(p, "\t0x%06x - 0x%06x\n", entry->start, entry->end);
>  }
>  
> -void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
> -			      bool dump_table)
> +void intel_gt_mcr_report_steering(struct drm_printer *p, struct intel_gt *gt,
> +				  bool dump_table)
>  {
> -	drm_printf(p, "Default steering: sliceid=0x%x, subsliceid=0x%x\n",
> +	drm_printf(p, "Default steering: group=0x%x, instance=0x%x\n",
>  		   gt->default_steering.groupid,
>  		   gt->default_steering.instanceid);
>  
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.h b/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
> index b570c1571243..506b0cbc8db3 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
> @@ -10,28 +10,25 @@
>  
>  void intel_gt_mcr_init(struct intel_gt *gt);
>  
> -u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
> -					   i915_reg_t reg,
> -					   int slice, int subslice);
> -u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
> -					i915_reg_t reg,	int slice, int subslice);
> -void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
> -					  i915_reg_t reg, u32 value,
> -					  int slice, int subslice);
> -
> -u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg);
> -u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg);
> -
> -static inline bool intel_gt_needs_read_steering(struct intel_gt *gt,
> -						enum intel_steering_type type)
> -{
> -	return gt->steering_table[type];
> -}
> -
> -void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
> -					 u8 *sliceid, u8 *subsliceid);
> -
> -void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
> -			      bool dump_table);
> +u32 intel_gt_mcr_read(struct intel_gt *gt,
> +		      i915_reg_t reg,
> +		      int group, int instance);
> +u32 intel_gt_mcr_read_any_fw(struct intel_gt *gt, i915_reg_t reg);
> +u32 intel_gt_mcr_read_any(struct intel_gt *gt, i915_reg_t reg);
> +
> +void intel_gt_mcr_unicast_write(struct intel_gt *gt,
> +				i915_reg_t reg, u32 value,
> +				int group, int instance);
> +void intel_gt_mcr_multicast_write(struct intel_gt *gt,
> +				  i915_reg_t reg, u32 value);
> +void intel_gt_mcr_multicast_write_fw(struct intel_gt *gt,
> +				     i915_reg_t reg, u32 value);
> +
> +void intel_gt_mcr_get_nonterminated_steering(struct intel_gt *gt,
> +					     i915_reg_t reg,
> +					     u8 *group, u8 *instance);
> +
> +void intel_gt_mcr_report_steering(struct drm_printer *p, struct intel_gt *gt,
> +				  bool dump_table);
>  
>  #endif /* __INTEL_GT_MCR__ */
> diff --git a/drivers/gpu/drm/i915/gt/intel_region_lmem.c b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
> index 1f4e7237a924..2ff448047020 100644
> --- a/drivers/gpu/drm/i915/gt/intel_region_lmem.c
> +++ b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
> @@ -105,11 +105,11 @@ static struct intel_memory_region *setup_lmem(struct intel_gt *gt)
>  		resource_size_t lmem_range;
>  		u64 tile_stolen, flat_ccs_base;
>  
> -		lmem_range = intel_gt_read_register(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
> +		lmem_range = intel_gt_mcr_read_any(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
>  		lmem_size = lmem_range >> XEHPSDV_TILE_LMEM_RANGE_SHIFT;
>  		lmem_size *= SZ_1G;
>  
> -		flat_ccs_base = intel_gt_read_register(gt, XEHPSDV_FLAT_CCS_BASE_ADDR);
> +		flat_ccs_base = intel_gt_mcr_read_any(gt, XEHPSDV_FLAT_CCS_BASE_ADDR);
>  		flat_ccs_base = (flat_ccs_base >> XEHPSDV_CCS_BASE_SHIFT) * SZ_64K;
>  
>  		/* FIXME: Remove this when we have small-bar enabled */
> diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> index 97d7f30b1229..e42fbb982bb3 100644
> --- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
> +++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> @@ -1083,7 +1083,7 @@ static void __add_mcr_wa(struct intel_gt *gt, struct i915_wa_list *wal,
>  	gt->default_steering.instanceid = subslice;
>  
>  	if (drm_debug_enabled(DRM_UT_DRIVER))
> -		intel_gt_report_steering(&p, gt, false);
> +		intel_gt_mcr_report_steering(&p, gt, false);
>  }
>  
>  static void
> @@ -1624,13 +1624,13 @@ wa_list_apply(struct intel_gt *gt, const struct i915_wa_list *wal)
>  		u32 val, old = 0;
>  
>  		/* open-coded rmw due to steering */
> -		old = wa->clr ? intel_gt_read_register_fw(gt, wa->reg) : 0;
> +		old = wa->clr ? intel_gt_mcr_read_any_fw(gt, wa->reg) : 0;
>  		val = (old & ~wa->clr) | wa->set;
>  		if (val != old || !wa->clr)
>  			intel_uncore_write_fw(uncore, wa->reg, val);
>  
>  		if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
> -			wa_verify(wa, intel_gt_read_register_fw(gt, wa->reg),
> +			wa_verify(wa, intel_gt_mcr_read_any_fw(gt, wa->reg),
>  				  wal->name, "application");
>  	}
>  
> @@ -1661,7 +1661,7 @@ static bool wa_list_verify(struct intel_gt *gt,
>  
>  	for (i = 0, wa = wal->list; i < wal->count; i++, wa++)
>  		ok &= wa_verify(wa,
> -				intel_gt_read_register_fw(gt, wa->reg),
> +				intel_gt_mcr_read_any_fw(gt, wa->reg),
>  				wal->name, from);
>  
>  	intel_uncore_forcewake_put__locked(uncore, fw);
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> index dea138d78111..ba7541f3ca61 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> @@ -314,7 +314,7 @@ static long __must_check guc_mmio_reg_add(struct intel_gt *gt,
>  	 * tracking, it is easier to just program the default steering for all
>  	 * regs that don't need a non-default one.
>  	 */
> -	intel_gt_get_valid_steering_for_reg(gt, reg, &group, &inst);
> +	intel_gt_mcr_get_nonterminated_steering(gt, reg, &group, &inst);
>  	entry.flags |= GUC_REGSET_STEERING(group, inst);
>  
>  	slot = __mmio_reg_add(regset, &entry);
With the above minor fixes to comments

Reviewed-by: Harish Chegondi <harish.chegondi@intel.com>
> -- 
> 2.35.3
> 

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

* Re: [PATCH v2 2/2] drm/i915/gt: Cleanup interface for MCR operations
  2022-06-17 13:57     ` [Intel-gfx] " Harish Chegondi
@ 2022-06-17 15:10       ` Matt Roper
  -1 siblings, 0 replies; 19+ messages in thread
From: Matt Roper @ 2022-06-17 15:10 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-gfx, dri-devel

On Fri, Jun 17, 2022 at 06:57:20AM -0700, Harish Chegondi wrote:
> On Tue, Jun 14, 2022 at 05:10:19PM -0700, Matt Roper wrote:
> > Let's replace the assortment of intel_gt_* and intel_uncore_* functions
> > that operate on MCR registers with a cleaner set of interfaces:
> > 
> >   * intel_gt_mcr_read -- unicast read from specific instance
> >   * intel_gt_mcr_read_any[_fw] -- unicast read from any non-terminated
> >     instance
> >   * intel_gt_mcr_unicast_write -- unicast write to specific instance
> >   * intel_gt_mcr_multicast_write[_fw] -- multicast write to all instances
> > 
> > We'll also replace the historic "slice" and "subslice" terminology with
> > "group" and "instance" to match the documentation for more recent
> > platforms; these days MCR steering applies to more types of replication
> > than just slice/subslice.
> > 
> > v2:
> >  - Reference the new kerneldoc from i915.rst.  (Jani)
> >  - Tweak the wording of the documentation for a couple functions to
> >    clarify the difference between "_fw" and non-"_fw" forms.
> > 
> > Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
> > Acked-by: Jani Nikula <jani.nikula@linux.intel.com>
> > ---
> >  Documentation/gpu/i915.rst                  |  12 +
> >  drivers/gpu/drm/i915/gem/i915_gem_stolen.c  |   2 +-
> >  drivers/gpu/drm/i915/gt/intel_engine_cs.c   |  33 ++-
> >  drivers/gpu/drm/i915/gt/intel_gt_debugfs.c  |   2 +-
> >  drivers/gpu/drm/i915/gt/intel_gt_mcr.c      | 239 ++++++++++++--------
> >  drivers/gpu/drm/i915/gt/intel_gt_mcr.h      |  43 ++--
> >  drivers/gpu/drm/i915/gt/intel_region_lmem.c |   4 +-
> >  drivers/gpu/drm/i915/gt/intel_workarounds.c |   8 +-
> >  drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c  |   2 +-
> >  9 files changed, 200 insertions(+), 145 deletions(-)
> > 
> > diff --git a/Documentation/gpu/i915.rst b/Documentation/gpu/i915.rst
> > index 54060cd6c419..4e59db1cfb00 100644
> > --- a/Documentation/gpu/i915.rst
> > +++ b/Documentation/gpu/i915.rst
> > @@ -246,6 +246,18 @@ Display State Buffer
> >  .. kernel-doc:: drivers/gpu/drm/i915/display/intel_dsb.c
> >     :internal:
> >  
> > +GT Programming
> > +==============
> > +
> > +Multicast/Replicated (MCR) Registers
> > +------------------------------------
> > +
> > +.. kernel-doc:: drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> > +   :doc: GT Multicast/Replicated (MCR) Register Support
> > +
> > +.. kernel-doc:: drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> > +   :internal:
> > +
> >  Memory Management and Command Submission
> >  ========================================
> >  
> > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
> > index da30503d3ca2..fa54823d1219 100644
> > --- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
> > +++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
> > @@ -835,7 +835,7 @@ i915_gem_stolen_lmem_setup(struct drm_i915_private *i915, u16 type,
> >  	} else {
> >  		resource_size_t lmem_range;
> >  
> > -		lmem_range = intel_gt_read_register(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
> > +		lmem_range = intel_gt_mcr_read_any(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
> >  		lmem_size = lmem_range >> XEHPSDV_TILE_LMEM_RANGE_SHIFT;
> >  		lmem_size *= SZ_1G;
> >  	}
> > diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> > index 244af1bdb7db..136cc44c3deb 100644
> > --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> > +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> > @@ -1428,14 +1428,6 @@ void intel_engine_cancel_stop_cs(struct intel_engine_cs *engine)
> >  	ENGINE_WRITE_FW(engine, RING_MI_MODE, _MASKED_BIT_DISABLE(STOP_RING));
> >  }
> >  
> > -static u32
> > -read_subslice_reg(const struct intel_engine_cs *engine,
> > -		  int slice, int subslice, i915_reg_t reg)
> > -{
> > -	return intel_uncore_read_with_mcr_steering(engine->uncore, reg,
> > -						   slice, subslice);
> > -}
> > -
> >  /* NB: please notice the memset */
> >  void intel_engine_get_instdone(const struct intel_engine_cs *engine,
> >  			       struct intel_instdone *instdone)
> > @@ -1469,28 +1461,33 @@ void intel_engine_get_instdone(const struct intel_engine_cs *engine,
> >  		if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 50)) {
> >  			for_each_instdone_gslice_dss_xehp(i915, sseu, iter, slice, subslice) {
> >  				instdone->sampler[slice][subslice] =
> > -					read_subslice_reg(engine, slice, subslice,
> > -							  GEN7_SAMPLER_INSTDONE);
> > +					intel_gt_mcr_read(engine->gt,
> > +							  GEN7_SAMPLER_INSTDONE,
> > +							  slice, subslice);
> >  				instdone->row[slice][subslice] =
> > -					read_subslice_reg(engine, slice, subslice,
> > -							  GEN7_ROW_INSTDONE);
> > +					intel_gt_mcr_read(engine->gt,
> > +							  GEN7_ROW_INSTDONE,
> > +							  slice, subslice);
> >  			}
> >  		} else {
> >  			for_each_instdone_slice_subslice(i915, sseu, slice, subslice) {
> >  				instdone->sampler[slice][subslice] =
> > -					read_subslice_reg(engine, slice, subslice,
> > -							  GEN7_SAMPLER_INSTDONE);
> > +					intel_gt_mcr_read(engine->gt,
> > +							  GEN7_SAMPLER_INSTDONE,
> > +							  slice, subslice);
> >  				instdone->row[slice][subslice] =
> > -					read_subslice_reg(engine, slice, subslice,
> > -							  GEN7_ROW_INSTDONE);
> > +					intel_gt_mcr_read(engine->gt,
> > +							  GEN7_ROW_INSTDONE,
> > +							  slice, subslice);
> >  			}
> >  		}
> >  
> >  		if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 55)) {
> >  			for_each_instdone_gslice_dss_xehp(i915, sseu, iter, slice, subslice)
> >  				instdone->geom_svg[slice][subslice] =
> > -					read_subslice_reg(engine, slice, subslice,
> > -							  XEHPG_INSTDONE_GEOM_SVG);
> > +					intel_gt_mcr_read(engine->gt,
> > +							  XEHPG_INSTDONE_GEOM_SVG,
> > +							  slice, subslice);
> >  		}
> >  	} else if (GRAPHICS_VER(i915) >= 7) {
> >  		instdone->instdone =
> > diff --git a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
> > index ea07f2bb846f..dd53641f3637 100644
> > --- a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
> > +++ b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
> > @@ -65,7 +65,7 @@ static int steering_show(struct seq_file *m, void *data)
> >  	struct drm_printer p = drm_seq_file_printer(m);
> >  	struct intel_gt *gt = m->private;
> >  
> > -	intel_gt_report_steering(&p, gt, true);
> > +	intel_gt_mcr_report_steering(&p, gt, true);
> >  
> >  	return 0;
> >  }
> > diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> > index 1279a1fe1001..aa4fb308d468 100644
> > --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> > +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> > @@ -134,23 +134,22 @@ void intel_gt_mcr_init(struct intel_gt *gt)
> >  	}
> >  }
> >  
> > -/**
> > - * uncore_rw_with_mcr_steering_fw - Access a register after programming
> > - *				    the MCR selector register.
> > +/*
> > + * rw_with_mcr_steering_fw - Access a register with specific MCR steering
> >   * @uncore: pointer to struct intel_uncore
> >   * @reg: register being accessed
> >   * @rw_flag: FW_REG_READ for read access or FW_REG_WRITE for write access
> > - * @slice: slice number (ignored for multi-cast write)
> > - * @subslice: sub-slice number (ignored for multi-cast write)
> > + * @group: group number (documented as "sliceid" on older platforms)
> > + * @instance: instance number (documented as "subsliceid" on older platforms)
> >   * @value: register value to be written (ignored for read)
> >   *
> >   * Return: 0 for write access. register value for read access.
> >   *
> >   * Caller needs to make sure the relevant forcewake wells are up.
> >   */
> > -static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
> > -					  i915_reg_t reg, u8 rw_flag,
> > -					  int slice, int subslice, u32 value)
> > +static u32 rw_with_mcr_steering_fw(struct intel_uncore *uncore,
> > +				   i915_reg_t reg, u8 rw_flag,
> > +				   int group, int instance, u32 value)
> >  {
> >  	u32 mcr_mask, mcr_ss, mcr, old_mcr, val = 0;
> >  
> > @@ -158,7 +157,7 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
> >  
> >  	if (GRAPHICS_VER(uncore->i915) >= 11) {
> >  		mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
> > -		mcr_ss = GEN11_MCR_SLICE(slice) | GEN11_MCR_SUBSLICE(subslice);
> > +		mcr_ss = GEN11_MCR_SLICE(group) | GEN11_MCR_SUBSLICE(instance);
> >  
> >  		/*
> >  		 * Wa_22013088509
> > @@ -176,7 +175,7 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
> >  			mcr_mask |= GEN11_MCR_MULTICAST;
> >  	} else {
> >  		mcr_mask = GEN8_MCR_SLICE_MASK | GEN8_MCR_SUBSLICE_MASK;
> > -		mcr_ss = GEN8_MCR_SLICE(slice) | GEN8_MCR_SUBSLICE(subslice);
> > +		mcr_ss = GEN8_MCR_SLICE(group) | GEN8_MCR_SUBSLICE(instance);
> >  	}
> >  
> >  	old_mcr = mcr = intel_uncore_read_fw(uncore, GEN8_MCR_SELECTOR);
> > @@ -198,10 +197,10 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
> >  	return val;
> >  }
> >  
> > -static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
> > -				       i915_reg_t reg, u8 rw_flag,
> > -				       int slice, int subslice,
> > -				       u32 value)
> > +static u32 rw_with_mcr_steering(struct intel_uncore *uncore,
> > +				i915_reg_t reg, u8 rw_flag,
> > +				int group, int instance,
> > +				u32 value)
> >  {
> >  	enum forcewake_domains fw_domains;
> >  	u32 val;
> > @@ -215,8 +214,7 @@ static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
> >  	spin_lock_irq(&uncore->lock);
> >  	intel_uncore_forcewake_get__locked(uncore, fw_domains);
> >  
> > -	val = uncore_rw_with_mcr_steering_fw(uncore, reg, rw_flag,
> > -					     slice, subslice, value);
> > +	val = rw_with_mcr_steering_fw(uncore, reg, rw_flag, group, instance, value);
> >  
> >  	intel_uncore_forcewake_put__locked(uncore, fw_domains);
> >  	spin_unlock_irq(&uncore->lock);
> > @@ -224,31 +222,73 @@ static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
> >  	return val;
> >  }
> >  
> > -u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
> > -					   i915_reg_t reg, int slice, int subslice)
> > +/**
> > + * intel_gt_mcr_read - read a specific instance of an MCR register
> > + * @gt: GT structure
> > + * @reg: the MCR register to read
> > + * @group: the MCR group
> > + * @instance: the MCR instance
> > + *
> > + * Returns the value read from an MCR register after steering toward a specific
> > + * group/instance.
> > + */
> > +u32 intel_gt_mcr_read(struct intel_gt *gt,
> > +		      i915_reg_t reg,
> > +		      int group, int instance)
> >  {
> > -	return uncore_rw_with_mcr_steering_fw(uncore, reg, FW_REG_READ,
> > -					      slice, subslice, 0);
> > +	return rw_with_mcr_steering(gt->uncore, reg, FW_REG_READ, group, instance, 0);
> >  }
> >  
> > -u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
> > -					i915_reg_t reg, int slice, int subslice)
> > +/**
> > + * intel_gt_mcr_unicast_write - write a specific instance of an MCR register
> > + * @gt: GT structure
> > + * @reg: the MCR register to read
> to write
> > + * @value: value to write
> > + * @group: the MCR group
> > + * @instance: the MCR instance
> > + *
> > + * Write an MCR register in unicast mode after steering toward a specific
> > + * group/instance.
> > + */
> > +void intel_gt_mcr_unicast_write(struct intel_gt *gt, i915_reg_t reg, u32 value,
> > +				int group, int instance)
> >  {
> > -	return uncore_rw_with_mcr_steering(uncore, reg, FW_REG_READ,
> > -					   slice, subslice, 0);
> > +	rw_with_mcr_steering(gt->uncore, reg, FW_REG_WRITE, group, instance, value);
> >  }
> >  
> > -void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
> > -					  i915_reg_t reg, u32 value,
> > -					  int slice, int subslice)
> > +/**
> > + * intel_gt_mcr_multicast_write - write a value to all instances of an MCR register
> > + * @gt: GT structure
> > + * @reg: the MCR register to read
> to write
> > + * @value: value to write
> > + *
> > + * Write an MCR register in multicast mode to update all instances.
> > + */
> > +void intel_gt_mcr_multicast_write(struct intel_gt *gt,
> > +				i915_reg_t reg, u32 value)
> >  {
> > -	uncore_rw_with_mcr_steering(uncore, reg, FW_REG_WRITE,
> > -				    slice, subslice, value);
> > +	intel_uncore_write(gt->uncore, reg, value);
> >  }
> >  
> >  /**
> > - * intel_gt_reg_needs_read_steering - determine whether a register read
> > - *     requires explicit steering
> > + * intel_gt_mcr_multicast_write_fw - write a value to all instances of an MCR register
> > + * @gt: GT structure
> > + * @reg: the MCR register to read
> to write
> > + * @value: value to write
> > + *
> > + * Write an MCR register in multicast mode to update all instances.  This
> > + * function assumes the caller is already holding any necessary forcewake
> > + * domains; use intel_gt_mcr_multicast_write() in cases where forcewake should
> > + * be obtained automatically.
> > + */
> > +void intel_gt_mcr_multicast_write_fw(struct intel_gt *gt, i915_reg_t reg, u32 value)
> > +{
> > +	intel_uncore_write_fw(gt->uncore, reg, value);
> > +}
> > +
> > +/*
> > + * reg_needs_read_steering - determine whether a register read requires
> > + *     explicit steering
> >   * @gt: GT structure
> >   * @reg: the register to check steering requirements for
> >   * @type: type of multicast steering to check
> > @@ -260,14 +300,14 @@ void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
> >   * steering type, or if the default (subslice-based) steering IDs are suitable
> >   * for @type steering too.
> >   */
> > -static bool intel_gt_reg_needs_read_steering(struct intel_gt *gt,
> > -					     i915_reg_t reg,
> > -					     enum intel_steering_type type)
> > +static bool reg_needs_read_steering(struct intel_gt *gt,
> > +				    i915_reg_t reg,
> > +				    enum intel_steering_type type)
> >  {
> >  	const u32 offset = i915_mmio_reg_offset(reg);
> >  	const struct intel_mmio_range *entry;
> >  
> > -	if (likely(!intel_gt_needs_read_steering(gt, type)))
> > +	if (likely(!gt->steering_table[type]))
> >  		return false;
> >  
> >  	for (entry = gt->steering_table[type]; entry->end; entry++) {
> > @@ -278,29 +318,29 @@ static bool intel_gt_reg_needs_read_steering(struct intel_gt *gt,
> >  	return false;
> >  }
> >  
> > -/**
> > - * intel_gt_get_valid_steering - determines valid IDs for a class of MCR steering
> > +/*
> > + * get_nonterminated_steering - determines valid IDs for a class of MCR steering
> >   * @gt: GT structure
> >   * @type: multicast register type
> > - * @sliceid: Slice ID returned
> > - * @subsliceid: Subslice ID returned
> > + * @group: Group ID returned
> > + * @instance: Instance ID returned
> >   *
> > - * Determines sliceid and subsliceid values that will steer reads
> > - * of a specific multicast register class to a valid value.
> > + * Determines group and instance values that will steer reads of the specified
> > + * MCR class to a non-terminated instance.
> >   */
> > -static void intel_gt_get_valid_steering(struct intel_gt *gt,
> > -					enum intel_steering_type type,
> > -					u8 *sliceid, u8 *subsliceid)
> > +static void get_nonterminated_steering(struct intel_gt *gt,
> > +				       enum intel_steering_type type,
> > +				       u8 *group, u8 *instance)
> >  {
> >  	switch (type) {
> >  	case L3BANK:
> > -		*sliceid = 0;		/* unused */
> > -		*subsliceid = __ffs(gt->info.l3bank_mask);
> > +		*group = 0;		/* unused */
> > +		*instance = __ffs(gt->info.l3bank_mask);
> >  		break;
> >  	case MSLICE:
> >  		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
> > -		*sliceid = __ffs(gt->info.mslice_mask);
> > -		*subsliceid = 0;	/* unused */
> > +		*group = __ffs(gt->info.mslice_mask);
> > +		*instance = 0;	/* unused */
> >  		break;
> >  	case LNCF:
> >  		/*
> > @@ -308,96 +348,105 @@ static void intel_gt_get_valid_steering(struct intel_gt *gt,
> >  		 * can safely just steer to LNCF 0 in all cases.
> >  		 */
> >  		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
> > -		*sliceid = __ffs(gt->info.mslice_mask) << 1;
> > -		*subsliceid = 0;	/* unused */
> > +		*group = __ffs(gt->info.mslice_mask) << 1;
> > +		*instance = 0;	/* unused */
> >  		break;
> >  	case INSTANCE0:
> >  		/*
> >  		 * There are a lot of MCR types for which instance (0, 0)
> >  		 * will always provide a non-terminated value.
> >  		 */
> > -		*sliceid = 0;
> > -		*subsliceid = 0;
> > +		*group = 0;
> > +		*instance = 0;
> >  		break;
> >  	default:
> >  		MISSING_CASE(type);
> > -		*sliceid = 0;
> > -		*subsliceid = 0;
> > +		*group = 0;
> > +		*instance = 0;
> >  	}
> >  }
> >  
> >  /**
> > - * intel_gt_get_valid_steering_for_reg - get a valid steering for a register
> > + * intel_gt_mcr_get_nonterminated_steering - find group/instance values that
> > + *    will steer a register to a non-terminated instance
> >   * @gt: GT structure
> >   * @reg: register for which the steering is required
> > - * @sliceid: return variable for slice steering
> > - * @subsliceid: return variable for subslice steering
> > + * @group: return variable for group steering
> > + * @instance: return variable for instance steering
> >   *
> > - * This function returns a slice/subslice pair that is guaranteed to work for
> > + * This function returns a group/instance pair that is guaranteed to work for
> >   * read steering of the given register. Note that a value will be returned even
> >   * if the register is not replicated and therefore does not actually require
> >   * steering.
> >   */
> > -void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
> > -					 u8 *sliceid, u8 *subsliceid)
> > +void intel_gt_mcr_get_nonterminated_steering(struct intel_gt *gt,
> > +					     i915_reg_t reg,
> > +					     u8 *group, u8 *instance)
> >  {
> >  	int type;
> >  
> >  	for (type = 0; type < NUM_STEERING_TYPES; type++) {
> > -		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
> > -			intel_gt_get_valid_steering(gt, type, sliceid,
> > -						    subsliceid);
> > +		if (reg_needs_read_steering(gt, reg, type)) {
> > +			get_nonterminated_steering(gt, type, group, instance);
> >  			return;
> >  		}
> >  	}
> >  
> > -	*sliceid = gt->default_steering.groupid;
> > -	*subsliceid = gt->default_steering.instanceid;
> > +	*group = gt->default_steering.groupid;
> > +	*instance = gt->default_steering.instanceid;
> >  }
> >  
> >  /**
> > - * intel_gt_read_register_fw - reads a GT register with support for multicast
> > + * intel_gt_mcr_read_any_fw - reads one instance of an MCR register
> >   * @gt: GT structure
> >   * @reg: register to read
> >   *
> > - * This function will read a GT register.  If the register is a multicast
> > - * register, the read will be steered to a valid instance (i.e., one that
> > - * isn't fused off or powered down by power gating).
> > + * Reads a GT MCR register.  The read will be steered to a non-terminated
> > + * instance (i.e., one that isn't fused off or powered down by power gating).
> > + * This function assumes the caller is already holding any necessary forcewake
> > + * domains; use intel_gt_mcr_read_any() in cases where forcewake should be
> > + * obtained automatically.
> >   *
> > - * Returns the value from a valid instance of @reg.
> > + * Returns the value from a non-terminated instance of @reg.
> >   */
> > -u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg)
> > +u32 intel_gt_mcr_read_any_fw(struct intel_gt *gt, i915_reg_t reg)
> >  {
> >  	int type;
> > -	u8 sliceid, subsliceid;
> > +	u8 group, instance;
> >  
> >  	for (type = 0; type < NUM_STEERING_TYPES; type++) {
> > -		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
> > -			intel_gt_get_valid_steering(gt, type, &sliceid,
> > -						    &subsliceid);
> > -			return intel_uncore_read_with_mcr_steering_fw(gt->uncore,
> > -								      reg,
> > -								      sliceid,
> > -								      subsliceid);
> > +		if (reg_needs_read_steering(gt, reg, type)) {
> > +			get_nonterminated_steering(gt, type, &group, &instance);
> > +			return rw_with_mcr_steering_fw(gt->uncore, reg,
> > +						       FW_REG_READ,
> > +						       group, instance, 0);
> >  		}
> >  	}
> >  
> >  	return intel_uncore_read_fw(gt->uncore, reg);
> >  }
> >  
> > -u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg)
> > +/**
> > + * intel_gt_mcr_read_any - reads one instance of an MCR register
> > + * @gt: GT structure
> > + * @reg: register to read
> > + *
> > + * Reads a GT MCR register.  The read will be steered to a non-terminated
> > + * instance (i.e., one that isn't fused off or powered down by power gating).
> > + *
> > + * Returns the value from a non-terminated instance of @reg.
> > + */
> > +u32 intel_gt_mcr_read_any(struct intel_gt *gt, i915_reg_t reg)
> >  {
> >  	int type;
> > -	u8 sliceid, subsliceid;
> > +	u8 group, instance;
> >  
> >  	for (type = 0; type < NUM_STEERING_TYPES; type++) {
> > -		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
> > -			intel_gt_get_valid_steering(gt, type, &sliceid,
> > -						    &subsliceid);
> > -			return intel_uncore_read_with_mcr_steering(gt->uncore,
> > -								   reg,
> > -								   sliceid,
> > -								   subsliceid);
> > +		if (reg_needs_read_steering(gt, reg, type)) {
> > +			get_nonterminated_steering(gt, type, &group, &instance);
> > +			return rw_with_mcr_steering(gt->uncore, reg,
> > +						    FW_REG_READ,
> > +						    group, instance, 0);
> >  		}
> >  	}
> >  
> > @@ -410,7 +459,7 @@ static void report_steering_type(struct drm_printer *p,
> >  				 bool dump_table)
> >  {
> >  	const struct intel_mmio_range *entry;
> > -	u8 slice, subslice;
> > +	u8 group, instance;
> >  
> >  	BUILD_BUG_ON(ARRAY_SIZE(intel_steering_types) != NUM_STEERING_TYPES);
> >  
> > @@ -420,9 +469,9 @@ static void report_steering_type(struct drm_printer *p,
> >  		return;
> >  	}
> >  
> > -	intel_gt_get_valid_steering(gt, type, &slice, &subslice);
> > -	drm_printf(p, "%s steering: sliceid=0x%x, subsliceid=0x%x\n",
> > -		   intel_steering_types[type], slice, subslice);
> > +	get_nonterminated_steering(gt, type, &group, &instance);
> > +	drm_printf(p, "%s steering: group=0x%x, instance=0x%x\n",
> > +		   intel_steering_types[type], group, instance);
> >  
> >  	if (!dump_table)
> >  		return;
> > @@ -431,10 +480,10 @@ static void report_steering_type(struct drm_printer *p,
> >  		drm_printf(p, "\t0x%06x - 0x%06x\n", entry->start, entry->end);
> >  }
> >  
> > -void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
> > -			      bool dump_table)
> > +void intel_gt_mcr_report_steering(struct drm_printer *p, struct intel_gt *gt,
> > +				  bool dump_table)
> >  {
> > -	drm_printf(p, "Default steering: sliceid=0x%x, subsliceid=0x%x\n",
> > +	drm_printf(p, "Default steering: group=0x%x, instance=0x%x\n",
> >  		   gt->default_steering.groupid,
> >  		   gt->default_steering.instanceid);
> >  
> > diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.h b/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
> > index b570c1571243..506b0cbc8db3 100644
> > --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
> > +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
> > @@ -10,28 +10,25 @@
> >  
> >  void intel_gt_mcr_init(struct intel_gt *gt);
> >  
> > -u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
> > -					   i915_reg_t reg,
> > -					   int slice, int subslice);
> > -u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
> > -					i915_reg_t reg,	int slice, int subslice);
> > -void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
> > -					  i915_reg_t reg, u32 value,
> > -					  int slice, int subslice);
> > -
> > -u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg);
> > -u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg);
> > -
> > -static inline bool intel_gt_needs_read_steering(struct intel_gt *gt,
> > -						enum intel_steering_type type)
> > -{
> > -	return gt->steering_table[type];
> > -}
> > -
> > -void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
> > -					 u8 *sliceid, u8 *subsliceid);
> > -
> > -void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
> > -			      bool dump_table);
> > +u32 intel_gt_mcr_read(struct intel_gt *gt,
> > +		      i915_reg_t reg,
> > +		      int group, int instance);
> > +u32 intel_gt_mcr_read_any_fw(struct intel_gt *gt, i915_reg_t reg);
> > +u32 intel_gt_mcr_read_any(struct intel_gt *gt, i915_reg_t reg);
> > +
> > +void intel_gt_mcr_unicast_write(struct intel_gt *gt,
> > +				i915_reg_t reg, u32 value,
> > +				int group, int instance);
> > +void intel_gt_mcr_multicast_write(struct intel_gt *gt,
> > +				  i915_reg_t reg, u32 value);
> > +void intel_gt_mcr_multicast_write_fw(struct intel_gt *gt,
> > +				     i915_reg_t reg, u32 value);
> > +
> > +void intel_gt_mcr_get_nonterminated_steering(struct intel_gt *gt,
> > +					     i915_reg_t reg,
> > +					     u8 *group, u8 *instance);
> > +
> > +void intel_gt_mcr_report_steering(struct drm_printer *p, struct intel_gt *gt,
> > +				  bool dump_table);
> >  
> >  #endif /* __INTEL_GT_MCR__ */
> > diff --git a/drivers/gpu/drm/i915/gt/intel_region_lmem.c b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
> > index 1f4e7237a924..2ff448047020 100644
> > --- a/drivers/gpu/drm/i915/gt/intel_region_lmem.c
> > +++ b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
> > @@ -105,11 +105,11 @@ static struct intel_memory_region *setup_lmem(struct intel_gt *gt)
> >  		resource_size_t lmem_range;
> >  		u64 tile_stolen, flat_ccs_base;
> >  
> > -		lmem_range = intel_gt_read_register(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
> > +		lmem_range = intel_gt_mcr_read_any(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
> >  		lmem_size = lmem_range >> XEHPSDV_TILE_LMEM_RANGE_SHIFT;
> >  		lmem_size *= SZ_1G;
> >  
> > -		flat_ccs_base = intel_gt_read_register(gt, XEHPSDV_FLAT_CCS_BASE_ADDR);
> > +		flat_ccs_base = intel_gt_mcr_read_any(gt, XEHPSDV_FLAT_CCS_BASE_ADDR);
> >  		flat_ccs_base = (flat_ccs_base >> XEHPSDV_CCS_BASE_SHIFT) * SZ_64K;
> >  
> >  		/* FIXME: Remove this when we have small-bar enabled */
> > diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> > index 97d7f30b1229..e42fbb982bb3 100644
> > --- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
> > +++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> > @@ -1083,7 +1083,7 @@ static void __add_mcr_wa(struct intel_gt *gt, struct i915_wa_list *wal,
> >  	gt->default_steering.instanceid = subslice;
> >  
> >  	if (drm_debug_enabled(DRM_UT_DRIVER))
> > -		intel_gt_report_steering(&p, gt, false);
> > +		intel_gt_mcr_report_steering(&p, gt, false);
> >  }
> >  
> >  static void
> > @@ -1624,13 +1624,13 @@ wa_list_apply(struct intel_gt *gt, const struct i915_wa_list *wal)
> >  		u32 val, old = 0;
> >  
> >  		/* open-coded rmw due to steering */
> > -		old = wa->clr ? intel_gt_read_register_fw(gt, wa->reg) : 0;
> > +		old = wa->clr ? intel_gt_mcr_read_any_fw(gt, wa->reg) : 0;
> >  		val = (old & ~wa->clr) | wa->set;
> >  		if (val != old || !wa->clr)
> >  			intel_uncore_write_fw(uncore, wa->reg, val);
> >  
> >  		if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
> > -			wa_verify(wa, intel_gt_read_register_fw(gt, wa->reg),
> > +			wa_verify(wa, intel_gt_mcr_read_any_fw(gt, wa->reg),
> >  				  wal->name, "application");
> >  	}
> >  
> > @@ -1661,7 +1661,7 @@ static bool wa_list_verify(struct intel_gt *gt,
> >  
> >  	for (i = 0, wa = wal->list; i < wal->count; i++, wa++)
> >  		ok &= wa_verify(wa,
> > -				intel_gt_read_register_fw(gt, wa->reg),
> > +				intel_gt_mcr_read_any_fw(gt, wa->reg),
> >  				wal->name, from);
> >  
> >  	intel_uncore_forcewake_put__locked(uncore, fw);
> > diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> > index dea138d78111..ba7541f3ca61 100644
> > --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> > +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> > @@ -314,7 +314,7 @@ static long __must_check guc_mmio_reg_add(struct intel_gt *gt,
> >  	 * tracking, it is easier to just program the default steering for all
> >  	 * regs that don't need a non-default one.
> >  	 */
> > -	intel_gt_get_valid_steering_for_reg(gt, reg, &group, &inst);
> > +	intel_gt_mcr_get_nonterminated_steering(gt, reg, &group, &inst);
> >  	entry.flags |= GUC_REGSET_STEERING(group, inst);
> >  
> >  	slot = __mmio_reg_add(regset, &entry);
> With the above minor fixes to comments
> 
> Reviewed-by: Harish Chegondi <harish.chegondi@intel.com>

Comment copy/paste errors fixed and pushed to drm-intel-gt-next.  Thanks
for the review.


Matt


> > -- 
> > 2.35.3
> > 

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

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

* Re: [Intel-gfx] [PATCH v2 2/2] drm/i915/gt: Cleanup interface for MCR operations
@ 2022-06-17 15:10       ` Matt Roper
  0 siblings, 0 replies; 19+ messages in thread
From: Matt Roper @ 2022-06-17 15:10 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-gfx, dri-devel

On Fri, Jun 17, 2022 at 06:57:20AM -0700, Harish Chegondi wrote:
> On Tue, Jun 14, 2022 at 05:10:19PM -0700, Matt Roper wrote:
> > Let's replace the assortment of intel_gt_* and intel_uncore_* functions
> > that operate on MCR registers with a cleaner set of interfaces:
> > 
> >   * intel_gt_mcr_read -- unicast read from specific instance
> >   * intel_gt_mcr_read_any[_fw] -- unicast read from any non-terminated
> >     instance
> >   * intel_gt_mcr_unicast_write -- unicast write to specific instance
> >   * intel_gt_mcr_multicast_write[_fw] -- multicast write to all instances
> > 
> > We'll also replace the historic "slice" and "subslice" terminology with
> > "group" and "instance" to match the documentation for more recent
> > platforms; these days MCR steering applies to more types of replication
> > than just slice/subslice.
> > 
> > v2:
> >  - Reference the new kerneldoc from i915.rst.  (Jani)
> >  - Tweak the wording of the documentation for a couple functions to
> >    clarify the difference between "_fw" and non-"_fw" forms.
> > 
> > Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
> > Acked-by: Jani Nikula <jani.nikula@linux.intel.com>
> > ---
> >  Documentation/gpu/i915.rst                  |  12 +
> >  drivers/gpu/drm/i915/gem/i915_gem_stolen.c  |   2 +-
> >  drivers/gpu/drm/i915/gt/intel_engine_cs.c   |  33 ++-
> >  drivers/gpu/drm/i915/gt/intel_gt_debugfs.c  |   2 +-
> >  drivers/gpu/drm/i915/gt/intel_gt_mcr.c      | 239 ++++++++++++--------
> >  drivers/gpu/drm/i915/gt/intel_gt_mcr.h      |  43 ++--
> >  drivers/gpu/drm/i915/gt/intel_region_lmem.c |   4 +-
> >  drivers/gpu/drm/i915/gt/intel_workarounds.c |   8 +-
> >  drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c  |   2 +-
> >  9 files changed, 200 insertions(+), 145 deletions(-)
> > 
> > diff --git a/Documentation/gpu/i915.rst b/Documentation/gpu/i915.rst
> > index 54060cd6c419..4e59db1cfb00 100644
> > --- a/Documentation/gpu/i915.rst
> > +++ b/Documentation/gpu/i915.rst
> > @@ -246,6 +246,18 @@ Display State Buffer
> >  .. kernel-doc:: drivers/gpu/drm/i915/display/intel_dsb.c
> >     :internal:
> >  
> > +GT Programming
> > +==============
> > +
> > +Multicast/Replicated (MCR) Registers
> > +------------------------------------
> > +
> > +.. kernel-doc:: drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> > +   :doc: GT Multicast/Replicated (MCR) Register Support
> > +
> > +.. kernel-doc:: drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> > +   :internal:
> > +
> >  Memory Management and Command Submission
> >  ========================================
> >  
> > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
> > index da30503d3ca2..fa54823d1219 100644
> > --- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
> > +++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
> > @@ -835,7 +835,7 @@ i915_gem_stolen_lmem_setup(struct drm_i915_private *i915, u16 type,
> >  	} else {
> >  		resource_size_t lmem_range;
> >  
> > -		lmem_range = intel_gt_read_register(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
> > +		lmem_range = intel_gt_mcr_read_any(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
> >  		lmem_size = lmem_range >> XEHPSDV_TILE_LMEM_RANGE_SHIFT;
> >  		lmem_size *= SZ_1G;
> >  	}
> > diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> > index 244af1bdb7db..136cc44c3deb 100644
> > --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> > +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> > @@ -1428,14 +1428,6 @@ void intel_engine_cancel_stop_cs(struct intel_engine_cs *engine)
> >  	ENGINE_WRITE_FW(engine, RING_MI_MODE, _MASKED_BIT_DISABLE(STOP_RING));
> >  }
> >  
> > -static u32
> > -read_subslice_reg(const struct intel_engine_cs *engine,
> > -		  int slice, int subslice, i915_reg_t reg)
> > -{
> > -	return intel_uncore_read_with_mcr_steering(engine->uncore, reg,
> > -						   slice, subslice);
> > -}
> > -
> >  /* NB: please notice the memset */
> >  void intel_engine_get_instdone(const struct intel_engine_cs *engine,
> >  			       struct intel_instdone *instdone)
> > @@ -1469,28 +1461,33 @@ void intel_engine_get_instdone(const struct intel_engine_cs *engine,
> >  		if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 50)) {
> >  			for_each_instdone_gslice_dss_xehp(i915, sseu, iter, slice, subslice) {
> >  				instdone->sampler[slice][subslice] =
> > -					read_subslice_reg(engine, slice, subslice,
> > -							  GEN7_SAMPLER_INSTDONE);
> > +					intel_gt_mcr_read(engine->gt,
> > +							  GEN7_SAMPLER_INSTDONE,
> > +							  slice, subslice);
> >  				instdone->row[slice][subslice] =
> > -					read_subslice_reg(engine, slice, subslice,
> > -							  GEN7_ROW_INSTDONE);
> > +					intel_gt_mcr_read(engine->gt,
> > +							  GEN7_ROW_INSTDONE,
> > +							  slice, subslice);
> >  			}
> >  		} else {
> >  			for_each_instdone_slice_subslice(i915, sseu, slice, subslice) {
> >  				instdone->sampler[slice][subslice] =
> > -					read_subslice_reg(engine, slice, subslice,
> > -							  GEN7_SAMPLER_INSTDONE);
> > +					intel_gt_mcr_read(engine->gt,
> > +							  GEN7_SAMPLER_INSTDONE,
> > +							  slice, subslice);
> >  				instdone->row[slice][subslice] =
> > -					read_subslice_reg(engine, slice, subslice,
> > -							  GEN7_ROW_INSTDONE);
> > +					intel_gt_mcr_read(engine->gt,
> > +							  GEN7_ROW_INSTDONE,
> > +							  slice, subslice);
> >  			}
> >  		}
> >  
> >  		if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 55)) {
> >  			for_each_instdone_gslice_dss_xehp(i915, sseu, iter, slice, subslice)
> >  				instdone->geom_svg[slice][subslice] =
> > -					read_subslice_reg(engine, slice, subslice,
> > -							  XEHPG_INSTDONE_GEOM_SVG);
> > +					intel_gt_mcr_read(engine->gt,
> > +							  XEHPG_INSTDONE_GEOM_SVG,
> > +							  slice, subslice);
> >  		}
> >  	} else if (GRAPHICS_VER(i915) >= 7) {
> >  		instdone->instdone =
> > diff --git a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
> > index ea07f2bb846f..dd53641f3637 100644
> > --- a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
> > +++ b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
> > @@ -65,7 +65,7 @@ static int steering_show(struct seq_file *m, void *data)
> >  	struct drm_printer p = drm_seq_file_printer(m);
> >  	struct intel_gt *gt = m->private;
> >  
> > -	intel_gt_report_steering(&p, gt, true);
> > +	intel_gt_mcr_report_steering(&p, gt, true);
> >  
> >  	return 0;
> >  }
> > diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> > index 1279a1fe1001..aa4fb308d468 100644
> > --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> > +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> > @@ -134,23 +134,22 @@ void intel_gt_mcr_init(struct intel_gt *gt)
> >  	}
> >  }
> >  
> > -/**
> > - * uncore_rw_with_mcr_steering_fw - Access a register after programming
> > - *				    the MCR selector register.
> > +/*
> > + * rw_with_mcr_steering_fw - Access a register with specific MCR steering
> >   * @uncore: pointer to struct intel_uncore
> >   * @reg: register being accessed
> >   * @rw_flag: FW_REG_READ for read access or FW_REG_WRITE for write access
> > - * @slice: slice number (ignored for multi-cast write)
> > - * @subslice: sub-slice number (ignored for multi-cast write)
> > + * @group: group number (documented as "sliceid" on older platforms)
> > + * @instance: instance number (documented as "subsliceid" on older platforms)
> >   * @value: register value to be written (ignored for read)
> >   *
> >   * Return: 0 for write access. register value for read access.
> >   *
> >   * Caller needs to make sure the relevant forcewake wells are up.
> >   */
> > -static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
> > -					  i915_reg_t reg, u8 rw_flag,
> > -					  int slice, int subslice, u32 value)
> > +static u32 rw_with_mcr_steering_fw(struct intel_uncore *uncore,
> > +				   i915_reg_t reg, u8 rw_flag,
> > +				   int group, int instance, u32 value)
> >  {
> >  	u32 mcr_mask, mcr_ss, mcr, old_mcr, val = 0;
> >  
> > @@ -158,7 +157,7 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
> >  
> >  	if (GRAPHICS_VER(uncore->i915) >= 11) {
> >  		mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
> > -		mcr_ss = GEN11_MCR_SLICE(slice) | GEN11_MCR_SUBSLICE(subslice);
> > +		mcr_ss = GEN11_MCR_SLICE(group) | GEN11_MCR_SUBSLICE(instance);
> >  
> >  		/*
> >  		 * Wa_22013088509
> > @@ -176,7 +175,7 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
> >  			mcr_mask |= GEN11_MCR_MULTICAST;
> >  	} else {
> >  		mcr_mask = GEN8_MCR_SLICE_MASK | GEN8_MCR_SUBSLICE_MASK;
> > -		mcr_ss = GEN8_MCR_SLICE(slice) | GEN8_MCR_SUBSLICE(subslice);
> > +		mcr_ss = GEN8_MCR_SLICE(group) | GEN8_MCR_SUBSLICE(instance);
> >  	}
> >  
> >  	old_mcr = mcr = intel_uncore_read_fw(uncore, GEN8_MCR_SELECTOR);
> > @@ -198,10 +197,10 @@ static u32 uncore_rw_with_mcr_steering_fw(struct intel_uncore *uncore,
> >  	return val;
> >  }
> >  
> > -static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
> > -				       i915_reg_t reg, u8 rw_flag,
> > -				       int slice, int subslice,
> > -				       u32 value)
> > +static u32 rw_with_mcr_steering(struct intel_uncore *uncore,
> > +				i915_reg_t reg, u8 rw_flag,
> > +				int group, int instance,
> > +				u32 value)
> >  {
> >  	enum forcewake_domains fw_domains;
> >  	u32 val;
> > @@ -215,8 +214,7 @@ static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
> >  	spin_lock_irq(&uncore->lock);
> >  	intel_uncore_forcewake_get__locked(uncore, fw_domains);
> >  
> > -	val = uncore_rw_with_mcr_steering_fw(uncore, reg, rw_flag,
> > -					     slice, subslice, value);
> > +	val = rw_with_mcr_steering_fw(uncore, reg, rw_flag, group, instance, value);
> >  
> >  	intel_uncore_forcewake_put__locked(uncore, fw_domains);
> >  	spin_unlock_irq(&uncore->lock);
> > @@ -224,31 +222,73 @@ static u32 uncore_rw_with_mcr_steering(struct intel_uncore *uncore,
> >  	return val;
> >  }
> >  
> > -u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
> > -					   i915_reg_t reg, int slice, int subslice)
> > +/**
> > + * intel_gt_mcr_read - read a specific instance of an MCR register
> > + * @gt: GT structure
> > + * @reg: the MCR register to read
> > + * @group: the MCR group
> > + * @instance: the MCR instance
> > + *
> > + * Returns the value read from an MCR register after steering toward a specific
> > + * group/instance.
> > + */
> > +u32 intel_gt_mcr_read(struct intel_gt *gt,
> > +		      i915_reg_t reg,
> > +		      int group, int instance)
> >  {
> > -	return uncore_rw_with_mcr_steering_fw(uncore, reg, FW_REG_READ,
> > -					      slice, subslice, 0);
> > +	return rw_with_mcr_steering(gt->uncore, reg, FW_REG_READ, group, instance, 0);
> >  }
> >  
> > -u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
> > -					i915_reg_t reg, int slice, int subslice)
> > +/**
> > + * intel_gt_mcr_unicast_write - write a specific instance of an MCR register
> > + * @gt: GT structure
> > + * @reg: the MCR register to read
> to write
> > + * @value: value to write
> > + * @group: the MCR group
> > + * @instance: the MCR instance
> > + *
> > + * Write an MCR register in unicast mode after steering toward a specific
> > + * group/instance.
> > + */
> > +void intel_gt_mcr_unicast_write(struct intel_gt *gt, i915_reg_t reg, u32 value,
> > +				int group, int instance)
> >  {
> > -	return uncore_rw_with_mcr_steering(uncore, reg, FW_REG_READ,
> > -					   slice, subslice, 0);
> > +	rw_with_mcr_steering(gt->uncore, reg, FW_REG_WRITE, group, instance, value);
> >  }
> >  
> > -void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
> > -					  i915_reg_t reg, u32 value,
> > -					  int slice, int subslice)
> > +/**
> > + * intel_gt_mcr_multicast_write - write a value to all instances of an MCR register
> > + * @gt: GT structure
> > + * @reg: the MCR register to read
> to write
> > + * @value: value to write
> > + *
> > + * Write an MCR register in multicast mode to update all instances.
> > + */
> > +void intel_gt_mcr_multicast_write(struct intel_gt *gt,
> > +				i915_reg_t reg, u32 value)
> >  {
> > -	uncore_rw_with_mcr_steering(uncore, reg, FW_REG_WRITE,
> > -				    slice, subslice, value);
> > +	intel_uncore_write(gt->uncore, reg, value);
> >  }
> >  
> >  /**
> > - * intel_gt_reg_needs_read_steering - determine whether a register read
> > - *     requires explicit steering
> > + * intel_gt_mcr_multicast_write_fw - write a value to all instances of an MCR register
> > + * @gt: GT structure
> > + * @reg: the MCR register to read
> to write
> > + * @value: value to write
> > + *
> > + * Write an MCR register in multicast mode to update all instances.  This
> > + * function assumes the caller is already holding any necessary forcewake
> > + * domains; use intel_gt_mcr_multicast_write() in cases where forcewake should
> > + * be obtained automatically.
> > + */
> > +void intel_gt_mcr_multicast_write_fw(struct intel_gt *gt, i915_reg_t reg, u32 value)
> > +{
> > +	intel_uncore_write_fw(gt->uncore, reg, value);
> > +}
> > +
> > +/*
> > + * reg_needs_read_steering - determine whether a register read requires
> > + *     explicit steering
> >   * @gt: GT structure
> >   * @reg: the register to check steering requirements for
> >   * @type: type of multicast steering to check
> > @@ -260,14 +300,14 @@ void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
> >   * steering type, or if the default (subslice-based) steering IDs are suitable
> >   * for @type steering too.
> >   */
> > -static bool intel_gt_reg_needs_read_steering(struct intel_gt *gt,
> > -					     i915_reg_t reg,
> > -					     enum intel_steering_type type)
> > +static bool reg_needs_read_steering(struct intel_gt *gt,
> > +				    i915_reg_t reg,
> > +				    enum intel_steering_type type)
> >  {
> >  	const u32 offset = i915_mmio_reg_offset(reg);
> >  	const struct intel_mmio_range *entry;
> >  
> > -	if (likely(!intel_gt_needs_read_steering(gt, type)))
> > +	if (likely(!gt->steering_table[type]))
> >  		return false;
> >  
> >  	for (entry = gt->steering_table[type]; entry->end; entry++) {
> > @@ -278,29 +318,29 @@ static bool intel_gt_reg_needs_read_steering(struct intel_gt *gt,
> >  	return false;
> >  }
> >  
> > -/**
> > - * intel_gt_get_valid_steering - determines valid IDs for a class of MCR steering
> > +/*
> > + * get_nonterminated_steering - determines valid IDs for a class of MCR steering
> >   * @gt: GT structure
> >   * @type: multicast register type
> > - * @sliceid: Slice ID returned
> > - * @subsliceid: Subslice ID returned
> > + * @group: Group ID returned
> > + * @instance: Instance ID returned
> >   *
> > - * Determines sliceid and subsliceid values that will steer reads
> > - * of a specific multicast register class to a valid value.
> > + * Determines group and instance values that will steer reads of the specified
> > + * MCR class to a non-terminated instance.
> >   */
> > -static void intel_gt_get_valid_steering(struct intel_gt *gt,
> > -					enum intel_steering_type type,
> > -					u8 *sliceid, u8 *subsliceid)
> > +static void get_nonterminated_steering(struct intel_gt *gt,
> > +				       enum intel_steering_type type,
> > +				       u8 *group, u8 *instance)
> >  {
> >  	switch (type) {
> >  	case L3BANK:
> > -		*sliceid = 0;		/* unused */
> > -		*subsliceid = __ffs(gt->info.l3bank_mask);
> > +		*group = 0;		/* unused */
> > +		*instance = __ffs(gt->info.l3bank_mask);
> >  		break;
> >  	case MSLICE:
> >  		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
> > -		*sliceid = __ffs(gt->info.mslice_mask);
> > -		*subsliceid = 0;	/* unused */
> > +		*group = __ffs(gt->info.mslice_mask);
> > +		*instance = 0;	/* unused */
> >  		break;
> >  	case LNCF:
> >  		/*
> > @@ -308,96 +348,105 @@ static void intel_gt_get_valid_steering(struct intel_gt *gt,
> >  		 * can safely just steer to LNCF 0 in all cases.
> >  		 */
> >  		GEM_WARN_ON(!HAS_MSLICE_STEERING(gt->i915));
> > -		*sliceid = __ffs(gt->info.mslice_mask) << 1;
> > -		*subsliceid = 0;	/* unused */
> > +		*group = __ffs(gt->info.mslice_mask) << 1;
> > +		*instance = 0;	/* unused */
> >  		break;
> >  	case INSTANCE0:
> >  		/*
> >  		 * There are a lot of MCR types for which instance (0, 0)
> >  		 * will always provide a non-terminated value.
> >  		 */
> > -		*sliceid = 0;
> > -		*subsliceid = 0;
> > +		*group = 0;
> > +		*instance = 0;
> >  		break;
> >  	default:
> >  		MISSING_CASE(type);
> > -		*sliceid = 0;
> > -		*subsliceid = 0;
> > +		*group = 0;
> > +		*instance = 0;
> >  	}
> >  }
> >  
> >  /**
> > - * intel_gt_get_valid_steering_for_reg - get a valid steering for a register
> > + * intel_gt_mcr_get_nonterminated_steering - find group/instance values that
> > + *    will steer a register to a non-terminated instance
> >   * @gt: GT structure
> >   * @reg: register for which the steering is required
> > - * @sliceid: return variable for slice steering
> > - * @subsliceid: return variable for subslice steering
> > + * @group: return variable for group steering
> > + * @instance: return variable for instance steering
> >   *
> > - * This function returns a slice/subslice pair that is guaranteed to work for
> > + * This function returns a group/instance pair that is guaranteed to work for
> >   * read steering of the given register. Note that a value will be returned even
> >   * if the register is not replicated and therefore does not actually require
> >   * steering.
> >   */
> > -void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
> > -					 u8 *sliceid, u8 *subsliceid)
> > +void intel_gt_mcr_get_nonterminated_steering(struct intel_gt *gt,
> > +					     i915_reg_t reg,
> > +					     u8 *group, u8 *instance)
> >  {
> >  	int type;
> >  
> >  	for (type = 0; type < NUM_STEERING_TYPES; type++) {
> > -		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
> > -			intel_gt_get_valid_steering(gt, type, sliceid,
> > -						    subsliceid);
> > +		if (reg_needs_read_steering(gt, reg, type)) {
> > +			get_nonterminated_steering(gt, type, group, instance);
> >  			return;
> >  		}
> >  	}
> >  
> > -	*sliceid = gt->default_steering.groupid;
> > -	*subsliceid = gt->default_steering.instanceid;
> > +	*group = gt->default_steering.groupid;
> > +	*instance = gt->default_steering.instanceid;
> >  }
> >  
> >  /**
> > - * intel_gt_read_register_fw - reads a GT register with support for multicast
> > + * intel_gt_mcr_read_any_fw - reads one instance of an MCR register
> >   * @gt: GT structure
> >   * @reg: register to read
> >   *
> > - * This function will read a GT register.  If the register is a multicast
> > - * register, the read will be steered to a valid instance (i.e., one that
> > - * isn't fused off or powered down by power gating).
> > + * Reads a GT MCR register.  The read will be steered to a non-terminated
> > + * instance (i.e., one that isn't fused off or powered down by power gating).
> > + * This function assumes the caller is already holding any necessary forcewake
> > + * domains; use intel_gt_mcr_read_any() in cases where forcewake should be
> > + * obtained automatically.
> >   *
> > - * Returns the value from a valid instance of @reg.
> > + * Returns the value from a non-terminated instance of @reg.
> >   */
> > -u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg)
> > +u32 intel_gt_mcr_read_any_fw(struct intel_gt *gt, i915_reg_t reg)
> >  {
> >  	int type;
> > -	u8 sliceid, subsliceid;
> > +	u8 group, instance;
> >  
> >  	for (type = 0; type < NUM_STEERING_TYPES; type++) {
> > -		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
> > -			intel_gt_get_valid_steering(gt, type, &sliceid,
> > -						    &subsliceid);
> > -			return intel_uncore_read_with_mcr_steering_fw(gt->uncore,
> > -								      reg,
> > -								      sliceid,
> > -								      subsliceid);
> > +		if (reg_needs_read_steering(gt, reg, type)) {
> > +			get_nonterminated_steering(gt, type, &group, &instance);
> > +			return rw_with_mcr_steering_fw(gt->uncore, reg,
> > +						       FW_REG_READ,
> > +						       group, instance, 0);
> >  		}
> >  	}
> >  
> >  	return intel_uncore_read_fw(gt->uncore, reg);
> >  }
> >  
> > -u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg)
> > +/**
> > + * intel_gt_mcr_read_any - reads one instance of an MCR register
> > + * @gt: GT structure
> > + * @reg: register to read
> > + *
> > + * Reads a GT MCR register.  The read will be steered to a non-terminated
> > + * instance (i.e., one that isn't fused off or powered down by power gating).
> > + *
> > + * Returns the value from a non-terminated instance of @reg.
> > + */
> > +u32 intel_gt_mcr_read_any(struct intel_gt *gt, i915_reg_t reg)
> >  {
> >  	int type;
> > -	u8 sliceid, subsliceid;
> > +	u8 group, instance;
> >  
> >  	for (type = 0; type < NUM_STEERING_TYPES; type++) {
> > -		if (intel_gt_reg_needs_read_steering(gt, reg, type)) {
> > -			intel_gt_get_valid_steering(gt, type, &sliceid,
> > -						    &subsliceid);
> > -			return intel_uncore_read_with_mcr_steering(gt->uncore,
> > -								   reg,
> > -								   sliceid,
> > -								   subsliceid);
> > +		if (reg_needs_read_steering(gt, reg, type)) {
> > +			get_nonterminated_steering(gt, type, &group, &instance);
> > +			return rw_with_mcr_steering(gt->uncore, reg,
> > +						    FW_REG_READ,
> > +						    group, instance, 0);
> >  		}
> >  	}
> >  
> > @@ -410,7 +459,7 @@ static void report_steering_type(struct drm_printer *p,
> >  				 bool dump_table)
> >  {
> >  	const struct intel_mmio_range *entry;
> > -	u8 slice, subslice;
> > +	u8 group, instance;
> >  
> >  	BUILD_BUG_ON(ARRAY_SIZE(intel_steering_types) != NUM_STEERING_TYPES);
> >  
> > @@ -420,9 +469,9 @@ static void report_steering_type(struct drm_printer *p,
> >  		return;
> >  	}
> >  
> > -	intel_gt_get_valid_steering(gt, type, &slice, &subslice);
> > -	drm_printf(p, "%s steering: sliceid=0x%x, subsliceid=0x%x\n",
> > -		   intel_steering_types[type], slice, subslice);
> > +	get_nonterminated_steering(gt, type, &group, &instance);
> > +	drm_printf(p, "%s steering: group=0x%x, instance=0x%x\n",
> > +		   intel_steering_types[type], group, instance);
> >  
> >  	if (!dump_table)
> >  		return;
> > @@ -431,10 +480,10 @@ static void report_steering_type(struct drm_printer *p,
> >  		drm_printf(p, "\t0x%06x - 0x%06x\n", entry->start, entry->end);
> >  }
> >  
> > -void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
> > -			      bool dump_table)
> > +void intel_gt_mcr_report_steering(struct drm_printer *p, struct intel_gt *gt,
> > +				  bool dump_table)
> >  {
> > -	drm_printf(p, "Default steering: sliceid=0x%x, subsliceid=0x%x\n",
> > +	drm_printf(p, "Default steering: group=0x%x, instance=0x%x\n",
> >  		   gt->default_steering.groupid,
> >  		   gt->default_steering.instanceid);
> >  
> > diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.h b/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
> > index b570c1571243..506b0cbc8db3 100644
> > --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
> > +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.h
> > @@ -10,28 +10,25 @@
> >  
> >  void intel_gt_mcr_init(struct intel_gt *gt);
> >  
> > -u32 intel_uncore_read_with_mcr_steering_fw(struct intel_uncore *uncore,
> > -					   i915_reg_t reg,
> > -					   int slice, int subslice);
> > -u32 intel_uncore_read_with_mcr_steering(struct intel_uncore *uncore,
> > -					i915_reg_t reg,	int slice, int subslice);
> > -void intel_uncore_write_with_mcr_steering(struct intel_uncore *uncore,
> > -					  i915_reg_t reg, u32 value,
> > -					  int slice, int subslice);
> > -
> > -u32 intel_gt_read_register_fw(struct intel_gt *gt, i915_reg_t reg);
> > -u32 intel_gt_read_register(struct intel_gt *gt, i915_reg_t reg);
> > -
> > -static inline bool intel_gt_needs_read_steering(struct intel_gt *gt,
> > -						enum intel_steering_type type)
> > -{
> > -	return gt->steering_table[type];
> > -}
> > -
> > -void intel_gt_get_valid_steering_for_reg(struct intel_gt *gt, i915_reg_t reg,
> > -					 u8 *sliceid, u8 *subsliceid);
> > -
> > -void intel_gt_report_steering(struct drm_printer *p, struct intel_gt *gt,
> > -			      bool dump_table);
> > +u32 intel_gt_mcr_read(struct intel_gt *gt,
> > +		      i915_reg_t reg,
> > +		      int group, int instance);
> > +u32 intel_gt_mcr_read_any_fw(struct intel_gt *gt, i915_reg_t reg);
> > +u32 intel_gt_mcr_read_any(struct intel_gt *gt, i915_reg_t reg);
> > +
> > +void intel_gt_mcr_unicast_write(struct intel_gt *gt,
> > +				i915_reg_t reg, u32 value,
> > +				int group, int instance);
> > +void intel_gt_mcr_multicast_write(struct intel_gt *gt,
> > +				  i915_reg_t reg, u32 value);
> > +void intel_gt_mcr_multicast_write_fw(struct intel_gt *gt,
> > +				     i915_reg_t reg, u32 value);
> > +
> > +void intel_gt_mcr_get_nonterminated_steering(struct intel_gt *gt,
> > +					     i915_reg_t reg,
> > +					     u8 *group, u8 *instance);
> > +
> > +void intel_gt_mcr_report_steering(struct drm_printer *p, struct intel_gt *gt,
> > +				  bool dump_table);
> >  
> >  #endif /* __INTEL_GT_MCR__ */
> > diff --git a/drivers/gpu/drm/i915/gt/intel_region_lmem.c b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
> > index 1f4e7237a924..2ff448047020 100644
> > --- a/drivers/gpu/drm/i915/gt/intel_region_lmem.c
> > +++ b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
> > @@ -105,11 +105,11 @@ static struct intel_memory_region *setup_lmem(struct intel_gt *gt)
> >  		resource_size_t lmem_range;
> >  		u64 tile_stolen, flat_ccs_base;
> >  
> > -		lmem_range = intel_gt_read_register(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
> > +		lmem_range = intel_gt_mcr_read_any(&i915->gt0, XEHPSDV_TILE0_ADDR_RANGE) & 0xFFFF;
> >  		lmem_size = lmem_range >> XEHPSDV_TILE_LMEM_RANGE_SHIFT;
> >  		lmem_size *= SZ_1G;
> >  
> > -		flat_ccs_base = intel_gt_read_register(gt, XEHPSDV_FLAT_CCS_BASE_ADDR);
> > +		flat_ccs_base = intel_gt_mcr_read_any(gt, XEHPSDV_FLAT_CCS_BASE_ADDR);
> >  		flat_ccs_base = (flat_ccs_base >> XEHPSDV_CCS_BASE_SHIFT) * SZ_64K;
> >  
> >  		/* FIXME: Remove this when we have small-bar enabled */
> > diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> > index 97d7f30b1229..e42fbb982bb3 100644
> > --- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
> > +++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> > @@ -1083,7 +1083,7 @@ static void __add_mcr_wa(struct intel_gt *gt, struct i915_wa_list *wal,
> >  	gt->default_steering.instanceid = subslice;
> >  
> >  	if (drm_debug_enabled(DRM_UT_DRIVER))
> > -		intel_gt_report_steering(&p, gt, false);
> > +		intel_gt_mcr_report_steering(&p, gt, false);
> >  }
> >  
> >  static void
> > @@ -1624,13 +1624,13 @@ wa_list_apply(struct intel_gt *gt, const struct i915_wa_list *wal)
> >  		u32 val, old = 0;
> >  
> >  		/* open-coded rmw due to steering */
> > -		old = wa->clr ? intel_gt_read_register_fw(gt, wa->reg) : 0;
> > +		old = wa->clr ? intel_gt_mcr_read_any_fw(gt, wa->reg) : 0;
> >  		val = (old & ~wa->clr) | wa->set;
> >  		if (val != old || !wa->clr)
> >  			intel_uncore_write_fw(uncore, wa->reg, val);
> >  
> >  		if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
> > -			wa_verify(wa, intel_gt_read_register_fw(gt, wa->reg),
> > +			wa_verify(wa, intel_gt_mcr_read_any_fw(gt, wa->reg),
> >  				  wal->name, "application");
> >  	}
> >  
> > @@ -1661,7 +1661,7 @@ static bool wa_list_verify(struct intel_gt *gt,
> >  
> >  	for (i = 0, wa = wal->list; i < wal->count; i++, wa++)
> >  		ok &= wa_verify(wa,
> > -				intel_gt_read_register_fw(gt, wa->reg),
> > +				intel_gt_mcr_read_any_fw(gt, wa->reg),
> >  				wal->name, from);
> >  
> >  	intel_uncore_forcewake_put__locked(uncore, fw);
> > diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> > index dea138d78111..ba7541f3ca61 100644
> > --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> > +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> > @@ -314,7 +314,7 @@ static long __must_check guc_mmio_reg_add(struct intel_gt *gt,
> >  	 * tracking, it is easier to just program the default steering for all
> >  	 * regs that don't need a non-default one.
> >  	 */
> > -	intel_gt_get_valid_steering_for_reg(gt, reg, &group, &inst);
> > +	intel_gt_mcr_get_nonterminated_steering(gt, reg, &group, &inst);
> >  	entry.flags |= GUC_REGSET_STEERING(group, inst);
> >  
> >  	slot = __mmio_reg_add(regset, &entry);
> With the above minor fixes to comments
> 
> Reviewed-by: Harish Chegondi <harish.chegondi@intel.com>

Comment copy/paste errors fixed and pushed to drm-intel-gt-next.  Thanks
for the review.


Matt


> > -- 
> > 2.35.3
> > 

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

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

end of thread, other threads:[~2022-06-17 17:36 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-15  0:10 [PATCH v2 0/2] i915: Extract, polish, and document multicast handling Matt Roper
2022-06-15  0:10 ` [Intel-gfx] " Matt Roper
2022-06-15  0:10 ` [PATCH v2 1/2] drm/i915/gt: Move multicast register handling to a dedicated file Matt Roper
2022-06-15  0:10   ` [Intel-gfx] " Matt Roper
2022-06-15  0:10 ` [PATCH v2 2/2] drm/i915/gt: Cleanup interface for MCR operations Matt Roper
2022-06-15  0:10   ` [Intel-gfx] " Matt Roper
2022-06-17 13:57   ` Harish Chegondi
2022-06-17 13:57     ` [Intel-gfx] " Harish Chegondi
2022-06-17 15:10     ` Matt Roper
2022-06-17 15:10       ` [Intel-gfx] " Matt Roper
2022-06-15  0:34 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for i915: Extract, polish, and document multicast handling Patchwork
2022-06-15  1:03 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
2022-06-15 21:05   ` Matt Roper
2022-06-15 21:14     ` Vudum, Lakshminarayana
2022-06-15 21:20 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2022-06-16  3:11 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2022-06-16  4:33   ` Matt Roper
2022-06-16 15:27     ` Vudum, Lakshminarayana
2022-06-16  6:05 ` [Intel-gfx] ✓ Fi.CI.IGT: success " Patchwork

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.