Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching
@ 2026-05-22  8:45 Gustavo Sousa
  2026-05-22  8:45 ` [PATCH v3 1/7] drm/xe/rtp: Write kunit test cases specific for " Gustavo Sousa
                   ` (11 more replies)
  0 siblings, 12 replies; 13+ messages in thread
From: Gustavo Sousa @ 2026-05-22  8:45 UTC (permalink / raw)
  To: intel-xe; +Cc: Gustavo Sousa, Matt Roper, Violet Monti

This series adds several improvements to RTP code around rule matching
logic.

It first starts with making sure there is a cleaner separation of
responsibilities when it comes to the generic kunit testing for RTP.
Then it goes on to improve rule matching code by making the parsing
logic more robust and restructuring the code to resemble a formal
grammar and make it easier to add future extensions.

Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
Changes in v3:
- Added eBNF grammar for the rules to the kernel-doc.
- Fully reviewed now. Sent for fresh CI results.
- Link to v2: https://patch.msgid.link/20260430-rtp-rule-parser-v2-0-157e98b4ab51@intel.com

Changes in v2:
- Incorporated review feedback. See individual patches for the
  changelog.
- Incorporated the addition of the match type XE_RTP_MATCH_PLATFORM_STEP
  after rebasing on latest drm-tip, which is reflected in some of the
  patches.
- Link to v1: https://patch.msgid.link/20260114-rtp-rule-parser-v1-0-fa9029586bff@intel.com

---
Gustavo Sousa (7):
      drm/xe/rtp: Write kunit test cases specific for rule matching
      drm/xe/rtp: Drop rule matching cases from rtp_to_sr_cases and rtp_cases
      drm/xe/rtp: Don't short-circuit to false in or-yes case
      drm/xe/rtp: Do not break parsing when missing context
      drm/xe/rtp: Extract rule_match_item()
      drm/xe/rtp: Fully parse the ruleset
      drm/xe/rtp: Implement a structured parser for rule matching

 drivers/gpu/drm/xe/tests/xe_rtp.c      |  38 ++++
 drivers/gpu/drm/xe/tests/xe_rtp_test.c | 327 +++++++++++++++++++++------------
 drivers/gpu/drm/xe/tests/xe_rtp_test.h |  23 +++
 drivers/gpu/drm/xe/xe_rtp.c            | 321 +++++++++++++++++++-------------
 drivers/gpu/drm/xe/xe_rtp.h            |  29 ++-
 5 files changed, 486 insertions(+), 252 deletions(-)
---
base-commit: 7e25390024f8a4a9fdd6ec50f000ee25c006c02f
change-id: 20260114-rtp-rule-parser-ac01472acdeb

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


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

* [PATCH v3 1/7] drm/xe/rtp: Write kunit test cases specific for rule matching
  2026-05-22  8:45 [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching Gustavo Sousa
@ 2026-05-22  8:45 ` Gustavo Sousa
  2026-05-22  8:45 ` [PATCH v3 2/7] drm/xe/rtp: Drop rule matching cases from rtp_to_sr_cases and rtp_cases Gustavo Sousa
                   ` (10 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Gustavo Sousa @ 2026-05-22  8:45 UTC (permalink / raw)
  To: intel-xe; +Cc: Gustavo Sousa, Matt Roper

The kunit test cases for the RTP framework are currently separated into
those that validate xe_rtp_process_to_sr() and those that validate
xe_rtp_process().  In both of them, we also have mixed stuff to validate
rule matching functionality, which should rather be done in a separate
test case group.

Let's create such a group, specific for validating rule matching, and
also add an initial set of cases.  In an upcoming change, we will do a
cleanup of the other groups by migrating those cases intended for rule
matching to this new group.

v2:
  - s/no-yes-or-no-yes/no-yes-or-yes-no/ (Matt)
  - Drop leftover include of <kunit/test.h>.

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 drivers/gpu/drm/xe/tests/xe_rtp.c      |  38 +++++++++
 drivers/gpu/drm/xe/tests/xe_rtp_test.c | 141 +++++++++++++++++++++++++++++++++
 drivers/gpu/drm/xe/tests/xe_rtp_test.h |  23 ++++++
 drivers/gpu/drm/xe/xe_rtp.c            |  57 +++++++++----
 4 files changed, 242 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/xe/tests/xe_rtp.c b/drivers/gpu/drm/xe/tests/xe_rtp.c
new file mode 100644
index 000000000000..b3a8b75936d1
--- /dev/null
+++ b/drivers/gpu/drm/xe/tests/xe_rtp.c
@@ -0,0 +1,38 @@
+// SPDX-License-Identifier: GPL-2.0 AND MIT
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#include "tests/xe_rtp_test.h"
+
+#include <kunit/visibility.h>
+
+/**
+ * xe_rtp_rule_matches - Check if a set of RTP rule set match against the
+ *			 device/GT/hwe
+ * @xe: The xe device
+ * @gt: The GT struct (may be NULL)
+ * @hwe: The hw_engine  (may be NULL)
+ * @rules: The array of rules to match against
+ * @n_rules: Number of items in @rules
+ * @err: Pointer (may be NULL) to set error number.
+ *
+ * This parses the set of rules and check if they match against the passed
+ * parameters.
+ *
+ * If passed, @err is updated with a non-zero negative error number or zero if
+ * no errors were found during the parsing/evaluation of rules.
+ *
+ * Returns true if there is a match and false if there is no match or if an
+ * error was found.
+ */
+bool xe_rtp_rule_matches(const struct xe_device *xe,
+			 struct xe_gt *gt,
+			 struct xe_hw_engine *hwe,
+			 const struct xe_rtp_rule *rules,
+			 unsigned int n_rules,
+			 int *err)
+{
+	return rule_matches_with_err(xe, gt, hwe, rules, n_rules, err);
+}
+EXPORT_SYMBOL_IF_KUNIT(xe_rtp_rule_matches);
diff --git a/drivers/gpu/drm/xe/tests/xe_rtp_test.c b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
index 5d78f2283df9..c98d85a15652 100644
--- a/drivers/gpu/drm/xe/tests/xe_rtp_test.c
+++ b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
@@ -21,6 +21,7 @@
 #include "xe_pci_test.h"
 #include "xe_reg_sr.h"
 #include "xe_rtp.h"
+#include "xe_rtp_test.h"
 
 #define REGULAR_REG1		XE_REG(1)
 #define REGULAR_REG2		XE_REG(2)
@@ -37,6 +38,14 @@
 #undef XE_REG_MCR
 #define XE_REG_MCR(...)     XE_REG(__VA_ARGS__, .mcr = 1)
 
+struct rtp_rules_test_case {
+	const char *name;
+	bool expected_match;
+	int expected_err;
+	const struct xe_rtp_rule *rules;
+	u8 n_rules;
+};
+
 struct rtp_to_sr_test_case {
 	const char *name;
 	struct xe_reg expected_reg;
@@ -83,6 +92,130 @@ static bool match_no(const struct xe_device *xe, const struct xe_gt *gt,
 	return false;
 }
 
+static const struct rtp_rules_test_case rtp_rules_cases[] = {
+	/*
+	 * Single rules.
+	 *
+	 * TODO: Include other types of rules as well: GRAPHICS_VERSION(),
+	 * MEDIA_VERSION(), etc.
+	 */
+	{
+		.name = "no",
+		.expected_match = false,
+		XE_RTP_RULES(FUNC(match_no)),
+	},
+	{
+		.name = "yes",
+		.expected_match = true,
+		XE_RTP_RULES(FUNC(match_yes)),
+	},
+
+	/* Conjunctions with 2 operands. */
+	{
+		.name = "no-and-no",
+		.expected_match = false,
+		XE_RTP_RULES(FUNC(match_no), FUNC(match_no)),
+	},
+	{
+		.name = "no-and-yes",
+		.expected_match = false,
+		XE_RTP_RULES(FUNC(match_no), FUNC(match_yes)),
+	},
+	{
+		.name = "yes-and-no",
+		.expected_match = false,
+		XE_RTP_RULES(FUNC(match_yes), FUNC(match_no)),
+	},
+	{
+		.name = "yes-and-yes",
+		.expected_match = true,
+		XE_RTP_RULES(FUNC(match_yes), FUNC(match_yes)),
+	},
+
+	/* Disjunctions with 2 operands. */
+	{
+		.name = "no-or-no",
+		.expected_match = false,
+		XE_RTP_RULES(FUNC(match_no), OR, FUNC(match_no)),
+	},
+	{
+		.name = "no-or-yes",
+		.expected_match = true,
+		XE_RTP_RULES(FUNC(match_no), OR, FUNC(match_yes)),
+	},
+	{
+		.name = "yes-or-no",
+		.expected_match = true,
+		XE_RTP_RULES(FUNC(match_yes), OR, FUNC(match_no)),
+	},
+	{
+		.name = "yes-or-yes",
+		.expected_match = true,
+		XE_RTP_RULES(FUNC(match_yes), OR, FUNC(match_yes)),
+	},
+
+	/* Conjunction and disjunctions. */
+	{
+		.name = "no-yes-or-yes-no",
+		.expected_match = false,
+		XE_RTP_RULES(FUNC(match_no), FUNC(match_yes), OR,
+			     FUNC(match_yes), FUNC(match_no)),
+	},
+	{
+		.name = "no-yes-or-yes-yes",
+		.expected_match = true,
+		XE_RTP_RULES(FUNC(match_no), FUNC(match_yes), OR,
+			     FUNC(match_yes), FUNC(match_yes)),
+	},
+	{
+		.name = "yes-yes-or-no-yes",
+		.expected_match = true,
+		XE_RTP_RULES(FUNC(match_yes), FUNC(match_yes), OR,
+			     FUNC(match_no), FUNC(match_yes)),
+	},
+	{
+		.name = "yes-yes-or-yes-yes",
+		.expected_match = true,
+		XE_RTP_RULES(FUNC(match_yes), FUNC(match_yes), OR,
+			     FUNC(match_yes), FUNC(match_yes)),
+	},
+	{
+		.name = "no-no-or-yes-or-no",
+		.expected_match = true,
+		XE_RTP_RULES(FUNC(match_no), FUNC(match_no), OR,
+			     FUNC(match_yes), OR,
+			     FUNC(match_no)),
+	},
+
+	/* Syntax errors. */
+	{
+		.name = "or",
+		.expected_match = false,
+		.expected_err = -EINVAL,
+		XE_RTP_RULES(OR),
+	},
+	{
+		.name = "or-anything",
+		.expected_match = false,
+		.expected_err = -EINVAL,
+		XE_RTP_RULES(OR, FUNC(match_yes)),
+	},
+};
+
+static void xe_rtp_rules_tests(struct kunit *test)
+{
+	const struct rtp_rules_test_case *param = test->param_value;
+	struct xe_device *xe = test->priv;
+	struct xe_gt *gt = xe_device_get_root_tile(xe)->primary_gt;
+	int err;
+	bool match;
+
+	match = xe_rtp_rule_matches(xe, gt, NULL, param->rules, param->n_rules, &err);
+
+	KUNIT_EXPECT_EQ(test, match, param->expected_match);
+	KUNIT_EXPECT_EQ(test, err, param->expected_err);
+}
+
 static const struct rtp_to_sr_test_case rtp_to_sr_cases[] = {
 	{
 		.name = "coalesce-same-reg",
@@ -544,6 +677,13 @@ static void xe_rtp_process_tests(struct kunit *test)
 	KUNIT_EXPECT_EQ(test, active, param->expected_active);
 }
 
+static void rtp_rules_desc(const struct rtp_rules_test_case *t, char *desc)
+{
+	strscpy(desc, t->name, KUNIT_PARAM_DESC_SIZE);
+}
+
+KUNIT_ARRAY_PARAM(rtp_rules, rtp_rules_cases, rtp_rules_desc);
+
 static void rtp_to_sr_desc(const struct rtp_to_sr_test_case *t, char *desc)
 {
 	strscpy(desc, t->name, KUNIT_PARAM_DESC_SIZE);
@@ -591,6 +731,7 @@ static void xe_rtp_test_exit(struct kunit *test)
 }
 
 static struct kunit_case xe_rtp_tests[] = {
+	KUNIT_CASE_PARAM(xe_rtp_rules_tests, rtp_rules_gen_params),
 	KUNIT_CASE_PARAM(xe_rtp_process_to_sr_tests, rtp_to_sr_gen_params),
 	KUNIT_CASE_PARAM(xe_rtp_process_tests, rtp_gen_params),
 	{}
diff --git a/drivers/gpu/drm/xe/tests/xe_rtp_test.h b/drivers/gpu/drm/xe/tests/xe_rtp_test.h
new file mode 100644
index 000000000000..26becc1e2af0
--- /dev/null
+++ b/drivers/gpu/drm/xe/tests/xe_rtp_test.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: GPL-2.0 AND MIT */
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#ifndef _XE_RTP_TEST_H_
+#define _XE_RTP_TEST_H_
+
+#include <linux/types.h>
+
+struct xe_device;
+struct xe_gt;
+struct xe_hw_engine;
+struct xe_rtp_rule;
+
+bool xe_rtp_rule_matches(const struct xe_device *xe,
+			 struct xe_gt *gt,
+			 struct xe_hw_engine *hwe,
+			 const struct xe_rtp_rule *rules,
+			 unsigned int n_rules,
+			 int *err);
+
+#endif
diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
index 1a4dcbbbc176..0e1adf07e4e7 100644
--- a/drivers/gpu/drm/xe/xe_rtp.c
+++ b/drivers/gpu/drm/xe/xe_rtp.c
@@ -30,16 +30,20 @@ static bool has_samedia(const struct xe_device *xe)
 	return xe->info.media_verx100 >= 1300;
 }
 
-static bool rule_matches(const struct xe_device *xe,
-			 struct xe_gt *gt,
-			 struct xe_hw_engine *hwe,
-			 const struct xe_rtp_rule *rules,
-			 unsigned int n_rules)
+static bool rule_matches_with_err(const struct xe_device *xe,
+				  struct xe_gt *gt,
+				  struct xe_hw_engine *hwe,
+				  const struct xe_rtp_rule *rules,
+				  unsigned int n_rules,
+				  int *err)
 {
 	const struct xe_rtp_rule *r;
 	unsigned int i, rcount = 0;
 	bool match;
 
+	if (err)
+		*err = 0;
+
 	for (r = rules, i = 0; i < n_rules; r = &rules[++i]) {
 		switch (r->match_type) {
 		case XE_RTP_MATCH_OR:
@@ -58,21 +62,21 @@ static bool rule_matches(const struct xe_device *xe,
 			break;
 		case XE_RTP_MATCH_PLATFORM_STEP:
 			if (drm_WARN_ON(&xe->drm, xe->info.step.platform == STEP_NONE))
-				return false;
+				goto error;
 
 			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;
+				goto error;
 
 			match = xe->info.graphics_verx100 == r->ver_start &&
 				(!has_samedia(xe) || !xe_gt_is_media_type(gt));
 			break;
 		case XE_RTP_MATCH_GRAPHICS_VERSION_RANGE:
 			if (drm_WARN_ON(&xe->drm, !gt))
-				return false;
+				goto error;
 
 			match = xe->info.graphics_verx100 >= r->ver_start &&
 				xe->info.graphics_verx100 <= r->ver_end &&
@@ -80,13 +84,13 @@ static bool rule_matches(const struct xe_device *xe,
 			break;
 		case XE_RTP_MATCH_GRAPHICS_VERSION_ANY_GT:
 			if (drm_WARN_ON(&xe->drm, !gt))
-				return false;
+				goto error;
 
 			match = xe->info.graphics_verx100 == r->ver_start;
 			break;
 		case XE_RTP_MATCH_GRAPHICS_STEP:
 			if (drm_WARN_ON(&xe->drm, !gt))
-				return false;
+				goto error;
 
 			match = xe->info.step.graphics >= r->step_start &&
 				xe->info.step.graphics < r->step_end &&
@@ -94,14 +98,14 @@ static bool rule_matches(const struct xe_device *xe,
 			break;
 		case XE_RTP_MATCH_MEDIA_VERSION:
 			if (drm_WARN_ON(&xe->drm, !gt))
-				return false;
+				goto error;
 
 			match = xe->info.media_verx100 == r->ver_start &&
 				(!has_samedia(xe) || xe_gt_is_media_type(gt));
 			break;
 		case XE_RTP_MATCH_MEDIA_VERSION_RANGE:
 			if (drm_WARN_ON(&xe->drm, !gt))
-				return false;
+				goto error;
 
 			match = xe->info.media_verx100 >= r->ver_start &&
 				xe->info.media_verx100 <= r->ver_end &&
@@ -109,7 +113,7 @@ static bool rule_matches(const struct xe_device *xe,
 			break;
 		case XE_RTP_MATCH_MEDIA_STEP:
 			if (drm_WARN_ON(&xe->drm, !gt))
-				return false;
+				goto error;
 
 			match = xe->info.step.media >= r->step_start &&
 				xe->info.step.media < r->step_end &&
@@ -117,7 +121,7 @@ static bool rule_matches(const struct xe_device *xe,
 			break;
 		case XE_RTP_MATCH_MEDIA_VERSION_ANY_GT:
 			if (drm_WARN_ON(&xe->drm, !gt))
-				return false;
+				goto error;
 
 			match = xe->info.media_verx100 == r->ver_start;
 			break;
@@ -129,13 +133,13 @@ static bool rule_matches(const struct xe_device *xe,
 			break;
 		case XE_RTP_MATCH_ENGINE_CLASS:
 			if (drm_WARN_ON(&xe->drm, !hwe))
-				return false;
+				goto error;
 
 			match = hwe->class == r->engine_class;
 			break;
 		case XE_RTP_MATCH_NOT_ENGINE_CLASS:
 			if (drm_WARN_ON(&xe->drm, !hwe))
-				return false;
+				goto error;
 
 			match = hwe->class != r->engine_class;
 			break;
@@ -167,9 +171,24 @@ static bool rule_matches(const struct xe_device *xe,
 
 done:
 	if (drm_WARN_ON(&xe->drm, !rcount))
-		return false;
+		goto error;
 
 	return true;
+
+error:
+	if (err)
+		*err = -EINVAL;
+
+	return false;
+}
+
+static bool rule_matches(const struct xe_device *xe,
+			 struct xe_gt *gt,
+			 struct xe_hw_engine *hwe,
+			 const struct xe_rtp_rule *rules,
+			 unsigned int n_rules)
+{
+	return rule_matches_with_err(xe, gt, hwe, rules, n_rules, NULL);
 }
 
 static void rtp_add_sr_entry(const struct xe_rtp_action *action,
@@ -412,3 +431,7 @@ bool xe_rtp_match_has_msix(const struct xe_device *xe,
 {
 	return xe_device_has_msix(xe);
 }
+
+#if IS_ENABLED(CONFIG_DRM_XE_KUNIT_TEST)
+#include "tests/xe_rtp.c"
+#endif

-- 
2.53.0


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

* [PATCH v3 2/7] drm/xe/rtp: Drop rule matching cases from rtp_to_sr_cases and rtp_cases
  2026-05-22  8:45 [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching Gustavo Sousa
  2026-05-22  8:45 ` [PATCH v3 1/7] drm/xe/rtp: Write kunit test cases specific for " Gustavo Sousa
@ 2026-05-22  8:45 ` Gustavo Sousa
  2026-05-22  8:45 ` [PATCH v3 3/7] drm/xe/rtp: Don't short-circuit to false in or-yes case Gustavo Sousa
                   ` (9 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Gustavo Sousa @ 2026-05-22  8:45 UTC (permalink / raw)
  To: intel-xe; +Cc: Gustavo Sousa, Matt Roper

The kunit test cases for the RTP framework are currently separated into
three groups:

(1) rtp_rules_cases:
    Those to verify rule matching logic.

(2) rtp_to_sr_cases:
    Those to verify generation of save/restore tables from RTP tables.

(3) rtp_cases
    Those to verify processing of RTP tables without save/restore action
    associated, which are used for OOB workarounds.

Today we have some cases in (2) and (3) that are actually meant to
verify rule matching logic.  Now that we have (1), let's cleanup (2)
and (3) so that they become focused on their main objectives.

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 drivers/gpu/drm/xe/tests/xe_rtp_test.c | 122 ++-------------------------------
 1 file changed, 6 insertions(+), 116 deletions(-)

diff --git a/drivers/gpu/drm/xe/tests/xe_rtp_test.c b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
index c98d85a15652..b3eab1337b0c 100644
--- a/drivers/gpu/drm/xe/tests/xe_rtp_test.c
+++ b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
@@ -257,80 +257,6 @@ static const struct rtp_to_sr_test_case rtp_to_sr_cases[] = {
 			{}
 		},
 	},
-	{
-		.name = "match-or",
-		.expected_reg = REGULAR_REG1,
-		.expected_set_bits = REG_BIT(0) | REG_BIT(1) | REG_BIT(2),
-		.expected_clr_bits = REG_BIT(0) | REG_BIT(1) | REG_BIT(2),
-		.expected_active = BIT(0) | BIT(1) | BIT(2),
-		.expected_count_sr_entries = 1,
-		.entries = (const struct xe_rtp_entry_sr[]) {
-			{ XE_RTP_NAME("first"),
-			  XE_RTP_RULES(FUNC(match_yes), OR, FUNC(match_no)),
-			  XE_RTP_ACTIONS(SET(REGULAR_REG1, REG_BIT(0)))
-			},
-			{ XE_RTP_NAME("middle"),
-			  XE_RTP_RULES(FUNC(match_no), FUNC(match_no), OR,
-				       FUNC(match_yes), OR,
-				       FUNC(match_no)),
-			  XE_RTP_ACTIONS(SET(REGULAR_REG1, REG_BIT(1)))
-			},
-			{ XE_RTP_NAME("last"),
-			  XE_RTP_RULES(FUNC(match_no), OR, FUNC(match_yes)),
-			  XE_RTP_ACTIONS(SET(REGULAR_REG1, REG_BIT(2)))
-			},
-			{ XE_RTP_NAME("no-match"),
-			  XE_RTP_RULES(FUNC(match_no), OR, FUNC(match_no)),
-			  XE_RTP_ACTIONS(SET(REGULAR_REG1, REG_BIT(3)))
-			},
-			{}
-		},
-	},
-	{
-		.name = "match-or-xfail",
-		.expected_reg = REGULAR_REG1,
-		.expected_count_sr_entries = 0,
-		.entries = (const struct xe_rtp_entry_sr[]) {
-			{ XE_RTP_NAME("leading-or"),
-			  XE_RTP_RULES(OR, FUNC(match_yes)),
-			  XE_RTP_ACTIONS(SET(REGULAR_REG1, REG_BIT(0)))
-			},
-			{ XE_RTP_NAME("trailing-or"),
-			  /*
-			   * First condition is match_no, otherwise the failure
-			   * wouldn't really trigger as RTP stops processing as
-			   * soon as it has a matching set of rules
-			   */
-			  XE_RTP_RULES(FUNC(match_no), OR),
-			  XE_RTP_ACTIONS(SET(REGULAR_REG1, REG_BIT(1)))
-			},
-			{ XE_RTP_NAME("no-or-or-yes"),
-			  XE_RTP_RULES(FUNC(match_no), OR, OR, FUNC(match_yes)),
-			  XE_RTP_ACTIONS(SET(REGULAR_REG1, REG_BIT(2)))
-			},
-			{}
-		},
-	},
-	{
-		.name = "no-match-no-add-multiple-rules",
-		.expected_reg = REGULAR_REG1,
-		.expected_set_bits = REG_BIT(0),
-		.expected_clr_bits = REG_BIT(0),
-		.expected_active = BIT(0),
-		.expected_count_sr_entries = 1,
-		/* Don't coalesce second entry due to one of the rules */
-		.entries = (const struct xe_rtp_entry_sr[]) {
-			{ XE_RTP_NAME("basic-1"),
-			  XE_RTP_RULES(FUNC(match_yes)),
-			  XE_RTP_ACTIONS(SET(REGULAR_REG1, REG_BIT(0)))
-			},
-			{ XE_RTP_NAME("basic-2"),
-			  XE_RTP_RULES(FUNC(match_yes), FUNC(match_no)),
-			  XE_RTP_ACTIONS(SET(REGULAR_REG1, REG_BIT(1)))
-			},
-			{}
-		},
-	},
 	{
 		.name = "two-regs-two-entries",
 		.expected_reg = REGULAR_REG1,
@@ -591,33 +517,15 @@ static const struct rtp_test_case rtp_cases[] = {
 		},
 	},
 	{
-		.name = "inactive-1st_or_active-inactive",
+		.name = "inactive-active-inactive",
 		.expected_active = BIT(1),
 		.entries = (const struct xe_rtp_entry[]) {
 			{ XE_RTP_NAME("r1"),
 			  XE_RTP_RULES(FUNC(match_no)),
 			},
-			{ XE_RTP_NAME("r2_or_conditions"),
-			  XE_RTP_RULES(FUNC(match_yes), OR,
-				       FUNC(match_no), OR,
-				       FUNC(match_no)) },
-			{ XE_RTP_NAME("r3"),
-			  XE_RTP_RULES(FUNC(match_no)),
-			},
-			{}
-		},
-	},
-	{
-		.name = "inactive-2nd_or_active-inactive",
-		.expected_active = BIT(1),
-		.entries = (const struct xe_rtp_entry[]) {
-			{ XE_RTP_NAME("r1"),
-			  XE_RTP_RULES(FUNC(match_no)),
+			{ XE_RTP_NAME("r2"),
+			  XE_RTP_RULES(FUNC(match_yes)),
 			},
-			{ XE_RTP_NAME("r2_or_conditions"),
-			  XE_RTP_RULES(FUNC(match_no), OR,
-				       FUNC(match_yes), OR,
-				       FUNC(match_no)) },
 			{ XE_RTP_NAME("r3"),
 			  XE_RTP_RULES(FUNC(match_no)),
 			},
@@ -625,33 +533,15 @@ static const struct rtp_test_case rtp_cases[] = {
 		},
 	},
 	{
-		.name = "inactive-last_or_active-inactive",
-		.expected_active = BIT(1),
+		.name = "inactive-inactive-inactive",
+		.expected_active = 0,
 		.entries = (const struct xe_rtp_entry[]) {
 			{ XE_RTP_NAME("r1"),
 			  XE_RTP_RULES(FUNC(match_no)),
 			},
-			{ XE_RTP_NAME("r2_or_conditions"),
-			  XE_RTP_RULES(FUNC(match_no), OR,
-				       FUNC(match_no), OR,
-				       FUNC(match_yes)) },
-			{ XE_RTP_NAME("r3"),
-			  XE_RTP_RULES(FUNC(match_no)),
-			},
-			{}
-		},
-	},
-	{
-		.name = "inactive-no_or_active-inactive",
-		.expected_active = 0,
-		.entries = (const struct xe_rtp_entry[]) {
-			{ XE_RTP_NAME("r1"),
+			{ XE_RTP_NAME("r2"),
 			  XE_RTP_RULES(FUNC(match_no)),
 			},
-			{ XE_RTP_NAME("r2_or_conditions"),
-			  XE_RTP_RULES(FUNC(match_no), OR,
-				       FUNC(match_no), OR,
-				       FUNC(match_no)) },
 			{ XE_RTP_NAME("r3"),
 			  XE_RTP_RULES(FUNC(match_no)),
 			},

-- 
2.53.0


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

* [PATCH v3 3/7] drm/xe/rtp: Don't short-circuit to false in or-yes case
  2026-05-22  8:45 [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching Gustavo Sousa
  2026-05-22  8:45 ` [PATCH v3 1/7] drm/xe/rtp: Write kunit test cases specific for " Gustavo Sousa
  2026-05-22  8:45 ` [PATCH v3 2/7] drm/xe/rtp: Drop rule matching cases from rtp_to_sr_cases and rtp_cases Gustavo Sousa
@ 2026-05-22  8:45 ` Gustavo Sousa
  2026-05-22  8:45 ` [PATCH v3 4/7] drm/xe/rtp: Do not break parsing when missing context Gustavo Sousa
                   ` (8 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Gustavo Sousa @ 2026-05-22  8:45 UTC (permalink / raw)
  To: intel-xe; +Cc: Gustavo Sousa, Matt Roper, Violet Monti

While RTP processing evaluates true on the "yes-or" case (i.e. a
conjunction of rules that evaluate to true followed by an "OR" without
the right hand operand), it does not on the "or-yes" one.

Both cases are considered malformed and could be a result of someone
dropping checks deemed not necessary anymore and forgetting to drop the
superfluous "OR".  Nevertheless, we should aim for consistency, and
having the "or-yes" case also evaluating to true while also causing a
warning seems reasonable.  So let's do that.

The "or-yes" pattern being evaluated to false comes from the fact that
that we unconditionally short-circuit upon finding XE_RTP_MATCH_OR on
the outer loop.  We should only do that if the preceding conjunction of
rules evaluated to true (meaning that rcount must be non-zero) and
continue the evaluation otherwise.

Do that and also add extra test cases to validate the short-circuiting
behavior.

Notice that some of the new test cases have a "FIXME" comment, which
comes from the fact that we are unable to detect syntax errors after the
short-circuit point.  That is going to be fixed in a follow-up change.

Link: https://lore.kernel.org/intel-xe/871pfw4lo9.fsf@intel.com/
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Violet Monti <violet.monti@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 drivers/gpu/drm/xe/tests/xe_rtp_test.c | 42 ++++++++++++++++++++++++++++++++--
 drivers/gpu/drm/xe/xe_rtp.c            | 15 ++++++++----
 2 files changed, 50 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/xe/tests/xe_rtp_test.c b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
index b3eab1337b0c..f56f005dbd98 100644
--- a/drivers/gpu/drm/xe/tests/xe_rtp_test.c
+++ b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
@@ -195,11 +195,49 @@ static const struct rtp_rules_test_case rtp_rules_cases[] = {
 		XE_RTP_RULES(OR),
 	},
 	{
-		.name = "or-anything",
-		.expected_match = false,
+		.name = "or-yes",
+		.expected_match = true,
 		.expected_err = -EINVAL,
 		XE_RTP_RULES(OR, FUNC(match_yes)),
 	},
+	{
+		.name = "or-no",
+		.expected_match = false,
+		.expected_err = -EINVAL,
+		XE_RTP_RULES(OR, FUNC(match_no)),
+	},
+	{
+		.name = "yes-or",
+		.expected_match = true,
+		/* FIXME: The parser should raise an error here. */
+		.expected_err = 0,
+		XE_RTP_RULES(FUNC(match_yes), OR),
+	},
+	{
+		.name = "no-or",
+		.expected_match = false,
+		.expected_err = -EINVAL,
+		XE_RTP_RULES(FUNC(match_no), OR),
+	},
+	{
+		.name = "no-or-or-yes",
+		.expected_match = true,
+		.expected_err = -EINVAL,
+		XE_RTP_RULES(FUNC(match_no), OR, OR, FUNC(match_yes)),
+	},
+	{
+		.name = "yes-or-or-no",
+		.expected_match = true,
+		/* FIXME: The parser should raise an error here. */
+		.expected_err = 0,
+		XE_RTP_RULES(FUNC(match_yes), OR, OR, FUNC(match_no)),
+	},
+	{
+		.name = "no-or-or-no",
+		.expected_match = false,
+		.expected_err = -EINVAL,
+		XE_RTP_RULES(FUNC(match_no), OR, OR, FUNC(match_no)),
+	},
 };
 
 static void xe_rtp_rules_tests(struct kunit *test)
diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
index 0e1adf07e4e7..299fa4209a26 100644
--- a/drivers/gpu/drm/xe/xe_rtp.c
+++ b/drivers/gpu/drm/xe/xe_rtp.c
@@ -47,12 +47,18 @@ static bool rule_matches_with_err(const struct xe_device *xe,
 	for (r = rules, i = 0; i < n_rules; r = &rules[++i]) {
 		switch (r->match_type) {
 		case XE_RTP_MATCH_OR:
+			if (drm_WARN_ON(&xe->drm, !rcount)) {
+				if (err)
+					*err = -EINVAL;
+				continue;
+			}
+
 			/*
-			 * This is only reached if a complete set of
-			 * rules passed or none were evaluated. For both cases,
-			 * shortcut the other rules and return the proper value.
+			 * This is only reached if a complete conjunction of
+			 * rules passed, in which case we shortcut the other
+			 * rules and return true.
 			 */
-			goto done;
+			return true;
 		case XE_RTP_MATCH_PLATFORM:
 			match = xe->info.platform == r->platform;
 			break;
@@ -169,7 +175,6 @@ static bool rule_matches_with_err(const struct xe_device *xe,
 		}
 	}
 
-done:
 	if (drm_WARN_ON(&xe->drm, !rcount))
 		goto error;
 

-- 
2.53.0


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

* [PATCH v3 4/7] drm/xe/rtp: Do not break parsing when missing context
  2026-05-22  8:45 [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching Gustavo Sousa
                   ` (2 preceding siblings ...)
  2026-05-22  8:45 ` [PATCH v3 3/7] drm/xe/rtp: Don't short-circuit to false in or-yes case Gustavo Sousa
@ 2026-05-22  8:45 ` Gustavo Sousa
  2026-05-22  8:45 ` [PATCH v3 5/7] drm/xe/rtp: Extract rule_match_item() Gustavo Sousa
                   ` (7 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Gustavo Sousa @ 2026-05-22  8:45 UTC (permalink / raw)
  To: intel-xe; +Cc: Gustavo Sousa, Matt Roper

With the current implementation, the RTP framework will cause parsing of
the rule set to be interrupted if one rule requires a context item (gt
or hwe) that is missing (i.e. when the value is NULL).

This is arguably a semantic error instead of a syntactic one, meaning
that RTP should not interrupt parsing the rules.  With the current
behavior, we would miss detecting other errors that could appear in the
remaining rules and could also prevent valid rules joined by "OR" from
being evaluated.

Make sure that we do not stop parsing the rule set when detecting
missing context and let's add rtp_rules_test_cases to reflect that.

v2:
  - Add "missing-context" in the test case names to indicate that those
    are about rules that are missing the necessary context. (Matt)
  - Rebase: treat the new match type XE_RTP_MATCH_PLATFORM_STEP in the
    same way when the platform is missing step information.

Reviewed-by: Matt Roper <matthew.d.roper@intel.com> # v1
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 drivers/gpu/drm/xe/tests/xe_rtp_test.c | 28 +++++++++++++++
 drivers/gpu/drm/xe/xe_rtp.c            | 66 ++++++++++++++++++++++------------
 2 files changed, 72 insertions(+), 22 deletions(-)

diff --git a/drivers/gpu/drm/xe/tests/xe_rtp_test.c b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
index f56f005dbd98..dfb15d81d799 100644
--- a/drivers/gpu/drm/xe/tests/xe_rtp_test.c
+++ b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
@@ -238,6 +238,34 @@ static const struct rtp_rules_test_case rtp_rules_cases[] = {
 		.expected_err = -EINVAL,
 		XE_RTP_RULES(FUNC(match_no), OR, OR, FUNC(match_no)),
 	},
+
+	/* No match because hwe is NULL. */
+	{
+		.name = "missing-context-engine-class",
+		.expected_match = false,
+		XE_RTP_RULES(ENGINE_CLASS(RENDER)),
+	},
+
+	/*
+	 * Missing context (hwe==NULL) does not cause parsing to stop, hence we
+	 * expect a match.
+	 */
+	{
+		.name = "missing-context-engine-class-or-yes",
+		.expected_match = true,
+		XE_RTP_RULES(ENGINE_CLASS(RENDER), OR, FUNC(match_yes)),
+	},
+
+	/*
+	 * Missing context (hwe==NULL) does not cause parsing to stop, hence we
+	 * expect a syntax error.
+	 */
+	{
+		.name = "missing-context-engine-class-or-or-yes",
+		.expected_match = true,
+		.expected_err = -EINVAL,
+		XE_RTP_RULES(ENGINE_CLASS(RENDER), OR, OR, FUNC(match_yes)),
+	},
 };
 
 static void xe_rtp_rules_tests(struct kunit *test)
diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
index 299fa4209a26..df72b456ab16 100644
--- a/drivers/gpu/drm/xe/xe_rtp.c
+++ b/drivers/gpu/drm/xe/xe_rtp.c
@@ -67,67 +67,85 @@ static bool rule_matches_with_err(const struct xe_device *xe,
 				xe->info.subplatform == r->subplatform;
 			break;
 		case XE_RTP_MATCH_PLATFORM_STEP:
-			if (drm_WARN_ON(&xe->drm, xe->info.step.platform == STEP_NONE))
-				goto error;
+			if (drm_WARN_ON(&xe->drm, xe->info.step.platform == STEP_NONE)) {
+				match = false;
+				break;
+			}
 
 			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))
-				goto error;
+			if (drm_WARN_ON(&xe->drm, !gt)) {
+				match = false;
+				break;
+			}
 
 			match = xe->info.graphics_verx100 == r->ver_start &&
 				(!has_samedia(xe) || !xe_gt_is_media_type(gt));
 			break;
 		case XE_RTP_MATCH_GRAPHICS_VERSION_RANGE:
-			if (drm_WARN_ON(&xe->drm, !gt))
-				goto error;
+			if (drm_WARN_ON(&xe->drm, !gt)) {
+				match = false;
+				break;
+			}
 
 			match = xe->info.graphics_verx100 >= r->ver_start &&
 				xe->info.graphics_verx100 <= r->ver_end &&
 				(!has_samedia(xe) || !xe_gt_is_media_type(gt));
 			break;
 		case XE_RTP_MATCH_GRAPHICS_VERSION_ANY_GT:
-			if (drm_WARN_ON(&xe->drm, !gt))
-				goto error;
+			if (drm_WARN_ON(&xe->drm, !gt)) {
+				match = false;
+				break;
+			}
 
 			match = xe->info.graphics_verx100 == r->ver_start;
 			break;
 		case XE_RTP_MATCH_GRAPHICS_STEP:
-			if (drm_WARN_ON(&xe->drm, !gt))
-				goto error;
+			if (drm_WARN_ON(&xe->drm, !gt)) {
+				match = false;
+				break;
+			}
 
 			match = xe->info.step.graphics >= r->step_start &&
 				xe->info.step.graphics < r->step_end &&
 				(!has_samedia(xe) || !xe_gt_is_media_type(gt));
 			break;
 		case XE_RTP_MATCH_MEDIA_VERSION:
-			if (drm_WARN_ON(&xe->drm, !gt))
-				goto error;
+			if (drm_WARN_ON(&xe->drm, !gt)) {
+				match = false;
+				break;
+			}
 
 			match = xe->info.media_verx100 == r->ver_start &&
 				(!has_samedia(xe) || xe_gt_is_media_type(gt));
 			break;
 		case XE_RTP_MATCH_MEDIA_VERSION_RANGE:
-			if (drm_WARN_ON(&xe->drm, !gt))
-				goto error;
+			if (drm_WARN_ON(&xe->drm, !gt)) {
+				match = false;
+				break;
+			}
 
 			match = xe->info.media_verx100 >= r->ver_start &&
 				xe->info.media_verx100 <= r->ver_end &&
 				(!has_samedia(xe) || xe_gt_is_media_type(gt));
 			break;
 		case XE_RTP_MATCH_MEDIA_STEP:
-			if (drm_WARN_ON(&xe->drm, !gt))
-				goto error;
+			if (drm_WARN_ON(&xe->drm, !gt)) {
+				match = false;
+				break;
+			}
 
 			match = xe->info.step.media >= r->step_start &&
 				xe->info.step.media < r->step_end &&
 				(!has_samedia(xe) || xe_gt_is_media_type(gt));
 			break;
 		case XE_RTP_MATCH_MEDIA_VERSION_ANY_GT:
-			if (drm_WARN_ON(&xe->drm, !gt))
-				goto error;
+			if (drm_WARN_ON(&xe->drm, !gt)) {
+				match = false;
+				break;
+			}
 
 			match = xe->info.media_verx100 == r->ver_start;
 			break;
@@ -138,14 +156,18 @@ static bool rule_matches_with_err(const struct xe_device *xe,
 			match = xe->info.is_dgfx;
 			break;
 		case XE_RTP_MATCH_ENGINE_CLASS:
-			if (drm_WARN_ON(&xe->drm, !hwe))
-				goto error;
+			if (drm_WARN_ON(&xe->drm, !hwe)) {
+				match = false;
+				break;
+			}
 
 			match = hwe->class == r->engine_class;
 			break;
 		case XE_RTP_MATCH_NOT_ENGINE_CLASS:
-			if (drm_WARN_ON(&xe->drm, !hwe))
-				goto error;
+			if (drm_WARN_ON(&xe->drm, !hwe)) {
+				match = false;
+				break;
+			}
 
 			match = hwe->class != r->engine_class;
 			break;

-- 
2.53.0


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

* [PATCH v3 5/7] drm/xe/rtp: Extract rule_match_item()
  2026-05-22  8:45 [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching Gustavo Sousa
                   ` (3 preceding siblings ...)
  2026-05-22  8:45 ` [PATCH v3 4/7] drm/xe/rtp: Do not break parsing when missing context Gustavo Sousa
@ 2026-05-22  8:45 ` Gustavo Sousa
  2026-05-22  8:45 ` [PATCH v3 6/7] drm/xe/rtp: Fully parse the ruleset Gustavo Sousa
                   ` (6 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Gustavo Sousa @ 2026-05-22  8:45 UTC (permalink / raw)
  To: intel-xe; +Cc: Gustavo Sousa, Matt Roper

The current logic in rule_matches() mixes individual rule matching
with the logic necessary for handling OR operations.  Let's simplify
rule_matches() to focus on the latter by extracting individual rule
matching into a separate function called rule_match_item().

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 drivers/gpu/drm/xe/xe_rtp.c | 219 +++++++++++++++++++-------------------------
 1 file changed, 94 insertions(+), 125 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
index df72b456ab16..c49f80f398af 100644
--- a/drivers/gpu/drm/xe/xe_rtp.c
+++ b/drivers/gpu/drm/xe/xe_rtp.c
@@ -30,6 +30,96 @@ static bool has_samedia(const struct xe_device *xe)
 	return xe->info.media_verx100 >= 1300;
 }
 
+static bool rule_match_item(const struct xe_device *xe,
+			    struct xe_gt *gt,
+			    struct xe_hw_engine *hwe,
+			    const struct xe_rtp_rule *r)
+{
+	switch (r->match_type) {
+	case XE_RTP_MATCH_PLATFORM:
+		return xe->info.platform == r->platform;
+	case XE_RTP_MATCH_SUBPLATFORM:
+		return xe->info.platform == r->platform &&
+			xe->info.subplatform == r->subplatform;
+	case XE_RTP_MATCH_PLATFORM_STEP:
+		if (drm_WARN_ON(&xe->drm, xe->info.step.platform == STEP_NONE))
+			return false;
+
+		return xe->info.step.platform >= r->step_start &&
+			xe->info.step.platform < r->step_end;
+	case XE_RTP_MATCH_GRAPHICS_VERSION:
+		if (drm_WARN_ON(&xe->drm, !gt))
+			return false;
+
+		return xe->info.graphics_verx100 == r->ver_start &&
+			(!has_samedia(xe) || !xe_gt_is_media_type(gt));
+	case XE_RTP_MATCH_GRAPHICS_VERSION_RANGE:
+		if (drm_WARN_ON(&xe->drm, !gt))
+			return false;
+
+		return xe->info.graphics_verx100 >= r->ver_start &&
+			xe->info.graphics_verx100 <= r->ver_end &&
+			(!has_samedia(xe) || !xe_gt_is_media_type(gt));
+	case XE_RTP_MATCH_GRAPHICS_VERSION_ANY_GT:
+		if (drm_WARN_ON(&xe->drm, !gt))
+			return false;
+
+		return xe->info.graphics_verx100 == r->ver_start;
+	case XE_RTP_MATCH_GRAPHICS_STEP:
+		if (drm_WARN_ON(&xe->drm, !gt))
+			return false;
+
+		return xe->info.step.graphics >= r->step_start &&
+			xe->info.step.graphics < r->step_end &&
+			(!has_samedia(xe) || !xe_gt_is_media_type(gt));
+	case XE_RTP_MATCH_MEDIA_VERSION:
+		if (drm_WARN_ON(&xe->drm, !gt))
+			return false;
+
+		return xe->info.media_verx100 == r->ver_start &&
+			(!has_samedia(xe) || xe_gt_is_media_type(gt));
+	case XE_RTP_MATCH_MEDIA_VERSION_RANGE:
+		if (drm_WARN_ON(&xe->drm, !gt))
+			return false;
+
+		return xe->info.media_verx100 >= r->ver_start &&
+			xe->info.media_verx100 <= r->ver_end &&
+			(!has_samedia(xe) || xe_gt_is_media_type(gt));
+	case XE_RTP_MATCH_MEDIA_STEP:
+		if (drm_WARN_ON(&xe->drm, !gt))
+			return false;
+
+		return xe->info.step.media >= r->step_start &&
+			xe->info.step.media < r->step_end &&
+			(!has_samedia(xe) || xe_gt_is_media_type(gt));
+	case XE_RTP_MATCH_MEDIA_VERSION_ANY_GT:
+		if (drm_WARN_ON(&xe->drm, !gt))
+			return false;
+
+		return xe->info.media_verx100 == r->ver_start;
+	case XE_RTP_MATCH_INTEGRATED:
+		return !xe->info.is_dgfx;
+	case XE_RTP_MATCH_DISCRETE:
+		return xe->info.is_dgfx;
+	case XE_RTP_MATCH_ENGINE_CLASS:
+		if (drm_WARN_ON(&xe->drm, !hwe))
+			return false;
+
+		return hwe->class == r->engine_class;
+	case XE_RTP_MATCH_NOT_ENGINE_CLASS:
+		if (drm_WARN_ON(&xe->drm, !hwe))
+			return false;
+
+		return hwe->class != r->engine_class;
+	case XE_RTP_MATCH_FUNC:
+		return r->match_func(xe, gt, hwe);
+	default:
+		drm_warn(&xe->drm, "Invalid RTP match %u\n",
+			 r->match_type);
+		return false;
+	}
+}
+
 static bool rule_matches_with_err(const struct xe_device *xe,
 				  struct xe_gt *gt,
 				  struct xe_hw_engine *hwe,
@@ -39,14 +129,12 @@ static bool rule_matches_with_err(const struct xe_device *xe,
 {
 	const struct xe_rtp_rule *r;
 	unsigned int i, rcount = 0;
-	bool match;
 
 	if (err)
 		*err = 0;
 
 	for (r = rules, i = 0; i < n_rules; r = &rules[++i]) {
-		switch (r->match_type) {
-		case XE_RTP_MATCH_OR:
+		if (r->match_type == XE_RTP_MATCH_OR) {
 			if (drm_WARN_ON(&xe->drm, !rcount)) {
 				if (err)
 					*err = -EINVAL;
@@ -59,128 +147,11 @@ static bool rule_matches_with_err(const struct xe_device *xe,
 			 * rules and return true.
 			 */
 			return true;
-		case XE_RTP_MATCH_PLATFORM:
-			match = xe->info.platform == r->platform;
-			break;
-		case XE_RTP_MATCH_SUBPLATFORM:
-			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)) {
-				match = false;
-				break;
-			}
-
-			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)) {
-				match = false;
-				break;
-			}
-
-			match = xe->info.graphics_verx100 == r->ver_start &&
-				(!has_samedia(xe) || !xe_gt_is_media_type(gt));
-			break;
-		case XE_RTP_MATCH_GRAPHICS_VERSION_RANGE:
-			if (drm_WARN_ON(&xe->drm, !gt)) {
-				match = false;
-				break;
-			}
-
-			match = xe->info.graphics_verx100 >= r->ver_start &&
-				xe->info.graphics_verx100 <= r->ver_end &&
-				(!has_samedia(xe) || !xe_gt_is_media_type(gt));
-			break;
-		case XE_RTP_MATCH_GRAPHICS_VERSION_ANY_GT:
-			if (drm_WARN_ON(&xe->drm, !gt)) {
-				match = false;
-				break;
-			}
-
-			match = xe->info.graphics_verx100 == r->ver_start;
-			break;
-		case XE_RTP_MATCH_GRAPHICS_STEP:
-			if (drm_WARN_ON(&xe->drm, !gt)) {
-				match = false;
-				break;
-			}
-
-			match = xe->info.step.graphics >= r->step_start &&
-				xe->info.step.graphics < r->step_end &&
-				(!has_samedia(xe) || !xe_gt_is_media_type(gt));
-			break;
-		case XE_RTP_MATCH_MEDIA_VERSION:
-			if (drm_WARN_ON(&xe->drm, !gt)) {
-				match = false;
-				break;
-			}
-
-			match = xe->info.media_verx100 == r->ver_start &&
-				(!has_samedia(xe) || xe_gt_is_media_type(gt));
-			break;
-		case XE_RTP_MATCH_MEDIA_VERSION_RANGE:
-			if (drm_WARN_ON(&xe->drm, !gt)) {
-				match = false;
-				break;
-			}
-
-			match = xe->info.media_verx100 >= r->ver_start &&
-				xe->info.media_verx100 <= r->ver_end &&
-				(!has_samedia(xe) || xe_gt_is_media_type(gt));
-			break;
-		case XE_RTP_MATCH_MEDIA_STEP:
-			if (drm_WARN_ON(&xe->drm, !gt)) {
-				match = false;
-				break;
-			}
-
-			match = xe->info.step.media >= r->step_start &&
-				xe->info.step.media < r->step_end &&
-				(!has_samedia(xe) || xe_gt_is_media_type(gt));
-			break;
-		case XE_RTP_MATCH_MEDIA_VERSION_ANY_GT:
-			if (drm_WARN_ON(&xe->drm, !gt)) {
-				match = false;
-				break;
-			}
-
-			match = xe->info.media_verx100 == r->ver_start;
-			break;
-		case XE_RTP_MATCH_INTEGRATED:
-			match = !xe->info.is_dgfx;
-			break;
-		case XE_RTP_MATCH_DISCRETE:
-			match = xe->info.is_dgfx;
-			break;
-		case XE_RTP_MATCH_ENGINE_CLASS:
-			if (drm_WARN_ON(&xe->drm, !hwe)) {
-				match = false;
-				break;
-			}
-
-			match = hwe->class == r->engine_class;
-			break;
-		case XE_RTP_MATCH_NOT_ENGINE_CLASS:
-			if (drm_WARN_ON(&xe->drm, !hwe)) {
-				match = false;
-				break;
-			}
-
-			match = hwe->class != r->engine_class;
-			break;
-		case XE_RTP_MATCH_FUNC:
-			match = r->match_func(xe, gt, hwe);
-			break;
-		default:
-			drm_warn(&xe->drm, "Invalid RTP match %u\n",
-				 r->match_type);
-			match = false;
 		}
 
-		if (!match) {
+		if (rule_match_item(xe, gt, hwe, r)) {
+			rcount++;
+		} else {
 			/*
 			 * Advance rules until we find XE_RTP_MATCH_OR to check
 			 * if there's another set of conditions to check
@@ -192,8 +163,6 @@ static bool rule_matches_with_err(const struct xe_device *xe,
 				return false;
 
 			rcount = 0;
-		} else {
-			rcount++;
 		}
 	}
 

-- 
2.53.0


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

* [PATCH v3 6/7] drm/xe/rtp: Fully parse the ruleset
  2026-05-22  8:45 [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching Gustavo Sousa
                   ` (4 preceding siblings ...)
  2026-05-22  8:45 ` [PATCH v3 5/7] drm/xe/rtp: Extract rule_match_item() Gustavo Sousa
@ 2026-05-22  8:45 ` Gustavo Sousa
  2026-05-22  8:45 ` [PATCH v3 7/7] drm/xe/rtp: Implement a structured parser for rule matching Gustavo Sousa
                   ` (5 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Gustavo Sousa @ 2026-05-22  8:45 UTC (permalink / raw)
  To: intel-xe; +Cc: Gustavo Sousa, Matt Roper, Violet Monti

The function rule_matches() short-circuits evaluation of the implicit
conjunctions (each substring of rules not containing OR) and the
explicit disjunctions (implicit conjunctions joined by OR). In other
words:

  - in a conjunction, once a rule evaluate to false, we skip to the next
    OR (if any) to evaluate the next conjunction;
  - in a disjunction, once a conjunction evaluates to true, we return
    true and skip evaluating all the remaining rules.

While this behavior results in a correct logical value, due to how the
"OR" short-circuiting is implemented, it has the side-effect that rule
set does not get fully "parsed", allowing incomplete constructs like
(rule1, OR) to evaluate to true when rule1 is true.  We should treat
such constructs as invalid and treat them the same way we do for stuff
like (OR, rule1).

As such, update rule_matches() to "parse" the whole rule set, and that
while keeping the short-circuit aspect of evaluation.  With that, we can
fix the FIXME test cases that cover that behavior.

v2:
  - Do not change short-circuit *evaluation* behavior. (Matt)

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Violet Monti <violet.monti@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 drivers/gpu/drm/xe/tests/xe_rtp_test.c |  6 ++----
 drivers/gpu/drm/xe/xe_rtp.c            | 26 +++++++++++++-------------
 2 files changed, 15 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/xe/tests/xe_rtp_test.c b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
index dfb15d81d799..642f6e090ad0 100644
--- a/drivers/gpu/drm/xe/tests/xe_rtp_test.c
+++ b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
@@ -209,8 +209,7 @@ static const struct rtp_rules_test_case rtp_rules_cases[] = {
 	{
 		.name = "yes-or",
 		.expected_match = true,
-		/* FIXME: The parser should raise an error here. */
-		.expected_err = 0,
+		.expected_err = -EINVAL,
 		XE_RTP_RULES(FUNC(match_yes), OR),
 	},
 	{
@@ -228,8 +227,7 @@ static const struct rtp_rules_test_case rtp_rules_cases[] = {
 	{
 		.name = "yes-or-or-no",
 		.expected_match = true,
-		/* FIXME: The parser should raise an error here. */
-		.expected_err = 0,
+		.expected_err = -EINVAL,
 		XE_RTP_RULES(FUNC(match_yes), OR, OR, FUNC(match_no)),
 	},
 	{
diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
index c49f80f398af..976a2e1f5592 100644
--- a/drivers/gpu/drm/xe/xe_rtp.c
+++ b/drivers/gpu/drm/xe/xe_rtp.c
@@ -129,6 +129,7 @@ static bool rule_matches_with_err(const struct xe_device *xe,
 {
 	const struct xe_rtp_rule *r;
 	unsigned int i, rcount = 0;
+	bool short_circuit_or = false;
 
 	if (err)
 		*err = 0;
@@ -143,13 +144,16 @@ static bool rule_matches_with_err(const struct xe_device *xe,
 
 			/*
 			 * This is only reached if a complete conjunction of
-			 * rules passed, in which case we shortcut the other
-			 * rules and return true.
+			 * rules passed, in which case we short-circuit rule
+			 * evaluation, but still keep parsing to find any syntax
+			 * errors.
 			 */
-			return true;
+			short_circuit_or = true;
+			rcount = 0;
+			continue;
 		}
 
-		if (rule_match_item(xe, gt, hwe, r)) {
+		if (short_circuit_or || rule_match_item(xe, gt, hwe, r)) {
 			rcount++;
 		} else {
 			/*
@@ -166,16 +170,12 @@ static bool rule_matches_with_err(const struct xe_device *xe,
 		}
 	}
 
-	if (drm_WARN_ON(&xe->drm, !rcount))
-		goto error;
-
-	return true;
-
-error:
-	if (err)
-		*err = -EINVAL;
+	if (drm_WARN_ON(&xe->drm, !rcount)) {
+		if (err)
+			*err = -EINVAL;
+	}
 
-	return false;
+	return short_circuit_or || rcount;
 }
 
 static bool rule_matches(const struct xe_device *xe,

-- 
2.53.0


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

* [PATCH v3 7/7] drm/xe/rtp: Implement a structured parser for rule matching
  2026-05-22  8:45 [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching Gustavo Sousa
                   ` (5 preceding siblings ...)
  2026-05-22  8:45 ` [PATCH v3 6/7] drm/xe/rtp: Fully parse the ruleset Gustavo Sousa
@ 2026-05-22  8:45 ` Gustavo Sousa
  2026-05-22  8:51 ` ✗ CI.checkpatch: warning for drm/xe/rtp: Miscellaneous improvements to rule matching (rev3) Patchwork
                   ` (4 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Gustavo Sousa @ 2026-05-22  8:45 UTC (permalink / raw)
  To: intel-xe; +Cc: Gustavo Sousa, Matt Roper, Violet Monti

The current unwritten grammar for RTP rules is as follows:

          rules = disjunction;
    disjunction = conjunction, { "OR", conjunction };
    conjunction = single_rule, { single_rule };
    			   (* the AND operator is implicit *)
    single_rule = ? GRAPHICS_VERSION(...), MEDIA_VERSION(...),
                    FUNC(...), etc ?

While rule_matches() currently works for the grammar above, it doesn't
easily resemble it.  Let's replace it with an implementation that is
structured in a way to resemble the grammar.

Such a new implementation, although a bit more verbose, is arguably
easier to reason about and to adapt to any extension we do to the
grammer in the future.

Also take this opportunity to update the kernel-doc for XE_RTP_RULES()
to include the grammar, so that it is not unwritten anymore.

v2:
  - Include the grammar in the code documentation. (Matt)

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Violet Monti <violet.monti@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 drivers/gpu/drm/xe/xe_rtp.c | 138 ++++++++++++++++++++++++++++----------------
 drivers/gpu/drm/xe/xe_rtp.h |  29 ++++++++--
 2 files changed, 113 insertions(+), 54 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
index 976a2e1f5592..dec9d94e6fb0 100644
--- a/drivers/gpu/drm/xe/xe_rtp.c
+++ b/drivers/gpu/drm/xe/xe_rtp.c
@@ -30,11 +30,28 @@ static bool has_samedia(const struct xe_device *xe)
 	return xe->info.media_verx100 >= 1300;
 }
 
-static bool rule_match_item(const struct xe_device *xe,
-			    struct xe_gt *gt,
-			    struct xe_hw_engine *hwe,
-			    const struct xe_rtp_rule *r)
+struct rule_match_ctx {
+	const struct xe_device *xe;
+	struct xe_gt *gt;
+	struct xe_hw_engine *hwe;
+	const struct xe_rtp_rule *rules;
+	const unsigned int n_rules;
+	unsigned int head;
+	int err;
+};
+
+static bool rule_is_item(const struct xe_rtp_rule *r)
+{
+	return r->match_type != XE_RTP_MATCH_OR;
+}
+
+static bool rule_match_item(struct rule_match_ctx *match_ctx)
 {
+	const struct xe_device *xe = match_ctx->xe;
+	struct xe_gt *gt = match_ctx->gt;
+	struct xe_hw_engine *hwe = match_ctx->hwe;
+	const struct xe_rtp_rule *r = &match_ctx->rules[match_ctx->head];
+
 	switch (r->match_type) {
 	case XE_RTP_MATCH_PLATFORM:
 		return xe->info.platform == r->platform;
@@ -120,6 +137,63 @@ static bool rule_match_item(const struct xe_device *xe,
 	}
 }
 
+/*
+ * Match a conjunctive set of rules (rules joined by an implicit "AND").
+ *
+ * Once one item evaluates to false, the remaining items are not evaluated
+ * anymore.  Nevetheless, all rules are consumed to allow detecting syntax
+ * errors.
+ */
+static bool rule_match_and(struct rule_match_ctx *match_ctx, bool parse_only)
+{
+	bool match = true;
+	unsigned int count = 0;
+
+	while (match_ctx->head < match_ctx->n_rules &&
+	       rule_is_item(&match_ctx->rules[match_ctx->head])) {
+		if (!parse_only)
+			match = rule_match_item(match_ctx);
+
+		if (!match)
+			parse_only = true;
+
+		match_ctx->head++;
+		count++;
+	}
+
+	if (drm_WARN_ON(&match_ctx->xe->drm, !count)) {
+		match_ctx->err = -EINVAL;
+
+		if (!parse_only)
+			match = false;
+	}
+
+	return match;
+}
+
+/*
+ * Match a disjunctive set of rules (subset of rules joined by
+ * "XE_RTP_MATCH_OR").
+ *
+ * Once one subset evaluates to true, the remaining items are not evaluated
+ * anymore. Nevetheless, all rules are consumed to allow detecting syntax
+ * errors.
+ */
+static bool rule_match_or(struct rule_match_ctx *match_ctx)
+{
+	bool match = rule_match_and(match_ctx, false);
+
+	while (match_ctx->head < match_ctx->n_rules &&
+	       match_ctx->rules[match_ctx->head].match_type == XE_RTP_MATCH_OR) {
+		/* Consume XE_RTP_MATCH_OR. */
+		match_ctx->head++;
+
+		match = rule_match_and(match_ctx, match);
+	}
+
+	return match;
+}
+
 static bool rule_matches_with_err(const struct xe_device *xe,
 				  struct xe_gt *gt,
 				  struct xe_hw_engine *hwe,
@@ -127,55 +201,19 @@ static bool rule_matches_with_err(const struct xe_device *xe,
 				  unsigned int n_rules,
 				  int *err)
 {
-	const struct xe_rtp_rule *r;
-	unsigned int i, rcount = 0;
-	bool short_circuit_or = false;
+	struct rule_match_ctx match_ctx = {
+		.xe = xe,
+		.gt = gt,
+		.hwe = hwe,
+		.rules = rules,
+		.n_rules = n_rules,
+	};
+	bool match = rule_match_or(&match_ctx);
 
 	if (err)
-		*err = 0;
-
-	for (r = rules, i = 0; i < n_rules; r = &rules[++i]) {
-		if (r->match_type == XE_RTP_MATCH_OR) {
-			if (drm_WARN_ON(&xe->drm, !rcount)) {
-				if (err)
-					*err = -EINVAL;
-				continue;
-			}
-
-			/*
-			 * This is only reached if a complete conjunction of
-			 * rules passed, in which case we short-circuit rule
-			 * evaluation, but still keep parsing to find any syntax
-			 * errors.
-			 */
-			short_circuit_or = true;
-			rcount = 0;
-			continue;
-		}
-
-		if (short_circuit_or || rule_match_item(xe, gt, hwe, r)) {
-			rcount++;
-		} else {
-			/*
-			 * Advance rules until we find XE_RTP_MATCH_OR to check
-			 * if there's another set of conditions to check
-			 */
-			while (++i < n_rules && rules[i].match_type != XE_RTP_MATCH_OR)
-				;
-
-			if (i >= n_rules)
-				return false;
-
-			rcount = 0;
-		}
-	}
-
-	if (drm_WARN_ON(&xe->drm, !rcount)) {
-		if (err)
-			*err = -EINVAL;
-	}
+		*err = match_ctx.err;
 
-	return short_circuit_or || rcount;
+	return match;
 }
 
 static bool rule_matches(const struct xe_device *xe,
diff --git a/drivers/gpu/drm/xe/xe_rtp.h b/drivers/gpu/drm/xe/xe_rtp.h
index 562082b18d7b..e4f1930ca1c3 100644
--- a/drivers/gpu/drm/xe/xe_rtp.h
+++ b/drivers/gpu/drm/xe/xe_rtp.h
@@ -394,18 +394,39 @@ struct xe_reg_sr;
  * XE_RTP_RULES - Helper to set multiple rules to a struct xe_rtp_entry_sr entry
  * @...: Rules
  *
- * At least one rule is needed and up to 12 are supported. Multiple rules are
- * AND'ed together, i.e. all the rules must evaluate to true for the entry to
- * be processed. See XE_RTP_MATCH_* for the possible match rules. Example:
+ * When an RTP table is being processed, the rules of each entry are evaluated
+ * to check if they match the target entity (platform, gt or hwe, depending on
+ * the specific RTP table).
+ *
+ * The sequence of arguments of this macro must follow the following eBNF
+ * grammar::
+ *
+ *            rules = disjunction;
+ *      disjunction = conjunction, { "OR", conjunction };
+ *      conjunction = single_rule, { single_rule };
+ *				   (* the AND operator is implicit *)
+ *      single_rule = ? GRAPHICS_VERSION(...), MEDIA_VERSION(...),
+ *                      FUNC(...), etc ?
+ *
+ * Examples:
  *
  * .. code-block:: c
  *
  *	const struct xe_rtp_entry_sr wa_entries[] = {
  *		...
- *		{ XE_RTP_NAME("test-entry"),
+ *		{ XE_RTP_NAME("entry-a"),
+ *		  // Match DG2-G10 with graphics steppings A0 up-to B0
+ *		  // (exclusive).
  *		  XE_RTP_RULES(SUBPLATFORM(DG2, G10), GRAPHICS_STEP(A0, B0)),
  *		  ...
  *		},
+ *		{ XE_RTP_NAME("entry-b"),
+ *		  // Match graphics version 20 (all steppings) or graphics
+ *		  // version 30 steppings A0 up-to B0 (exclusive).
+ *		  XE_RTP_RULES(GRAPHICS_VERSION(2000), OR,
+ *			       GRAPHICS_VERSION(3000), GRAPHICS_STEP(A0, B0))
+ *		  ...
+ *		},
  *		...
  *	};
  */

-- 
2.53.0


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

* ✗ CI.checkpatch: warning for drm/xe/rtp: Miscellaneous improvements to rule matching (rev3)
  2026-05-22  8:45 [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching Gustavo Sousa
                   ` (6 preceding siblings ...)
  2026-05-22  8:45 ` [PATCH v3 7/7] drm/xe/rtp: Implement a structured parser for rule matching Gustavo Sousa
@ 2026-05-22  8:51 ` Patchwork
  2026-05-22  8:53 ` ✓ CI.KUnit: success " Patchwork
                   ` (3 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2026-05-22  8:51 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: intel-xe

== Series Details ==

Series: drm/xe/rtp: Miscellaneous improvements to rule matching (rev3)
URL   : https://patchwork.freedesktop.org/series/160111/
State : warning

== Summary ==

+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
061140b9bc586ae7f40abc1249c97e1cc72d1b9d
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 3ff4d38af9fcc3b95f655d1f0d4c50cf8c007c96
Author: Gustavo Sousa <gustavo.sousa@intel.com>
Date:   Fri May 22 05:45:22 2026 -0300

    drm/xe/rtp: Implement a structured parser for rule matching
    
    The current unwritten grammar for RTP rules is as follows:
    
              rules = disjunction;
        disjunction = conjunction, { "OR", conjunction };
        conjunction = single_rule, { single_rule };
                               (* the AND operator is implicit *)
        single_rule = ? GRAPHICS_VERSION(...), MEDIA_VERSION(...),
                        FUNC(...), etc ?
    
    While rule_matches() currently works for the grammar above, it doesn't
    easily resemble it.  Let's replace it with an implementation that is
    structured in a way to resemble the grammar.
    
    Such a new implementation, although a bit more verbose, is arguably
    easier to reason about and to adapt to any extension we do to the
    grammer in the future.
    
    Also take this opportunity to update the kernel-doc for XE_RTP_RULES()
    to include the grammar, so that it is not unwritten anymore.
    
    v2:
      - Include the grammar in the code documentation. (Matt)
    
    Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
    Reviewed-by: Violet Monti <violet.monti@intel.com>
    Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
+ /mt/dim checkpatch 7e25390024f8a4a9fdd6ec50f000ee25c006c02f drm-intel
27e654b42971 drm/xe/rtp: Write kunit test cases specific for rule matching
-:25: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#25: 
new file mode 100644

total: 0 errors, 1 warnings, 0 checks, 375 lines checked
2dc606cc2bbe drm/xe/rtp: Drop rule matching cases from rtp_to_sr_cases and rtp_cases
46f03fbfccb0 drm/xe/rtp: Don't short-circuit to false in or-yes case
f1dbb612121a drm/xe/rtp: Do not break parsing when missing context
c475c70d868f drm/xe/rtp: Extract rule_match_item()
d201e4a2dc16 drm/xe/rtp: Fully parse the ruleset
3ff4d38af9fc drm/xe/rtp: Implement a structured parser for rule matching



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

* ✓ CI.KUnit: success for drm/xe/rtp: Miscellaneous improvements to rule matching (rev3)
  2026-05-22  8:45 [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching Gustavo Sousa
                   ` (7 preceding siblings ...)
  2026-05-22  8:51 ` ✗ CI.checkpatch: warning for drm/xe/rtp: Miscellaneous improvements to rule matching (rev3) Patchwork
@ 2026-05-22  8:53 ` Patchwork
  2026-05-22  9:31 ` ✓ Xe.CI.BAT: " Patchwork
                   ` (2 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2026-05-22  8:53 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: intel-xe

== Series Details ==

Series: drm/xe/rtp: Miscellaneous improvements to rule matching (rev3)
URL   : https://patchwork.freedesktop.org/series/160111/
State : success

== Summary ==

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

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

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

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



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

* ✓ Xe.CI.BAT: success for drm/xe/rtp: Miscellaneous improvements to rule matching (rev3)
  2026-05-22  8:45 [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching Gustavo Sousa
                   ` (8 preceding siblings ...)
  2026-05-22  8:53 ` ✓ CI.KUnit: success " Patchwork
@ 2026-05-22  9:31 ` Patchwork
  2026-05-22 13:31 ` ✓ Xe.CI.FULL: " Patchwork
  2026-05-22 14:31 ` [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching Gustavo Sousa
  11 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2026-05-22  9:31 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: intel-xe

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

== Series Details ==

Series: drm/xe/rtp: Miscellaneous improvements to rule matching (rev3)
URL   : https://patchwork.freedesktop.org/series/160111/
State : success

== Summary ==

CI Bug Log - changes from xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f_BAT -> xe-pw-160111v3_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

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

  No changes in participating hosts


Changes
-------

  No changes found


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

  * Linux: xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f -> xe-pw-160111v3

  IGT_8935: 8935
  xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f: 7e25390024f8a4a9fdd6ec50f000ee25c006c02f
  xe-pw-160111v3: 160111v3

== Logs ==

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

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

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

* ✓ Xe.CI.FULL: success for drm/xe/rtp: Miscellaneous improvements to rule matching (rev3)
  2026-05-22  8:45 [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching Gustavo Sousa
                   ` (9 preceding siblings ...)
  2026-05-22  9:31 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-05-22 13:31 ` Patchwork
  2026-05-22 14:31 ` [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching Gustavo Sousa
  11 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2026-05-22 13:31 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: intel-xe

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

== Series Details ==

Series: drm/xe/rtp: Miscellaneous improvements to rule matching (rev3)
URL   : https://patchwork.freedesktop.org/series/160111/
State : success

== Summary ==

CI Bug Log - changes from xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f_FULL -> xe-pw-160111v3_FULL
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (2 -> 2)
------------------------------

  No changes in participating hosts

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

  Here are the changes found in xe-pw-160111v3_FULL that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@intel_hwmon@hwmon-write:
    - shard-bmg:          [PASS][1] -> [SKIP][2] ([Intel XE#5177] / [Intel XE#6703])
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@intel_hwmon@hwmon-write.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@intel_hwmon@hwmon-write.html

  * igt@kms_flip@flip-vs-expired-vblank@a-edp1:
    - shard-lnl:          [PASS][3] -> [FAIL][4] ([Intel XE#301])
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html

  * igt@kms_rotation_crc@multiplane-rotation-cropping-bottom:
    - shard-bmg:          [PASS][5] -> [DMESG-FAIL][6] ([Intel XE#7129])
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_rotation_crc@multiplane-rotation-cropping-bottom.html
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_rotation_crc@multiplane-rotation-cropping-bottom.html

  * igt@kms_vblank@wait-idle@pipe-d-hdmi-a-3:
    - shard-bmg:          [PASS][7] -> [ABORT][8] ([Intel XE#5545] / [Intel XE#7814]) +1 other test abort
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_vblank@wait-idle@pipe-d-hdmi-a-3.html
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_vblank@wait-idle@pipe-d-hdmi-a-3.html

  * igt@xe_exec_basic@many-execqueues-many-vm-rebind:
    - shard-bmg:          [PASS][9] -> [SKIP][10] ([Intel XE#6557] / [Intel XE#6703])
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@xe_exec_basic@many-execqueues-many-vm-rebind.html
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@xe_exec_basic@many-execqueues-many-vm-rebind.html

  * igt@xe_exec_system_allocator@many-large-execqueues-new-race-nomemset:
    - shard-bmg:          [PASS][11] -> [SKIP][12] ([Intel XE#6703]) +121 other tests skip
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@xe_exec_system_allocator@many-large-execqueues-new-race-nomemset.html
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@xe_exec_system_allocator@many-large-execqueues-new-race-nomemset.html

  * igt@xe_exec_system_allocator@threads-many-free:
    - shard-lnl:          [PASS][13] -> [ABORT][14] ([Intel XE#8007])
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-lnl-7/igt@xe_exec_system_allocator@threads-many-free.html
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-lnl-5/igt@xe_exec_system_allocator@threads-many-free.html

  
#### Possible fixes ####

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic:
    - shard-bmg:          [FAIL][15] ([Intel XE#7571]) -> [PASS][16]
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-4/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-4/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html

  * igt@kms_flip@flip-vs-expired-vblank@c-edp1:
    - shard-lnl:          [FAIL][17] ([Intel XE#301] / [Intel XE#3149]) -> [PASS][18]
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html

  * igt@kms_hdr@static-swap@pipe-a-hdmi-a-3-xrgb2101010:
    - shard-bmg:          [SKIP][19] ([Intel XE#7915]) -> [PASS][20] +1 other test pass
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-7/igt@kms_hdr@static-swap@pipe-a-hdmi-a-3-xrgb2101010.html
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-10/igt@kms_hdr@static-swap@pipe-a-hdmi-a-3-xrgb2101010.html

  * igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1:
    - shard-lnl:          [FAIL][21] ([Intel XE#2142]) -> [PASS][22] +1 other test pass
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-lnl-8/igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1.html
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-lnl-5/igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1.html

  
#### Warnings ####

  * igt@kms_big_fb@x-tiled-32bpp-rotate-270:
    - shard-bmg:          [SKIP][23] ([Intel XE#2327]) -> [SKIP][24] ([Intel XE#6703])
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html

  * igt@kms_big_fb@yf-tiled-32bpp-rotate-90:
    - shard-bmg:          [SKIP][25] ([Intel XE#1124]) -> [SKIP][26] ([Intel XE#6703]) +1 other test skip
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_big_fb@yf-tiled-32bpp-rotate-90.html
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_big_fb@yf-tiled-32bpp-rotate-90.html

  * igt@kms_ccs@bad-pixel-format-y-tiled-ccs:
    - shard-bmg:          [SKIP][27] ([Intel XE#2887]) -> [SKIP][28] ([Intel XE#6703]) +2 other tests skip
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_ccs@bad-pixel-format-y-tiled-ccs.html
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_ccs@bad-pixel-format-y-tiled-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs:
    - shard-bmg:          [SKIP][29] ([Intel XE#2652]) -> [SKIP][30] ([Intel XE#6703])
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs.html
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs.html

  * igt@kms_chamelium_audio@hdmi-audio-edid:
    - shard-bmg:          [SKIP][31] ([Intel XE#2252]) -> [SKIP][32] ([Intel XE#6703]) +2 other tests skip
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_chamelium_audio@hdmi-audio-edid.html
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_chamelium_audio@hdmi-audio-edid.html

  * igt@kms_color_pipeline@plane-lut3d-green-only:
    - shard-bmg:          [SKIP][33] ([Intel XE#6969] / [Intel XE#7006]) -> [SKIP][34] ([Intel XE#6703])
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_color_pipeline@plane-lut3d-green-only.html
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_color_pipeline@plane-lut3d-green-only.html

  * igt@kms_cursor_crc@cursor-onscreen-256x85:
    - shard-bmg:          [SKIP][35] ([Intel XE#2320]) -> [SKIP][36] ([Intel XE#6703])
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_cursor_crc@cursor-onscreen-256x85.html
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_cursor_crc@cursor-onscreen-256x85.html

  * igt@kms_cursor_crc@cursor-rapid-movement-512x512:
    - shard-bmg:          [SKIP][37] ([Intel XE#2321] / [Intel XE#7355]) -> [SKIP][38] ([Intel XE#6703])
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_cursor_crc@cursor-rapid-movement-512x512.html
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_cursor_crc@cursor-rapid-movement-512x512.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions:
    - shard-lnl:          [SKIP][39] ([Intel XE#309] / [Intel XE#7343] / [Intel XE#7935]) -> [SKIP][40] ([Intel XE#309] / [Intel XE#7343])
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-lnl-8/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-lnl-5/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html

  * igt@kms_dirtyfb@drrs-dirtyfb-ioctl:
    - shard-bmg:          [SKIP][41] ([Intel XE#1508]) -> [SKIP][42] ([Intel XE#6703])
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html

  * igt@kms_feature_discovery@display-4x:
    - shard-bmg:          [SKIP][43] ([Intel XE#1138] / [Intel XE#7344]) -> [SKIP][44] ([Intel XE#6703])
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_feature_discovery@display-4x.html
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_feature_discovery@display-4x.html

  * igt@kms_flip@flip-vs-expired-vblank:
    - shard-lnl:          [FAIL][45] ([Intel XE#301] / [Intel XE#3149]) -> [FAIL][46] ([Intel XE#301])
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank.html
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yuv-linear-to-32bpp-yuv-linear-reflect-x:
    - shard-bmg:          [SKIP][47] ([Intel XE#7179]) -> [SKIP][48] ([Intel XE#6703])
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_flip_scaled_crc@flip-32bpp-yuv-linear-to-32bpp-yuv-linear-reflect-x.html
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_flip_scaled_crc@flip-32bpp-yuv-linear-to-32bpp-yuv-linear-reflect-x.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling:
    - shard-bmg:          [SKIP][49] ([Intel XE#7178] / [Intel XE#7351]) -> [SKIP][50] ([Intel XE#6703])
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling.html
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling.html

  * igt@kms_frontbuffer_tracking@drrs-abgr161616f-draw-render:
    - shard-bmg:          [SKIP][51] ([Intel XE#7061] / [Intel XE#7356]) -> [SKIP][52] ([Intel XE#6703])
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_frontbuffer_tracking@drrs-abgr161616f-draw-render.html
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_frontbuffer_tracking@drrs-abgr161616f-draw-render.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-move:
    - shard-bmg:          [SKIP][53] ([Intel XE#4141]) -> [SKIP][54] ([Intel XE#6703])
   [53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-move.html
   [54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbcdrrshdr-1p-offscreen-pri-shrfb-draw-mmap-wc:
    - shard-bmg:          [SKIP][55] ([Intel XE#2311]) -> [SKIP][56] ([Intel XE#6703]) +10 other tests skip
   [55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_frontbuffer_tracking@fbcdrrshdr-1p-offscreen-pri-shrfb-draw-mmap-wc.html
   [56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_frontbuffer_tracking@fbcdrrshdr-1p-offscreen-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@hdr-abgr161616f-draw-render:
    - shard-bmg:          [SKIP][57] ([Intel XE#7061]) -> [SKIP][58] ([Intel XE#6703])
   [57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_frontbuffer_tracking@hdr-abgr161616f-draw-render.html
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_frontbuffer_tracking@hdr-abgr161616f-draw-render.html

  * igt@kms_frontbuffer_tracking@psrhdr-2p-primscrn-cur-indfb-draw-blt:
    - shard-bmg:          [SKIP][59] ([Intel XE#2313]) -> [SKIP][60] ([Intel XE#6703]) +9 other tests skip
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_frontbuffer_tracking@psrhdr-2p-primscrn-cur-indfb-draw-blt.html
   [60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_frontbuffer_tracking@psrhdr-2p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier-source-clamping:
    - shard-bmg:          [SKIP][61] ([Intel XE#7283]) -> [SKIP][62] ([Intel XE#6703]) +2 other tests skip
   [61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier-source-clamping.html
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier-source-clamping.html

  * igt@kms_pm_backlight@fade:
    - shard-bmg:          [SKIP][63] ([Intel XE#7376] / [Intel XE#7760] / [Intel XE#870]) -> [SKIP][64] ([Intel XE#6703])
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_pm_backlight@fade.html
   [64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_pm_backlight@fade.html

  * igt@kms_psr2_sf@pr-primary-plane-update-sf-dmg-area:
    - shard-bmg:          [SKIP][65] ([Intel XE#1489]) -> [SKIP][66] ([Intel XE#6703])
   [65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_psr2_sf@pr-primary-plane-update-sf-dmg-area.html
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_psr2_sf@pr-primary-plane-update-sf-dmg-area.html

  * igt@kms_psr@fbc-pr-basic:
    - shard-bmg:          [SKIP][67] ([Intel XE#2234] / [Intel XE#2850]) -> [SKIP][68] ([Intel XE#6703]) +1 other test skip
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_psr@fbc-pr-basic.html
   [68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_psr@fbc-pr-basic.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
    - shard-bmg:          [SKIP][69] ([Intel XE#2330] / [Intel XE#5813]) -> [SKIP][70] ([Intel XE#6703])
   [69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-bmg:          [SKIP][71] ([Intel XE#2509] / [Intel XE#7437]) -> [SKIP][72] ([Intel XE#6703])
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
   [72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  * igt@xe_compute@ccs-mode-basic:
    - shard-bmg:          [SKIP][73] ([Intel XE#6599]) -> [SKIP][74] ([Intel XE#6703])
   [73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@xe_compute@ccs-mode-basic.html
   [74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@xe_compute@ccs-mode-basic.html

  * igt@xe_exec_basic@multigpu-no-exec-userptr-invalidate:
    - shard-bmg:          [SKIP][75] ([Intel XE#2322] / [Intel XE#7372]) -> [SKIP][76] ([Intel XE#6703]) +1 other test skip
   [75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@xe_exec_basic@multigpu-no-exec-userptr-invalidate.html
   [76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@xe_exec_basic@multigpu-no-exec-userptr-invalidate.html

  * igt@xe_exec_fault_mode@many-multi-queue-userptr-invalidate:
    - shard-bmg:          [SKIP][77] ([Intel XE#7136]) -> [SKIP][78] ([Intel XE#6703]) +2 other tests skip
   [77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@xe_exec_fault_mode@many-multi-queue-userptr-invalidate.html
   [78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@xe_exec_fault_mode@many-multi-queue-userptr-invalidate.html

  * igt@xe_exec_multi_queue@one-queue-preempt-mode-close-fd-smem:
    - shard-bmg:          [SKIP][79] ([Intel XE#6874]) -> [SKIP][80] ([Intel XE#6703]) +7 other tests skip
   [79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@xe_exec_multi_queue@one-queue-preempt-mode-close-fd-smem.html
   [80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@xe_exec_multi_queue@one-queue-preempt-mode-close-fd-smem.html

  * igt@xe_exec_reset@cm-multi-queue-gt-reset:
    - shard-bmg:          [SKIP][81] ([Intel XE#7866]) -> [SKIP][82] ([Intel XE#6703])
   [81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@xe_exec_reset@cm-multi-queue-gt-reset.html
   [82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@xe_exec_reset@cm-multi-queue-gt-reset.html

  * igt@xe_exec_threads@threads-multi-queue-hang-fd-userptr-invalidate-race:
    - shard-bmg:          [SKIP][83] ([Intel XE#7138]) -> [SKIP][84] ([Intel XE#6703])
   [83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@xe_exec_threads@threads-multi-queue-hang-fd-userptr-invalidate-race.html
   [84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@xe_exec_threads@threads-multi-queue-hang-fd-userptr-invalidate-race.html

  * igt@xe_pm@d3cold-mocs:
    - shard-bmg:          [SKIP][85] ([Intel XE#2284] / [Intel XE#7370]) -> [SKIP][86] ([Intel XE#6703])
   [85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@xe_pm@d3cold-mocs.html
   [86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@xe_pm@d3cold-mocs.html

  * igt@xe_query@multigpu-query-engines:
    - shard-bmg:          [SKIP][87] ([Intel XE#944]) -> [SKIP][88] ([Intel XE#6703])
   [87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f/shard-bmg-2/igt@xe_query@multigpu-query-engines.html
   [88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160111v3/shard-bmg-2/igt@xe_query@multigpu-query-engines.html

  
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1138]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1138
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#1508]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1508
  [Intel XE#2142]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2142
  [Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
  [Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
  [Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
  [Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
  [Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
  [Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
  [Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
  [Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
  [Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
  [Intel XE#2330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2330
  [Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
  [Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
  [Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
  [Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
  [Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
  [Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
  [Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
  [Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
  [Intel XE#5177]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5177
  [Intel XE#5545]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5545
  [Intel XE#5813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5813
  [Intel XE#6557]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6557
  [Intel XE#6599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6599
  [Intel XE#6703]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6703
  [Intel XE#6874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6874
  [Intel XE#6969]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6969
  [Intel XE#7006]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7006
  [Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
  [Intel XE#7129]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7129
  [Intel XE#7136]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7136
  [Intel XE#7138]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7138
  [Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
  [Intel XE#7179]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7179
  [Intel XE#7283]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7283
  [Intel XE#7343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7343
  [Intel XE#7344]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7344
  [Intel XE#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
  [Intel XE#7355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7355
  [Intel XE#7356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7356
  [Intel XE#7370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7370
  [Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
  [Intel XE#7376]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7376
  [Intel XE#7437]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7437
  [Intel XE#7571]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7571
  [Intel XE#7760]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7760
  [Intel XE#7814]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7814
  [Intel XE#7866]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7866
  [Intel XE#7915]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7915
  [Intel XE#7935]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7935
  [Intel XE#8007]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8007
  [Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
  [Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944


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

  * Linux: xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f -> xe-pw-160111v3

  IGT_8935: 8935
  xe-5114-7e25390024f8a4a9fdd6ec50f000ee25c006c02f: 7e25390024f8a4a9fdd6ec50f000ee25c006c02f
  xe-pw-160111v3: 160111v3

== Logs ==

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

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

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

* Re: [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching
  2026-05-22  8:45 [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching Gustavo Sousa
                   ` (10 preceding siblings ...)
  2026-05-22 13:31 ` ✓ Xe.CI.FULL: " Patchwork
@ 2026-05-22 14:31 ` Gustavo Sousa
  11 siblings, 0 replies; 13+ messages in thread
From: Gustavo Sousa @ 2026-05-22 14:31 UTC (permalink / raw)
  To: intel-xe; +Cc: Matt Roper, Violet Monti

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

> This series adds several improvements to RTP code around rule matching
> logic.
>
> It first starts with making sure there is a cleaner separation of
> responsibilities when it comes to the generic kunit testing for RTP.
> Then it goes on to improve rule matching code by making the parsing
> logic more robust and restructuring the code to resemble a formal
> grammar and make it easier to add future extensions.
>
> Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>

Pushed to drm-xe-next. Thanks Matt and Violet for the reviews!

--
Gustavo Sousa

> ---
> Changes in v3:
> - Added eBNF grammar for the rules to the kernel-doc.
> - Fully reviewed now. Sent for fresh CI results.
> - Link to v2: https://patch.msgid.link/20260430-rtp-rule-parser-v2-0-157e98b4ab51@intel.com
>
> Changes in v2:
> - Incorporated review feedback. See individual patches for the
>   changelog.
> - Incorporated the addition of the match type XE_RTP_MATCH_PLATFORM_STEP
>   after rebasing on latest drm-tip, which is reflected in some of the
>   patches.
> - Link to v1: https://patch.msgid.link/20260114-rtp-rule-parser-v1-0-fa9029586bff@intel.com
>
> ---
> Gustavo Sousa (7):
>       drm/xe/rtp: Write kunit test cases specific for rule matching
>       drm/xe/rtp: Drop rule matching cases from rtp_to_sr_cases and rtp_cases
>       drm/xe/rtp: Don't short-circuit to false in or-yes case
>       drm/xe/rtp: Do not break parsing when missing context
>       drm/xe/rtp: Extract rule_match_item()
>       drm/xe/rtp: Fully parse the ruleset
>       drm/xe/rtp: Implement a structured parser for rule matching
>
>  drivers/gpu/drm/xe/tests/xe_rtp.c      |  38 ++++
>  drivers/gpu/drm/xe/tests/xe_rtp_test.c | 327 +++++++++++++++++++++------------
>  drivers/gpu/drm/xe/tests/xe_rtp_test.h |  23 +++
>  drivers/gpu/drm/xe/xe_rtp.c            | 321 +++++++++++++++++++-------------
>  drivers/gpu/drm/xe/xe_rtp.h            |  29 ++-
>  5 files changed, 486 insertions(+), 252 deletions(-)
> ---
> base-commit: 7e25390024f8a4a9fdd6ec50f000ee25c006c02f
> change-id: 20260114-rtp-rule-parser-ac01472acdeb
>
> Best regards,
> --  
> Gustavo Sousa <gustavo.sousa@intel.com>

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

end of thread, other threads:[~2026-05-22 14:32 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-22  8:45 [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching Gustavo Sousa
2026-05-22  8:45 ` [PATCH v3 1/7] drm/xe/rtp: Write kunit test cases specific for " Gustavo Sousa
2026-05-22  8:45 ` [PATCH v3 2/7] drm/xe/rtp: Drop rule matching cases from rtp_to_sr_cases and rtp_cases Gustavo Sousa
2026-05-22  8:45 ` [PATCH v3 3/7] drm/xe/rtp: Don't short-circuit to false in or-yes case Gustavo Sousa
2026-05-22  8:45 ` [PATCH v3 4/7] drm/xe/rtp: Do not break parsing when missing context Gustavo Sousa
2026-05-22  8:45 ` [PATCH v3 5/7] drm/xe/rtp: Extract rule_match_item() Gustavo Sousa
2026-05-22  8:45 ` [PATCH v3 6/7] drm/xe/rtp: Fully parse the ruleset Gustavo Sousa
2026-05-22  8:45 ` [PATCH v3 7/7] drm/xe/rtp: Implement a structured parser for rule matching Gustavo Sousa
2026-05-22  8:51 ` ✗ CI.checkpatch: warning for drm/xe/rtp: Miscellaneous improvements to rule matching (rev3) Patchwork
2026-05-22  8:53 ` ✓ CI.KUnit: success " Patchwork
2026-05-22  9:31 ` ✓ Xe.CI.BAT: " Patchwork
2026-05-22 13:31 ` ✓ Xe.CI.FULL: " Patchwork
2026-05-22 14:31 ` [PATCH v3 0/7] drm/xe/rtp: Miscellaneous improvements to rule matching Gustavo Sousa

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