* [PATCH i-g-t v10 1/7] tests/intel/kms_pm_dc: s/check_dc_counter/assert_dc_counter
2026-06-18 6:27 [PATCH i-g-t v10 0/7] Enable and Add new tests for DC3CO Jeevan B
@ 2026-06-18 6:27 ` Jeevan B
2026-06-18 6:27 ` [PATCH i-g-t v10 2/7] tests/intel/kms_pm_dc: Replace require with proper assertion Jeevan B
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Jeevan B @ 2026-06-18 6:27 UTC (permalink / raw)
To: igt-dev; +Cc: Jeevan B, Mohammed Thasleem
Rename function name.
Signed-off-by: Jeevan B <jeevan.b@intel.com>
Reviewed-by: Mohammed Thasleem <mohammed.thasleem@intel.com>
---
tests/intel/kms_pm_dc.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
index 90df8ee37..4e8720c6e 100644
--- a/tests/intel/kms_pm_dc.c
+++ b/tests/intel/kms_pm_dc.c
@@ -113,7 +113,7 @@ typedef struct {
bool runtime_suspend_disabled;
} data_t;
-static void check_dc_counter(data_t *data, int dc_flag, uint32_t prev_dc_count);
+static void assert_dc_counter(data_t *data, int dc_flag, uint32_t prev_dc_count);
static void set_output_on_pipe_b(data_t *data)
{
@@ -260,7 +260,7 @@ static void create_color_fb(data_t *data, igt_fb_t *fb, color_t *fb_color)
paint_rectangles(data, data->mode, fb_color, fb);
}
-static void check_dc_counter(data_t *data, int dc_flag, uint32_t prev_dc_count)
+static void assert_dc_counter(data_t *data, int dc_flag, uint32_t prev_dc_count)
{
igt_assert_f(igt_dc_state_wait_entry(data->debugfs_fd, dc_flag, prev_dc_count),
"%s state is not achieved\n%s:\n%s\n", igt_dc_state_name(dc_flag),
@@ -268,7 +268,7 @@ static void check_dc_counter(data_t *data, int dc_flag, uint32_t prev_dc_count)
PWR_DOMAIN_INFO));
}
-static void check_dc_counter_negative(data_t *data, int dc_flag, uint32_t prev_dc_count)
+static void assert_dc_counter_negative(data_t *data, int dc_flag, uint32_t prev_dc_count)
{
igt_assert_f(!igt_dc_state_wait_entry(data->debugfs_fd, dc_flag, prev_dc_count),
"%s state is achieved\n%s:\n%s\n", igt_dc_state_name(dc_flag),
@@ -349,7 +349,7 @@ static void test_dc5_retention_flops(data_t *data, int dc_flag)
set_output_on_pipe_b(data);
setup_primary(data);
igt_assert(psr_wait_entry(data->debugfs_fd, data->op_psr_mode, data->output));
- check_dc_counter(data, dc_flag, dc_counter_before_psr);
+ assert_dc_counter(data, dc_flag, dc_counter_before_psr);
cleanup_dc_psr(data);
}
@@ -363,7 +363,7 @@ static void test_dc_state_psr(data_t *data, int dc_flag)
setup_primary(data);
igt_require(!psr_disabled_check(data->debugfs_fd));
igt_assert(psr_wait_entry(data->debugfs_fd, data->op_psr_mode, data->output));
- check_dc_counter(data, dc_flag, dc_counter_before_psr);
+ assert_dc_counter(data, dc_flag, dc_counter_before_psr);
psr_sink_error_check(data->debugfs_fd, data->op_psr_mode, data->output);
cleanup_dc_psr(data);
}
@@ -442,7 +442,7 @@ static void test_dc_state_dpms(data_t *data, int dc_flag)
setup_dc_dpms(data);
dc_counter = igt_read_dc_counter(data->debugfs_fd, dc_flag);
dpms_off(data);
- check_dc_counter(data, dc_flag, dc_counter);
+ assert_dc_counter(data, dc_flag, dc_counter);
dpms_on(data);
cleanup_dc_dpms(data);
}
@@ -455,7 +455,7 @@ static void test_dc_state_dpms_negative(data_t *data, int dc_flag)
setup_dc_dpms(data);
dc_counter = igt_read_dc_counter(data->debugfs_fd, dc_flag);
dpms_on(data);
- check_dc_counter_negative(data, dc_flag, dc_counter);
+ assert_dc_counter_negative(data, dc_flag, dc_counter);
cleanup_dc_dpms(data);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH i-g-t v10 2/7] tests/intel/kms_pm_dc: Replace require with proper assertion
2026-06-18 6:27 [PATCH i-g-t v10 0/7] Enable and Add new tests for DC3CO Jeevan B
2026-06-18 6:27 ` [PATCH i-g-t v10 1/7] tests/intel/kms_pm_dc: s/check_dc_counter/assert_dc_counter Jeevan B
@ 2026-06-18 6:27 ` Jeevan B
2026-06-18 6:27 ` [PATCH i-g-t v10 3/7] tests/intel/kms_pm_dc: Enable DC3CO test for PSR2/PR modes Jeevan B
2026-06-18 6:27 ` [PATCH i-g-t v10 4/7] tests/kms_vrr: Add new test for DC3CO validation with LOBF Jeevan B
3 siblings, 0 replies; 6+ messages in thread
From: Jeevan B @ 2026-06-18 6:27 UTC (permalink / raw)
To: igt-dev; +Cc: Jeevan B, Mohammed Thasleem
The DC3CO video playback simulation test was incorrectly using require at
the end to check if DC3CO state was entered. This causes the test to be
marked as SKIP instead of FAIL when DC3CO doesn't work properly, hiding
real issues. So changing the call from require to assert.
Fixes: b89efa8048e58 ("tests/i915/i915_pm_dc: Check dc3co count to skip the test")
Signed-off-by: Jeevan B <jeevan.b@intel.com>
Reviewed-by: Mohammed Thasleem <mohammed.thasleem@intel.com>
---
tests/intel/kms_pm_dc.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
index 4e8720c6e..73607e764 100644
--- a/tests/intel/kms_pm_dc.c
+++ b/tests/intel/kms_pm_dc.c
@@ -319,8 +319,7 @@ static void check_dc3co_with_videoplayback_like_load(data_t *data)
usleep(delay);
}
- igt_require_f(igt_dc_state_wait_entry(data->debugfs_fd, IGT_INTEL_CHECK_DC3CO,
- dc3co_prev_cnt), "dc3co-vpb-simulation not enabled\n");
+ assert_dc_counter(data, IGT_INTEL_CHECK_DC3CO, dc3co_prev_cnt);
}
static void setup_dc3co(data_t *data)
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH i-g-t v10 3/7] tests/intel/kms_pm_dc: Enable DC3CO test for PSR2/PR modes
2026-06-18 6:27 [PATCH i-g-t v10 0/7] Enable and Add new tests for DC3CO Jeevan B
2026-06-18 6:27 ` [PATCH i-g-t v10 1/7] tests/intel/kms_pm_dc: s/check_dc_counter/assert_dc_counter Jeevan B
2026-06-18 6:27 ` [PATCH i-g-t v10 2/7] tests/intel/kms_pm_dc: Replace require with proper assertion Jeevan B
@ 2026-06-18 6:27 ` Jeevan B
2026-06-18 6:27 ` [PATCH i-g-t v10 4/7] tests/kms_vrr: Add new test for DC3CO validation with LOBF Jeevan B
3 siblings, 0 replies; 6+ messages in thread
From: Jeevan B @ 2026-06-18 6:27 UTC (permalink / raw)
To: igt-dev; +Cc: Jeevan B, Mohammed Thasleem, Dibin Moolakadan Subrahmanian
Enable DC3CO with PSR2/PR mode on TGL and for platforms with
display version greater than 35.
v2: Fix debug, remove trailing dash and merge mode and char to
single strcut array.
v3: Minor cosmetic changes.
v4: Update commit message, use data->op_psr_mode directly, keep
psr_wait_entry, and refresh dc3co description to cover PSR2/PR.
v5: Remove TGL check for PSR2.
Signed-off-by: Jeevan B <jeevan.b@intel.com>
Reviewed-by: Mohammed Thasleem <mohammed.thasleem@intel.com>
Reviewed-by: Dibin Moolakadan Subrahmanian <dibin.moolakadan.subrahmanian@intel.com>
---
tests/intel/kms_pm_dc.c | 41 ++++++++++++++++++++++++++++++++---------
1 file changed, 32 insertions(+), 9 deletions(-)
diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
index 73607e764..13f884e19 100644
--- a/tests/intel/kms_pm_dc.c
+++ b/tests/intel/kms_pm_dc.c
@@ -48,8 +48,8 @@
/**
* SUBTEST: dc3co-vpb-simulation
- * Description: Make sure that system enters DC3CO when PSR2 is active and system
- * is in SLEEP state
+ * Description: Make sure that system enters DC3CO when PSR2 or PR is active and
+ * system is in SLEEP state
*
* SUBTEST: dc5-dpms
* Description: Validate display engine entry to DC5 state while all connectors's
@@ -113,6 +113,11 @@ typedef struct {
bool runtime_suspend_disabled;
} data_t;
+struct dc3co_test_mode {
+ enum psr_mode mode;
+ const char *name;
+};
+
static void assert_dc_counter(data_t *data, int dc_flag, uint32_t prev_dc_count);
static void set_output_on_pipe_b(data_t *data)
@@ -326,7 +331,8 @@ static void setup_dc3co(data_t *data)
{
psr_enable(data->drm_fd, data->debugfs_fd, data->op_psr_mode, data->output);
igt_require_f(psr_wait_entry(data->debugfs_fd, data->op_psr_mode, data->output),
- "PSR2 is not enabled\n");
+ "%s is not enabled\n",
+ data->op_psr_mode == PSR_MODE_2 ? "PSR2" : "Panel Replay");
}
static void test_dc3co_vpb_simulation(data_t *data)
@@ -704,12 +710,29 @@ int igt_main()
}
igt_describe("In this test we make sure that system enters DC3CO "
- "when PSR2 is active and system is in SLEEP state");
- igt_subtest("dc3co-vpb-simulation") {
- data.op_psr_mode = PSR_MODE_2;
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
- data.op_psr_mode, NULL));
- test_dc3co_vpb_simulation(&data);
+ "when PSR2 or PR is active and system is in SLEEP state");
+ igt_subtest_with_dynamic("dc3co-vpb-simulation") {
+ static const struct dc3co_test_mode dc3co_modes[] = {
+ { PSR_MODE_2, "psr2" },
+ { PR_MODE, "pr" },
+ };
+
+ for (int i = 0; i < ARRAY_SIZE(dc3co_modes); i++) {
+ const char *name = dc3co_modes[i].name;
+ data.op_psr_mode = dc3co_modes[i].mode;
+
+ igt_dynamic_f("%s", name) {
+ igt_require(psr_sink_support(data.drm_fd,
+ data.debugfs_fd,
+ data.op_psr_mode, NULL));
+
+ igt_require_f(intel_display_ver(data.devid) >= 35,
+ "Platform does not support DC3CO with %s\n",
+ data.op_psr_mode == PSR_MODE_2 ? "PSR2" : "Panel Replay");
+
+ test_dc3co_vpb_simulation(&data);
+ }
+ }
}
igt_describe("This test validates display engine entry to DC5 state "
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH i-g-t v10 4/7] tests/kms_vrr: Add new test for DC3CO validation with LOBF
2026-06-18 6:27 [PATCH i-g-t v10 0/7] Enable and Add new tests for DC3CO Jeevan B
` (2 preceding siblings ...)
2026-06-18 6:27 ` [PATCH i-g-t v10 3/7] tests/intel/kms_pm_dc: Enable DC3CO test for PSR2/PR modes Jeevan B
@ 2026-06-18 6:27 ` Jeevan B
3 siblings, 0 replies; 6+ messages in thread
From: Jeevan B @ 2026-06-18 6:27 UTC (permalink / raw)
To: igt-dev; +Cc: Jeevan B, Mohammed Thasleem
Add lobf-dc3co subtest to validate DC3CO entry during link-off
between frames.
v2: Fix the flow logic.
Signed-off-by: Jeevan B <jeevan.b@intel.com>
Reviewed-by: Mohammed Thasleem <mohammed.thasleem@intel.com>
---
tests/kms_vrr.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/tests/kms_vrr.c b/tests/kms_vrr.c
index 6043d40f1..82eb8554a 100644
--- a/tests/kms_vrr.c
+++ b/tests/kms_vrr.c
@@ -29,6 +29,7 @@
*/
#include "igt.h"
+#include "igt_pm.h"
#include "igt_psr.h"
#include "i915/intel_drrs.h"
#include "sw_sync.h"
@@ -76,6 +77,9 @@
*
* SUBTEST: negative-basic
* Description: Make sure that VRR should not be enabled on the Non-VRR panel.
+ *
+ * SUBTEST: lobf-dc3co
+ * Description: Test DC3CO entry during LOBF.
*/
#define NSECS_PER_SEC (1000000000ull)
@@ -873,6 +877,25 @@ test_lobf(data_t *data, igt_crtc_t *crtc, igt_output_t *output,
igt_assert_f(lobf_enabled, "LOBF not enabled\n");
}
+static void test_lobf_dc3co(data_t *data, igt_crtc_t *crtc,
+ igt_output_t *output, uint32_t flags)
+{
+ unsigned long dc3co_count_before, dc3co_count_after;
+
+ dc3co_count_before = igt_read_dc_counter(data->debugfs_fd,
+ IGT_INTEL_CHECK_DC3CO);
+
+ test_lobf(data, crtc, output, flags);
+
+ dc3co_count_after = igt_read_dc_counter(data->debugfs_fd,
+ IGT_INTEL_CHECK_DC3CO);
+
+ igt_assert_f(dc3co_count_after > dc3co_count_before,
+ "DC3CO should be entered during link-off periods. "
+ "Before: %lu, After: %lu\n",
+ dc3co_count_before, dc3co_count_after);
+}
+
static void test_cleanup(data_t *data, igt_crtc_t *crtc, igt_output_t *output)
{
igt_crtc_set_prop_value(crtc,
@@ -1112,6 +1135,17 @@ int igt_main_args("drs:", long_opts, help_str, opt_handler, &data)
run_vrr_test(&data, test_lobf, TEST_LINK_OFF);
}
+
+ igt_describe("This test validates DC3CO entry during LOBF (Link-Off Between "
+ "Frames) periods while VRR is active and PSR is disabled.");
+
+ igt_subtest_with_dynamic("lobf-dc3co") {
+ igt_require(intel_display_ver(intel_get_drm_devid(data.drm_fd)) >= 35);
+
+ igt_require_dc_counter(data.debugfs_fd, IGT_INTEL_CHECK_DC3CO);
+
+ run_vrr_test(&data, test_lobf_dc3co, TEST_LINK_OFF);
+ }
}
igt_fixture() {
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH i-g-t v10 4/7] tests/kms_vrr: Add new test for DC3CO validation with LOBF
2026-06-18 6:28 [PATCH i-g-t v10 0/7] Enable and Add new tests for DC3CO Jeevan B
@ 2026-06-18 6:29 ` Jeevan B
0 siblings, 0 replies; 6+ messages in thread
From: Jeevan B @ 2026-06-18 6:29 UTC (permalink / raw)
To: igt-dev; +Cc: Jeevan B, Mohammed Thasleem
Add lobf-dc3co subtest to validate DC3CO entry during link-off
between frames.
v2: Fix the flow logic.
Signed-off-by: Jeevan B <jeevan.b@intel.com>
Reviewed-by: Mohammed Thasleem <mohammed.thasleem@intel.com>
---
tests/kms_vrr.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/tests/kms_vrr.c b/tests/kms_vrr.c
index 6043d40f1..82eb8554a 100644
--- a/tests/kms_vrr.c
+++ b/tests/kms_vrr.c
@@ -29,6 +29,7 @@
*/
#include "igt.h"
+#include "igt_pm.h"
#include "igt_psr.h"
#include "i915/intel_drrs.h"
#include "sw_sync.h"
@@ -76,6 +77,9 @@
*
* SUBTEST: negative-basic
* Description: Make sure that VRR should not be enabled on the Non-VRR panel.
+ *
+ * SUBTEST: lobf-dc3co
+ * Description: Test DC3CO entry during LOBF.
*/
#define NSECS_PER_SEC (1000000000ull)
@@ -873,6 +877,25 @@ test_lobf(data_t *data, igt_crtc_t *crtc, igt_output_t *output,
igt_assert_f(lobf_enabled, "LOBF not enabled\n");
}
+static void test_lobf_dc3co(data_t *data, igt_crtc_t *crtc,
+ igt_output_t *output, uint32_t flags)
+{
+ unsigned long dc3co_count_before, dc3co_count_after;
+
+ dc3co_count_before = igt_read_dc_counter(data->debugfs_fd,
+ IGT_INTEL_CHECK_DC3CO);
+
+ test_lobf(data, crtc, output, flags);
+
+ dc3co_count_after = igt_read_dc_counter(data->debugfs_fd,
+ IGT_INTEL_CHECK_DC3CO);
+
+ igt_assert_f(dc3co_count_after > dc3co_count_before,
+ "DC3CO should be entered during link-off periods. "
+ "Before: %lu, After: %lu\n",
+ dc3co_count_before, dc3co_count_after);
+}
+
static void test_cleanup(data_t *data, igt_crtc_t *crtc, igt_output_t *output)
{
igt_crtc_set_prop_value(crtc,
@@ -1112,6 +1135,17 @@ int igt_main_args("drs:", long_opts, help_str, opt_handler, &data)
run_vrr_test(&data, test_lobf, TEST_LINK_OFF);
}
+
+ igt_describe("This test validates DC3CO entry during LOBF (Link-Off Between "
+ "Frames) periods while VRR is active and PSR is disabled.");
+
+ igt_subtest_with_dynamic("lobf-dc3co") {
+ igt_require(intel_display_ver(intel_get_drm_devid(data.drm_fd)) >= 35);
+
+ igt_require_dc_counter(data.debugfs_fd, IGT_INTEL_CHECK_DC3CO);
+
+ run_vrr_test(&data, test_lobf_dc3co, TEST_LINK_OFF);
+ }
}
igt_fixture() {
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread