]> git.hungrycats.org Git - linux/commitdiff
drm/xe/rtp: Add kunit tests to exercise FIELD_SET_FUNC action
authorMatt Roper <matthew.d.roper@intel.com>
Wed, 17 Jun 2026 19:24:49 +0000 (12:24 -0700)
committerMatt Roper <matthew.d.roper@intel.com>
Wed, 17 Jun 2026 20:59:05 +0000 (13:59 -0700)
Add a couple additional tests to the RTP kunit suite that ensure
FIELD_SET_FUNC() actions are evaluated properly and the values properly
consolidate/conflict with values coming from other literal SET/FIELD_SET
rules.

Suggested-by: Gustavo Sousa <gustavo.sousa@intel.com>
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com>
Link: https://patch.msgid.link/20260617-rtp_with_dynamic_vals-v2-5-3f4cb34c2ea1@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
drivers/gpu/drm/xe/tests/xe_rtp_test.c

index 3d0688d058d977a188edc0938cef834828185dae..367811621880f8ae009a1b9ecd033f7ac3a27a1e 100644 (file)
@@ -280,6 +280,11 @@ static void xe_rtp_rules_tests(struct kunit *test)
        KUNIT_EXPECT_EQ(test, err, param->expected_err);
 }
 
+static u32 bits_2_3_set(struct xe_gt *gt, struct xe_hw_engine *hwe)
+{
+       return REG_BIT(2) | REG_BIT(3);
+}
+
 static const struct rtp_to_sr_test_case rtp_to_sr_cases[] = {
        {
                .name = "coalesce-same-reg",
@@ -300,6 +305,29 @@ static const struct rtp_to_sr_test_case rtp_to_sr_cases[] = {
                        },
                ),
        },
+       {
+               .name = "coalesce-same-reg-literal-and-func",
+               .expected_reg = REGULAR_REG1,
+               .expected_set_bits = REG_BIT(0) | REG_BIT(1) | REG_BIT(2) | REG_BIT(3),
+               .expected_clr_bits = REG_BIT(0) | REG_BIT(1) | REG_BIT(2) | REG_BIT(3),
+               .expected_active = BIT(0) | BIT(1),
+               .expected_count_sr_entries = 1,
+               /* Different bits on the same register: create a single entry */
+               .table = XE_RTP_TABLE_SR(
+                       { XE_RTP_NAME("basic-1"),
+                         XE_RTP_RULES(FUNC(match_yes)),
+                         XE_RTP_ACTIONS(FIELD_SET(REGULAR_REG1,
+                                                  REG_BIT(0) | REG_BIT(1),
+                                                  REG_BIT(0) | REG_BIT(1)))
+                       },
+                       { XE_RTP_NAME("basic-2"),
+                         XE_RTP_RULES(FUNC(match_yes)),
+                         XE_RTP_ACTIONS(FIELD_SET_FUNC(REGULAR_REG1,
+                                                       REG_BIT(2) | REG_BIT(3),
+                                                       bits_2_3_set))
+                       },
+               ),
+       },
        {
                .name = "no-match-no-add",
                .expected_reg = REGULAR_REG1,
@@ -417,6 +445,30 @@ static const struct rtp_to_sr_test_case rtp_to_sr_cases[] = {
                        },
                ),
        },
+       {
+               .name = "conflict-not-disjoint-literal-and-func",
+               .expected_reg = REGULAR_REG1,
+               .expected_set_bits = REG_BIT(1) | REG_BIT(2),
+               .expected_clr_bits = REG_BIT(1) | REG_BIT(2),
+               .expected_active = BIT(0) | BIT(1),
+               .expected_count_sr_entries = 1,
+               .expected_sr_errors = 1,
+               .table = XE_RTP_TABLE_SR(
+                       { XE_RTP_NAME("basic-1"),
+                         XE_RTP_RULES(FUNC(match_yes)),
+                         XE_RTP_ACTIONS(FIELD_SET(REGULAR_REG1,
+                                                  REG_BIT(1) | REG_BIT(2),
+                                                  REG_BIT(1) | REG_BIT(2)))
+                       },
+                       /* drop: bits are not disjoint with previous entries */
+                       { XE_RTP_NAME("basic-2"),
+                         XE_RTP_RULES(FUNC(match_yes)),
+                         XE_RTP_ACTIONS(FIELD_SET_FUNC(REGULAR_REG1,
+                                                       REG_BIT(2) | REG_BIT(3),
+                                                       bits_2_3_set))
+                       },
+               ),
+       },
        {
                .name = "conflict-reg-type",
                .expected_reg = REGULAR_REG1,