Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/7] Extra enabling patches for NVL-P
@ 2026-03-05 12:02 Gustavo Sousa
  2026-03-05 12:02 ` [PATCH 1/7] drm/xe: Modify stepping info directly in xe_step_*_get() Gustavo Sousa
                   ` (8 more replies)
  0 siblings, 9 replies; 21+ messages in thread
From: Gustavo Sousa @ 2026-03-05 12:02 UTC (permalink / raw)
  To: intel-xe; +Cc: Gustavo Sousa

This series contains some extra enabling patches for NVL-P.

Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
Gustavo Sousa (7):
      drm/xe: Modify stepping info directly in xe_step_*_get()
      drm/xe: Drop unused IS_PLATFORM_STEP() and IS_SUBPLATFORM_STEP()
      drm/xe/nvlp: Read platform-level stepping info
      drm/xe/rtp: Add support for matching platform-level stepping
      drm/xe/nvlp: Implement Wa_14026539277
      drm/xe/xe3p: Drop Wa_16028780921
      drm/xe: Translate C-state "reset value" into RC6

 drivers/gpu/drm/xe/regs/xe_gt_regs.h |  8 ++--
 drivers/gpu/drm/xe/xe_device_types.h | 10 -----
 drivers/gpu/drm/xe/xe_gt.c           | 27 +++++++++++++
 drivers/gpu/drm/xe/xe_guc_pc.c       |  8 ++++
 drivers/gpu/drm/xe/xe_pci.c          |  8 ++--
 drivers/gpu/drm/xe/xe_rtp.c          |  7 ++++
 drivers/gpu/drm/xe/xe_rtp.h          | 20 ++++++++++
 drivers/gpu/drm/xe/xe_rtp_types.h    |  1 +
 drivers/gpu/drm/xe/xe_step.c         | 74 +++++++++++++++++++++++++-----------
 drivers/gpu/drm/xe/xe_step.h         | 10 +++--
 drivers/gpu/drm/xe/xe_step_types.h   |  1 +
 drivers/gpu/drm/xe/xe_wa.c           |  4 --
 drivers/gpu/drm/xe/xe_wa_oob.rules   |  2 +
 13 files changed, 133 insertions(+), 47 deletions(-)
---
base-commit: e4b36c44f536abdf724e6a17700a47ce1631699f
change-id: 20260304-extra-nvl-p-enabling-patches-49ea48e204f5

Best regards,
--  
Gustavo Sousa <gustavo.sousa@intel.com>


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

* [PATCH 1/7] drm/xe: Modify stepping info directly in xe_step_*_get()
  2026-03-05 12:02 [PATCH 0/7] Extra enabling patches for NVL-P Gustavo Sousa
@ 2026-03-05 12:02 ` Gustavo Sousa
  2026-03-05 22:07   ` Matt Roper
  2026-03-05 12:02 ` [PATCH 2/7] drm/xe: Drop unused IS_PLATFORM_STEP() and IS_SUBPLATFORM_STEP() Gustavo Sousa
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 21+ messages in thread
From: Gustavo Sousa @ 2026-03-05 12:02 UTC (permalink / raw)
  To: intel-xe; +Cc: Gustavo Sousa

In an upcoming change, we will add a member to struct xe_step_info to
represent the platform-level stepping.  As such, we should stop assigning
the value returned by functions xe_step_pre_gmdid_get() and
xe_step_gmdid_get() directly to xe->info.step.

Since there are no other users for those functions, let's simply update
them to modify xe->info.step directly.

Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 drivers/gpu/drm/xe/xe_pci.c  |  6 ++---
 drivers/gpu/drm/xe/xe_step.c | 52 +++++++++++++++++++++++++-------------------
 drivers/gpu/drm/xe/xe_step.h |  8 +++----
 3 files changed, 36 insertions(+), 30 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index 29f976e66848..72d4131e9775 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -914,7 +914,7 @@ static int xe_info_init(struct xe_device *xe,
 	if (desc->pre_gmdid_graphics_ip) {
 		graphics_ip = desc->pre_gmdid_graphics_ip;
 		media_ip = desc->pre_gmdid_media_ip;
-		xe->info.step = xe_step_pre_gmdid_get(xe);
+		xe_step_pre_gmdid_get(xe);
 	} else {
 		xe_assert(xe, !desc->pre_gmdid_media_ip);
 		ret = handle_gmdid(xe, &graphics_ip, &media_ip,
@@ -922,9 +922,7 @@ static int xe_info_init(struct xe_device *xe,
 		if (ret)
 			return ret;
 
-		xe->info.step = xe_step_gmdid_get(xe,
-						  graphics_gmdid_revid,
-						  media_gmdid_revid);
+		xe_step_gmdid_get(xe, graphics_gmdid_revid, media_gmdid_revid);
 	}
 
 	/*
diff --git a/drivers/gpu/drm/xe/xe_step.c b/drivers/gpu/drm/xe/xe_step.c
index 2860986f82f7..064b604b5b94 100644
--- a/drivers/gpu/drm/xe/xe_step.c
+++ b/drivers/gpu/drm/xe/xe_step.c
@@ -115,15 +115,17 @@ __diag_pop();
  * Convert the PCI revid into proper IP steppings.  This should only be
  * used on platforms that do not have GMD_ID support.
  */
-struct xe_step_info xe_step_pre_gmdid_get(struct xe_device *xe)
+void xe_step_pre_gmdid_get(struct xe_device *xe)
 {
 	const struct xe_step_info *revids = NULL;
-	struct xe_step_info step = {};
 	u16 revid = xe->info.revid;
 	int size = 0;
 	const int *basedie_info = NULL;
 	int basedie_size = 0;
 	int baseid = 0;
+	u8 graphics = STEP_NONE;
+	u8 media = STEP_NONE;
+	u8 basedie = STEP_NONE;
 
 	if (xe->info.platform == XE_PVC) {
 		baseid = FIELD_GET(GENMASK(5, 3), xe->info.revid);
@@ -166,10 +168,12 @@ struct xe_step_info xe_step_pre_gmdid_get(struct xe_device *xe)
 
 	/* Not using the stepping scheme for the platform yet. */
 	if (!revids)
-		return step;
+		goto done;
 
 	if (revid < size && revids[revid].graphics != STEP_NONE) {
-		step = revids[revid];
+		graphics = revids[revid].graphics;
+		media = revids[revid].media;
+		basedie = revids[revid].basedie;
 	} else {
 		drm_warn(&xe->drm, "Unknown revid 0x%02x\n", revid);
 
@@ -187,25 +191,30 @@ struct xe_step_info xe_step_pre_gmdid_get(struct xe_device *xe)
 		if (revid < size) {
 			drm_dbg(&xe->drm, "Using steppings for revid 0x%02x\n",
 				revid);
-			step = revids[revid];
+			graphics = revids[revid].graphics;
+			media = revids[revid].media;
+			basedie = revids[revid].basedie;
 		} else {
 			drm_dbg(&xe->drm, "Using future steppings\n");
-			step.graphics = STEP_FUTURE;
+			graphics = STEP_FUTURE;
 		}
 	}
 
-	drm_WARN_ON(&xe->drm, step.graphics == STEP_NONE);
+	drm_WARN_ON(&xe->drm, graphics == STEP_NONE);
 
 	if (basedie_info && basedie_size) {
 		if (baseid < basedie_size && basedie_info[baseid] != STEP_NONE) {
-			step.basedie = basedie_info[baseid];
+			basedie = basedie_info[baseid];
 		} else {
 			drm_warn(&xe->drm, "Unknown baseid 0x%02x\n", baseid);
-			step.basedie = STEP_FUTURE;
+			basedie = STEP_FUTURE;
 		}
 	}
 
-	return step;
+done:
+	xe->info.step.graphics = graphics;
+	xe->info.step.media = media;
+	xe->info.step.basedie = basedie;
 }
 
 /**
@@ -220,28 +229,27 @@ struct xe_step_info xe_step_pre_gmdid_get(struct xe_device *xe)
  * all platforms:  major steppings (A0, B0, etc.) are 4 apart, with minor
  * steppings (A1, A2, etc.) taking the values in between.
  */
-struct xe_step_info xe_step_gmdid_get(struct xe_device *xe,
-				      u32 graphics_gmdid_revid,
-				      u32 media_gmdid_revid)
+void xe_step_gmdid_get(struct xe_device *xe,
+		       u32 graphics_gmdid_revid,
+		       u32 media_gmdid_revid)
 {
-	struct xe_step_info step = {
-		.graphics = STEP_A0 + graphics_gmdid_revid,
-		.media = STEP_A0 + media_gmdid_revid,
-	};
+	u8 graphics = STEP_A0 + graphics_gmdid_revid;
+	u8 media = STEP_A0 + media_gmdid_revid;
 
-	if (step.graphics >= STEP_FUTURE) {
-		step.graphics = STEP_FUTURE;
+	if (graphics >= STEP_FUTURE) {
+		graphics = STEP_FUTURE;
 		drm_dbg(&xe->drm, "Graphics GMD_ID revid value %d treated as future stepping\n",
 			graphics_gmdid_revid);
 	}
 
-	if (step.media >= STEP_FUTURE) {
-		step.media = STEP_FUTURE;
+	if (media >= STEP_FUTURE) {
+		media = STEP_FUTURE;
 		drm_dbg(&xe->drm, "Media GMD_ID revid value %d treated as future stepping\n",
 			media_gmdid_revid);
 	}
 
-	return step;
+	xe->info.step.graphics = graphics;
+	xe->info.step.media = media;
 }
 
 #define STEP_NAME_CASE(name)	\
diff --git a/drivers/gpu/drm/xe/xe_step.h b/drivers/gpu/drm/xe/xe_step.h
index 686cb59200c2..6febb7fac476 100644
--- a/drivers/gpu/drm/xe/xe_step.h
+++ b/drivers/gpu/drm/xe/xe_step.h
@@ -12,10 +12,10 @@
 
 struct xe_device;
 
-struct xe_step_info xe_step_pre_gmdid_get(struct xe_device *xe);
-struct xe_step_info xe_step_gmdid_get(struct xe_device *xe,
-				      u32 graphics_gmdid_revid,
-				      u32 media_gmdid_revid);
+void xe_step_pre_gmdid_get(struct xe_device *xe);
+void xe_step_gmdid_get(struct xe_device *xe,
+		       u32 graphics_gmdid_revid,
+		       u32 media_gmdid_revid);
 static inline u32 xe_step_to_gmdid(enum xe_step step) { return step - STEP_A0; }
 
 const char *xe_step_name(enum xe_step step);

-- 
2.52.0


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

* [PATCH 2/7] drm/xe: Drop unused IS_PLATFORM_STEP() and IS_SUBPLATFORM_STEP()
  2026-03-05 12:02 [PATCH 0/7] Extra enabling patches for NVL-P Gustavo Sousa
  2026-03-05 12:02 ` [PATCH 1/7] drm/xe: Modify stepping info directly in xe_step_*_get() Gustavo Sousa
@ 2026-03-05 12:02 ` Gustavo Sousa
  2026-03-05 22:09   ` Matt Roper
  2026-03-05 12:02 ` [PATCH 3/7] drm/xe/nvlp: Read platform-level stepping info Gustavo Sousa
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 21+ messages in thread
From: Gustavo Sousa @ 2026-03-05 12:02 UTC (permalink / raw)
  To: intel-xe; +Cc: Gustavo Sousa

The macros IS_PLATFORM_STEP() and IS_SUBPLATFORM_STEP() are unused now
and can be simply dropped.  Furthermore, in upcoming changes we will add
logic to read platform-level step information from PCI RevID and keeping
those macros around would potentially cause confusion.

Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 drivers/gpu/drm/xe/xe_device_types.h | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index e9032014923d..85451cef3c25 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -81,16 +81,6 @@ enum xe_wedged_mode {
 
 #define XE_MAX_ASID	(BIT(20))
 
-#define IS_PLATFORM_STEP(_xe, _platform, min_step, max_step)	\
-	((_xe)->info.platform == (_platform) &&			\
-	 (_xe)->info.step.graphics >= (min_step) &&		\
-	 (_xe)->info.step.graphics < (max_step))
-#define IS_SUBPLATFORM_STEP(_xe, _platform, sub, min_step, max_step)	\
-	((_xe)->info.platform == (_platform) &&				\
-	 (_xe)->info.subplatform == (sub) &&				\
-	 (_xe)->info.step.graphics >= (min_step) &&			\
-	 (_xe)->info.step.graphics < (max_step))
-
 /**
  * struct xe_device - Top level struct of Xe device
  */

-- 
2.52.0


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

* [PATCH 3/7] drm/xe/nvlp: Read platform-level stepping info
  2026-03-05 12:02 [PATCH 0/7] Extra enabling patches for NVL-P Gustavo Sousa
  2026-03-05 12:02 ` [PATCH 1/7] drm/xe: Modify stepping info directly in xe_step_*_get() Gustavo Sousa
  2026-03-05 12:02 ` [PATCH 2/7] drm/xe: Drop unused IS_PLATFORM_STEP() and IS_SUBPLATFORM_STEP() Gustavo Sousa
@ 2026-03-05 12:02 ` Gustavo Sousa
  2026-03-05 22:13   ` Matt Roper
  2026-03-05 12:02 ` [PATCH 4/7] drm/xe/rtp: Add support for matching platform-level stepping Gustavo Sousa
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 21+ messages in thread
From: Gustavo Sousa @ 2026-03-05 12:02 UTC (permalink / raw)
  To: intel-xe; +Cc: Gustavo Sousa

There will be a NVL-P workaround for which we will need to know the
platform-level stepping information in order to decide whether to apply
it or not.

While NVL-P has a nice mapping between the PCI revid and our symbolic
stepping enumeration, not all platforms are like that: (i) Some
platforms will have a single PCI revid used for a set platform level
steppings (ii) and some might even require specific mappings.

To make things simpler, let's include stepping information in the device
info only on demand, for those platforms where it is needed for
workaround checks.

Bspec: 74201
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 drivers/gpu/drm/xe/xe_pci.c        |  2 ++
 drivers/gpu/drm/xe/xe_step.c       | 22 ++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_step.h       |  2 ++
 drivers/gpu/drm/xe/xe_step_types.h |  1 +
 4 files changed, 27 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index 72d4131e9775..b9000b5d3ca7 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -904,6 +904,8 @@ static int xe_info_init(struct xe_device *xe,
 	int ret;
 	u8 id;
 
+	xe_step_platform_get(xe);
+
 	/*
 	 * If this platform supports GMD_ID, we'll detect the proper IP
 	 * descriptor to use from hardware registers.
diff --git a/drivers/gpu/drm/xe/xe_step.c b/drivers/gpu/drm/xe/xe_step.c
index 064b604b5b94..d0f888c31831 100644
--- a/drivers/gpu/drm/xe/xe_step.c
+++ b/drivers/gpu/drm/xe/xe_step.c
@@ -108,6 +108,28 @@ static const int pvc_basedie_subids[] = {
 
 __diag_pop();
 
+/**
+ * xe_step_platform_get - Determine platform-level stepping from PCI revid
+ * @xe: Xe device
+ *
+ * Convert the PCI revid into a platform-level stepping value and store that
+ * in the device info.
+ */
+void xe_step_platform_get(struct xe_device *xe)
+{
+	/*
+	 * Not all platforms map PCI revid directly into our symbolic stepping
+	 * enumeration. Some platforms will have a single PCI revid used for a
+	 * range platform level steppings and some might even require specific
+	 * mappings. So prefer to err on the side of caution and include only
+	 * the platforms from which we need the stepping info for workaround
+	 * checks.
+	 */
+
+	if (xe->info.platform == XE_NOVALAKE_P)
+		xe->info.step.platform = STEP_A0 + xe->info.revid;
+}
+
 /**
  * xe_step_pre_gmdid_get - Determine IP steppings from PCI revid
  * @xe: Xe device
diff --git a/drivers/gpu/drm/xe/xe_step.h b/drivers/gpu/drm/xe/xe_step.h
index 6febb7fac476..41f1c95c46e5 100644
--- a/drivers/gpu/drm/xe/xe_step.h
+++ b/drivers/gpu/drm/xe/xe_step.h
@@ -12,6 +12,8 @@
 
 struct xe_device;
 
+void xe_step_platform_get(struct xe_device *xe);
+
 void xe_step_pre_gmdid_get(struct xe_device *xe);
 void xe_step_gmdid_get(struct xe_device *xe,
 		       u32 graphics_gmdid_revid,
diff --git a/drivers/gpu/drm/xe/xe_step_types.h b/drivers/gpu/drm/xe/xe_step_types.h
index d978cc2512f2..43ca73850739 100644
--- a/drivers/gpu/drm/xe/xe_step_types.h
+++ b/drivers/gpu/drm/xe/xe_step_types.h
@@ -9,6 +9,7 @@
 #include <linux/types.h>
 
 struct xe_step_info {
+	u8 platform;
 	u8 graphics;
 	u8 media;
 	u8 basedie;

-- 
2.52.0


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

* [PATCH 4/7] drm/xe/rtp: Add support for matching platform-level stepping
  2026-03-05 12:02 [PATCH 0/7] Extra enabling patches for NVL-P Gustavo Sousa
                   ` (2 preceding siblings ...)
  2026-03-05 12:02 ` [PATCH 3/7] drm/xe/nvlp: Read platform-level stepping info Gustavo Sousa
@ 2026-03-05 12:02 ` Gustavo Sousa
  2026-03-05 22:22   ` Matt Roper
  2026-03-05 12:02 ` [PATCH 5/7] drm/xe/nvlp: Implement Wa_14026539277 Gustavo Sousa
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 21+ messages in thread
From: Gustavo Sousa @ 2026-03-05 12:02 UTC (permalink / raw)
  To: intel-xe; +Cc: Gustavo Sousa

Add support for matching platform-level stepping, which will be used for
an upcoming NVL-P workaround.

As support for reading platform-level stepping information is added only
as needed in the driver, add a warning when the rule finds a STEP_NONE
value, which is an indication that the driver is missing such a support.

Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 drivers/gpu/drm/xe/xe_rtp.c       |  7 +++++++
 drivers/gpu/drm/xe/xe_rtp.h       | 20 ++++++++++++++++++++
 drivers/gpu/drm/xe/xe_rtp_types.h |  1 +
 3 files changed, 28 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
index 7bfdc6795ce6..991f218f1cc3 100644
--- a/drivers/gpu/drm/xe/xe_rtp.c
+++ b/drivers/gpu/drm/xe/xe_rtp.c
@@ -55,6 +55,13 @@ static bool rule_matches(const struct xe_device *xe,
 			match = xe->info.platform == r->platform &&
 				xe->info.subplatform == r->subplatform;
 			break;
+		case XE_RTP_MATCH_PLATFORM_STEP:
+			if (drm_WARN_ON(&xe->drm, xe->info.step.platform == STEP_NONE))
+				return false;
+
+			match = xe->info.step.platform >= r->step_start &&
+				xe->info.step.platform < r->step_end;
+			break;
 		case XE_RTP_MATCH_GRAPHICS_VERSION:
 			if (drm_WARN_ON(&xe->drm, !gt))
 				return false;
diff --git a/drivers/gpu/drm/xe/xe_rtp.h b/drivers/gpu/drm/xe/xe_rtp.h
index be4195264286..7d6daa7eb1e4 100644
--- a/drivers/gpu/drm/xe/xe_rtp.h
+++ b/drivers/gpu/drm/xe/xe_rtp.h
@@ -35,6 +35,10 @@ struct xe_reg_sr;
 	{ .match_type = XE_RTP_MATCH_SUBPLATFORM,				\
 	  .platform = plat__, .subplatform = sub__ }
 
+#define _XE_RTP_RULE_PLATFORM_STEP(start__, end__)				\
+	{ .match_type = XE_RTP_MATCH_PLATFORM_STEP,				\
+	  .step_start = start__, .step_end = end__ }
+
 #define _XE_RTP_RULE_GRAPHICS_STEP(start__, end__)				\
 	{ .match_type = XE_RTP_MATCH_GRAPHICS_STEP,				\
 	  .step_start = start__, .step_end = end__ }
@@ -66,6 +70,22 @@ struct xe_reg_sr;
 #define XE_RTP_RULE_SUBPLATFORM(plat_, sub_)					\
 	_XE_RTP_RULE_SUBPLATFORM(XE_##plat_, XE_SUBPLATFORM_##plat_##_##sub_)
 
+/**
+ * XE_RTP_RULE_PLATFORM_STEP - Create rule matching platform-level stepping
+ * @start_: First stepping matching the rule
+ * @end_: First stepping that does not match the rule
+ *
+ * Note that the range matching this rule is [ @start_, @end_ ), i.e. inclusive
+ * on the left, exclusive on the right.
+ *
+ * You need to make sure that proper support for reading platform-level stepping
+ * information is present for the target platform before using this rule.
+ *
+ * Refer to XE_RTP_RULES() for expected usage.
+ */
+#define XE_RTP_RULE_PLATFORM_STEP(start_, end_)					\
+	_XE_RTP_RULE_PLATFORM_STEP(STEP_##start_, STEP_##end_)
+
 /**
  * XE_RTP_RULE_GRAPHICS_STEP - Create rule matching graphics stepping
  * @start_: First stepping matching the rule
diff --git a/drivers/gpu/drm/xe/xe_rtp_types.h b/drivers/gpu/drm/xe/xe_rtp_types.h
index 6ba7f226c227..166251615be1 100644
--- a/drivers/gpu/drm/xe/xe_rtp_types.h
+++ b/drivers/gpu/drm/xe/xe_rtp_types.h
@@ -41,6 +41,7 @@ struct xe_rtp_action {
 enum {
 	XE_RTP_MATCH_PLATFORM,
 	XE_RTP_MATCH_SUBPLATFORM,
+	XE_RTP_MATCH_PLATFORM_STEP,
 	XE_RTP_MATCH_GRAPHICS_VERSION,
 	XE_RTP_MATCH_GRAPHICS_VERSION_RANGE,
 	XE_RTP_MATCH_GRAPHICS_VERSION_ANY_GT,

-- 
2.52.0


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

* [PATCH 5/7] drm/xe/nvlp: Implement Wa_14026539277
  2026-03-05 12:02 [PATCH 0/7] Extra enabling patches for NVL-P Gustavo Sousa
                   ` (3 preceding siblings ...)
  2026-03-05 12:02 ` [PATCH 4/7] drm/xe/rtp: Add support for matching platform-level stepping Gustavo Sousa
@ 2026-03-05 12:02 ` Gustavo Sousa
  2026-03-05 15:23   ` Gustavo Sousa
  2026-03-05 12:02 ` [PATCH 6/7] drm/xe/xe3p: Drop Wa_16028780921 Gustavo Sousa
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 21+ messages in thread
From: Gustavo Sousa @ 2026-03-05 12:02 UTC (permalink / raw)
  To: intel-xe; +Cc: Gustavo Sousa

Implement the KMD part of Wa_14026539277, which applies to NVL-P A0.
The KMD implementation is just one component of the workaround, which
also depends on Pcode to implement its part in order to be complete.

Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 drivers/gpu/drm/xe/regs/xe_gt_regs.h |  4 ++++
 drivers/gpu/drm/xe/xe_gt.c           | 27 +++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_wa_oob.rules   |  2 ++
 3 files changed, 33 insertions(+)

diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
index 66ddad767ad4..a83cafbe03fd 100644
--- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
@@ -452,6 +452,10 @@
 
 #define XEHPC_L3CLOS_MASK(i)			XE_REG_MCR(0xb194 + (i) * 8)
 
+#define L2COMPUTESIDECTRL			XE_REG_MCR(0xb1c0)
+#define   CECTRL				REG_GENMASK(2, 1)
+#define   CECTRL_CENODATA_ALWAYS		REG_FIELD_PREP(CECTRL, 0x0)
+
 #define XE2_GLOBAL_INVAL			XE_REG(0xb404)
 
 #define XE2LPM_L3SQCREG2			XE_REG_MCR(0xb604)
diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
index b455af1e6072..3c8692f9b8cf 100644
--- a/drivers/gpu/drm/xe/xe_gt.c
+++ b/drivers/gpu/drm/xe/xe_gt.c
@@ -450,6 +450,25 @@ int xe_gt_record_default_lrcs(struct xe_gt *gt)
 	return err;
 }
 
+static void xe_gt_wa_14026539277(struct xe_gt *gt)
+{
+	u32 val;
+
+	if (!XE_GT_WA(gt, 14026539277))
+		return;
+
+	/*
+	 * L2COMPUTESIDECTRL has a specific offset for media and the GSI offset
+	 * does not apply.
+	 */
+	xe_gt_assert(gt, xe_gt_is_main_type(gt));
+
+	val = xe_gt_mcr_unicast_read_any(gt, L2COMPUTESIDECTRL);
+	val &= ~CECTRL;
+	val |= CECTRL_CENODATA_ALWAYS;
+	xe_gt_mcr_multicast_write(gt, L2COMPUTESIDECTRL, val);
+}
+
 int xe_gt_init_early(struct xe_gt *gt)
 {
 	int err;
@@ -575,6 +594,14 @@ static int gt_init_with_gt_forcewake(struct xe_gt *gt)
 	 */
 	gt->info.gmdid = xe_mmio_read32(&gt->mmio, GMD_ID);
 
+	/*
+	 * Wa_14026539277 can't be implemented as a regular GT workaround (i.e.
+	 * as an entry in gt_was[]) because we would get the hardware already in
+	 * a bad state by the time it would be applied.  Hence, we implement it
+	 * as an OOB workaround and apply it early to prevent that.
+	 */
+	xe_gt_wa_14026539277(gt);
+
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/xe/xe_wa_oob.rules b/drivers/gpu/drm/xe/xe_wa_oob.rules
index 80b54b195f20..7f42436df6ab 100644
--- a/drivers/gpu/drm/xe/xe_wa_oob.rules
+++ b/drivers/gpu/drm/xe/xe_wa_oob.rules
@@ -58,3 +58,5 @@
 
 14025883347	MEDIA_VERSION_RANGE(1301, 3503)
 		GRAPHICS_VERSION_RANGE(2004, 3005)
+
+14026539277	PLATFORM(NOVALAKE_P), PLATFORM_STEP(A0, B0), GRAPHICS_VERSION(3510)

-- 
2.52.0


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

* [PATCH 6/7] drm/xe/xe3p: Drop Wa_16028780921
  2026-03-05 12:02 [PATCH 0/7] Extra enabling patches for NVL-P Gustavo Sousa
                   ` (4 preceding siblings ...)
  2026-03-05 12:02 ` [PATCH 5/7] drm/xe/nvlp: Implement Wa_14026539277 Gustavo Sousa
@ 2026-03-05 12:02 ` Gustavo Sousa
  2026-03-05 22:23   ` Matt Roper
  2026-03-05 12:02 ` [PATCH 7/7] drm/xe: Translate C-state "reset value" into RC6 Gustavo Sousa
                   ` (2 subsequent siblings)
  8 siblings, 1 reply; 21+ messages in thread
From: Gustavo Sousa @ 2026-03-05 12:02 UTC (permalink / raw)
  To: intel-xe; +Cc: Gustavo Sousa

Wa_16028780921 involves writing to a register that is locked by firmware
prior to driver loading and doesn't have any effect if implemented by
the KMD.  Since the implementation of the workaround actually belongs
the firmware, just drop the ineffective implementation by the KMD.

Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 drivers/gpu/drm/xe/regs/xe_gt_regs.h | 3 ---
 drivers/gpu/drm/xe/xe_wa.c           | 4 ----
 2 files changed, 7 deletions(-)

diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
index a83cafbe03fd..f49a28f4a330 100644
--- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
@@ -218,9 +218,6 @@
 
 #define GSCPSMI_BASE				XE_REG(0x880c)
 
-#define CCCHKNREG2				XE_REG_MCR(0x881c)
-#define   LOCALITYDIS				REG_BIT(7)
-
 #define CCCHKNREG1				XE_REG_MCR(0x8828)
 #define   L3CMPCTRL				REG_BIT(23)
 #define   ENCOMPPERFFIX				REG_BIT(18)
diff --git a/drivers/gpu/drm/xe/xe_wa.c b/drivers/gpu/drm/xe/xe_wa.c
index 183c5c86c35a..38881b1aaeb1 100644
--- a/drivers/gpu/drm/xe/xe_wa.c
+++ b/drivers/gpu/drm/xe/xe_wa.c
@@ -287,10 +287,6 @@ static const struct xe_rtp_entry_sr gt_was[] = {
 	  XE_RTP_ACTIONS(SET(MMIOATSREQLIMIT_GAM_WALK_3D,
 			     DIS_ATS_WRONLY_PG))
 	},
-	{ XE_RTP_NAME("16028780921"),
-	  XE_RTP_RULES(GRAPHICS_VERSION(3510), GRAPHICS_STEP(A0, B0)),
-	  XE_RTP_ACTIONS(SET(CCCHKNREG2, LOCALITYDIS))
-	},
 	{ XE_RTP_NAME("14026144927"),
 	  XE_RTP_RULES(GRAPHICS_VERSION(3510), GRAPHICS_STEP(A0, B0)),
 	  XE_RTP_ACTIONS(SET(L3SQCREG2, L3_SQ_DISABLE_COAMA_2WAY_COH |

-- 
2.52.0


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

* [PATCH 7/7] drm/xe: Translate C-state "reset value" into RC6
  2026-03-05 12:02 [PATCH 0/7] Extra enabling patches for NVL-P Gustavo Sousa
                   ` (5 preceding siblings ...)
  2026-03-05 12:02 ` [PATCH 6/7] drm/xe/xe3p: Drop Wa_16028780921 Gustavo Sousa
@ 2026-03-05 12:02 ` Gustavo Sousa
  2026-03-05 22:25   ` Matt Roper
  2026-03-06 11:37 ` ✓ CI.KUnit: success for Extra enabling patches for NVL-P Patchwork
  2026-03-06 12:16 ` ✓ Xe.CI.BAT: " Patchwork
  8 siblings, 1 reply; 21+ messages in thread
From: Gustavo Sousa @ 2026-03-05 12:02 UTC (permalink / raw)
  To: intel-xe; +Cc: Gustavo Sousa

There are higher level sleep states that will cause RC6 state readout to
come back with an "in-reset" value. That is the case with NVL-P. As
those states are only possible if the GT is already in C6, let's just
translate the "reset value" into C6 when doing the readout.

Bspec: 67651
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 drivers/gpu/drm/xe/regs/xe_gt_regs.h | 1 +
 drivers/gpu/drm/xe/xe_guc_pc.c       | 8 ++++++++
 2 files changed, 9 insertions(+)

diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
index f49a28f4a330..1cc8c7c2d379 100644
--- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
@@ -20,6 +20,7 @@
 #define MTL_MIRROR_TARGET_WP1				XE_REG(0xc60)
 #define   MTL_CAGF_MASK					REG_GENMASK(8, 0)
 #define   MTL_CC_MASK					REG_GENMASK(12, 9)
+#define   MTL_CRST					0xf
 
 /* RPM unit config (Gen8+) */
 #define RPM_CONFIG0					XE_REG(0xd00)
diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c
index 21fe73ab4583..bb8c4e793492 100644
--- a/drivers/gpu/drm/xe/xe_guc_pc.c
+++ b/drivers/gpu/drm/xe/xe_guc_pc.c
@@ -756,6 +756,14 @@ enum xe_gt_idle_state xe_guc_pc_c_status(struct xe_guc_pc *pc)
 	if (GRAPHICS_VERx100(gt_to_xe(gt)) >= 1270) {
 		reg = xe_mmio_read32(&gt->mmio, MTL_MIRROR_TARGET_WP1);
 		gt_c_state = REG_FIELD_GET(MTL_CC_MASK, reg);
+
+		/*
+		 * There are higher level sleep states that will cause this
+		 * field to read out as its reset state, and those are only
+		 * possible after the GT is already in C6.
+		 */
+		if (gt_c_state == MTL_CRST)
+			gt_c_state = GT_C6;
 	} else {
 		reg = xe_mmio_read32(&gt->mmio, GT_CORE_STATUS);
 		gt_c_state = REG_FIELD_GET(RCN_MASK, reg);

-- 
2.52.0


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

* Re: [PATCH 5/7] drm/xe/nvlp: Implement Wa_14026539277
  2026-03-05 12:02 ` [PATCH 5/7] drm/xe/nvlp: Implement Wa_14026539277 Gustavo Sousa
@ 2026-03-05 15:23   ` Gustavo Sousa
  2026-03-05 22:05     ` Matt Roper
  0 siblings, 1 reply; 21+ messages in thread
From: Gustavo Sousa @ 2026-03-05 15:23 UTC (permalink / raw)
  To: intel-xe; +Cc: Piotr Piórkowski

Gustavo Sousa <gustavo.sousa@intel.com> writes:

> Implement the KMD part of Wa_14026539277, which applies to NVL-P A0.
> The KMD implementation is just one component of the workaround, which
> also depends on Pcode to implement its part in order to be complete.
>
> Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
> ---
>  drivers/gpu/drm/xe/regs/xe_gt_regs.h |  4 ++++
>  drivers/gpu/drm/xe/xe_gt.c           | 27 +++++++++++++++++++++++++++
>  drivers/gpu/drm/xe/xe_wa_oob.rules   |  2 ++
>  3 files changed, 33 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> index 66ddad767ad4..a83cafbe03fd 100644
> --- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> +++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> @@ -452,6 +452,10 @@
>  
>  #define XEHPC_L3CLOS_MASK(i)			XE_REG_MCR(0xb194 + (i) * 8)
>  
> +#define L2COMPUTESIDECTRL			XE_REG_MCR(0xb1c0)
> +#define   CECTRL				REG_GENMASK(2, 1)
> +#define   CECTRL_CENODATA_ALWAYS		REG_FIELD_PREP(CECTRL, 0x0)
> +
>  #define XE2_GLOBAL_INVAL			XE_REG(0xb404)
>  
>  #define XE2LPM_L3SQCREG2			XE_REG_MCR(0xb604)
> diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
> index b455af1e6072..3c8692f9b8cf 100644
> --- a/drivers/gpu/drm/xe/xe_gt.c
> +++ b/drivers/gpu/drm/xe/xe_gt.c
> @@ -450,6 +450,25 @@ int xe_gt_record_default_lrcs(struct xe_gt *gt)
>  	return err;
>  }
>  
> +static void xe_gt_wa_14026539277(struct xe_gt *gt)
> +{
> +	u32 val;
> +
> +	if (!XE_GT_WA(gt, 14026539277))
> +		return;

It appears SRIOV VF wouldn't have access to the register below, right?

Adding Piotr here, since we talked about it offline recently. Does
implementing this only on PF side suffice?

If so, should we return early here if on a VF or should we rather add a
FUNC(xe_rtp_match_not_sriov_vf) in the rules for Wa_14026539277?

One thing that I realize with the latter approach is that 14026539277
would not be listed in the workarounds debugfs file.  Do we really want
that? I think this question applies to all cases where we use
FUNC(xe_rtp_match_not_sriov_vf), not only this one.

--
Gustavo Sousa

> +
> +	/*
> +	 * L2COMPUTESIDECTRL has a specific offset for media and the GSI offset
> +	 * does not apply.
> +	 */
> +	xe_gt_assert(gt, xe_gt_is_main_type(gt));
> +
> +	val = xe_gt_mcr_unicast_read_any(gt, L2COMPUTESIDECTRL);
> +	val &= ~CECTRL;
> +	val |= CECTRL_CENODATA_ALWAYS;
> +	xe_gt_mcr_multicast_write(gt, L2COMPUTESIDECTRL, val);
> +}
> +
>  int xe_gt_init_early(struct xe_gt *gt)
>  {
>  	int err;
> @@ -575,6 +594,14 @@ static int gt_init_with_gt_forcewake(struct xe_gt *gt)
>  	 */
>  	gt->info.gmdid = xe_mmio_read32(&gt->mmio, GMD_ID);
>  
> +	/*
> +	 * Wa_14026539277 can't be implemented as a regular GT workaround (i.e.
> +	 * as an entry in gt_was[]) because we would get the hardware already in
> +	 * a bad state by the time it would be applied.  Hence, we implement it
> +	 * as an OOB workaround and apply it early to prevent that.
> +	 */
> +	xe_gt_wa_14026539277(gt);
> +
>  	return 0;
>  }
>  
> diff --git a/drivers/gpu/drm/xe/xe_wa_oob.rules b/drivers/gpu/drm/xe/xe_wa_oob.rules
> index 80b54b195f20..7f42436df6ab 100644
> --- a/drivers/gpu/drm/xe/xe_wa_oob.rules
> +++ b/drivers/gpu/drm/xe/xe_wa_oob.rules
> @@ -58,3 +58,5 @@
>  
>  14025883347	MEDIA_VERSION_RANGE(1301, 3503)
>  		GRAPHICS_VERSION_RANGE(2004, 3005)
> +
> +14026539277	PLATFORM(NOVALAKE_P), PLATFORM_STEP(A0, B0), GRAPHICS_VERSION(3510)
>
> -- 
> 2.52.0

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

* Re: [PATCH 5/7] drm/xe/nvlp: Implement Wa_14026539277
  2026-03-05 15:23   ` Gustavo Sousa
@ 2026-03-05 22:05     ` Matt Roper
  0 siblings, 0 replies; 21+ messages in thread
From: Matt Roper @ 2026-03-05 22:05 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: intel-xe, Piotr Piórkowski

On Thu, Mar 05, 2026 at 12:23:52PM -0300, Gustavo Sousa wrote:
> Gustavo Sousa <gustavo.sousa@intel.com> writes:
> 
> > Implement the KMD part of Wa_14026539277, which applies to NVL-P A0.
> > The KMD implementation is just one component of the workaround, which
> > also depends on Pcode to implement its part in order to be complete.
> >
> > Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
> > ---
> >  drivers/gpu/drm/xe/regs/xe_gt_regs.h |  4 ++++
> >  drivers/gpu/drm/xe/xe_gt.c           | 27 +++++++++++++++++++++++++++
> >  drivers/gpu/drm/xe/xe_wa_oob.rules   |  2 ++
> >  3 files changed, 33 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> > index 66ddad767ad4..a83cafbe03fd 100644
> > --- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> > +++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> > @@ -452,6 +452,10 @@
> >  
> >  #define XEHPC_L3CLOS_MASK(i)			XE_REG_MCR(0xb194 + (i) * 8)
> >  
> > +#define L2COMPUTESIDECTRL			XE_REG_MCR(0xb1c0)
> > +#define   CECTRL				REG_GENMASK(2, 1)
> > +#define   CECTRL_CENODATA_ALWAYS		REG_FIELD_PREP(CECTRL, 0x0)
> > +
> >  #define XE2_GLOBAL_INVAL			XE_REG(0xb404)
> >  
> >  #define XE2LPM_L3SQCREG2			XE_REG_MCR(0xb604)
> > diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
> > index b455af1e6072..3c8692f9b8cf 100644
> > --- a/drivers/gpu/drm/xe/xe_gt.c
> > +++ b/drivers/gpu/drm/xe/xe_gt.c
> > @@ -450,6 +450,25 @@ int xe_gt_record_default_lrcs(struct xe_gt *gt)
> >  	return err;
> >  }
> >  
> > +static void xe_gt_wa_14026539277(struct xe_gt *gt)
> > +{
> > +	u32 val;
> > +
> > +	if (!XE_GT_WA(gt, 14026539277))
> > +		return;
> 
> It appears SRIOV VF wouldn't have access to the register below, right?
> 
> Adding Piotr here, since we talked about it offline recently. Does
> implementing this only on PF side suffice?
> 
> If so, should we return early here if on a VF or should we rather add a
> FUNC(xe_rtp_match_not_sriov_vf) in the rules for Wa_14026539277?
> 
> One thing that I realize with the latter approach is that 14026539277
> would not be listed in the workarounds debugfs file.  Do we really want
> that? I think this question applies to all cases where we use
> FUNC(xe_rtp_match_not_sriov_vf), not only this one.

Right, registers like this only have a single global copy in hardware,
and whatever the PF sets in there applies to everything on the system
(PFs and VFs).  So adding FUNC(xe_rtp_match_not_sriov_vf) sounds correct
to me since this workaround only applies to PF drivers and isn't
applicable to VFs.


Matt

> 
> --
> Gustavo Sousa
> 
> > +
> > +	/*
> > +	 * L2COMPUTESIDECTRL has a specific offset for media and the GSI offset
> > +	 * does not apply.
> > +	 */
> > +	xe_gt_assert(gt, xe_gt_is_main_type(gt));
> > +
> > +	val = xe_gt_mcr_unicast_read_any(gt, L2COMPUTESIDECTRL);
> > +	val &= ~CECTRL;
> > +	val |= CECTRL_CENODATA_ALWAYS;
> > +	xe_gt_mcr_multicast_write(gt, L2COMPUTESIDECTRL, val);
> > +}
> > +
> >  int xe_gt_init_early(struct xe_gt *gt)
> >  {
> >  	int err;
> > @@ -575,6 +594,14 @@ static int gt_init_with_gt_forcewake(struct xe_gt *gt)
> >  	 */
> >  	gt->info.gmdid = xe_mmio_read32(&gt->mmio, GMD_ID);
> >  
> > +	/*
> > +	 * Wa_14026539277 can't be implemented as a regular GT workaround (i.e.
> > +	 * as an entry in gt_was[]) because we would get the hardware already in
> > +	 * a bad state by the time it would be applied.  Hence, we implement it
> > +	 * as an OOB workaround and apply it early to prevent that.
> > +	 */
> > +	xe_gt_wa_14026539277(gt);
> > +
> >  	return 0;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/xe/xe_wa_oob.rules b/drivers/gpu/drm/xe/xe_wa_oob.rules
> > index 80b54b195f20..7f42436df6ab 100644
> > --- a/drivers/gpu/drm/xe/xe_wa_oob.rules
> > +++ b/drivers/gpu/drm/xe/xe_wa_oob.rules
> > @@ -58,3 +58,5 @@
> >  
> >  14025883347	MEDIA_VERSION_RANGE(1301, 3503)
> >  		GRAPHICS_VERSION_RANGE(2004, 3005)
> > +
> > +14026539277	PLATFORM(NOVALAKE_P), PLATFORM_STEP(A0, B0), GRAPHICS_VERSION(3510)
> >
> > -- 
> > 2.52.0

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

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

* Re: [PATCH 1/7] drm/xe: Modify stepping info directly in xe_step_*_get()
  2026-03-05 12:02 ` [PATCH 1/7] drm/xe: Modify stepping info directly in xe_step_*_get() Gustavo Sousa
@ 2026-03-05 22:07   ` Matt Roper
  0 siblings, 0 replies; 21+ messages in thread
From: Matt Roper @ 2026-03-05 22:07 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: intel-xe

On Thu, Mar 05, 2026 at 09:02:28AM -0300, Gustavo Sousa wrote:
> In an upcoming change, we will add a member to struct xe_step_info to
> represent the platform-level stepping.  As such, we should stop assigning
> the value returned by functions xe_step_pre_gmdid_get() and
> xe_step_gmdid_get() directly to xe->info.step.
> 
> Since there are no other users for those functions, let's simply update
> them to modify xe->info.step directly.
> 
> Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>

> ---
>  drivers/gpu/drm/xe/xe_pci.c  |  6 ++---
>  drivers/gpu/drm/xe/xe_step.c | 52 +++++++++++++++++++++++++-------------------
>  drivers/gpu/drm/xe/xe_step.h |  8 +++----
>  3 files changed, 36 insertions(+), 30 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
> index 29f976e66848..72d4131e9775 100644
> --- a/drivers/gpu/drm/xe/xe_pci.c
> +++ b/drivers/gpu/drm/xe/xe_pci.c
> @@ -914,7 +914,7 @@ static int xe_info_init(struct xe_device *xe,
>  	if (desc->pre_gmdid_graphics_ip) {
>  		graphics_ip = desc->pre_gmdid_graphics_ip;
>  		media_ip = desc->pre_gmdid_media_ip;
> -		xe->info.step = xe_step_pre_gmdid_get(xe);
> +		xe_step_pre_gmdid_get(xe);
>  	} else {
>  		xe_assert(xe, !desc->pre_gmdid_media_ip);
>  		ret = handle_gmdid(xe, &graphics_ip, &media_ip,
> @@ -922,9 +922,7 @@ static int xe_info_init(struct xe_device *xe,
>  		if (ret)
>  			return ret;
>  
> -		xe->info.step = xe_step_gmdid_get(xe,
> -						  graphics_gmdid_revid,
> -						  media_gmdid_revid);
> +		xe_step_gmdid_get(xe, graphics_gmdid_revid, media_gmdid_revid);
>  	}
>  
>  	/*
> diff --git a/drivers/gpu/drm/xe/xe_step.c b/drivers/gpu/drm/xe/xe_step.c
> index 2860986f82f7..064b604b5b94 100644
> --- a/drivers/gpu/drm/xe/xe_step.c
> +++ b/drivers/gpu/drm/xe/xe_step.c
> @@ -115,15 +115,17 @@ __diag_pop();
>   * Convert the PCI revid into proper IP steppings.  This should only be
>   * used on platforms that do not have GMD_ID support.
>   */
> -struct xe_step_info xe_step_pre_gmdid_get(struct xe_device *xe)
> +void xe_step_pre_gmdid_get(struct xe_device *xe)
>  {
>  	const struct xe_step_info *revids = NULL;
> -	struct xe_step_info step = {};
>  	u16 revid = xe->info.revid;
>  	int size = 0;
>  	const int *basedie_info = NULL;
>  	int basedie_size = 0;
>  	int baseid = 0;
> +	u8 graphics = STEP_NONE;
> +	u8 media = STEP_NONE;
> +	u8 basedie = STEP_NONE;
>  
>  	if (xe->info.platform == XE_PVC) {
>  		baseid = FIELD_GET(GENMASK(5, 3), xe->info.revid);
> @@ -166,10 +168,12 @@ struct xe_step_info xe_step_pre_gmdid_get(struct xe_device *xe)
>  
>  	/* Not using the stepping scheme for the platform yet. */
>  	if (!revids)
> -		return step;
> +		goto done;
>  
>  	if (revid < size && revids[revid].graphics != STEP_NONE) {
> -		step = revids[revid];
> +		graphics = revids[revid].graphics;
> +		media = revids[revid].media;
> +		basedie = revids[revid].basedie;
>  	} else {
>  		drm_warn(&xe->drm, "Unknown revid 0x%02x\n", revid);
>  
> @@ -187,25 +191,30 @@ struct xe_step_info xe_step_pre_gmdid_get(struct xe_device *xe)
>  		if (revid < size) {
>  			drm_dbg(&xe->drm, "Using steppings for revid 0x%02x\n",
>  				revid);
> -			step = revids[revid];
> +			graphics = revids[revid].graphics;
> +			media = revids[revid].media;
> +			basedie = revids[revid].basedie;
>  		} else {
>  			drm_dbg(&xe->drm, "Using future steppings\n");
> -			step.graphics = STEP_FUTURE;
> +			graphics = STEP_FUTURE;
>  		}
>  	}
>  
> -	drm_WARN_ON(&xe->drm, step.graphics == STEP_NONE);
> +	drm_WARN_ON(&xe->drm, graphics == STEP_NONE);
>  
>  	if (basedie_info && basedie_size) {
>  		if (baseid < basedie_size && basedie_info[baseid] != STEP_NONE) {
> -			step.basedie = basedie_info[baseid];
> +			basedie = basedie_info[baseid];
>  		} else {
>  			drm_warn(&xe->drm, "Unknown baseid 0x%02x\n", baseid);
> -			step.basedie = STEP_FUTURE;
> +			basedie = STEP_FUTURE;
>  		}
>  	}
>  
> -	return step;
> +done:
> +	xe->info.step.graphics = graphics;
> +	xe->info.step.media = media;
> +	xe->info.step.basedie = basedie;
>  }
>  
>  /**
> @@ -220,28 +229,27 @@ struct xe_step_info xe_step_pre_gmdid_get(struct xe_device *xe)
>   * all platforms:  major steppings (A0, B0, etc.) are 4 apart, with minor
>   * steppings (A1, A2, etc.) taking the values in between.
>   */
> -struct xe_step_info xe_step_gmdid_get(struct xe_device *xe,
> -				      u32 graphics_gmdid_revid,
> -				      u32 media_gmdid_revid)
> +void xe_step_gmdid_get(struct xe_device *xe,
> +		       u32 graphics_gmdid_revid,
> +		       u32 media_gmdid_revid)
>  {
> -	struct xe_step_info step = {
> -		.graphics = STEP_A0 + graphics_gmdid_revid,
> -		.media = STEP_A0 + media_gmdid_revid,
> -	};
> +	u8 graphics = STEP_A0 + graphics_gmdid_revid;
> +	u8 media = STEP_A0 + media_gmdid_revid;
>  
> -	if (step.graphics >= STEP_FUTURE) {
> -		step.graphics = STEP_FUTURE;
> +	if (graphics >= STEP_FUTURE) {
> +		graphics = STEP_FUTURE;
>  		drm_dbg(&xe->drm, "Graphics GMD_ID revid value %d treated as future stepping\n",
>  			graphics_gmdid_revid);
>  	}
>  
> -	if (step.media >= STEP_FUTURE) {
> -		step.media = STEP_FUTURE;
> +	if (media >= STEP_FUTURE) {
> +		media = STEP_FUTURE;
>  		drm_dbg(&xe->drm, "Media GMD_ID revid value %d treated as future stepping\n",
>  			media_gmdid_revid);
>  	}
>  
> -	return step;
> +	xe->info.step.graphics = graphics;
> +	xe->info.step.media = media;
>  }
>  
>  #define STEP_NAME_CASE(name)	\
> diff --git a/drivers/gpu/drm/xe/xe_step.h b/drivers/gpu/drm/xe/xe_step.h
> index 686cb59200c2..6febb7fac476 100644
> --- a/drivers/gpu/drm/xe/xe_step.h
> +++ b/drivers/gpu/drm/xe/xe_step.h
> @@ -12,10 +12,10 @@
>  
>  struct xe_device;
>  
> -struct xe_step_info xe_step_pre_gmdid_get(struct xe_device *xe);
> -struct xe_step_info xe_step_gmdid_get(struct xe_device *xe,
> -				      u32 graphics_gmdid_revid,
> -				      u32 media_gmdid_revid);
> +void xe_step_pre_gmdid_get(struct xe_device *xe);
> +void xe_step_gmdid_get(struct xe_device *xe,
> +		       u32 graphics_gmdid_revid,
> +		       u32 media_gmdid_revid);
>  static inline u32 xe_step_to_gmdid(enum xe_step step) { return step - STEP_A0; }
>  
>  const char *xe_step_name(enum xe_step step);
> 
> -- 
> 2.52.0
> 

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

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

* Re: [PATCH 2/7] drm/xe: Drop unused IS_PLATFORM_STEP() and IS_SUBPLATFORM_STEP()
  2026-03-05 12:02 ` [PATCH 2/7] drm/xe: Drop unused IS_PLATFORM_STEP() and IS_SUBPLATFORM_STEP() Gustavo Sousa
@ 2026-03-05 22:09   ` Matt Roper
  0 siblings, 0 replies; 21+ messages in thread
From: Matt Roper @ 2026-03-05 22:09 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: intel-xe

On Thu, Mar 05, 2026 at 09:02:29AM -0300, Gustavo Sousa wrote:
> The macros IS_PLATFORM_STEP() and IS_SUBPLATFORM_STEP() are unused now
> and can be simply dropped.  Furthermore, in upcoming changes we will add
> logic to read platform-level step information from PCI RevID and keeping
> those macros around would potentially cause confusion.
> 
> Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>

Looks like these have been unused since

  87c299fa3a97 ("drm/xe/guc: Port Wa_14014475959 to xe_wa and fix it")
  63bbd800ff01 ("drm/xe/guc: Port Wa_22012727170/Wa_22012727685 to xe_wa")

respectively.

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>


> ---
>  drivers/gpu/drm/xe/xe_device_types.h | 10 ----------
>  1 file changed, 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
> index e9032014923d..85451cef3c25 100644
> --- a/drivers/gpu/drm/xe/xe_device_types.h
> +++ b/drivers/gpu/drm/xe/xe_device_types.h
> @@ -81,16 +81,6 @@ enum xe_wedged_mode {
>  
>  #define XE_MAX_ASID	(BIT(20))
>  
> -#define IS_PLATFORM_STEP(_xe, _platform, min_step, max_step)	\
> -	((_xe)->info.platform == (_platform) &&			\
> -	 (_xe)->info.step.graphics >= (min_step) &&		\
> -	 (_xe)->info.step.graphics < (max_step))
> -#define IS_SUBPLATFORM_STEP(_xe, _platform, sub, min_step, max_step)	\
> -	((_xe)->info.platform == (_platform) &&				\
> -	 (_xe)->info.subplatform == (sub) &&				\
> -	 (_xe)->info.step.graphics >= (min_step) &&			\
> -	 (_xe)->info.step.graphics < (max_step))
> -
>  /**
>   * struct xe_device - Top level struct of Xe device
>   */
> 
> -- 
> 2.52.0
> 

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

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

* Re: [PATCH 3/7] drm/xe/nvlp: Read platform-level stepping info
  2026-03-05 12:02 ` [PATCH 3/7] drm/xe/nvlp: Read platform-level stepping info Gustavo Sousa
@ 2026-03-05 22:13   ` Matt Roper
  0 siblings, 0 replies; 21+ messages in thread
From: Matt Roper @ 2026-03-05 22:13 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: intel-xe

On Thu, Mar 05, 2026 at 09:02:30AM -0300, Gustavo Sousa wrote:
> There will be a NVL-P workaround for which we will need to know the
> platform-level stepping information in order to decide whether to apply
> it or not.
> 
> While NVL-P has a nice mapping between the PCI revid and our symbolic
> stepping enumeration, not all platforms are like that: (i) Some
> platforms will have a single PCI revid used for a set platform level
> steppings (ii) and some might even require specific mappings.
> 
> To make things simpler, let's include stepping information in the device
> info only on demand, for those platforms where it is needed for
> workaround checks.
> 
> Bspec: 74201
> Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>

This will leave other platforms set to 0 (STEP_NONE), which should be
easy to catch as an error if we try to match a stepping there.  Looks
reasonable to me.

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>


> ---
>  drivers/gpu/drm/xe/xe_pci.c        |  2 ++
>  drivers/gpu/drm/xe/xe_step.c       | 22 ++++++++++++++++++++++
>  drivers/gpu/drm/xe/xe_step.h       |  2 ++
>  drivers/gpu/drm/xe/xe_step_types.h |  1 +
>  4 files changed, 27 insertions(+)
> 
> diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
> index 72d4131e9775..b9000b5d3ca7 100644
> --- a/drivers/gpu/drm/xe/xe_pci.c
> +++ b/drivers/gpu/drm/xe/xe_pci.c
> @@ -904,6 +904,8 @@ static int xe_info_init(struct xe_device *xe,
>  	int ret;
>  	u8 id;
>  
> +	xe_step_platform_get(xe);
> +
>  	/*
>  	 * If this platform supports GMD_ID, we'll detect the proper IP
>  	 * descriptor to use from hardware registers.
> diff --git a/drivers/gpu/drm/xe/xe_step.c b/drivers/gpu/drm/xe/xe_step.c
> index 064b604b5b94..d0f888c31831 100644
> --- a/drivers/gpu/drm/xe/xe_step.c
> +++ b/drivers/gpu/drm/xe/xe_step.c
> @@ -108,6 +108,28 @@ static const int pvc_basedie_subids[] = {
>  
>  __diag_pop();
>  
> +/**
> + * xe_step_platform_get - Determine platform-level stepping from PCI revid
> + * @xe: Xe device
> + *
> + * Convert the PCI revid into a platform-level stepping value and store that
> + * in the device info.
> + */
> +void xe_step_platform_get(struct xe_device *xe)
> +{
> +	/*
> +	 * Not all platforms map PCI revid directly into our symbolic stepping
> +	 * enumeration. Some platforms will have a single PCI revid used for a
> +	 * range platform level steppings and some might even require specific
> +	 * mappings. So prefer to err on the side of caution and include only
> +	 * the platforms from which we need the stepping info for workaround
> +	 * checks.
> +	 */
> +
> +	if (xe->info.platform == XE_NOVALAKE_P)
> +		xe->info.step.platform = STEP_A0 + xe->info.revid;
> +}
> +
>  /**
>   * xe_step_pre_gmdid_get - Determine IP steppings from PCI revid
>   * @xe: Xe device
> diff --git a/drivers/gpu/drm/xe/xe_step.h b/drivers/gpu/drm/xe/xe_step.h
> index 6febb7fac476..41f1c95c46e5 100644
> --- a/drivers/gpu/drm/xe/xe_step.h
> +++ b/drivers/gpu/drm/xe/xe_step.h
> @@ -12,6 +12,8 @@
>  
>  struct xe_device;
>  
> +void xe_step_platform_get(struct xe_device *xe);
> +
>  void xe_step_pre_gmdid_get(struct xe_device *xe);
>  void xe_step_gmdid_get(struct xe_device *xe,
>  		       u32 graphics_gmdid_revid,
> diff --git a/drivers/gpu/drm/xe/xe_step_types.h b/drivers/gpu/drm/xe/xe_step_types.h
> index d978cc2512f2..43ca73850739 100644
> --- a/drivers/gpu/drm/xe/xe_step_types.h
> +++ b/drivers/gpu/drm/xe/xe_step_types.h
> @@ -9,6 +9,7 @@
>  #include <linux/types.h>
>  
>  struct xe_step_info {
> +	u8 platform;
>  	u8 graphics;
>  	u8 media;
>  	u8 basedie;
> 
> -- 
> 2.52.0
> 

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

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

* Re: [PATCH 4/7] drm/xe/rtp: Add support for matching platform-level stepping
  2026-03-05 12:02 ` [PATCH 4/7] drm/xe/rtp: Add support for matching platform-level stepping Gustavo Sousa
@ 2026-03-05 22:22   ` Matt Roper
  2026-03-06  0:53     ` Matt Roper
  0 siblings, 1 reply; 21+ messages in thread
From: Matt Roper @ 2026-03-05 22:22 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: intel-xe

On Thu, Mar 05, 2026 at 09:02:31AM -0300, Gustavo Sousa wrote:
> Add support for matching platform-level stepping, which will be used for
> an upcoming NVL-P workaround.
> 
> As support for reading platform-level stepping information is added only
> as needed in the driver, add a warning when the rule finds a STEP_NONE
> value, which is an indication that the driver is missing such a support.
> 
> Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
> ---
>  drivers/gpu/drm/xe/xe_rtp.c       |  7 +++++++
>  drivers/gpu/drm/xe/xe_rtp.h       | 20 ++++++++++++++++++++
>  drivers/gpu/drm/xe/xe_rtp_types.h |  1 +
>  3 files changed, 28 insertions(+)
> 
> diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
> index 7bfdc6795ce6..991f218f1cc3 100644
> --- a/drivers/gpu/drm/xe/xe_rtp.c
> +++ b/drivers/gpu/drm/xe/xe_rtp.c
> @@ -55,6 +55,13 @@ static bool rule_matches(const struct xe_device *xe,
>  			match = xe->info.platform == r->platform &&
>  				xe->info.subplatform == r->subplatform;
>  			break;
> +		case XE_RTP_MATCH_PLATFORM_STEP:
> +			if (drm_WARN_ON(&xe->drm, xe->info.step.platform == STEP_NONE))
> +				return false;
> +
> +			match = xe->info.step.platform >= r->step_start &&
> +				xe->info.step.platform < r->step_end;
> +			break;
>  		case XE_RTP_MATCH_GRAPHICS_VERSION:
>  			if (drm_WARN_ON(&xe->drm, !gt))
>  				return false;
> diff --git a/drivers/gpu/drm/xe/xe_rtp.h b/drivers/gpu/drm/xe/xe_rtp.h
> index be4195264286..7d6daa7eb1e4 100644
> --- a/drivers/gpu/drm/xe/xe_rtp.h
> +++ b/drivers/gpu/drm/xe/xe_rtp.h
> @@ -35,6 +35,10 @@ struct xe_reg_sr;
>  	{ .match_type = XE_RTP_MATCH_SUBPLATFORM,				\
>  	  .platform = plat__, .subplatform = sub__ }
>  
> +#define _XE_RTP_RULE_PLATFORM_STEP(start__, end__)				\
> +	{ .match_type = XE_RTP_MATCH_PLATFORM_STEP,				\
> +	  .step_start = start__, .step_end = end__ }
> +
>  #define _XE_RTP_RULE_GRAPHICS_STEP(start__, end__)				\
>  	{ .match_type = XE_RTP_MATCH_GRAPHICS_STEP,				\
>  	  .step_start = start__, .step_end = end__ }
> @@ -66,6 +70,22 @@ struct xe_reg_sr;
>  #define XE_RTP_RULE_SUBPLATFORM(plat_, sub_)					\
>  	_XE_RTP_RULE_SUBPLATFORM(XE_##plat_, XE_SUBPLATFORM_##plat_##_##sub_)
>  
> +/**
> + * XE_RTP_RULE_PLATFORM_STEP - Create rule matching platform-level stepping
> + * @start_: First stepping matching the rule
> + * @end_: First stepping that does not match the rule
> + *
> + * Note that the range matching this rule is [ @start_, @end_ ), i.e. inclusive
> + * on the left, exclusive on the right.
> + *
> + * You need to make sure that proper support for reading platform-level stepping
> + * information is present for the target platform before using this rule.
> + *
> + * Refer to XE_RTP_RULES() for expected usage.
> + */
> +#define XE_RTP_RULE_PLATFORM_STEP(start_, end_)					\
> +	_XE_RTP_RULE_PLATFORM_STEP(STEP_##start_, STEP_##end_)

To use this effectively someone will need to pair this with another rule
like

        PLATFORM(NOVALAKE_P), PLATFORM_STEP(A2, C1)

and using PLATFORM_STEP() by itself without a corresponding PLATFORM()
or SUBPLATFORM() would be a bug.  Maybe we should just make
PLATFORM_STEP a rule that takes the platform as well as the stepping
range so that it's impossible for anyone to ever use PLATFORM_STEP
without tying it to a specific platform?  And also make a corresponding
SUBPLATFORM_STEP() rule for cases where that's relevant.  E.g.,

        PLATFORM_STEP(NOVALAKE_P, A2, C1)

or

        SUBPLATFORM_STEP(BATTLEMAGE, BATTLEMAGE_G21, A0, B0)

We'd need to update the union in struct xe_rtp_rule, but the size of the
union shouldn't increase.

What do you think?


Matt

> +
>  /**
>   * XE_RTP_RULE_GRAPHICS_STEP - Create rule matching graphics stepping
>   * @start_: First stepping matching the rule
> diff --git a/drivers/gpu/drm/xe/xe_rtp_types.h b/drivers/gpu/drm/xe/xe_rtp_types.h
> index 6ba7f226c227..166251615be1 100644
> --- a/drivers/gpu/drm/xe/xe_rtp_types.h
> +++ b/drivers/gpu/drm/xe/xe_rtp_types.h
> @@ -41,6 +41,7 @@ struct xe_rtp_action {
>  enum {
>  	XE_RTP_MATCH_PLATFORM,
>  	XE_RTP_MATCH_SUBPLATFORM,
> +	XE_RTP_MATCH_PLATFORM_STEP,
>  	XE_RTP_MATCH_GRAPHICS_VERSION,
>  	XE_RTP_MATCH_GRAPHICS_VERSION_RANGE,
>  	XE_RTP_MATCH_GRAPHICS_VERSION_ANY_GT,
> 
> -- 
> 2.52.0
> 

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

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

* Re: [PATCH 6/7] drm/xe/xe3p: Drop Wa_16028780921
  2026-03-05 12:02 ` [PATCH 6/7] drm/xe/xe3p: Drop Wa_16028780921 Gustavo Sousa
@ 2026-03-05 22:23   ` Matt Roper
  0 siblings, 0 replies; 21+ messages in thread
From: Matt Roper @ 2026-03-05 22:23 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: intel-xe

On Thu, Mar 05, 2026 at 09:02:33AM -0300, Gustavo Sousa wrote:
> Wa_16028780921 involves writing to a register that is locked by firmware
> prior to driver loading and doesn't have any effect if implemented by
> the KMD.  Since the implementation of the workaround actually belongs
> the firmware, just drop the ineffective implementation by the KMD.
> 
> Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>

> ---
>  drivers/gpu/drm/xe/regs/xe_gt_regs.h | 3 ---
>  drivers/gpu/drm/xe/xe_wa.c           | 4 ----
>  2 files changed, 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> index a83cafbe03fd..f49a28f4a330 100644
> --- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> +++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> @@ -218,9 +218,6 @@
>  
>  #define GSCPSMI_BASE				XE_REG(0x880c)
>  
> -#define CCCHKNREG2				XE_REG_MCR(0x881c)
> -#define   LOCALITYDIS				REG_BIT(7)
> -
>  #define CCCHKNREG1				XE_REG_MCR(0x8828)
>  #define   L3CMPCTRL				REG_BIT(23)
>  #define   ENCOMPPERFFIX				REG_BIT(18)
> diff --git a/drivers/gpu/drm/xe/xe_wa.c b/drivers/gpu/drm/xe/xe_wa.c
> index 183c5c86c35a..38881b1aaeb1 100644
> --- a/drivers/gpu/drm/xe/xe_wa.c
> +++ b/drivers/gpu/drm/xe/xe_wa.c
> @@ -287,10 +287,6 @@ static const struct xe_rtp_entry_sr gt_was[] = {
>  	  XE_RTP_ACTIONS(SET(MMIOATSREQLIMIT_GAM_WALK_3D,
>  			     DIS_ATS_WRONLY_PG))
>  	},
> -	{ XE_RTP_NAME("16028780921"),
> -	  XE_RTP_RULES(GRAPHICS_VERSION(3510), GRAPHICS_STEP(A0, B0)),
> -	  XE_RTP_ACTIONS(SET(CCCHKNREG2, LOCALITYDIS))
> -	},
>  	{ XE_RTP_NAME("14026144927"),
>  	  XE_RTP_RULES(GRAPHICS_VERSION(3510), GRAPHICS_STEP(A0, B0)),
>  	  XE_RTP_ACTIONS(SET(L3SQCREG2, L3_SQ_DISABLE_COAMA_2WAY_COH |
> 
> -- 
> 2.52.0
> 

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

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

* Re: [PATCH 7/7] drm/xe: Translate C-state "reset value" into RC6
  2026-03-05 12:02 ` [PATCH 7/7] drm/xe: Translate C-state "reset value" into RC6 Gustavo Sousa
@ 2026-03-05 22:25   ` Matt Roper
  0 siblings, 0 replies; 21+ messages in thread
From: Matt Roper @ 2026-03-05 22:25 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: intel-xe

On Thu, Mar 05, 2026 at 09:02:34AM -0300, Gustavo Sousa wrote:
> There are higher level sleep states that will cause RC6 state readout to
> come back with an "in-reset" value. That is the case with NVL-P. As
> those states are only possible if the GT is already in C6, let's just
> translate the "reset value" into C6 when doing the readout.
> 
> Bspec: 67651
> Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>

> ---
>  drivers/gpu/drm/xe/regs/xe_gt_regs.h | 1 +
>  drivers/gpu/drm/xe/xe_guc_pc.c       | 8 ++++++++
>  2 files changed, 9 insertions(+)
> 
> diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> index f49a28f4a330..1cc8c7c2d379 100644
> --- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> +++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> @@ -20,6 +20,7 @@
>  #define MTL_MIRROR_TARGET_WP1				XE_REG(0xc60)
>  #define   MTL_CAGF_MASK					REG_GENMASK(8, 0)
>  #define   MTL_CC_MASK					REG_GENMASK(12, 9)
> +#define   MTL_CRST					0xf
>  
>  /* RPM unit config (Gen8+) */
>  #define RPM_CONFIG0					XE_REG(0xd00)
> diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c
> index 21fe73ab4583..bb8c4e793492 100644
> --- a/drivers/gpu/drm/xe/xe_guc_pc.c
> +++ b/drivers/gpu/drm/xe/xe_guc_pc.c
> @@ -756,6 +756,14 @@ enum xe_gt_idle_state xe_guc_pc_c_status(struct xe_guc_pc *pc)
>  	if (GRAPHICS_VERx100(gt_to_xe(gt)) >= 1270) {
>  		reg = xe_mmio_read32(&gt->mmio, MTL_MIRROR_TARGET_WP1);
>  		gt_c_state = REG_FIELD_GET(MTL_CC_MASK, reg);
> +
> +		/*
> +		 * There are higher level sleep states that will cause this
> +		 * field to read out as its reset state, and those are only
> +		 * possible after the GT is already in C6.
> +		 */
> +		if (gt_c_state == MTL_CRST)
> +			gt_c_state = GT_C6;
>  	} else {
>  		reg = xe_mmio_read32(&gt->mmio, GT_CORE_STATUS);
>  		gt_c_state = REG_FIELD_GET(RCN_MASK, reg);
> 
> -- 
> 2.52.0
> 

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

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

* Re: [PATCH 4/7] drm/xe/rtp: Add support for matching platform-level stepping
  2026-03-05 22:22   ` Matt Roper
@ 2026-03-06  0:53     ` Matt Roper
  2026-03-06 13:39       ` Gustavo Sousa
  0 siblings, 1 reply; 21+ messages in thread
From: Matt Roper @ 2026-03-06  0:53 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: intel-xe

On Thu, Mar 05, 2026 at 02:22:56PM -0800, Matt Roper wrote:
> On Thu, Mar 05, 2026 at 09:02:31AM -0300, Gustavo Sousa wrote:
> > Add support for matching platform-level stepping, which will be used for
> > an upcoming NVL-P workaround.
> > 
> > As support for reading platform-level stepping information is added only
> > as needed in the driver, add a warning when the rule finds a STEP_NONE
> > value, which is an indication that the driver is missing such a support.
> > 
> > Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
> > ---
> >  drivers/gpu/drm/xe/xe_rtp.c       |  7 +++++++
> >  drivers/gpu/drm/xe/xe_rtp.h       | 20 ++++++++++++++++++++
> >  drivers/gpu/drm/xe/xe_rtp_types.h |  1 +
> >  3 files changed, 28 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
> > index 7bfdc6795ce6..991f218f1cc3 100644
> > --- a/drivers/gpu/drm/xe/xe_rtp.c
> > +++ b/drivers/gpu/drm/xe/xe_rtp.c
> > @@ -55,6 +55,13 @@ static bool rule_matches(const struct xe_device *xe,
> >  			match = xe->info.platform == r->platform &&
> >  				xe->info.subplatform == r->subplatform;
> >  			break;
> > +		case XE_RTP_MATCH_PLATFORM_STEP:
> > +			if (drm_WARN_ON(&xe->drm, xe->info.step.platform == STEP_NONE))
> > +				return false;
> > +
> > +			match = xe->info.step.platform >= r->step_start &&
> > +				xe->info.step.platform < r->step_end;
> > +			break;
> >  		case XE_RTP_MATCH_GRAPHICS_VERSION:
> >  			if (drm_WARN_ON(&xe->drm, !gt))
> >  				return false;
> > diff --git a/drivers/gpu/drm/xe/xe_rtp.h b/drivers/gpu/drm/xe/xe_rtp.h
> > index be4195264286..7d6daa7eb1e4 100644
> > --- a/drivers/gpu/drm/xe/xe_rtp.h
> > +++ b/drivers/gpu/drm/xe/xe_rtp.h
> > @@ -35,6 +35,10 @@ struct xe_reg_sr;
> >  	{ .match_type = XE_RTP_MATCH_SUBPLATFORM,				\
> >  	  .platform = plat__, .subplatform = sub__ }
> >  
> > +#define _XE_RTP_RULE_PLATFORM_STEP(start__, end__)				\
> > +	{ .match_type = XE_RTP_MATCH_PLATFORM_STEP,				\
> > +	  .step_start = start__, .step_end = end__ }
> > +
> >  #define _XE_RTP_RULE_GRAPHICS_STEP(start__, end__)				\
> >  	{ .match_type = XE_RTP_MATCH_GRAPHICS_STEP,				\
> >  	  .step_start = start__, .step_end = end__ }
> > @@ -66,6 +70,22 @@ struct xe_reg_sr;
> >  #define XE_RTP_RULE_SUBPLATFORM(plat_, sub_)					\
> >  	_XE_RTP_RULE_SUBPLATFORM(XE_##plat_, XE_SUBPLATFORM_##plat_##_##sub_)
> >  
> > +/**
> > + * XE_RTP_RULE_PLATFORM_STEP - Create rule matching platform-level stepping
> > + * @start_: First stepping matching the rule
> > + * @end_: First stepping that does not match the rule
> > + *
> > + * Note that the range matching this rule is [ @start_, @end_ ), i.e. inclusive
> > + * on the left, exclusive on the right.
> > + *
> > + * You need to make sure that proper support for reading platform-level stepping
> > + * information is present for the target platform before using this rule.
> > + *
> > + * Refer to XE_RTP_RULES() for expected usage.
> > + */
> > +#define XE_RTP_RULE_PLATFORM_STEP(start_, end_)					\
> > +	_XE_RTP_RULE_PLATFORM_STEP(STEP_##start_, STEP_##end_)
> 
> To use this effectively someone will need to pair this with another rule
> like
> 
>         PLATFORM(NOVALAKE_P), PLATFORM_STEP(A2, C1)
> 
> and using PLATFORM_STEP() by itself without a corresponding PLATFORM()
> or SUBPLATFORM() would be a bug.  Maybe we should just make
> PLATFORM_STEP a rule that takes the platform as well as the stepping
> range so that it's impossible for anyone to ever use PLATFORM_STEP
> without tying it to a specific platform?  And also make a corresponding
> SUBPLATFORM_STEP() rule for cases where that's relevant.  E.g.,
> 
>         PLATFORM_STEP(NOVALAKE_P, A2, C1)
> 
> or
> 
>         SUBPLATFORM_STEP(BATTLEMAGE, BATTLEMAGE_G21, A0, B0)
> 
> We'd need to update the union in struct xe_rtp_rule, but the size of the
> union shouldn't increase.
> 
> What do you think?

Anyway, consider this feedback optional.  I think it's fine to land
as-is if you want.

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>

> 
> 
> Matt
> 
> > +
> >  /**
> >   * XE_RTP_RULE_GRAPHICS_STEP - Create rule matching graphics stepping
> >   * @start_: First stepping matching the rule
> > diff --git a/drivers/gpu/drm/xe/xe_rtp_types.h b/drivers/gpu/drm/xe/xe_rtp_types.h
> > index 6ba7f226c227..166251615be1 100644
> > --- a/drivers/gpu/drm/xe/xe_rtp_types.h
> > +++ b/drivers/gpu/drm/xe/xe_rtp_types.h
> > @@ -41,6 +41,7 @@ struct xe_rtp_action {
> >  enum {
> >  	XE_RTP_MATCH_PLATFORM,
> >  	XE_RTP_MATCH_SUBPLATFORM,
> > +	XE_RTP_MATCH_PLATFORM_STEP,
> >  	XE_RTP_MATCH_GRAPHICS_VERSION,
> >  	XE_RTP_MATCH_GRAPHICS_VERSION_RANGE,
> >  	XE_RTP_MATCH_GRAPHICS_VERSION_ANY_GT,
> > 
> > -- 
> > 2.52.0
> > 
> 
> -- 
> Matt Roper
> Graphics Software Engineer
> Linux GPU Platform Enablement
> Intel Corporation

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

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

* ✓ CI.KUnit: success for Extra enabling patches for NVL-P
  2026-03-05 12:02 [PATCH 0/7] Extra enabling patches for NVL-P Gustavo Sousa
                   ` (6 preceding siblings ...)
  2026-03-05 12:02 ` [PATCH 7/7] drm/xe: Translate C-state "reset value" into RC6 Gustavo Sousa
@ 2026-03-06 11:37 ` Patchwork
  2026-03-06 12:16 ` ✓ Xe.CI.BAT: " Patchwork
  8 siblings, 0 replies; 21+ messages in thread
From: Patchwork @ 2026-03-06 11:37 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: intel-xe

== Series Details ==

Series: Extra enabling patches for NVL-P
URL   : https://patchwork.freedesktop.org/series/162666/
State : success

== Summary ==

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

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

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

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



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

* ✓ Xe.CI.BAT: success for Extra enabling patches for NVL-P
  2026-03-05 12:02 [PATCH 0/7] Extra enabling patches for NVL-P Gustavo Sousa
                   ` (7 preceding siblings ...)
  2026-03-06 11:37 ` ✓ CI.KUnit: success for Extra enabling patches for NVL-P Patchwork
@ 2026-03-06 12:16 ` Patchwork
  8 siblings, 0 replies; 21+ messages in thread
From: Patchwork @ 2026-03-06 12:16 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: intel-xe

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

== Series Details ==

Series: Extra enabling patches for NVL-P
URL   : https://patchwork.freedesktop.org/series/162666/
State : success

== Summary ==

CI Bug Log - changes from xe-4674-a48305e6a2e6a1ed90df374101dd29542c105d8f_BAT -> xe-pw-162666v1_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (15 -> 15)
------------------------------

  No changes in participating hosts

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

  Here are the changes found in xe-pw-162666v1_BAT that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@kms_flip@basic-flip-vs-wf_vblank@d-edp1:
    - bat-adlp-7:         [PASS][1] -> [DMESG-WARN][2] ([Intel XE#7483])
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4674-a48305e6a2e6a1ed90df374101dd29542c105d8f/bat-adlp-7/igt@kms_flip@basic-flip-vs-wf_vblank@d-edp1.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-162666v1/bat-adlp-7/igt@kms_flip@basic-flip-vs-wf_vblank@d-edp1.html

  
#### Possible fixes ####

  * igt@kms_flip@basic-flip-vs-wf_vblank@c-edp1:
    - bat-adlp-7:         [DMESG-WARN][3] ([Intel XE#7483]) -> [PASS][4]
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4674-a48305e6a2e6a1ed90df374101dd29542c105d8f/bat-adlp-7/igt@kms_flip@basic-flip-vs-wf_vblank@c-edp1.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-162666v1/bat-adlp-7/igt@kms_flip@basic-flip-vs-wf_vblank@c-edp1.html

  
  [Intel XE#7483]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7483


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

  * Linux: xe-4674-a48305e6a2e6a1ed90df374101dd29542c105d8f -> xe-pw-162666v1

  IGT_8782: eac3b04d1f76b82ac3a183fb293c44e9185d8dba @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-4674-a48305e6a2e6a1ed90df374101dd29542c105d8f: a48305e6a2e6a1ed90df374101dd29542c105d8f
  xe-pw-162666v1: 162666v1

== Logs ==

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

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

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

* Re: [PATCH 4/7] drm/xe/rtp: Add support for matching platform-level stepping
  2026-03-06  0:53     ` Matt Roper
@ 2026-03-06 13:39       ` Gustavo Sousa
  2026-03-06 16:40         ` Matt Roper
  0 siblings, 1 reply; 21+ messages in thread
From: Gustavo Sousa @ 2026-03-06 13:39 UTC (permalink / raw)
  To: Matt Roper; +Cc: intel-xe

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

> On Thu, Mar 05, 2026 at 02:22:56PM -0800, Matt Roper wrote:
>> On Thu, Mar 05, 2026 at 09:02:31AM -0300, Gustavo Sousa wrote:
>> > Add support for matching platform-level stepping, which will be used for
>> > an upcoming NVL-P workaround.
>> > 
>> > As support for reading platform-level stepping information is added only
>> > as needed in the driver, add a warning when the rule finds a STEP_NONE
>> > value, which is an indication that the driver is missing such a support.
>> > 
>> > Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
>> > ---
>> >  drivers/gpu/drm/xe/xe_rtp.c       |  7 +++++++
>> >  drivers/gpu/drm/xe/xe_rtp.h       | 20 ++++++++++++++++++++
>> >  drivers/gpu/drm/xe/xe_rtp_types.h |  1 +
>> >  3 files changed, 28 insertions(+)
>> > 
>> > diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
>> > index 7bfdc6795ce6..991f218f1cc3 100644
>> > --- a/drivers/gpu/drm/xe/xe_rtp.c
>> > +++ b/drivers/gpu/drm/xe/xe_rtp.c
>> > @@ -55,6 +55,13 @@ static bool rule_matches(const struct xe_device *xe,
>> >  			match = xe->info.platform == r->platform &&
>> >  				xe->info.subplatform == r->subplatform;
>> >  			break;
>> > +		case XE_RTP_MATCH_PLATFORM_STEP:
>> > +			if (drm_WARN_ON(&xe->drm, xe->info.step.platform == STEP_NONE))
>> > +				return false;
>> > +
>> > +			match = xe->info.step.platform >= r->step_start &&
>> > +				xe->info.step.platform < r->step_end;
>> > +			break;
>> >  		case XE_RTP_MATCH_GRAPHICS_VERSION:
>> >  			if (drm_WARN_ON(&xe->drm, !gt))
>> >  				return false;
>> > diff --git a/drivers/gpu/drm/xe/xe_rtp.h b/drivers/gpu/drm/xe/xe_rtp.h
>> > index be4195264286..7d6daa7eb1e4 100644
>> > --- a/drivers/gpu/drm/xe/xe_rtp.h
>> > +++ b/drivers/gpu/drm/xe/xe_rtp.h
>> > @@ -35,6 +35,10 @@ struct xe_reg_sr;
>> >  	{ .match_type = XE_RTP_MATCH_SUBPLATFORM,				\
>> >  	  .platform = plat__, .subplatform = sub__ }
>> >  
>> > +#define _XE_RTP_RULE_PLATFORM_STEP(start__, end__)				\
>> > +	{ .match_type = XE_RTP_MATCH_PLATFORM_STEP,				\
>> > +	  .step_start = start__, .step_end = end__ }
>> > +
>> >  #define _XE_RTP_RULE_GRAPHICS_STEP(start__, end__)				\
>> >  	{ .match_type = XE_RTP_MATCH_GRAPHICS_STEP,				\
>> >  	  .step_start = start__, .step_end = end__ }
>> > @@ -66,6 +70,22 @@ struct xe_reg_sr;
>> >  #define XE_RTP_RULE_SUBPLATFORM(plat_, sub_)					\
>> >  	_XE_RTP_RULE_SUBPLATFORM(XE_##plat_, XE_SUBPLATFORM_##plat_##_##sub_)
>> >  
>> > +/**
>> > + * XE_RTP_RULE_PLATFORM_STEP - Create rule matching platform-level stepping
>> > + * @start_: First stepping matching the rule
>> > + * @end_: First stepping that does not match the rule
>> > + *
>> > + * Note that the range matching this rule is [ @start_, @end_ ), i.e. inclusive
>> > + * on the left, exclusive on the right.
>> > + *
>> > + * You need to make sure that proper support for reading platform-level stepping
>> > + * information is present for the target platform before using this rule.
>> > + *
>> > + * Refer to XE_RTP_RULES() for expected usage.
>> > + */
>> > +#define XE_RTP_RULE_PLATFORM_STEP(start_, end_)					\
>> > +	_XE_RTP_RULE_PLATFORM_STEP(STEP_##start_, STEP_##end_)
>> 
>> To use this effectively someone will need to pair this with another rule
>> like
>> 
>>         PLATFORM(NOVALAKE_P), PLATFORM_STEP(A2, C1)
>> 
>> and using PLATFORM_STEP() by itself without a corresponding PLATFORM()
>> or SUBPLATFORM() would be a bug.  Maybe we should just make
>> PLATFORM_STEP a rule that takes the platform as well as the stepping
>> range so that it's impossible for anyone to ever use PLATFORM_STEP
>> without tying it to a specific platform?  And also make a corresponding
>> SUBPLATFORM_STEP() rule for cases where that's relevant.  E.g.,
>> 
>>         PLATFORM_STEP(NOVALAKE_P, A2, C1)
>> 
>> or
>> 
>>         SUBPLATFORM_STEP(BATTLEMAGE, BATTLEMAGE_G21, A0, B0)
>> 
>> We'd need to update the union in struct xe_rtp_rule, but the size of the
>> union shouldn't increase.
>> 
>> What do you think?
>
> Anyway, consider this feedback optional.  I think it's fine to land
> as-is if you want.
>
> Reviewed-by: Matt Roper <matthew.d.roper@intel.com>

Thanks!

Yep, your suggestion makes sense.  I would say that the same argument
applies to GRAPHICS_STEP and MEDIA_STEP, right?  In other words, e.g. it
doesn't make much sense to use GRAPHICS_STEP without also using
GRAPHICS_VERSION.

So we can probably go ahead with merging this as-is and then have a
follow-up series handle stepping-matching macros in a way to always
require the relevant higher-level info (i.e. platform, subplatform,
graphics version or media version)?

--
Gustavo Sousa

>
>> 
>> 
>> Matt
>> 
>> > +
>> >  /**
>> >   * XE_RTP_RULE_GRAPHICS_STEP - Create rule matching graphics stepping
>> >   * @start_: First stepping matching the rule
>> > diff --git a/drivers/gpu/drm/xe/xe_rtp_types.h b/drivers/gpu/drm/xe/xe_rtp_types.h
>> > index 6ba7f226c227..166251615be1 100644
>> > --- a/drivers/gpu/drm/xe/xe_rtp_types.h
>> > +++ b/drivers/gpu/drm/xe/xe_rtp_types.h
>> > @@ -41,6 +41,7 @@ struct xe_rtp_action {
>> >  enum {
>> >  	XE_RTP_MATCH_PLATFORM,
>> >  	XE_RTP_MATCH_SUBPLATFORM,
>> > +	XE_RTP_MATCH_PLATFORM_STEP,
>> >  	XE_RTP_MATCH_GRAPHICS_VERSION,
>> >  	XE_RTP_MATCH_GRAPHICS_VERSION_RANGE,
>> >  	XE_RTP_MATCH_GRAPHICS_VERSION_ANY_GT,
>> > 
>> > -- 
>> > 2.52.0
>> > 
>> 
>> -- 
>> Matt Roper
>> Graphics Software Engineer
>> Linux GPU Platform Enablement
>> Intel Corporation
>
> -- 
> Matt Roper
> Graphics Software Engineer
> Linux GPU Platform Enablement
> Intel Corporation

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

* Re: [PATCH 4/7] drm/xe/rtp: Add support for matching platform-level stepping
  2026-03-06 13:39       ` Gustavo Sousa
@ 2026-03-06 16:40         ` Matt Roper
  0 siblings, 0 replies; 21+ messages in thread
From: Matt Roper @ 2026-03-06 16:40 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: intel-xe

On Fri, Mar 06, 2026 at 10:39:49AM -0300, Gustavo Sousa wrote:
> Matt Roper <matthew.d.roper@intel.com> writes:
> 
> > On Thu, Mar 05, 2026 at 02:22:56PM -0800, Matt Roper wrote:
> >> On Thu, Mar 05, 2026 at 09:02:31AM -0300, Gustavo Sousa wrote:
> >> > Add support for matching platform-level stepping, which will be used for
> >> > an upcoming NVL-P workaround.
> >> > 
> >> > As support for reading platform-level stepping information is added only
> >> > as needed in the driver, add a warning when the rule finds a STEP_NONE
> >> > value, which is an indication that the driver is missing such a support.
> >> > 
> >> > Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
> >> > ---
> >> >  drivers/gpu/drm/xe/xe_rtp.c       |  7 +++++++
> >> >  drivers/gpu/drm/xe/xe_rtp.h       | 20 ++++++++++++++++++++
> >> >  drivers/gpu/drm/xe/xe_rtp_types.h |  1 +
> >> >  3 files changed, 28 insertions(+)
> >> > 
> >> > diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
> >> > index 7bfdc6795ce6..991f218f1cc3 100644
> >> > --- a/drivers/gpu/drm/xe/xe_rtp.c
> >> > +++ b/drivers/gpu/drm/xe/xe_rtp.c
> >> > @@ -55,6 +55,13 @@ static bool rule_matches(const struct xe_device *xe,
> >> >  			match = xe->info.platform == r->platform &&
> >> >  				xe->info.subplatform == r->subplatform;
> >> >  			break;
> >> > +		case XE_RTP_MATCH_PLATFORM_STEP:
> >> > +			if (drm_WARN_ON(&xe->drm, xe->info.step.platform == STEP_NONE))
> >> > +				return false;
> >> > +
> >> > +			match = xe->info.step.platform >= r->step_start &&
> >> > +				xe->info.step.platform < r->step_end;
> >> > +			break;
> >> >  		case XE_RTP_MATCH_GRAPHICS_VERSION:
> >> >  			if (drm_WARN_ON(&xe->drm, !gt))
> >> >  				return false;
> >> > diff --git a/drivers/gpu/drm/xe/xe_rtp.h b/drivers/gpu/drm/xe/xe_rtp.h
> >> > index be4195264286..7d6daa7eb1e4 100644
> >> > --- a/drivers/gpu/drm/xe/xe_rtp.h
> >> > +++ b/drivers/gpu/drm/xe/xe_rtp.h
> >> > @@ -35,6 +35,10 @@ struct xe_reg_sr;
> >> >  	{ .match_type = XE_RTP_MATCH_SUBPLATFORM,				\
> >> >  	  .platform = plat__, .subplatform = sub__ }
> >> >  
> >> > +#define _XE_RTP_RULE_PLATFORM_STEP(start__, end__)				\
> >> > +	{ .match_type = XE_RTP_MATCH_PLATFORM_STEP,				\
> >> > +	  .step_start = start__, .step_end = end__ }
> >> > +
> >> >  #define _XE_RTP_RULE_GRAPHICS_STEP(start__, end__)				\
> >> >  	{ .match_type = XE_RTP_MATCH_GRAPHICS_STEP,				\
> >> >  	  .step_start = start__, .step_end = end__ }
> >> > @@ -66,6 +70,22 @@ struct xe_reg_sr;
> >> >  #define XE_RTP_RULE_SUBPLATFORM(plat_, sub_)					\
> >> >  	_XE_RTP_RULE_SUBPLATFORM(XE_##plat_, XE_SUBPLATFORM_##plat_##_##sub_)
> >> >  
> >> > +/**
> >> > + * XE_RTP_RULE_PLATFORM_STEP - Create rule matching platform-level stepping
> >> > + * @start_: First stepping matching the rule
> >> > + * @end_: First stepping that does not match the rule
> >> > + *
> >> > + * Note that the range matching this rule is [ @start_, @end_ ), i.e. inclusive
> >> > + * on the left, exclusive on the right.
> >> > + *
> >> > + * You need to make sure that proper support for reading platform-level stepping
> >> > + * information is present for the target platform before using this rule.
> >> > + *
> >> > + * Refer to XE_RTP_RULES() for expected usage.
> >> > + */
> >> > +#define XE_RTP_RULE_PLATFORM_STEP(start_, end_)					\
> >> > +	_XE_RTP_RULE_PLATFORM_STEP(STEP_##start_, STEP_##end_)
> >> 
> >> To use this effectively someone will need to pair this with another rule
> >> like
> >> 
> >>         PLATFORM(NOVALAKE_P), PLATFORM_STEP(A2, C1)
> >> 
> >> and using PLATFORM_STEP() by itself without a corresponding PLATFORM()
> >> or SUBPLATFORM() would be a bug.  Maybe we should just make
> >> PLATFORM_STEP a rule that takes the platform as well as the stepping
> >> range so that it's impossible for anyone to ever use PLATFORM_STEP
> >> without tying it to a specific platform?  And also make a corresponding
> >> SUBPLATFORM_STEP() rule for cases where that's relevant.  E.g.,
> >> 
> >>         PLATFORM_STEP(NOVALAKE_P, A2, C1)
> >> 
> >> or
> >> 
> >>         SUBPLATFORM_STEP(BATTLEMAGE, BATTLEMAGE_G21, A0, B0)
> >> 
> >> We'd need to update the union in struct xe_rtp_rule, but the size of the
> >> union shouldn't increase.
> >> 
> >> What do you think?
> >
> > Anyway, consider this feedback optional.  I think it's fine to land
> > as-is if you want.
> >
> > Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
> 
> Thanks!
> 
> Yep, your suggestion makes sense.  I would say that the same argument
> applies to GRAPHICS_STEP and MEDIA_STEP, right?  In other words, e.g. it
> doesn't make much sense to use GRAPHICS_STEP without also using
> GRAPHICS_VERSION.

Yeah, it would make sense there as well.  There are a few places where
people use *_VERSION_RANGE() rather than *_VERSION with an associated
STEP rule, but that always seems a bit risky to me (even if the specific
cases they used it in are technically correct when the code is first
written) --- it's too easy for the range to get extended to additional
versions that need different stepping(s) or one of the existing versions
in the range might be updated to have a different stepping range than
the others.  There's just a lot of potential to make mistakes as
workarounds evolve over time when combining both a version range and a
stepping range, so I'd be fine if we baked specific versions into the IP
stepping rules and disallowed ranges.

> 
> So we can probably go ahead with merging this as-is and then have a
> follow-up series handle stepping-matching macros in a way to always
> require the relevant higher-level info (i.e. platform, subplatform,
> graphics version or media version)?

Yeah, sounds good to me.


Matt

> 
> --
> Gustavo Sousa
> 
> >
> >> 
> >> 
> >> Matt
> >> 
> >> > +
> >> >  /**
> >> >   * XE_RTP_RULE_GRAPHICS_STEP - Create rule matching graphics stepping
> >> >   * @start_: First stepping matching the rule
> >> > diff --git a/drivers/gpu/drm/xe/xe_rtp_types.h b/drivers/gpu/drm/xe/xe_rtp_types.h
> >> > index 6ba7f226c227..166251615be1 100644
> >> > --- a/drivers/gpu/drm/xe/xe_rtp_types.h
> >> > +++ b/drivers/gpu/drm/xe/xe_rtp_types.h
> >> > @@ -41,6 +41,7 @@ struct xe_rtp_action {
> >> >  enum {
> >> >  	XE_RTP_MATCH_PLATFORM,
> >> >  	XE_RTP_MATCH_SUBPLATFORM,
> >> > +	XE_RTP_MATCH_PLATFORM_STEP,
> >> >  	XE_RTP_MATCH_GRAPHICS_VERSION,
> >> >  	XE_RTP_MATCH_GRAPHICS_VERSION_RANGE,
> >> >  	XE_RTP_MATCH_GRAPHICS_VERSION_ANY_GT,
> >> > 
> >> > -- 
> >> > 2.52.0
> >> > 
> >> 
> >> -- 
> >> Matt Roper
> >> Graphics Software Engineer
> >> Linux GPU Platform Enablement
> >> Intel Corporation
> >
> > -- 
> > Matt Roper
> > Graphics Software Engineer
> > Linux GPU Platform Enablement
> > Intel Corporation

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

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

end of thread, other threads:[~2026-03-06 16:40 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-05 12:02 [PATCH 0/7] Extra enabling patches for NVL-P Gustavo Sousa
2026-03-05 12:02 ` [PATCH 1/7] drm/xe: Modify stepping info directly in xe_step_*_get() Gustavo Sousa
2026-03-05 22:07   ` Matt Roper
2026-03-05 12:02 ` [PATCH 2/7] drm/xe: Drop unused IS_PLATFORM_STEP() and IS_SUBPLATFORM_STEP() Gustavo Sousa
2026-03-05 22:09   ` Matt Roper
2026-03-05 12:02 ` [PATCH 3/7] drm/xe/nvlp: Read platform-level stepping info Gustavo Sousa
2026-03-05 22:13   ` Matt Roper
2026-03-05 12:02 ` [PATCH 4/7] drm/xe/rtp: Add support for matching platform-level stepping Gustavo Sousa
2026-03-05 22:22   ` Matt Roper
2026-03-06  0:53     ` Matt Roper
2026-03-06 13:39       ` Gustavo Sousa
2026-03-06 16:40         ` Matt Roper
2026-03-05 12:02 ` [PATCH 5/7] drm/xe/nvlp: Implement Wa_14026539277 Gustavo Sousa
2026-03-05 15:23   ` Gustavo Sousa
2026-03-05 22:05     ` Matt Roper
2026-03-05 12:02 ` [PATCH 6/7] drm/xe/xe3p: Drop Wa_16028780921 Gustavo Sousa
2026-03-05 22:23   ` Matt Roper
2026-03-05 12:02 ` [PATCH 7/7] drm/xe: Translate C-state "reset value" into RC6 Gustavo Sousa
2026-03-05 22:25   ` Matt Roper
2026-03-06 11:37 ` ✓ CI.KUnit: success for Extra enabling patches for NVL-P Patchwork
2026-03-06 12:16 ` ✓ Xe.CI.BAT: " Patchwork

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