[PATCH v2 3/7] drm/xe/kunit: Test active rtp entries
Gustavo Sousa
gustavo.sousa at intel.com
Fri Jul 26 16:09:35 UTC 2024
Quoting Lucas De Marchi (2024-07-26 03:43:33-03:00)
>Enabling active tracking in the rtp context and check for all the tests
>the expected entries become active.
>
>Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
>---
> drivers/gpu/drm/xe/tests/xe_rtp_test.c | 22 +++++++++++++++++++++-
> drivers/gpu/drm/xe/xe_rtp.c | 1 +
> 2 files changed, 22 insertions(+), 1 deletion(-)
>
>diff --git a/drivers/gpu/drm/xe/tests/xe_rtp_test.c b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
>index 5ebaed1af3f2..dbf982b1ada8 100644
>--- a/drivers/gpu/drm/xe/tests/xe_rtp_test.c
>+++ b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
>@@ -38,6 +38,7 @@ struct rtp_test_case {
> u32 expected_clr_bits;
> unsigned long expected_count_sr_entries;
> unsigned int expected_sr_errors;
>+ unsigned long expected_active;
> const struct xe_rtp_entry_sr *entries;
> };
>
>@@ -57,6 +58,7 @@ static const struct rtp_test_case cases[] = {
> .expected_reg = REGULAR_REG1,
> .expected_set_bits = REG_BIT(0) | REG_BIT(1),
> .expected_clr_bits = REG_BIT(0) | REG_BIT(1),
>+ .expected_active = BIT(0) | BIT(1),
> .expected_count_sr_entries = 1,
> /* Different bits on the same register: create a single entry */
> .entries = (const struct xe_rtp_entry_sr[]) {
>@@ -76,6 +78,7 @@ static const struct rtp_test_case cases[] = {
> .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 since rules don't match */
> .entries = (const struct xe_rtp_entry_sr[]) {
>@@ -95,6 +98,7 @@ static const struct rtp_test_case cases[] = {
> .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"),
>@@ -148,6 +152,7 @@ static const struct rtp_test_case cases[] = {
> .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[]) {
>@@ -167,6 +172,7 @@ static const struct rtp_test_case cases[] = {
> .expected_reg = REGULAR_REG1,
> .expected_set_bits = REG_BIT(0),
> .expected_clr_bits = REG_BIT(0),
>+ .expected_active = BIT(0) | BIT(1),
> .expected_count_sr_entries = 2,
> /* Same bits on different registers are not coalesced */
> .entries = (const struct xe_rtp_entry_sr[]) {
>@@ -186,6 +192,7 @@ static const struct rtp_test_case cases[] = {
> .expected_reg = REGULAR_REG1,
> .expected_set_bits = REG_BIT(0),
> .expected_clr_bits = REG_BIT(1) | REG_BIT(0),
>+ .expected_active = BIT(0) | BIT(1),
> .expected_count_sr_entries = 1,
> /* Check clr vs set actions on different bits */
> .entries = (const struct xe_rtp_entry_sr[]) {
>@@ -207,6 +214,7 @@ static const struct rtp_test_case cases[] = {
> .expected_reg = REGULAR_REG1,
> .expected_set_bits = TEMP_FIELD,
> .expected_clr_bits = TEMP_MASK,
>+ .expected_active = BIT(0),
> .expected_count_sr_entries = 1,
> /* Check FIELD_SET works */
> .entries = (const struct xe_rtp_entry_sr[]) {
>@@ -225,6 +233,7 @@ static const struct rtp_test_case cases[] = {
> .expected_reg = REGULAR_REG1,
> .expected_set_bits = REG_BIT(0),
> .expected_clr_bits = REG_BIT(0),
>+ .expected_active = BIT(0) | BIT(1),
> .expected_count_sr_entries = 1,
> .expected_sr_errors = 1,
> .entries = (const struct xe_rtp_entry_sr[]) {
>@@ -245,6 +254,7 @@ static const struct rtp_test_case cases[] = {
> .expected_reg = REGULAR_REG1,
> .expected_set_bits = REG_BIT(0),
> .expected_clr_bits = REG_BIT(0),
>+ .expected_active = BIT(0) | BIT(1),
> .expected_count_sr_entries = 1,
> .expected_sr_errors = 1,
> .entries = (const struct xe_rtp_entry_sr[]) {
>@@ -265,6 +275,7 @@ static const struct rtp_test_case cases[] = {
> .expected_reg = REGULAR_REG1,
> .expected_set_bits = REG_BIT(0),
> .expected_clr_bits = REG_BIT(0),
>+ .expected_active = BIT(0) | BIT(1) | BIT(2),
> .expected_count_sr_entries = 1,
> .expected_sr_errors = 2,
> .entries = (const struct xe_rtp_entry_sr[]) {
>@@ -295,9 +306,16 @@ static void xe_rtp_process_tests(struct kunit *test)
> struct xe_reg_sr *reg_sr = >->reg_sr;
> const struct xe_reg_sr_entry *sre, *sr_entry = NULL;
> struct xe_rtp_process_ctx ctx = XE_RTP_PROCESS_CTX_INITIALIZER(gt);
>- unsigned long idx, count_sr_entries = 0;
>+ unsigned long idx, count_sr_entries = 0, count_rtp_entries = 0, active = 0;
>+ const struct xe_rtp_entry_sr *rtp_entry;
>
> xe_reg_sr_init(reg_sr, "xe_rtp_tests", xe);
>+
>+ for (rtp_entry = param->entries; rtp_entry && rtp_entry->rules;
>+ rtp_entry++, count_rtp_entries++)
>+ ;
I think the "rtp_entry &&" part of the condition is unnecessary.
With that,
Reviewed-by: Gustavo Sousa <gustavo.sousa at intel.com>
Also, an alternative loop where we have only one increment:
for (count_rtp_entries = 0; param->entries[count_rtp_entries].rules;
count_rtp_entries++);
Up to you.
--
Gustavo Sousa
>+
>+ xe_rtp_process_ctx_enable_active_tracking(&ctx, &active, count_rtp_entries);
> xe_rtp_process_to_sr(&ctx, param->entries, reg_sr);
>
> xa_for_each(®_sr->xa, idx, sre) {
>@@ -307,6 +325,8 @@ static void xe_rtp_process_tests(struct kunit *test)
> count_sr_entries++;
> }
>
>+ KUNIT_EXPECT_EQ(test, active, param->expected_active);
>+
> KUNIT_EXPECT_EQ(test, count_sr_entries, param->expected_count_sr_entries);
> if (count_sr_entries) {
> KUNIT_EXPECT_EQ(test, sr_entry->clr_bits, param->expected_clr_bits);
>diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
>index 02e28274282f..acb35b95a3f6 100644
>--- a/drivers/gpu/drm/xe/xe_rtp.c
>+++ b/drivers/gpu/drm/xe/xe_rtp.c
>@@ -217,6 +217,7 @@ void xe_rtp_process_ctx_enable_active_tracking(struct xe_rtp_process_ctx *ctx,
> ctx->active_entries = active_entries;
> ctx->n_entries = n_entries;
> }
>+EXPORT_SYMBOL_IF_KUNIT(xe_rtp_process_ctx_enable_active_tracking);
>
> static void rtp_mark_active(struct xe_device *xe,
> struct xe_rtp_process_ctx *ctx,
>--
>2.43.0
>
More information about the Intel-xe
mailing list