* [igt-dev] [PATCH i-g-t 1/7] lib/igt_psr: added enum for panel replay
2023-11-10 9:43 [igt-dev] [PATCH i-g-t 0/7] extend kms_psr test to validate pr Kunal Joshi
@ 2023-11-10 9:43 ` Kunal Joshi
2023-11-10 9:43 ` [igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability Kunal Joshi
` (5 subsequent siblings)
6 siblings, 0 replies; 19+ messages in thread
From: Kunal Joshi @ 2023-11-10 9:43 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi, Arun R Murthy
Added enum for PR
Cc: Jouni Högander <jouni.hogander@intel.com>
Cc: Animesh Manna <animesh.manna@intel.com>
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
---
lib/igt_psr.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/lib/igt_psr.h b/lib/igt_psr.h
index 12ffc9d6c..243154897 100644
--- a/lib/igt_psr.h
+++ b/lib/igt_psr.h
@@ -34,6 +34,8 @@ enum psr_mode {
PSR_MODE_1,
PSR_MODE_2,
PSR_MODE_2_SEL_FETCH,
+ PR_MODE,
+ PR_MODE_SEL_FETCH,
PSR_DISABLED,
};
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread* [igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability
2023-11-10 9:43 [igt-dev] [PATCH i-g-t 0/7] extend kms_psr test to validate pr Kunal Joshi
2023-11-10 9:43 ` [igt-dev] [PATCH i-g-t 1/7] lib/igt_psr: added enum for panel replay Kunal Joshi
@ 2023-11-10 9:43 ` Kunal Joshi
2023-11-10 9:43 ` [igt-dev] [PATCH i-g-t 3/7] lib/igt_psr: modified psr_active_check " Kunal Joshi
` (4 subsequent siblings)
6 siblings, 0 replies; 19+ messages in thread
From: Kunal Joshi @ 2023-11-10 9:43 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi, Arun R Murthy
New debugfs directory for all DP connectors will be added
with below patch series https://patchwork.freedesktop.org/series/94470/
For DP Connectors
/sys/kernel/debug/dri/0/DP-x/i915_psr_status
For eDP Connectors
/sys/kernel/debug/dri/0/i915_edp_psr_status
or
/sys/kernel/debug/dri/0/eDP-x/i915_psr_status
v2: reuse psr_sink_support (Jouni)
v3: backward compatbility (Jouni)
v4: missed backward compatibilty for PSR2
v5: removed mode PR_MODE_SEL_FETCH (Jouni)
Cc: Jouni Högander <jouni.hogander@intel.com>
Cc: Animesh Manna <animesh.manna@intel.com>
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
---
lib/igt_psr.c | 55 ++++++++++++++++++--------
lib/igt_psr.h | 3 +-
tests/intel/kms_dirtyfb.c | 2 +-
tests/intel/kms_fbcon_fbt.c | 4 +-
tests/intel/kms_frontbuffer_tracking.c | 2 +-
tests/intel/kms_pm_dc.c | 9 +++--
tests/intel/kms_psr.c | 2 +-
tests/intel/kms_psr2_sf.c | 3 +-
tests/intel/kms_psr2_su.c | 3 +-
tests/intel/kms_psr_stress_test.c | 2 +-
tests/kms_feature_discovery.c | 4 +-
11 files changed, 58 insertions(+), 31 deletions(-)
diff --git a/lib/igt_psr.c b/lib/igt_psr.c
index 13f7c567d..6590815fa 100644
--- a/lib/igt_psr.c
+++ b/lib/igt_psr.c
@@ -192,31 +192,52 @@ bool psr_disable(int device, int debugfs_fd)
return psr_set(device, debugfs_fd, -1);
}
-bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode)
+bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode, igt_output_t *output)
{
+ char *line;
+ char debugfs_file[128] = {0};
char buf[PSR_STATUS_MAX_LEN];
int ret;
- ret = igt_debugfs_simple_read(debugfs_fd, "i915_edp_psr_status", buf,
+ if (output)
+ sprintf(debugfs_file, "%s/i915_psr_status", output->name);
+ else
+ sprintf(debugfs_file, "%s", "i915_edp_psr_status");
+
+ ret = igt_debugfs_simple_read(debugfs_fd, debugfs_file, buf,
sizeof(buf));
if (ret < 1)
return false;
- if (mode == PSR_MODE_1)
- return strstr(buf, "Sink_Support: yes\n") ||
- strstr(buf, "Sink support: yes");
- else
- /*
- * i915 requires PSR version 0x03 that is PSR2 + SU with
- * Y-coordinate to support PSR2
- *
- * or
- *
- * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate and SU
- * Region Early Transport to support PSR2 (eDP 1.5)
- */
- return strstr(buf, "Sink support: yes [0x03]") ||
- strstr(buf, "Sink support: yes [0x04]");
+ line = strstr(buf, "Sink support: ");
+ if (!line)
+ return false;
+
+ switch (mode) {
+ case PSR_MODE_1:
+ return strstr(line, "PSR = yes") ||
+ strstr(buf, "Sink_Support: yes\n") ||
+ strstr(buf, "Sink support: yes");
+ case PSR_MODE_2:
+ case PSR_MODE_2_SEL_FETCH:
+ /*
+ * i915 requires PSR version 0x03 that is PSR2 + SU with
+ * Y-coordinate to support PSR2
+ * or
+ *
+ * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate and SU
+ * Region Early Transport to support PSR2 (eDP 1.5)
+ */
+ return strstr(buf, "Sink support: yes [0x03]") ||
+ strstr(buf, "Sink support: yes [0x04]") ||
+ (strstr(line, "PSR = yes") &&
+ (strstr(line, "[0x03]") || strstr(line, "[0x04]")));
+ case PR_MODE:
+ return strstr(line, "Panel Replay = yes");
+ default:
+ igt_assert_f(false, "Invalid psr mode\n");
+ return false;
+ }
}
#define PSR2_SU_BLOCK_STR_LOOKUP "PSR2 SU blocks:\n0\t"
diff --git a/lib/igt_psr.h b/lib/igt_psr.h
index 243154897..e213b05e9 100644
--- a/lib/igt_psr.h
+++ b/lib/igt_psr.h
@@ -27,6 +27,7 @@
#include "igt_debugfs.h"
#include "igt_core.h"
#include "igt_aux.h"
+#include "igt_kms.h"
#define PSR_STATUS_MAX_LEN 512
@@ -46,7 +47,7 @@ bool psr_wait_update(int debugfs_fd, enum psr_mode mode);
bool psr_long_wait_update(int debugfs_fd, enum psr_mode mode);
bool psr_enable(int device, int debugfs_fd, enum psr_mode);
bool psr_disable(int device, int debugfs_fd);
-bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode);
+bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode, igt_output_t *output);
bool psr2_wait_su(int debugfs_fd, uint16_t *num_su_blocks);
void psr_print_debugfs(int debugfs_fd);
enum psr_mode psr_get_mode(int debugfs_fd);
diff --git a/tests/intel/kms_dirtyfb.c b/tests/intel/kms_dirtyfb.c
index cc9529178..f7ff1ac0b 100644
--- a/tests/intel/kms_dirtyfb.c
+++ b/tests/intel/kms_dirtyfb.c
@@ -92,7 +92,7 @@ static bool check_support(data_t *data)
DRM_MODE_CONNECTOR_eDP)
return false;
return psr_sink_support(data->drm_fd, data->debugfs_fd,
- PSR_MODE_1);
+ PSR_MODE_1, NULL);
case FEATURE_DRRS:
return intel_is_drrs_supported(data->drm_fd, data->pipe) &&
intel_output_has_drrs(data->drm_fd, data->output);
diff --git a/tests/intel/kms_fbcon_fbt.c b/tests/intel/kms_fbcon_fbt.c
index 8d6bb3cb6..a7f24e669 100644
--- a/tests/intel/kms_fbcon_fbt.c
+++ b/tests/intel/kms_fbcon_fbt.c
@@ -269,7 +269,7 @@ static bool psr_is_disabled(int debugfs_fd)
static bool psr_supported_on_chipset(int device, int debugfs_fd)
{
- return psr_sink_support(device, debugfs_fd, PSR_MODE_1);
+ return psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL);
}
static bool psr_wait_until_update(struct drm_info *drm)
@@ -280,7 +280,7 @@ static bool psr_wait_until_update(struct drm_info *drm)
static void disable_features(int device, int debugfs_fd)
{
igt_set_module_param_int(device, "enable_fbc", 0);
- if (psr_sink_support(device, debugfs_fd, PSR_MODE_1))
+ if (psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL))
psr_disable(device, debugfs_fd);
}
diff --git a/tests/intel/kms_frontbuffer_tracking.c b/tests/intel/kms_frontbuffer_tracking.c
index be340a997..3cfa22bbf 100644
--- a/tests/intel/kms_frontbuffer_tracking.c
+++ b/tests/intel/kms_frontbuffer_tracking.c
@@ -1383,7 +1383,7 @@ static void setup_psr(void)
return;
}
- if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1)) {
+ if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1, NULL)) {
igt_info("Can't test PSR: not supported by sink.\n");
return;
}
diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
index 1e9ca5d6c..e5daacb84 100644
--- a/tests/intel/kms_pm_dc.c
+++ b/tests/intel/kms_pm_dc.c
@@ -673,14 +673,16 @@ 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") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_2));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_2, NULL));
test_dc3co_vpb_simulation(&data);
}
igt_describe("This test validates display engine entry to DC5 state "
"while PSR is active");
igt_subtest("dc5-psr") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_1, NULL));
data.op_psr_mode = PSR_MODE_1;
psr_enable(data.drm_fd, data.debugfs_fd, data.op_psr_mode);
test_dc_state_psr(&data, CHECK_DC5);
@@ -689,7 +691,8 @@ igt_main
igt_describe("This test validates display engine entry to DC6 state "
"while PSR is active");
igt_subtest("dc6-psr") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_1, NULL));
data.op_psr_mode = PSR_MODE_1;
psr_enable(data.drm_fd, data.debugfs_fd, data.op_psr_mode);
igt_require_f(igt_pm_pc8_plus_residencies_enabled(data.msr_fd),
diff --git a/tests/intel/kms_psr.c b/tests/intel/kms_psr.c
index ffecc5222..260095aec 100644
--- a/tests/intel/kms_psr.c
+++ b/tests/intel/kms_psr.c
@@ -433,7 +433,7 @@ static void fill_render(data_t *data, const struct igt_fb *fb,
static bool sink_support(data_t *data, enum psr_mode mode)
{
return data->with_psr_disabled ||
- psr_sink_support(data->drm_fd, data->debugfs_fd, mode);
+ psr_sink_support(data->drm_fd, data->debugfs_fd, mode, NULL);
}
static bool psr_wait_entry_if_enabled(data_t *data)
diff --git a/tests/intel/kms_psr2_sf.c b/tests/intel/kms_psr2_sf.c
index d7a746211..2d05f1110 100644
--- a/tests/intel/kms_psr2_sf.c
+++ b/tests/intel/kms_psr2_sf.c
@@ -980,7 +980,8 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd,
- data.debugfs_fd, PSR_MODE_2),
+ data.debugfs_fd, PSR_MODE_2,
+ NULL),
"Sink does not support PSR2\n");
display_init(&data);
diff --git a/tests/intel/kms_psr2_su.c b/tests/intel/kms_psr2_su.c
index 834fec1ec..2f89de435 100644
--- a/tests/intel/kms_psr2_su.c
+++ b/tests/intel/kms_psr2_su.c
@@ -327,7 +327,8 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd,
- data.debugfs_fd, PSR_MODE_2),
+ data.debugfs_fd,
+ PSR_MODE_2, NULL),
"Sink does not support PSR2\n");
igt_require_f(intel_display_ver(intel_get_drm_devid(data.drm_fd)) < 13,
diff --git a/tests/intel/kms_psr_stress_test.c b/tests/intel/kms_psr_stress_test.c
index b6759eece..beded3b94 100644
--- a/tests/intel/kms_psr_stress_test.c
+++ b/tests/intel/kms_psr_stress_test.c
@@ -357,7 +357,7 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd, data.debugfs_fd,
- PSR_MODE_1),
+ PSR_MODE_1, NULL),
"Sink does not support PSR\n");
setup_output(&data);
diff --git a/tests/kms_feature_discovery.c b/tests/kms_feature_discovery.c
index 3a1f6d21d..428f97ffe 100644
--- a/tests/kms_feature_discovery.c
+++ b/tests/kms_feature_discovery.c
@@ -159,12 +159,12 @@ igt_main {
igt_describe("Make sure that we have eDP panel with PSR1 support.");
igt_subtest("psr1") {
- igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_1, NULL));
}
igt_describe("Make sure that we have eDP panel with PSR2 support.");
igt_subtest("psr2") {
- igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_2));
+ igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_2, NULL));
}
igt_describe("Make sure that we have DP-MST configuration.");
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread* [igt-dev] [PATCH i-g-t 3/7] lib/igt_psr: modified psr_active_check for pr compatability
2023-11-10 9:43 [igt-dev] [PATCH i-g-t 0/7] extend kms_psr test to validate pr Kunal Joshi
2023-11-10 9:43 ` [igt-dev] [PATCH i-g-t 1/7] lib/igt_psr: added enum for panel replay Kunal Joshi
2023-11-10 9:43 ` [igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability Kunal Joshi
@ 2023-11-10 9:43 ` Kunal Joshi
2023-11-10 9:43 ` [igt-dev] [PATCH i-g-t 4/7] lib/igt_psr: modified psr_set " Kunal Joshi
` (3 subsequent siblings)
6 siblings, 0 replies; 19+ messages in thread
From: Kunal Joshi @ 2023-11-10 9:43 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi, Arun R Murthy
Whenever PR is active, system will be in SRDENT,
modify psr_active_check to accomadte PR_MODE
v2: corrected ternary check
Cc: Jouni Högander <jouni.hogander@intel.com>
Cc: Animesh Manna <animesh.manna@intel.com>
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
---
lib/igt_psr.c | 24 +++++++++++++++---------
lib/igt_psr.h | 6 +++---
tests/intel/kms_dirtyfb.c | 2 +-
tests/intel/kms_fbcon_fbt.c | 4 ++--
tests/intel/kms_frontbuffer_tracking.c | 4 ++--
tests/intel/kms_pm_dc.c | 6 +++---
tests/intel/kms_psr.c | 4 ++--
tests/intel/kms_psr2_sf.c | 10 +++++-----
tests/intel/kms_psr2_su.c | 4 ++--
tests/intel/kms_psr_stress_test.c | 2 +-
10 files changed, 36 insertions(+), 30 deletions(-)
diff --git a/lib/igt_psr.c b/lib/igt_psr.c
index 6590815fa..6f1886938 100644
--- a/lib/igt_psr.c
+++ b/lib/igt_psr.c
@@ -47,13 +47,19 @@ bool psr2_selective_fetch_check(int debugfs_fd)
return strstr(buf, "PSR2 selective fetch: enabled");
}
-static bool psr_active_check(int debugfs_fd, enum psr_mode mode)
+static bool psr_active_check(int debugfs_fd, enum psr_mode mode, igt_output_t *output)
{
+ char debugfs_file[128] = {0};
char buf[PSR_STATUS_MAX_LEN];
- const char *state = mode == PSR_MODE_1 ? "SRDENT" : "DEEP_SLEEP";
+ const char *state = (mode == PSR_MODE_1 || mode == PR_MODE) ? "SRDENT" : "DEEP_SLEEP";
int ret;
- ret = igt_debugfs_simple_read(debugfs_fd, "i915_edp_psr_status",
+ if (output)
+ sprintf(debugfs_file, "%s/i915_psr_status", output->name);
+ else
+ sprintf(debugfs_file, "%s", "i915_edp_psr_status");
+
+ ret = igt_debugfs_simple_read(debugfs_fd, debugfs_file,
buf, sizeof(buf));
if (ret < 0) {
igt_info("Could not read i915_edp_psr_status: %s\n",
@@ -69,19 +75,19 @@ static bool psr_active_check(int debugfs_fd, enum psr_mode mode)
/*
* For PSR1, we wait until PSR is active. We wait until DEEP_SLEEP for PSR2.
*/
-bool psr_wait_entry(int debugfs_fd, enum psr_mode mode)
+bool psr_wait_entry(int debugfs_fd, enum psr_mode mode, igt_output_t *output)
{
- return igt_wait(psr_active_check(debugfs_fd, mode), 500, 20);
+ return igt_wait(psr_active_check(debugfs_fd, mode, output), 500, 20);
}
-bool psr_wait_update(int debugfs_fd, enum psr_mode mode)
+bool psr_wait_update(int debugfs_fd, enum psr_mode mode, igt_output_t *output)
{
- return igt_wait(!psr_active_check(debugfs_fd, mode), 40, 10);
+ return igt_wait(!psr_active_check(debugfs_fd, mode, output), 40, 10);
}
-bool psr_long_wait_update(int debugfs_fd, enum psr_mode mode)
+bool psr_long_wait_update(int debugfs_fd, enum psr_mode mode, igt_output_t *output)
{
- return igt_wait(!psr_active_check(debugfs_fd, mode), 500, 10);
+ return igt_wait(!psr_active_check(debugfs_fd, mode, output), 500, 10);
}
static ssize_t psr_write(int debugfs_fd, const char *buf)
diff --git a/lib/igt_psr.h b/lib/igt_psr.h
index e213b05e9..a30330e6c 100644
--- a/lib/igt_psr.h
+++ b/lib/igt_psr.h
@@ -42,9 +42,9 @@ enum psr_mode {
bool psr_disabled_check(int debugfs_fd);
bool psr2_selective_fetch_check(int debugfs_fd);
-bool psr_wait_entry(int debugfs_fd, enum psr_mode mode);
-bool psr_wait_update(int debugfs_fd, enum psr_mode mode);
-bool psr_long_wait_update(int debugfs_fd, enum psr_mode mode);
+bool psr_wait_entry(int debugfs_fd, enum psr_mode mode, igt_output_t *output);
+bool psr_wait_update(int debugfs_fd, enum psr_mode mode, igt_output_t *output);
+bool psr_long_wait_update(int debugfs_fd, enum psr_mode mode, igt_output_t *output);
bool psr_enable(int device, int debugfs_fd, enum psr_mode);
bool psr_disable(int device, int debugfs_fd);
bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode, igt_output_t *output);
diff --git a/tests/intel/kms_dirtyfb.c b/tests/intel/kms_dirtyfb.c
index f7ff1ac0b..b14cc8bec 100644
--- a/tests/intel/kms_dirtyfb.c
+++ b/tests/intel/kms_dirtyfb.c
@@ -135,7 +135,7 @@ static void check_feature(data_t *data)
"FBC still disabled");
break;
case FEATURE_PSR:
- igt_assert_f(psr_wait_entry(data->debugfs_fd, PSR_MODE_1),
+ igt_assert_f(psr_wait_entry(data->debugfs_fd, PSR_MODE_1, NULL),
"PSR still disabled\n");
break;
case FEATURE_DRRS:
diff --git a/tests/intel/kms_fbcon_fbt.c b/tests/intel/kms_fbcon_fbt.c
index a7f24e669..4078309d9 100644
--- a/tests/intel/kms_fbcon_fbt.c
+++ b/tests/intel/kms_fbcon_fbt.c
@@ -253,7 +253,7 @@ static void psr_print_status(int debugfs_fd)
static bool psr_wait_until_enabled(int debugfs_fd)
{
- bool r = psr_wait_entry(debugfs_fd, PSR_MODE_1);
+ bool r = psr_wait_entry(debugfs_fd, PSR_MODE_1, NULL);
psr_print_status(debugfs_fd);
return r;
@@ -274,7 +274,7 @@ static bool psr_supported_on_chipset(int device, int debugfs_fd)
static bool psr_wait_until_update(struct drm_info *drm)
{
- return psr_long_wait_update(drm->debugfs_fd, PSR_MODE_1);
+ return psr_long_wait_update(drm->debugfs_fd, PSR_MODE_1, NULL);
}
static void disable_features(int device, int debugfs_fd)
diff --git a/tests/intel/kms_frontbuffer_tracking.c b/tests/intel/kms_frontbuffer_tracking.c
index 3cfa22bbf..e5f139195 100644
--- a/tests/intel/kms_frontbuffer_tracking.c
+++ b/tests/intel/kms_frontbuffer_tracking.c
@@ -1584,10 +1584,10 @@ static void do_status_assertions(int flags)
}
if (flags & ASSERT_PSR_ENABLED)
- igt_assert_f(psr_wait_entry(drm.debugfs, PSR_MODE_1),
+ igt_assert_f(psr_wait_entry(drm.debugfs, PSR_MODE_1, NULL),
"PSR still disabled\n");
else if (flags & ASSERT_PSR_DISABLED)
- igt_assert_f(psr_wait_update(drm.debugfs, PSR_MODE_1),
+ igt_assert_f(psr_wait_update(drm.debugfs, PSR_MODE_1, NULL),
"PSR still enabled\n");
}
diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
index e5daacb84..a3c7c4018 100644
--- a/tests/intel/kms_pm_dc.c
+++ b/tests/intel/kms_pm_dc.c
@@ -382,7 +382,7 @@ static void setup_dc3co(data_t *data)
{
data->op_psr_mode = PSR_MODE_2;
psr_enable(data->drm_fd, data->debugfs_fd, data->op_psr_mode);
- igt_require_f(psr_wait_entry(data->debugfs_fd, data->op_psr_mode),
+ igt_require_f(psr_wait_entry(data->debugfs_fd, data->op_psr_mode, NULL),
"PSR2 is not enabled\n");
}
@@ -418,7 +418,7 @@ static void test_dc_state_psr(data_t *data, int dc_flag)
dc_counter_before_psr = read_dc_counter(data->debugfs_fd, dc_flag);
setup_output(data);
setup_primary(data);
- igt_assert(psr_wait_entry(data->debugfs_fd, data->op_psr_mode));
+ igt_assert(psr_wait_entry(data->debugfs_fd, data->op_psr_mode, NULL));
check_dc_counter(data, dc_flag, dc_counter_before_psr);
cleanup_dc_psr(data);
}
@@ -624,7 +624,7 @@ static void test_pkgc_state_psr(data_t *data)
prev_value = read_pkgc_counter(data->debugfs_root_fd);
setup_output(data);
setup_primary(data);
- igt_assert(psr_wait_entry(data->debugfs_fd, data->op_psr_mode));
+ igt_assert(psr_wait_entry(data->debugfs_fd, data->op_psr_mode, NULL));
psr_dpms(data, DRM_MODE_DPMS_OFF);
igt_wait((cur_value = read_pkgc_counter(data->debugfs_root_fd)) > prev_value,
timeout_sec * 1000, 100);
diff --git a/tests/intel/kms_psr.c b/tests/intel/kms_psr.c
index 260095aec..8485e9894 100644
--- a/tests/intel/kms_psr.c
+++ b/tests/intel/kms_psr.c
@@ -441,7 +441,7 @@ static bool psr_wait_entry_if_enabled(data_t *data)
if (data->with_psr_disabled)
return true;
- return psr_wait_entry(data->debugfs_fd, data->op_psr_mode);
+ return psr_wait_entry(data->debugfs_fd, data->op_psr_mode, data->output);
}
static bool psr_wait_update_if_enabled(data_t *data)
@@ -449,7 +449,7 @@ static bool psr_wait_update_if_enabled(data_t *data)
if (data->with_psr_disabled)
return true;
- return psr_wait_update(data->debugfs_fd, data->op_psr_mode);
+ return psr_wait_update(data->debugfs_fd, data->op_psr_mode, data->output);
}
static bool psr_enable_if_enabled(data_t *data)
diff --git a/tests/intel/kms_psr2_sf.c b/tests/intel/kms_psr2_sf.c
index 2d05f1110..9f5186eee 100644
--- a/tests/intel/kms_psr2_sf.c
+++ b/tests/intel/kms_psr2_sf.c
@@ -677,7 +677,7 @@ static void damaged_plane_move(data_t *data)
igt_display_commit2(&data->display, COMMIT_ATOMIC);
- igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2));
+ igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2, NULL));
expected_output(data);
}
@@ -777,7 +777,7 @@ static void plane_move_continuous(data_t *data)
{
int target_x, target_y;
- igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2));
+ igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2, NULL));
get_target_coords(data, &target_x, &target_y);
@@ -854,7 +854,7 @@ static void damaged_plane_update(data_t *data)
igt_plane_set_position(data->test_plane, 0, 0);
igt_display_commit2(&data->display, COMMIT_ATOMIC);
- igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2));
+ igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2, NULL));
expected_output(data);
}
@@ -863,7 +863,7 @@ static void run(data_t *data)
{
int i;
- igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2));
+ igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2, NULL));
data->screen_changes = 0;
@@ -941,7 +941,7 @@ static int check_psr2_support(data_t *data)
int status;
prepare(data);
- status = psr_wait_entry(data->debugfs_fd, PSR_MODE_2);
+ status = psr_wait_entry(data->debugfs_fd, PSR_MODE_2, NULL);
cleanup(data);
return status;
diff --git a/tests/intel/kms_psr2_su.c b/tests/intel/kms_psr2_su.c
index 2f89de435..3506409b7 100644
--- a/tests/intel/kms_psr2_su.c
+++ b/tests/intel/kms_psr2_su.c
@@ -258,7 +258,7 @@ static void run(data_t *data, igt_output_t *output)
{
bool result = false;
- igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2));
+ igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2, output));
for (data->screen_changes = 0;
data->screen_changes < MAX_SCREEN_CHANGES && !result;
@@ -304,7 +304,7 @@ static int check_psr2_support(data_t *data, enum pipe pipe)
igt_output_set_pipe(output, pipe);
prepare(data, output);
- status = psr_wait_entry(data->debugfs_fd, PSR_MODE_2);
+ status = psr_wait_entry(data->debugfs_fd, PSR_MODE_2, output);
cleanup(data, output);
return status;
diff --git a/tests/intel/kms_psr_stress_test.c b/tests/intel/kms_psr_stress_test.c
index beded3b94..e3b21603a 100644
--- a/tests/intel/kms_psr_stress_test.c
+++ b/tests/intel/kms_psr_stress_test.c
@@ -232,7 +232,7 @@ static void prepare(data_t *data)
data->initial_state = psr_get_mode(data->debugfs_fd);
igt_require(data->initial_state != PSR_DISABLED);
- igt_require(psr_wait_entry(data->debugfs_fd, data->initial_state));
+ igt_require(psr_wait_entry(data->debugfs_fd, data->initial_state, NULL));
}
static void cleanup(data_t *data)
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread* [igt-dev] [PATCH i-g-t 4/7] lib/igt_psr: modified psr_set for pr compatability
2023-11-10 9:43 [igt-dev] [PATCH i-g-t 0/7] extend kms_psr test to validate pr Kunal Joshi
` (2 preceding siblings ...)
2023-11-10 9:43 ` [igt-dev] [PATCH i-g-t 3/7] lib/igt_psr: modified psr_active_check " Kunal Joshi
@ 2023-11-10 9:43 ` Kunal Joshi
2023-11-10 9:43 ` [igt-dev] [PATCH i-g-t 5/7] lib/igt_psr: modified psr_get_mode " Kunal Joshi
` (2 subsequent siblings)
6 siblings, 0 replies; 19+ messages in thread
From: Kunal Joshi @ 2023-11-10 9:43 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi, Arun R Murthy
Modified psr_set to add support PR_MODE and
PR_MODE_SEL_FETCH
Cc: Jouni Högander <jouni.hogander@intel.com>
Cc: Animesh Manna <animesh.manna@intel.com>
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
---
lib/igt_psr.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/lib/igt_psr.c b/lib/igt_psr.c
index 6f1886938..a974036fd 100644
--- a/lib/igt_psr.c
+++ b/lib/igt_psr.c
@@ -168,6 +168,12 @@ static bool psr_set(int device, int debugfs_fd, int mode)
case PSR_MODE_2_SEL_FETCH:
debug_val = "0x4";
break;
+ case PR_MODE:
+ debug_val = "0x5";
+ break;
+ case PR_MODE_SEL_FETCH:
+ debug_val = "0x6";
+ break;
default:
/* Disables PSR */
debug_val = "0x1";
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread* [igt-dev] [PATCH i-g-t 5/7] lib/igt_psr: modified psr_get_mode for pr compatability
2023-11-10 9:43 [igt-dev] [PATCH i-g-t 0/7] extend kms_psr test to validate pr Kunal Joshi
` (3 preceding siblings ...)
2023-11-10 9:43 ` [igt-dev] [PATCH i-g-t 4/7] lib/igt_psr: modified psr_set " Kunal Joshi
@ 2023-11-10 9:43 ` Kunal Joshi
2023-11-10 9:43 ` [igt-dev] [PATCH i-g-t 6/7] tests/intel/kms_psr: made test compaitable with pr Kunal Joshi
2023-11-10 9:43 ` [igt-dev] [PATCH i-g-t 7/7] HAX PATCH DO NOT MERGE Kunal Joshi
6 siblings, 0 replies; 19+ messages in thread
From: Kunal Joshi @ 2023-11-10 9:43 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi, Arun R Murthy
Modified psr_get_mode for PR_MODE
Cc: Jouni Högander <jouni.hogander@intel.com>
Cc: Animesh Manna <animesh.manna@intel.com>
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
---
lib/igt_psr.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/lib/igt_psr.c b/lib/igt_psr.c
index a974036fd..c9fd3ee58 100644
--- a/lib/igt_psr.c
+++ b/lib/igt_psr.c
@@ -383,7 +383,9 @@ enum psr_mode psr_get_mode(int debugfs_fd)
return PSR_DISABLED;
}
- if (strstr(buf, "PSR2 selective fetch: enabled"))
+ if (strstr(buf, "Panel Replay Enabled"))
+ return PR_MODE;
+ else if (strstr(buf, "PSR2 selective fetch: enabled"))
return PSR_MODE_2_SEL_FETCH;
else if (strstr(buf, "PSR2 enabled"))
return PSR_MODE_2;
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread* [igt-dev] [PATCH i-g-t 6/7] tests/intel/kms_psr: made test compaitable with pr
2023-11-10 9:43 [igt-dev] [PATCH i-g-t 0/7] extend kms_psr test to validate pr Kunal Joshi
` (4 preceding siblings ...)
2023-11-10 9:43 ` [igt-dev] [PATCH i-g-t 5/7] lib/igt_psr: modified psr_get_mode " Kunal Joshi
@ 2023-11-10 9:43 ` Kunal Joshi
2023-11-10 9:43 ` [igt-dev] [PATCH i-g-t 7/7] HAX PATCH DO NOT MERGE Kunal Joshi
6 siblings, 0 replies; 19+ messages in thread
From: Kunal Joshi @ 2023-11-10 9:43 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi, Arun R Murthy
Modified kms_psr to have support for PR.
v2: remove set_output and have outputs (Jouni)
v3: loop over connected outputs (Jouni)
v4: shorten output_supports_psr (Jouni)
remove unused data members (Jouni)
v5: removed opt no-psr (Jouni)
Cc: Jouni Högander <jouni.hogander@intel.com>
Cc: Animesh Manna <animesh.manna@intel.com>
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
tests/intel/kms_psr.c | 407 ++++++++++++++++++++++++++++--------------
1 file changed, 271 insertions(+), 136 deletions(-)
diff --git a/tests/intel/kms_psr.c b/tests/intel/kms_psr.c
index 8485e9894..9b1f9983a 100644
--- a/tests/intel/kms_psr.c
+++ b/tests/intel/kms_psr.c
@@ -25,7 +25,7 @@
/**
* TEST: kms psr
* Category: Display
- * Description: Tests behaviour of PSR & PSR2
+ * Description: Tests behaviour of PSR & PSR2 & PR
*/
#include "igt.h"
@@ -39,14 +39,14 @@
#include "xe/xe_query.h"
/**
- * SUBTEST: basic
+ * SUBTEST: psr_basic
* Description: Basic check for psr if it is detecting changes made in planes
* Driver requirement: i915, xe
* Functionality: psr
* Mega feature: PSR
* Test category: functionality test
*
- * SUBTEST: %s_%s
+ * SUBTEST: psr_%s_%s
* Description: Check if psr is detecting memory mapping, rendering and plane
* operations performed on %arg[1]
* Driver requirement: i915
@@ -67,7 +67,7 @@
*/
/**
- * SUBTEST: sprite_plane_move
+ * SUBTEST: psr_sprite_plane_move
* Description: Check if psr is detecting memory mapping, rendering and plane
* operations performed on sprite planes
* Driver requirement: i915, xe
@@ -75,7 +75,7 @@
* Mega feature: PSR
* Test category: functionality test
*
- * SUBTEST: %s_%s
+ * SUBTEST: psr_%s_%s
* Description: Check if psr is detecting memory mapping, rendering and plane
* operations performed on %arg[1] planes
* Driver requirement: i915, xe
@@ -96,7 +96,7 @@
*/
/**
- * SUBTEST: primary_%s
+ * SUBTEST: psr_primary_%s
* Description: Check if psr is detecting memory mapping, rendering and plane
* operations performed on %arg[1] planes
* Driver requirement: i915, xe
@@ -111,7 +111,7 @@
*/
/**
- * SUBTEST: dpms
+ * SUBTEST: psr_dpms
* Description: Check if psr is detecting changes when rendering operation is
* performed with dpms enabled or disabled
* Driver requirement: i915, xe
@@ -119,14 +119,14 @@
* Mega feature: PSR
* Test category: functionality test
*
- * SUBTEST: no_drrs
+ * SUBTEST: psr_no_drrs
* Description: Check if psr is detecting changes when drrs is disabled
* Driver requirement: i915, xe
* Functionality: drrs, psr
* Mega feature: PSR
* Test category: functionality test
*
- * SUBTEST: suspend
+ * SUBTEST: psr_suspend
* Description: Check if psr is detecting changes when plane operation
* is performed with suspend resume cycles
* Driver requirement: i915, xe
@@ -229,6 +229,112 @@
* @plane_move: Move plane position
*/
+/**
+ * SUBTEST: pr_dpms
+ * Description: Check if pr is detecting changes when rendering operation
+ * is performed with dpms enabled or disabled
+ * Driver requirement: i915, xe
+ * Functionality: dpms, pr
+ * Mega feature: Panel Replay
+ * Test category: functionality test
+ */
+
+/**
+ * SUBTEST: pr_no_drrs
+ * Description: Check if pr is detecting changes when drrs is disabled
+ * Driver requirement: i915, xe
+ * Functionality: drrs, pr
+ * Mega feature: Panel Replay
+ * Test category: functionality test
+ */
+
+/**
+ * SUBTEST: pr_suspend
+ * Description: Check if pr is detecting changes when plane operation is
+ * performed with suspend resume cycles
+ * Driver requirement: i915, xe
+ * Functionality: pr, suspend
+ * Mega feature: Panel Replay
+ * Test category: functionality test
+ */
+
+/**
+ * SUBTEST: pr_basic
+ * Description: Basic check for pr if it is detecting changes made in planes
+ * Driver requirement: i915, xe
+ * Functionality: pr
+ * Mega feature: Panel Replay
+ * Test category: functionality test
+ */
+
+/**
+ * SUBTEST: pr_%s_%s
+ * Description: Check if pr is detecting memory mapping, rendering and plane
+ * operations performed on %arg[1] planes
+ * Driver requirement: i915
+ * Functionality: kms_core, plane, pr
+ * Mega feature: Panel Replay
+ * Test category: functionality test
+ *
+ * arg[1]:
+ *
+ * @cursor: Cursor plane
+ * @primary: Primary plane
+ * @sprite: Sprite plane
+ *
+ * arg[2]:
+ *
+ * @mmap_cpu: MMAP CPU
+ * @mmap_gtt: MMAP GTT
+ */
+
+/**
+ * SUBTEST: pr_primary_page_flip
+ * Description: Check if pr is detecting memory mapping, rendering and plane
+ * operations performed on primary planes
+ * Driver requirement: i915, xe
+ * Functionality: plane, pr
+ * Mega feature: Panel Replay
+ * Test category: functionality test
+ */
+
+/**
+ * SUBTEST: pr_primary_%s
+ * Description: Check if pr is detecting memory mapping, rendering and plane
+ * operations performed on primary planes
+ * Driver requirement: i915, xe
+ * Functionality: kms_core, plane, pr
+ * Mega feature: Panel Replay
+ * Test category: functionality test
+ *
+ * arg[1]:
+ *
+ * @blt: Blitter
+ * @render: Render
+ */
+
+/**
+ * SUBTEST: pr_%s_%s
+ * Description: Check if pr is detecting memory mapping, rendering and plane
+ * operations performed on %arg[1] planes
+ * Driver requirement: i915, xe
+ * Functionality: kms_core, plane, pr
+ * Mega feature: Panel Replay
+ * Test category: functionality test
+ *
+ * arg[1]:
+ *
+ * @cursor: Cursor plane
+ * @sprite: Sprite plane
+ *
+ * arg[2]:
+ *
+ * @blt: Blitter
+ * @render: Render
+ * @plane_onoff: Plane On off
+ * @plane_move: Move plane position
+ */
+
enum operations {
PAGE_FLIP,
MMAP_GTT,
@@ -270,8 +376,6 @@ typedef struct {
int mod_stride;
drmModeModeInfo *mode;
igt_output_t *output;
- bool with_psr_disabled;
- bool supports_psr2;
} data_t;
static void create_cursor_fb(data_t *data)
@@ -289,34 +393,20 @@ static void create_cursor_fb(data_t *data)
igt_put_cairo_ctx(cr);
}
-static void setup_output(data_t *data)
+static bool output_supports_psr(data_t *data)
{
- igt_display_t *display = &data->display;
igt_output_t *output;
- enum pipe pipe;
-
- for_each_pipe_with_valid_output(display, pipe, output) {
- drmModeConnectorPtr c = output->config.connector;
-
- if (c->connector_type != DRM_MODE_CONNECTOR_eDP)
- continue;
- igt_display_reset(display);
- igt_output_set_pipe(output, pipe);
- if (!i915_pipe_output_combo_valid(display))
- continue;
-
- data->crtc_id = output->config.crtc->crtc_id;
- data->output = output;
-
- return;
+ for_each_connected_output(&data->display, output) {
+ if(psr_sink_support(data->drm_fd, data->debugfs_fd,
+ PSR_MODE_2, output) ||
+ psr_sink_support(data->drm_fd, data->debugfs_fd,
+ PSR_MODE_1, output) ||
+ psr_sink_support(data->drm_fd, data->debugfs_fd,
+ PR_MODE, output))
+ return true;
}
-}
-
-static void display_init(data_t *data)
-{
- igt_display_require(&data->display, data->drm_fd);
- setup_output(data);
+ return false;
}
static void display_fini(data_t *data)
@@ -432,31 +522,21 @@ static void fill_render(data_t *data, const struct igt_fb *fb,
static bool sink_support(data_t *data, enum psr_mode mode)
{
- return data->with_psr_disabled ||
- psr_sink_support(data->drm_fd, data->debugfs_fd, mode, NULL);
+ return psr_sink_support(data->drm_fd, data->debugfs_fd, mode, NULL);
}
static bool psr_wait_entry_if_enabled(data_t *data)
{
- if (data->with_psr_disabled)
- return true;
-
return psr_wait_entry(data->debugfs_fd, data->op_psr_mode, data->output);
}
static bool psr_wait_update_if_enabled(data_t *data)
{
- if (data->with_psr_disabled)
- return true;
-
return psr_wait_update(data->debugfs_fd, data->op_psr_mode, data->output);
}
static bool psr_enable_if_enabled(data_t *data)
{
- if (data->with_psr_disabled)
- return true;
-
return psr_enable(data->drm_fd, data->debugfs_fd, data->op_psr_mode);
}
@@ -502,7 +582,7 @@ static void fb_dirty_fb_ioctl(data_t *data, struct igt_fb *fb)
}
/**
- * SUBTEST: cursor_plane_move
+ * SUBTEST: psr_cursor_plane_move
* Description: Check if psr is detecting the plane operations performed on
* cursor planes
* Driver requirement: i915, xe
@@ -510,7 +590,7 @@ static void fb_dirty_fb_ioctl(data_t *data, struct igt_fb *fb)
* Functionality: psr
* Mega feature: PSR
*
- * SUBTEST: primary_page_flip
+ * SUBTEST: psr_primary_page_flip
* Description: Check if psr is detecting page-flipping operations performed
* on primary planes
* Driver requirement: i915, xe
@@ -518,7 +598,7 @@ static void fb_dirty_fb_ioctl(data_t *data, struct igt_fb *fb)
* Functionality: psr
* Mega feature: PSR
*
- * SUBTEST: sprite_plane_onoff
+ * SUBTEST: psr_sprite_plane_onoff
* Description: Check if psr is detecting the plane operations performed on
* sprite planes
* Driver requirement: i915, xe
@@ -683,14 +763,35 @@ static void setup_test_plane(data_t *data, int test_plane)
igt_display_commit(&data->display);
}
+static enum pipe get_pipe_for_output(igt_display_t *display,
+ igt_output_t *output)
+{
+ enum pipe pipe;
+
+ for_each_pipe(display, pipe) {
+ if (igt_pipe_connector_valid(pipe, output)) {
+ return pipe;
+ }
+ }
+
+ igt_assert_f(false, "No pipe found for output %s\n",
+ igt_output_name(output));
+}
+
static void test_setup(data_t *data)
{
+ enum pipe pipe;
drmModeConnectorPtr connector;
bool psr_entered = false;
igt_require_f(data->output,
"No available output found\n");
+ pipe = get_pipe_for_output(&data->display, data->output);
+ igt_output_set_pipe(data->output, pipe);
+ igt_require_f(i915_pipe_output_combo_valid(&data->display),
+ "output pipe combo not valid\n");
+ data->crtc_id = data->output->config.crtc->crtc_id;
connector = data->output->config.connector;
for (int i = 0; i < connector->count_modes; i++) {
@@ -700,9 +801,6 @@ static void test_setup(data_t *data)
igt_output_override_mode(data->output, data->mode);
- if (data->op_psr_mode == PSR_MODE_2)
- igt_require(data->supports_psr2);
-
psr_enable_if_enabled(data);
setup_test_plane(data, data->test_plane_id);
if (psr_wait_entry_if_enabled(data)) {
@@ -722,146 +820,183 @@ static void dpms_off_on(data_t *data)
DRM_MODE_DPMS_ON);
}
-static int opt_handler(int opt, int opt_index, void *_data)
-{
- data_t *data = _data;
-
- switch (opt) {
- case 'n':
- data->with_psr_disabled = true;
- break;
- default:
- return IGT_OPT_HANDLER_ERROR;
- }
-
- return IGT_OPT_HANDLER_SUCCESS;
-}
-
-const char *help_str =
- " --no-psr\tRun test without PSR/PSR2.";
-static struct option long_options[] = {
- {"no-psr", 0, 0, 'n'},
- { 0, 0, 0, 0 }
-};
data_t data = {};
-igt_main_args("", long_options, help_str, opt_handler, &data)
+igt_main
{
+ int z;
enum operations op;
- const char *append_subtest_name[2] = {
- "",
- "psr2_"
+ const char *append_subtest_name[3] = {
+ "psr_",
+ "psr2_",
+ "pr_"
};
+ int modes[] = {PSR_MODE_1, PSR_MODE_2, PR_MODE};
+ igt_output_t *output;
igt_fixture {
data.drm_fd = drm_open_driver_master(DRIVER_INTEL | DRIVER_XE);
data.debugfs_fd = igt_debugfs_dir(data.drm_fd);
kmstest_set_vt_graphics_mode();
data.devid = intel_get_drm_devid(data.drm_fd);
-
- igt_require_f(sink_support(&data, PSR_MODE_1),
- "Sink does not support PSR\n");
-
- data.supports_psr2 = sink_support(&data, PSR_MODE_2);
data.bops = buf_ops_create(data.drm_fd);
- display_init(&data);
+ igt_display_require(&data.display, data.drm_fd);
+ igt_require_f(output_supports_psr(&data), "Sink does not support PSR/PSR2/PR\n");
}
- for (data.op_psr_mode = PSR_MODE_1; data.op_psr_mode <= PSR_MODE_2;
- data.op_psr_mode++) {
+ for (z = 0; z < ARRAY_SIZE(modes); z++) {
+ data.op_psr_mode = modes[z];
igt_describe("Basic check for psr if it is detecting changes made in planes");
- igt_subtest_f("%sbasic", append_subtest_name[data.op_psr_mode]) {
- data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
- test_setup(&data);
- test_cleanup(&data);
+ igt_subtest_with_dynamic_f("%sbasic", append_subtest_name[z]) {
+ for_each_connected_output(&data.display, output) {
+ if (!psr_sink_support(data.drm_fd, data.debugfs_fd,
+ data.op_psr_mode, output))
+ continue;
+ igt_display_reset(&data.display);
+ data.output = output;
+ igt_dynamic_f("%s", data.output->name) {
+ data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
+ test_setup(&data);
+ test_cleanup(&data);
+ }
+ }
}
igt_describe("Check if psr is detecting changes when drrs is disabled");
- igt_subtest_f("%sno_drrs", append_subtest_name[data.op_psr_mode]) {
- data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
- test_setup(&data);
- igt_assert(drrs_disabled(&data));
- test_cleanup(&data);
+ igt_subtest_with_dynamic_f("%sno_drrs", append_subtest_name[z]) {
+ for_each_connected_output(&data.display, output) {
+ if (!psr_sink_support(data.drm_fd, data.debugfs_fd,
+ data.op_psr_mode, output))
+ continue;
+ igt_display_reset(&data.display);
+ data.output = output;
+ igt_dynamic_f("%s", data.output->name) {
+ data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
+ test_setup(&data);
+ igt_assert(drrs_disabled(&data));
+ test_cleanup(&data);
+ }
+ }
}
for (op = PAGE_FLIP; op <= RENDER; op++) {
igt_describe("Check if psr is detecting page-flipping,memory mapping and "
"rendering operations performed on primary planes");
- igt_subtest_f("%sprimary_%s",
- append_subtest_name[data.op_psr_mode],
+ igt_subtest_with_dynamic_f("%sprimary_%s",
+ append_subtest_name[z],
op_str(op)) {
igt_skip_on(is_xe_device(data.drm_fd) &&
(op == MMAP_CPU || op == MMAP_GTT));
-
- data.op = op;
- data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
- test_setup(&data);
- run_test(&data);
- test_cleanup(&data);
+ for_each_connected_output(&data.display, output) {
+ if (!psr_sink_support(data.drm_fd, data.debugfs_fd,
+ data.op_psr_mode, output))
+ continue;
+ igt_display_reset(&data.display);
+ data.output = output;
+ igt_dynamic_f("%s", data.output->name) {
+ data.op = op;
+ data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
+ test_setup(&data);
+ run_test(&data);
+ test_cleanup(&data);
+ }
+ }
}
}
for (op = MMAP_GTT; op <= PLANE_ONOFF; op++) {
igt_describe("Check if psr is detecting memory mapping,rendering "
"and plane operations performed on sprite planes");
- igt_subtest_f("%ssprite_%s",
- append_subtest_name[data.op_psr_mode],
+ igt_subtest_with_dynamic_f("%ssprite_%s",
+ append_subtest_name[z],
op_str(op)) {
igt_skip_on(is_xe_device(data.drm_fd) &&
(op == MMAP_CPU || op == MMAP_GTT));
-
- data.op = op;
- data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
- test_setup(&data);
- run_test(&data);
- test_cleanup(&data);
+ for_each_connected_output(&data.display, output) {
+ if (!psr_sink_support(data.drm_fd, data.debugfs_fd,
+ data.op_psr_mode, output))
+ continue;
+ igt_display_reset(&data.display);
+ data.output = output;
+ igt_dynamic_f("%s", data.output->name) {
+ data.op = op;
+ data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
+ test_setup(&data);
+ run_test(&data);
+ test_cleanup(&data);
+ }
+ }
}
igt_describe("Check if psr is detecting memory mapping, rendering "
"and plane operations performed on cursor planes");
- igt_subtest_f("%scursor_%s",
- append_subtest_name[data.op_psr_mode],
+ igt_subtest_with_dynamic_f("%scursor_%s",
+ append_subtest_name[z],
op_str(op)) {
igt_skip_on(is_xe_device(data.drm_fd) &&
(op == MMAP_CPU || op == MMAP_GTT));
-
- data.op = op;
- data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
- test_setup(&data);
- run_test(&data);
- test_cleanup(&data);
+ for_each_connected_output(&data.display, output) {
+ if (!psr_sink_support(data.drm_fd, data.debugfs_fd,
+ data.op_psr_mode, output))
+ continue;
+ igt_display_reset(&data.display);
+ data.output = output;
+ igt_dynamic_f("%s", data.output->name) {
+ data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
+ test_setup(&data);
+ run_test(&data);
+ test_cleanup(&data);
+ }
+ }
}
}
igt_describe("Check if psr is detecting changes when rendering operation is performed"
" with dpms enabled or disabled");
- igt_subtest_f("%sdpms", append_subtest_name[data.op_psr_mode]) {
- data.op = RENDER;
- data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
- test_setup(&data);
- dpms_off_on(&data);
- run_test(&data);
- test_cleanup(&data);
+ igt_subtest_with_dynamic_f("%sdpms", append_subtest_name[z]) {
+ for_each_connected_output(&data.display, output) {
+ if (!psr_sink_support(data.drm_fd, data.debugfs_fd,
+ data.op_psr_mode, output))
+ continue;
+ igt_display_reset(&data.display);
+ data.output = output;
+ igt_dynamic_f("%s", data.output->name) {
+ data.op = RENDER;
+ data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
+ test_setup(&data);
+ dpms_off_on(&data);
+ run_test(&data);
+ test_cleanup(&data);
+ }
+ }
}
igt_describe("Check if psr is detecting changes when plane operation is performed "
"with suspend resume cycles");
- igt_subtest_f("%ssuspend", append_subtest_name[data.op_psr_mode]) {
- data.op = PLANE_ONOFF;
- data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
- test_setup(&data);
- igt_system_suspend_autoresume(SUSPEND_STATE_MEM,
- SUSPEND_TEST_NONE);
- igt_assert(psr_wait_entry_if_enabled(&data));
- run_test(&data);
- test_cleanup(&data);
+ igt_subtest_with_dynamic_f("%ssuspend", append_subtest_name[z]) {
+ for_each_connected_output(&data.display, output) {
+ if (!psr_sink_support(data.drm_fd, data.debugfs_fd,
+ data.op_psr_mode, output))
+ continue;
+ igt_display_reset(&data.display);
+ data.output = output;
+ igt_dynamic_f("%s", data.output->name) {
+ data.op = PLANE_ONOFF;
+ data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
+ test_setup(&data);
+ igt_system_suspend_autoresume(SUSPEND_STATE_MEM,
+ SUSPEND_TEST_NONE);
+ igt_assert(psr_wait_entry_if_enabled(&data));
+ run_test(&data);
+ test_cleanup(&data);
+ }
+ }
}
}
igt_fixture {
- if (!data.with_psr_disabled)
- psr_disable(data.drm_fd, data.debugfs_fd);
+ psr_disable(data.drm_fd, data.debugfs_fd);
close(data.debugfs_fd);
buf_ops_destroy(data.bops);
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread* [igt-dev] [PATCH i-g-t 7/7] HAX PATCH DO NOT MERGE
2023-11-10 9:43 [igt-dev] [PATCH i-g-t 0/7] extend kms_psr test to validate pr Kunal Joshi
` (5 preceding siblings ...)
2023-11-10 9:43 ` [igt-dev] [PATCH i-g-t 6/7] tests/intel/kms_psr: made test compaitable with pr Kunal Joshi
@ 2023-11-10 9:43 ` Kunal Joshi
6 siblings, 0 replies; 19+ messages in thread
From: Kunal Joshi @ 2023-11-10 9:43 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
tests/intel-ci/fast-feedback.testlist | 65 +++++++++++++++++++++++++++
1 file changed, 65 insertions(+)
diff --git a/tests/intel-ci/fast-feedback.testlist b/tests/intel-ci/fast-feedback.testlist
index c252e2cf0..678d42f94 100644
--- a/tests/intel-ci/fast-feedback.testlist
+++ b/tests/intel-ci/fast-feedback.testlist
@@ -1,6 +1,71 @@
# Try to load the driver if it's not available yet.
igt@i915_module_load@load
+# Hax patch for testing do not merge
+igt@kms_psr@psr_basic
+igt@kms_psr@psr_no_drrs
+igt@kms_psr@psr_primary_page_flip
+igt@kms_psr@psr_primary_mmap_gtt
+igt@kms_psr@psr_primary_mmap_cpu
+igt@kms_psr@psr_primary_blt
+igt@kms_psr@psr_primary_render
+igt@kms_psr@psr_sprite_mmap_gtt
+igt@kms_psr@psr_cursor_mmap_gtt
+igt@kms_psr@psr_sprite_mmap_cpu
+igt@kms_psr@psr_cursor_mmap_cpu
+igt@kms_psr@psr_sprite_blt
+igt@kms_psr@psr_cursor_blt
+igt@kms_psr@psr_sprite_render
+igt@kms_psr@psr_cursor_render
+igt@kms_psr@psr_sprite_plane_move
+igt@kms_psr@psr_cursor_plane_move
+igt@kms_psr@psr_sprite_plane_onoff
+igt@kms_psr@psr_cursor_plane_onoff
+igt@kms_psr@psr_dpms
+igt@kms_psr@psr_suspend
+igt@kms_psr@psr2_basic
+igt@kms_psr@psr2_no_drrs
+igt@kms_psr@psr2_primary_page_flip
+igt@kms_psr@psr2_primary_mmap_gtt
+igt@kms_psr@psr2_primary_mmap_cpu
+igt@kms_psr@psr2_primary_blt
+igt@kms_psr@psr2_primary_render
+igt@kms_psr@psr2_sprite_mmap_gtt
+igt@kms_psr@psr2_cursor_mmap_gtt
+igt@kms_psr@psr2_sprite_mmap_cpu
+igt@kms_psr@psr2_cursor_mmap_cpu
+igt@kms_psr@psr2_sprite_blt
+igt@kms_psr@psr2_cursor_blt
+igt@kms_psr@psr2_sprite_render
+igt@kms_psr@psr2_cursor_render
+igt@kms_psr@psr2_sprite_plane_move
+igt@kms_psr@psr2_cursor_plane_move
+igt@kms_psr@psr2_sprite_plane_onoff
+igt@kms_psr@psr2_cursor_plane_onoff
+igt@kms_psr@psr2_dpms
+igt@kms_psr@psr2_suspend
+igt@kms_psr@pr_basic
+igt@kms_psr@pr_no_drrs
+igt@kms_psr@pr_primary_page_flip
+igt@kms_psr@pr_primary_mmap_gtt
+igt@kms_psr@pr_primary_mmap_cpu
+igt@kms_psr@pr_primary_blt
+igt@kms_psr@pr_primary_render
+igt@kms_psr@pr_sprite_mmap_gtt
+igt@kms_psr@pr_cursor_mmap_gtt
+igt@kms_psr@pr_sprite_mmap_cpu
+igt@kms_psr@pr_cursor_mmap_cpu
+igt@kms_psr@pr_sprite_blt
+igt@kms_psr@pr_cursor_blt
+igt@kms_psr@pr_sprite_render
+igt@kms_psr@pr_cursor_render
+igt@kms_psr@pr_sprite_plane_move
+igt@kms_psr@pr_cursor_plane_move
+igt@kms_psr@pr_sprite_plane_onoff
+igt@kms_psr@pr_cursor_plane_onoff
+igt@kms_psr@pr_dpms
+igt@kms_psr@pr_suspend
+
# Keep alphabetically sorted by default
igt@core_auth@basic-auth
igt@debugfs_test@read_all_entries
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability
2023-11-10 9:52 [igt-dev] [PATCH i-g-t 0/7] extend kms_psr test to validate pr Kunal Joshi
@ 2023-11-10 9:52 ` Kunal Joshi
0 siblings, 0 replies; 19+ messages in thread
From: Kunal Joshi @ 2023-11-10 9:52 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi, Arun R Murthy
New debugfs directory for all DP connectors will be added
with below patch series https://patchwork.freedesktop.org/series/94470/
For DP Connectors
/sys/kernel/debug/dri/0/DP-x/i915_psr_status
For eDP Connectors
/sys/kernel/debug/dri/0/i915_edp_psr_status
or
/sys/kernel/debug/dri/0/eDP-x/i915_psr_status
v2: reuse psr_sink_support (Jouni)
v3: backward compatbility (Jouni)
v4: missed backward compatibilty for PSR2
v5: removed mode PR_MODE_SEL_FETCH (Jouni)
Cc: Jouni Högander <jouni.hogander@intel.com>
Cc: Animesh Manna <animesh.manna@intel.com>
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
---
lib/igt_psr.c | 55 ++++++++++++++++++--------
lib/igt_psr.h | 3 +-
tests/intel/kms_dirtyfb.c | 2 +-
tests/intel/kms_fbcon_fbt.c | 4 +-
tests/intel/kms_frontbuffer_tracking.c | 2 +-
tests/intel/kms_pm_dc.c | 9 +++--
tests/intel/kms_psr.c | 2 +-
tests/intel/kms_psr2_sf.c | 3 +-
tests/intel/kms_psr2_su.c | 3 +-
tests/intel/kms_psr_stress_test.c | 2 +-
tests/kms_feature_discovery.c | 4 +-
11 files changed, 58 insertions(+), 31 deletions(-)
diff --git a/lib/igt_psr.c b/lib/igt_psr.c
index 13f7c567d..6590815fa 100644
--- a/lib/igt_psr.c
+++ b/lib/igt_psr.c
@@ -192,31 +192,52 @@ bool psr_disable(int device, int debugfs_fd)
return psr_set(device, debugfs_fd, -1);
}
-bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode)
+bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode, igt_output_t *output)
{
+ char *line;
+ char debugfs_file[128] = {0};
char buf[PSR_STATUS_MAX_LEN];
int ret;
- ret = igt_debugfs_simple_read(debugfs_fd, "i915_edp_psr_status", buf,
+ if (output)
+ sprintf(debugfs_file, "%s/i915_psr_status", output->name);
+ else
+ sprintf(debugfs_file, "%s", "i915_edp_psr_status");
+
+ ret = igt_debugfs_simple_read(debugfs_fd, debugfs_file, buf,
sizeof(buf));
if (ret < 1)
return false;
- if (mode == PSR_MODE_1)
- return strstr(buf, "Sink_Support: yes\n") ||
- strstr(buf, "Sink support: yes");
- else
- /*
- * i915 requires PSR version 0x03 that is PSR2 + SU with
- * Y-coordinate to support PSR2
- *
- * or
- *
- * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate and SU
- * Region Early Transport to support PSR2 (eDP 1.5)
- */
- return strstr(buf, "Sink support: yes [0x03]") ||
- strstr(buf, "Sink support: yes [0x04]");
+ line = strstr(buf, "Sink support: ");
+ if (!line)
+ return false;
+
+ switch (mode) {
+ case PSR_MODE_1:
+ return strstr(line, "PSR = yes") ||
+ strstr(buf, "Sink_Support: yes\n") ||
+ strstr(buf, "Sink support: yes");
+ case PSR_MODE_2:
+ case PSR_MODE_2_SEL_FETCH:
+ /*
+ * i915 requires PSR version 0x03 that is PSR2 + SU with
+ * Y-coordinate to support PSR2
+ * or
+ *
+ * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate and SU
+ * Region Early Transport to support PSR2 (eDP 1.5)
+ */
+ return strstr(buf, "Sink support: yes [0x03]") ||
+ strstr(buf, "Sink support: yes [0x04]") ||
+ (strstr(line, "PSR = yes") &&
+ (strstr(line, "[0x03]") || strstr(line, "[0x04]")));
+ case PR_MODE:
+ return strstr(line, "Panel Replay = yes");
+ default:
+ igt_assert_f(false, "Invalid psr mode\n");
+ return false;
+ }
}
#define PSR2_SU_BLOCK_STR_LOOKUP "PSR2 SU blocks:\n0\t"
diff --git a/lib/igt_psr.h b/lib/igt_psr.h
index 243154897..e213b05e9 100644
--- a/lib/igt_psr.h
+++ b/lib/igt_psr.h
@@ -27,6 +27,7 @@
#include "igt_debugfs.h"
#include "igt_core.h"
#include "igt_aux.h"
+#include "igt_kms.h"
#define PSR_STATUS_MAX_LEN 512
@@ -46,7 +47,7 @@ bool psr_wait_update(int debugfs_fd, enum psr_mode mode);
bool psr_long_wait_update(int debugfs_fd, enum psr_mode mode);
bool psr_enable(int device, int debugfs_fd, enum psr_mode);
bool psr_disable(int device, int debugfs_fd);
-bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode);
+bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode, igt_output_t *output);
bool psr2_wait_su(int debugfs_fd, uint16_t *num_su_blocks);
void psr_print_debugfs(int debugfs_fd);
enum psr_mode psr_get_mode(int debugfs_fd);
diff --git a/tests/intel/kms_dirtyfb.c b/tests/intel/kms_dirtyfb.c
index cc9529178..f7ff1ac0b 100644
--- a/tests/intel/kms_dirtyfb.c
+++ b/tests/intel/kms_dirtyfb.c
@@ -92,7 +92,7 @@ static bool check_support(data_t *data)
DRM_MODE_CONNECTOR_eDP)
return false;
return psr_sink_support(data->drm_fd, data->debugfs_fd,
- PSR_MODE_1);
+ PSR_MODE_1, NULL);
case FEATURE_DRRS:
return intel_is_drrs_supported(data->drm_fd, data->pipe) &&
intel_output_has_drrs(data->drm_fd, data->output);
diff --git a/tests/intel/kms_fbcon_fbt.c b/tests/intel/kms_fbcon_fbt.c
index 8d6bb3cb6..a7f24e669 100644
--- a/tests/intel/kms_fbcon_fbt.c
+++ b/tests/intel/kms_fbcon_fbt.c
@@ -269,7 +269,7 @@ static bool psr_is_disabled(int debugfs_fd)
static bool psr_supported_on_chipset(int device, int debugfs_fd)
{
- return psr_sink_support(device, debugfs_fd, PSR_MODE_1);
+ return psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL);
}
static bool psr_wait_until_update(struct drm_info *drm)
@@ -280,7 +280,7 @@ static bool psr_wait_until_update(struct drm_info *drm)
static void disable_features(int device, int debugfs_fd)
{
igt_set_module_param_int(device, "enable_fbc", 0);
- if (psr_sink_support(device, debugfs_fd, PSR_MODE_1))
+ if (psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL))
psr_disable(device, debugfs_fd);
}
diff --git a/tests/intel/kms_frontbuffer_tracking.c b/tests/intel/kms_frontbuffer_tracking.c
index be340a997..3cfa22bbf 100644
--- a/tests/intel/kms_frontbuffer_tracking.c
+++ b/tests/intel/kms_frontbuffer_tracking.c
@@ -1383,7 +1383,7 @@ static void setup_psr(void)
return;
}
- if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1)) {
+ if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1, NULL)) {
igt_info("Can't test PSR: not supported by sink.\n");
return;
}
diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
index 1e9ca5d6c..e5daacb84 100644
--- a/tests/intel/kms_pm_dc.c
+++ b/tests/intel/kms_pm_dc.c
@@ -673,14 +673,16 @@ 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") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_2));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_2, NULL));
test_dc3co_vpb_simulation(&data);
}
igt_describe("This test validates display engine entry to DC5 state "
"while PSR is active");
igt_subtest("dc5-psr") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_1, NULL));
data.op_psr_mode = PSR_MODE_1;
psr_enable(data.drm_fd, data.debugfs_fd, data.op_psr_mode);
test_dc_state_psr(&data, CHECK_DC5);
@@ -689,7 +691,8 @@ igt_main
igt_describe("This test validates display engine entry to DC6 state "
"while PSR is active");
igt_subtest("dc6-psr") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_1, NULL));
data.op_psr_mode = PSR_MODE_1;
psr_enable(data.drm_fd, data.debugfs_fd, data.op_psr_mode);
igt_require_f(igt_pm_pc8_plus_residencies_enabled(data.msr_fd),
diff --git a/tests/intel/kms_psr.c b/tests/intel/kms_psr.c
index ffecc5222..260095aec 100644
--- a/tests/intel/kms_psr.c
+++ b/tests/intel/kms_psr.c
@@ -433,7 +433,7 @@ static void fill_render(data_t *data, const struct igt_fb *fb,
static bool sink_support(data_t *data, enum psr_mode mode)
{
return data->with_psr_disabled ||
- psr_sink_support(data->drm_fd, data->debugfs_fd, mode);
+ psr_sink_support(data->drm_fd, data->debugfs_fd, mode, NULL);
}
static bool psr_wait_entry_if_enabled(data_t *data)
diff --git a/tests/intel/kms_psr2_sf.c b/tests/intel/kms_psr2_sf.c
index d7a746211..2d05f1110 100644
--- a/tests/intel/kms_psr2_sf.c
+++ b/tests/intel/kms_psr2_sf.c
@@ -980,7 +980,8 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd,
- data.debugfs_fd, PSR_MODE_2),
+ data.debugfs_fd, PSR_MODE_2,
+ NULL),
"Sink does not support PSR2\n");
display_init(&data);
diff --git a/tests/intel/kms_psr2_su.c b/tests/intel/kms_psr2_su.c
index 834fec1ec..2f89de435 100644
--- a/tests/intel/kms_psr2_su.c
+++ b/tests/intel/kms_psr2_su.c
@@ -327,7 +327,8 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd,
- data.debugfs_fd, PSR_MODE_2),
+ data.debugfs_fd,
+ PSR_MODE_2, NULL),
"Sink does not support PSR2\n");
igt_require_f(intel_display_ver(intel_get_drm_devid(data.drm_fd)) < 13,
diff --git a/tests/intel/kms_psr_stress_test.c b/tests/intel/kms_psr_stress_test.c
index b6759eece..beded3b94 100644
--- a/tests/intel/kms_psr_stress_test.c
+++ b/tests/intel/kms_psr_stress_test.c
@@ -357,7 +357,7 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd, data.debugfs_fd,
- PSR_MODE_1),
+ PSR_MODE_1, NULL),
"Sink does not support PSR\n");
setup_output(&data);
diff --git a/tests/kms_feature_discovery.c b/tests/kms_feature_discovery.c
index 3a1f6d21d..428f97ffe 100644
--- a/tests/kms_feature_discovery.c
+++ b/tests/kms_feature_discovery.c
@@ -159,12 +159,12 @@ igt_main {
igt_describe("Make sure that we have eDP panel with PSR1 support.");
igt_subtest("psr1") {
- igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_1, NULL));
}
igt_describe("Make sure that we have eDP panel with PSR2 support.");
igt_subtest("psr2") {
- igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_2));
+ igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_2, NULL));
}
igt_describe("Make sure that we have DP-MST configuration.");
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability
2023-11-10 8:15 [igt-dev] [PATCH i-g-t 0/7] extend kms_psr test to validate pr Kunal Joshi
@ 2023-11-10 8:15 ` Kunal Joshi
2023-11-10 8:11 ` Hogander, Jouni
0 siblings, 1 reply; 19+ messages in thread
From: Kunal Joshi @ 2023-11-10 8:15 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi, Arun R Murthy
New debugfs directory for all DP connectors will be added
with below patch series https://patchwork.freedesktop.org/series/94470/
For DP Connectors
/sys/kernel/debug/dri/0/DP-x/i915_psr_status
For eDP Connectors
/sys/kernel/debug/dri/0/i915_edp_psr_status
or
/sys/kernel/debug/dri/0/eDP-x/i915_psr_status
v2: reuse psr_sink_support (Jouni)
v3: backward compatbility (Jouni)
v4: missed backward compatibilty for PSR2
v5: removed mode PR_MODE_SEL_FETCH (Jouni)
Cc: Jouni Högander <jouni.hogander@intel.com>
Cc: Animesh Manna <animesh.manna@intel.com>
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
lib/igt_psr.c | 55 ++++++++++++++++++--------
lib/igt_psr.h | 3 +-
tests/intel/kms_dirtyfb.c | 2 +-
tests/intel/kms_fbcon_fbt.c | 4 +-
tests/intel/kms_frontbuffer_tracking.c | 2 +-
tests/intel/kms_pm_dc.c | 9 +++--
tests/intel/kms_psr.c | 2 +-
tests/intel/kms_psr2_sf.c | 3 +-
tests/intel/kms_psr2_su.c | 3 +-
tests/intel/kms_psr_stress_test.c | 2 +-
tests/kms_feature_discovery.c | 4 +-
11 files changed, 58 insertions(+), 31 deletions(-)
diff --git a/lib/igt_psr.c b/lib/igt_psr.c
index 13f7c567d..6590815fa 100644
--- a/lib/igt_psr.c
+++ b/lib/igt_psr.c
@@ -192,31 +192,52 @@ bool psr_disable(int device, int debugfs_fd)
return psr_set(device, debugfs_fd, -1);
}
-bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode)
+bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode, igt_output_t *output)
{
+ char *line;
+ char debugfs_file[128] = {0};
char buf[PSR_STATUS_MAX_LEN];
int ret;
- ret = igt_debugfs_simple_read(debugfs_fd, "i915_edp_psr_status", buf,
+ if (output)
+ sprintf(debugfs_file, "%s/i915_psr_status", output->name);
+ else
+ sprintf(debugfs_file, "%s", "i915_edp_psr_status");
+
+ ret = igt_debugfs_simple_read(debugfs_fd, debugfs_file, buf,
sizeof(buf));
if (ret < 1)
return false;
- if (mode == PSR_MODE_1)
- return strstr(buf, "Sink_Support: yes\n") ||
- strstr(buf, "Sink support: yes");
- else
- /*
- * i915 requires PSR version 0x03 that is PSR2 + SU with
- * Y-coordinate to support PSR2
- *
- * or
- *
- * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate and SU
- * Region Early Transport to support PSR2 (eDP 1.5)
- */
- return strstr(buf, "Sink support: yes [0x03]") ||
- strstr(buf, "Sink support: yes [0x04]");
+ line = strstr(buf, "Sink support: ");
+ if (!line)
+ return false;
+
+ switch (mode) {
+ case PSR_MODE_1:
+ return strstr(line, "PSR = yes") ||
+ strstr(buf, "Sink_Support: yes\n") ||
+ strstr(buf, "Sink support: yes");
+ case PSR_MODE_2:
+ case PSR_MODE_2_SEL_FETCH:
+ /*
+ * i915 requires PSR version 0x03 that is PSR2 + SU with
+ * Y-coordinate to support PSR2
+ * or
+ *
+ * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate and SU
+ * Region Early Transport to support PSR2 (eDP 1.5)
+ */
+ return strstr(buf, "Sink support: yes [0x03]") ||
+ strstr(buf, "Sink support: yes [0x04]") ||
+ (strstr(line, "PSR = yes") &&
+ (strstr(line, "[0x03]") || strstr(line, "[0x04]")));
+ case PR_MODE:
+ return strstr(line, "Panel Replay = yes");
+ default:
+ igt_assert_f(false, "Invalid psr mode\n");
+ return false;
+ }
}
#define PSR2_SU_BLOCK_STR_LOOKUP "PSR2 SU blocks:\n0\t"
diff --git a/lib/igt_psr.h b/lib/igt_psr.h
index 243154897..e213b05e9 100644
--- a/lib/igt_psr.h
+++ b/lib/igt_psr.h
@@ -27,6 +27,7 @@
#include "igt_debugfs.h"
#include "igt_core.h"
#include "igt_aux.h"
+#include "igt_kms.h"
#define PSR_STATUS_MAX_LEN 512
@@ -46,7 +47,7 @@ bool psr_wait_update(int debugfs_fd, enum psr_mode mode);
bool psr_long_wait_update(int debugfs_fd, enum psr_mode mode);
bool psr_enable(int device, int debugfs_fd, enum psr_mode);
bool psr_disable(int device, int debugfs_fd);
-bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode);
+bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode, igt_output_t *output);
bool psr2_wait_su(int debugfs_fd, uint16_t *num_su_blocks);
void psr_print_debugfs(int debugfs_fd);
enum psr_mode psr_get_mode(int debugfs_fd);
diff --git a/tests/intel/kms_dirtyfb.c b/tests/intel/kms_dirtyfb.c
index cc9529178..f7ff1ac0b 100644
--- a/tests/intel/kms_dirtyfb.c
+++ b/tests/intel/kms_dirtyfb.c
@@ -92,7 +92,7 @@ static bool check_support(data_t *data)
DRM_MODE_CONNECTOR_eDP)
return false;
return psr_sink_support(data->drm_fd, data->debugfs_fd,
- PSR_MODE_1);
+ PSR_MODE_1, NULL);
case FEATURE_DRRS:
return intel_is_drrs_supported(data->drm_fd, data->pipe) &&
intel_output_has_drrs(data->drm_fd, data->output);
diff --git a/tests/intel/kms_fbcon_fbt.c b/tests/intel/kms_fbcon_fbt.c
index 8d6bb3cb6..a7f24e669 100644
--- a/tests/intel/kms_fbcon_fbt.c
+++ b/tests/intel/kms_fbcon_fbt.c
@@ -269,7 +269,7 @@ static bool psr_is_disabled(int debugfs_fd)
static bool psr_supported_on_chipset(int device, int debugfs_fd)
{
- return psr_sink_support(device, debugfs_fd, PSR_MODE_1);
+ return psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL);
}
static bool psr_wait_until_update(struct drm_info *drm)
@@ -280,7 +280,7 @@ static bool psr_wait_until_update(struct drm_info *drm)
static void disable_features(int device, int debugfs_fd)
{
igt_set_module_param_int(device, "enable_fbc", 0);
- if (psr_sink_support(device, debugfs_fd, PSR_MODE_1))
+ if (psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL))
psr_disable(device, debugfs_fd);
}
diff --git a/tests/intel/kms_frontbuffer_tracking.c b/tests/intel/kms_frontbuffer_tracking.c
index be340a997..3cfa22bbf 100644
--- a/tests/intel/kms_frontbuffer_tracking.c
+++ b/tests/intel/kms_frontbuffer_tracking.c
@@ -1383,7 +1383,7 @@ static void setup_psr(void)
return;
}
- if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1)) {
+ if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1, NULL)) {
igt_info("Can't test PSR: not supported by sink.\n");
return;
}
diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
index 1e9ca5d6c..e5daacb84 100644
--- a/tests/intel/kms_pm_dc.c
+++ b/tests/intel/kms_pm_dc.c
@@ -673,14 +673,16 @@ 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") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_2));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_2, NULL));
test_dc3co_vpb_simulation(&data);
}
igt_describe("This test validates display engine entry to DC5 state "
"while PSR is active");
igt_subtest("dc5-psr") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_1, NULL));
data.op_psr_mode = PSR_MODE_1;
psr_enable(data.drm_fd, data.debugfs_fd, data.op_psr_mode);
test_dc_state_psr(&data, CHECK_DC5);
@@ -689,7 +691,8 @@ igt_main
igt_describe("This test validates display engine entry to DC6 state "
"while PSR is active");
igt_subtest("dc6-psr") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_1, NULL));
data.op_psr_mode = PSR_MODE_1;
psr_enable(data.drm_fd, data.debugfs_fd, data.op_psr_mode);
igt_require_f(igt_pm_pc8_plus_residencies_enabled(data.msr_fd),
diff --git a/tests/intel/kms_psr.c b/tests/intel/kms_psr.c
index ffecc5222..260095aec 100644
--- a/tests/intel/kms_psr.c
+++ b/tests/intel/kms_psr.c
@@ -433,7 +433,7 @@ static void fill_render(data_t *data, const struct igt_fb *fb,
static bool sink_support(data_t *data, enum psr_mode mode)
{
return data->with_psr_disabled ||
- psr_sink_support(data->drm_fd, data->debugfs_fd, mode);
+ psr_sink_support(data->drm_fd, data->debugfs_fd, mode, NULL);
}
static bool psr_wait_entry_if_enabled(data_t *data)
diff --git a/tests/intel/kms_psr2_sf.c b/tests/intel/kms_psr2_sf.c
index d7a746211..2d05f1110 100644
--- a/tests/intel/kms_psr2_sf.c
+++ b/tests/intel/kms_psr2_sf.c
@@ -980,7 +980,8 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd,
- data.debugfs_fd, PSR_MODE_2),
+ data.debugfs_fd, PSR_MODE_2,
+ NULL),
"Sink does not support PSR2\n");
display_init(&data);
diff --git a/tests/intel/kms_psr2_su.c b/tests/intel/kms_psr2_su.c
index 834fec1ec..2f89de435 100644
--- a/tests/intel/kms_psr2_su.c
+++ b/tests/intel/kms_psr2_su.c
@@ -327,7 +327,8 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd,
- data.debugfs_fd, PSR_MODE_2),
+ data.debugfs_fd,
+ PSR_MODE_2, NULL),
"Sink does not support PSR2\n");
igt_require_f(intel_display_ver(intel_get_drm_devid(data.drm_fd)) < 13,
diff --git a/tests/intel/kms_psr_stress_test.c b/tests/intel/kms_psr_stress_test.c
index b6759eece..beded3b94 100644
--- a/tests/intel/kms_psr_stress_test.c
+++ b/tests/intel/kms_psr_stress_test.c
@@ -357,7 +357,7 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd, data.debugfs_fd,
- PSR_MODE_1),
+ PSR_MODE_1, NULL),
"Sink does not support PSR\n");
setup_output(&data);
diff --git a/tests/kms_feature_discovery.c b/tests/kms_feature_discovery.c
index 3a1f6d21d..428f97ffe 100644
--- a/tests/kms_feature_discovery.c
+++ b/tests/kms_feature_discovery.c
@@ -159,12 +159,12 @@ igt_main {
igt_describe("Make sure that we have eDP panel with PSR1 support.");
igt_subtest("psr1") {
- igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_1, NULL));
}
igt_describe("Make sure that we have eDP panel with PSR2 support.");
igt_subtest("psr2") {
- igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_2));
+ igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_2, NULL));
}
igt_describe("Make sure that we have DP-MST configuration.");
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread* Re: [igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability
2023-11-10 8:15 ` [igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability Kunal Joshi
@ 2023-11-10 8:11 ` Hogander, Jouni
0 siblings, 0 replies; 19+ messages in thread
From: Hogander, Jouni @ 2023-11-10 8:11 UTC (permalink / raw)
To: Joshi, Kunal1, igt-dev@lists.freedesktop.org; +Cc: Murthy, Arun R
On Fri, 2023-11-10 at 13:45 +0530, Kunal Joshi wrote:
> New debugfs directory for all DP connectors will be added
> with below patch series
> https://patchwork.freedesktop.org/series/94470/
>
> For DP Connectors
> /sys/kernel/debug/dri/0/DP-x/i915_psr_status
>
> For eDP Connectors
> /sys/kernel/debug/dri/0/i915_edp_psr_status
> or
> /sys/kernel/debug/dri/0/eDP-x/i915_psr_status
>
> v2: reuse psr_sink_support (Jouni)
> v3: backward compatbility (Jouni)
> v4: missed backward compatibilty for PSR2
> v5: removed mode PR_MODE_SEL_FETCH (Jouni)
>
> Cc: Jouni Högander <jouni.hogander@intel.com>
> Cc: Animesh Manna <animesh.manna@intel.com>
> Cc: Arun R Murthy <arun.r.murthy@intel.com>
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
> ---
> lib/igt_psr.c | 55 ++++++++++++++++++------
> --
> lib/igt_psr.h | 3 +-
> tests/intel/kms_dirtyfb.c | 2 +-
> tests/intel/kms_fbcon_fbt.c | 4 +-
> tests/intel/kms_frontbuffer_tracking.c | 2 +-
> tests/intel/kms_pm_dc.c | 9 +++--
> tests/intel/kms_psr.c | 2 +-
> tests/intel/kms_psr2_sf.c | 3 +-
> tests/intel/kms_psr2_su.c | 3 +-
> tests/intel/kms_psr_stress_test.c | 2 +-
> tests/kms_feature_discovery.c | 4 +-
> 11 files changed, 58 insertions(+), 31 deletions(-)
>
> diff --git a/lib/igt_psr.c b/lib/igt_psr.c
> index 13f7c567d..6590815fa 100644
> --- a/lib/igt_psr.c
> +++ b/lib/igt_psr.c
> @@ -192,31 +192,52 @@ bool psr_disable(int device, int debugfs_fd)
> return psr_set(device, debugfs_fd, -1);
> }
>
> -bool psr_sink_support(int device, int debugfs_fd, enum psr_mode
> mode)
> +bool psr_sink_support(int device, int debugfs_fd, enum psr_mode
> mode, igt_output_t *output)
> {
> + char *line;
> + char debugfs_file[128] = {0};
> char buf[PSR_STATUS_MAX_LEN];
> int ret;
>
> - ret = igt_debugfs_simple_read(debugfs_fd,
> "i915_edp_psr_status", buf,
> + if (output)
> + sprintf(debugfs_file, "%s/i915_psr_status", output-
> >name);
> + else
> + sprintf(debugfs_file, "%s", "i915_edp_psr_status");
> +
> + ret = igt_debugfs_simple_read(debugfs_fd, debugfs_file, buf,
> sizeof(buf));
> if (ret < 1)
> return false;
>
> - if (mode == PSR_MODE_1)
> - return strstr(buf, "Sink_Support: yes\n") ||
> - strstr(buf, "Sink support: yes");
> - else
> - /*
> - * i915 requires PSR version 0x03 that is PSR2 + SU
> with
> - * Y-coordinate to support PSR2
> - *
> - * or
> - *
> - * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate
> and SU
> - * Region Early Transport to support PSR2 (eDP 1.5)
> - */
> - return strstr(buf, "Sink support: yes [0x03]") ||
> - strstr(buf, "Sink support: yes [0x04]");
> + line = strstr(buf, "Sink support: ");
> + if (!line)
> + return false;
> +
> + switch (mode) {
> + case PSR_MODE_1:
> + return strstr(line, "PSR = yes") ||
> + strstr(buf, "Sink_Support: yes\n") ||
> + strstr(buf, "Sink support: yes");
> + case PSR_MODE_2:
> + case PSR_MODE_2_SEL_FETCH:
> + /*
> + * i915 requires PSR version 0x03 that is
> PSR2 + SU with
> + * Y-coordinate to support PSR2
> + * or
> + *
> + * PSR version 0x4 that is PSR2 + SU w/ Y-
> coordinate and SU
> + * Region Early Transport to support PSR2
> (eDP 1.5)
> + */
> + return strstr(buf, "Sink support: yes
> [0x03]") ||
> + strstr(buf, "Sink support: yes
> [0x04]") ||
> + (strstr(line, "PSR = yes") &&
> + (strstr(line, "[0x03]") ||
> strstr(line, "[0x04]")));
> + case PR_MODE:
> + return strstr(line, "Panel Replay = yes");
> + default:
> + igt_assert_f(false, "Invalid psr mode\n");
> + return false;
> + }
> }
>
> #define PSR2_SU_BLOCK_STR_LOOKUP "PSR2 SU blocks:\n0\t"
> diff --git a/lib/igt_psr.h b/lib/igt_psr.h
> index 243154897..e213b05e9 100644
> --- a/lib/igt_psr.h
> +++ b/lib/igt_psr.h
> @@ -27,6 +27,7 @@
> #include "igt_debugfs.h"
> #include "igt_core.h"
> #include "igt_aux.h"
> +#include "igt_kms.h"
>
> #define PSR_STATUS_MAX_LEN 512
>
> @@ -46,7 +47,7 @@ bool psr_wait_update(int debugfs_fd, enum psr_mode
> mode);
> bool psr_long_wait_update(int debugfs_fd, enum psr_mode mode);
> bool psr_enable(int device, int debugfs_fd, enum psr_mode);
> bool psr_disable(int device, int debugfs_fd);
> -bool psr_sink_support(int device, int debugfs_fd, enum psr_mode
> mode);
> +bool psr_sink_support(int device, int debugfs_fd, enum psr_mode
> mode, igt_output_t *output);
> bool psr2_wait_su(int debugfs_fd, uint16_t *num_su_blocks);
> void psr_print_debugfs(int debugfs_fd);
> enum psr_mode psr_get_mode(int debugfs_fd);
> diff --git a/tests/intel/kms_dirtyfb.c b/tests/intel/kms_dirtyfb.c
> index cc9529178..f7ff1ac0b 100644
> --- a/tests/intel/kms_dirtyfb.c
> +++ b/tests/intel/kms_dirtyfb.c
> @@ -92,7 +92,7 @@ static bool check_support(data_t *data)
> DRM_MODE_CONNECTOR_eDP)
> return false;
> return psr_sink_support(data->drm_fd, data-
> >debugfs_fd,
> - PSR_MODE_1);
> + PSR_MODE_1, NULL);
> case FEATURE_DRRS:
> return intel_is_drrs_supported(data->drm_fd, data-
> >pipe) &&
> intel_output_has_drrs(data->drm_fd, data-
> >output);
> diff --git a/tests/intel/kms_fbcon_fbt.c
> b/tests/intel/kms_fbcon_fbt.c
> index 8d6bb3cb6..a7f24e669 100644
> --- a/tests/intel/kms_fbcon_fbt.c
> +++ b/tests/intel/kms_fbcon_fbt.c
> @@ -269,7 +269,7 @@ static bool psr_is_disabled(int debugfs_fd)
>
> static bool psr_supported_on_chipset(int device, int debugfs_fd)
> {
> - return psr_sink_support(device, debugfs_fd, PSR_MODE_1);
> + return psr_sink_support(device, debugfs_fd, PSR_MODE_1,
> NULL);
> }
>
> static bool psr_wait_until_update(struct drm_info *drm)
> @@ -280,7 +280,7 @@ static bool psr_wait_until_update(struct drm_info
> *drm)
> static void disable_features(int device, int debugfs_fd)
> {
> igt_set_module_param_int(device, "enable_fbc", 0);
> - if (psr_sink_support(device, debugfs_fd, PSR_MODE_1))
> + if (psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL))
> psr_disable(device, debugfs_fd);
> }
>
> diff --git a/tests/intel/kms_frontbuffer_tracking.c
> b/tests/intel/kms_frontbuffer_tracking.c
> index be340a997..3cfa22bbf 100644
> --- a/tests/intel/kms_frontbuffer_tracking.c
> +++ b/tests/intel/kms_frontbuffer_tracking.c
> @@ -1383,7 +1383,7 @@ static void setup_psr(void)
> return;
> }
>
> - if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1)) {
> + if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1, NULL))
> {
> igt_info("Can't test PSR: not supported by sink.\n");
> return;
> }
> diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
> index 1e9ca5d6c..e5daacb84 100644
> --- a/tests/intel/kms_pm_dc.c
> +++ b/tests/intel/kms_pm_dc.c
> @@ -673,14 +673,16 @@ 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") {
> - igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd, PSR_MODE_2));
> + igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd,
> + PSR_MODE_2, NULL));
> test_dc3co_vpb_simulation(&data);
> }
>
> igt_describe("This test validates display engine entry to DC5
> state "
> "while PSR is active");
> igt_subtest("dc5-psr") {
> - igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd, PSR_MODE_1));
> + igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd,
> + PSR_MODE_1, NULL));
> data.op_psr_mode = PSR_MODE_1;
> psr_enable(data.drm_fd, data.debugfs_fd,
> data.op_psr_mode);
> test_dc_state_psr(&data, CHECK_DC5);
> @@ -689,7 +691,8 @@ igt_main
> igt_describe("This test validates display engine entry to DC6
> state "
> "while PSR is active");
> igt_subtest("dc6-psr") {
> - igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd, PSR_MODE_1));
> + igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd,
> + PSR_MODE_1, NULL));
> data.op_psr_mode = PSR_MODE_1;
> psr_enable(data.drm_fd, data.debugfs_fd,
> data.op_psr_mode);
> igt_require_f(igt_pm_pc8_plus_residencies_enabled(dat
> a.msr_fd),
> diff --git a/tests/intel/kms_psr.c b/tests/intel/kms_psr.c
> index ffecc5222..260095aec 100644
> --- a/tests/intel/kms_psr.c
> +++ b/tests/intel/kms_psr.c
> @@ -433,7 +433,7 @@ static void fill_render(data_t *data, const
> struct igt_fb *fb,
> static bool sink_support(data_t *data, enum psr_mode mode)
> {
> return data->with_psr_disabled ||
> - psr_sink_support(data->drm_fd, data->debugfs_fd,
> mode);
> + psr_sink_support(data->drm_fd, data->debugfs_fd, mode,
> NULL);
> }
>
> static bool psr_wait_entry_if_enabled(data_t *data)
> diff --git a/tests/intel/kms_psr2_sf.c b/tests/intel/kms_psr2_sf.c
> index d7a746211..2d05f1110 100644
> --- a/tests/intel/kms_psr2_sf.c
> +++ b/tests/intel/kms_psr2_sf.c
> @@ -980,7 +980,8 @@ igt_main
> kmstest_set_vt_graphics_mode();
>
> igt_require_f(psr_sink_support(data.drm_fd,
> - data.debugfs_fd,
> PSR_MODE_2),
> + data.debugfs_fd,
> PSR_MODE_2,
> + NULL),
> "Sink does not support PSR2\n");
>
> display_init(&data);
> diff --git a/tests/intel/kms_psr2_su.c b/tests/intel/kms_psr2_su.c
> index 834fec1ec..2f89de435 100644
> --- a/tests/intel/kms_psr2_su.c
> +++ b/tests/intel/kms_psr2_su.c
> @@ -327,7 +327,8 @@ igt_main
> kmstest_set_vt_graphics_mode();
>
> igt_require_f(psr_sink_support(data.drm_fd,
> - data.debugfs_fd,
> PSR_MODE_2),
> + data.debugfs_fd,
> + PSR_MODE_2, NULL),
> "Sink does not support PSR2\n");
>
> igt_require_f(intel_display_ver(intel_get_drm_devid(d
> ata.drm_fd)) < 13,
> diff --git a/tests/intel/kms_psr_stress_test.c
> b/tests/intel/kms_psr_stress_test.c
> index b6759eece..beded3b94 100644
> --- a/tests/intel/kms_psr_stress_test.c
> +++ b/tests/intel/kms_psr_stress_test.c
> @@ -357,7 +357,7 @@ igt_main
> kmstest_set_vt_graphics_mode();
>
> igt_require_f(psr_sink_support(data.drm_fd,
> data.debugfs_fd,
> - PSR_MODE_1),
> + PSR_MODE_1, NULL),
> "Sink does not support PSR\n");
>
> setup_output(&data);
> diff --git a/tests/kms_feature_discovery.c
> b/tests/kms_feature_discovery.c
> index 3a1f6d21d..428f97ffe 100644
> --- a/tests/kms_feature_discovery.c
> +++ b/tests/kms_feature_discovery.c
> @@ -159,12 +159,12 @@ igt_main {
>
> igt_describe("Make sure that we have eDP panel with
> PSR1 support.");
> igt_subtest("psr1") {
> - igt_require(psr_sink_support(fd, debugfs_fd,
> PSR_MODE_1));
> + igt_require(psr_sink_support(fd, debugfs_fd,
> PSR_MODE_1, NULL));
> }
>
> igt_describe("Make sure that we have eDP panel with
> PSR2 support.");
> igt_subtest("psr2") {
> - igt_require(psr_sink_support(fd, debugfs_fd,
> PSR_MODE_2));
> + igt_require(psr_sink_support(fd, debugfs_fd,
> PSR_MODE_2, NULL));
> }
>
> igt_describe("Make sure that we have DP-MST
> configuration.");
^ permalink raw reply [flat|nested] 19+ messages in thread
* [igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability
2023-11-10 7:16 [igt-dev] [PATCH i-g-t 0/7] extend kms_psr test to validate pr Kunal Joshi
@ 2023-11-10 7:16 ` Kunal Joshi
0 siblings, 0 replies; 19+ messages in thread
From: Kunal Joshi @ 2023-11-10 7:16 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi, Arun R Murthy
New debugfs directory for all DP connectors will be added
with below patch series https://patchwork.freedesktop.org/series/94470/
For DP Connectors
/sys/kernel/debug/dri/0/DP-x/i915_psr_status
For eDP Connectors
/sys/kernel/debug/dri/0/i915_edp_psr_status
or
/sys/kernel/debug/dri/0/eDP-x/i915_psr_status
v2: reuse psr_sink_support (Jouni)
v3: backward compatbility (Jouni)
v4: missed backward compatibilty for PSR2
Cc: Jouni Högander <jouni.hogander@intel.com>
Cc: Animesh Manna <animesh.manna@intel.com>
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
lib/igt_psr.c | 58 ++++++++++++++++++--------
lib/igt_psr.h | 3 +-
tests/intel/kms_dirtyfb.c | 2 +-
tests/intel/kms_fbcon_fbt.c | 4 +-
tests/intel/kms_frontbuffer_tracking.c | 2 +-
tests/intel/kms_pm_dc.c | 9 ++--
tests/intel/kms_psr.c | 2 +-
tests/intel/kms_psr2_sf.c | 3 +-
tests/intel/kms_psr2_su.c | 3 +-
tests/intel/kms_psr_stress_test.c | 2 +-
tests/kms_feature_discovery.c | 4 +-
11 files changed, 61 insertions(+), 31 deletions(-)
diff --git a/lib/igt_psr.c b/lib/igt_psr.c
index 13f7c567d..41c765c9b 100644
--- a/lib/igt_psr.c
+++ b/lib/igt_psr.c
@@ -192,31 +192,55 @@ bool psr_disable(int device, int debugfs_fd)
return psr_set(device, debugfs_fd, -1);
}
-bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode)
+bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode, igt_output_t *output)
{
+ char *line;
+ char debugfs_file[128] = {0};
char buf[PSR_STATUS_MAX_LEN];
int ret;
- ret = igt_debugfs_simple_read(debugfs_fd, "i915_edp_psr_status", buf,
+ if (output)
+ sprintf(debugfs_file, "%s/i915_psr_status", output->name);
+ else
+ sprintf(debugfs_file, "%s", "i915_edp_psr_status");
+
+ ret = igt_debugfs_simple_read(debugfs_fd, debugfs_file, buf,
sizeof(buf));
if (ret < 1)
return false;
- if (mode == PSR_MODE_1)
- return strstr(buf, "Sink_Support: yes\n") ||
- strstr(buf, "Sink support: yes");
- else
- /*
- * i915 requires PSR version 0x03 that is PSR2 + SU with
- * Y-coordinate to support PSR2
- *
- * or
- *
- * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate and SU
- * Region Early Transport to support PSR2 (eDP 1.5)
- */
- return strstr(buf, "Sink support: yes [0x03]") ||
- strstr(buf, "Sink support: yes [0x04]");
+ line = strstr(buf, "Sink support: ");
+ if (!line)
+ return false;
+
+ switch (mode) {
+ case PSR_MODE_1:
+ return strstr(line, "PSR = yes") ||
+ strstr(buf, "Sink_Support: yes\n") ||
+ strstr(buf, "Sink support: yes");
+ case PSR_MODE_2:
+ case PSR_MODE_2_SEL_FETCH:
+ /*
+ * i915 requires PSR version 0x03 that is PSR2 + SU with
+ * Y-coordinate to support PSR2
+ * or
+ *
+ * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate and SU
+ * Region Early Transport to support PSR2 (eDP 1.5)
+ */
+ return strstr(buf, "Sink support: yes [0x03]") ||
+ strstr(buf, "Sink support: yes [0x04]") ||
+ (strstr(line, "PSR = yes") &&
+ (strstr(line, "[0x03]") || strstr(line, "[0x04]")));
+ case PR_MODE:
+ return strstr(line, "Panel Replay = yes");
+ case PR_MODE_SEL_FETCH:
+ return strstr(line, "Panel Replay = yes") &&
+ strstr(buf, "PSR2 selective fetch: enabled");
+ default:
+ igt_assert_f(false, "Invalid psr mode\n");
+ return false;
+ }
}
#define PSR2_SU_BLOCK_STR_LOOKUP "PSR2 SU blocks:\n0\t"
diff --git a/lib/igt_psr.h b/lib/igt_psr.h
index 243154897..e213b05e9 100644
--- a/lib/igt_psr.h
+++ b/lib/igt_psr.h
@@ -27,6 +27,7 @@
#include "igt_debugfs.h"
#include "igt_core.h"
#include "igt_aux.h"
+#include "igt_kms.h"
#define PSR_STATUS_MAX_LEN 512
@@ -46,7 +47,7 @@ bool psr_wait_update(int debugfs_fd, enum psr_mode mode);
bool psr_long_wait_update(int debugfs_fd, enum psr_mode mode);
bool psr_enable(int device, int debugfs_fd, enum psr_mode);
bool psr_disable(int device, int debugfs_fd);
-bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode);
+bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode, igt_output_t *output);
bool psr2_wait_su(int debugfs_fd, uint16_t *num_su_blocks);
void psr_print_debugfs(int debugfs_fd);
enum psr_mode psr_get_mode(int debugfs_fd);
diff --git a/tests/intel/kms_dirtyfb.c b/tests/intel/kms_dirtyfb.c
index cc9529178..f7ff1ac0b 100644
--- a/tests/intel/kms_dirtyfb.c
+++ b/tests/intel/kms_dirtyfb.c
@@ -92,7 +92,7 @@ static bool check_support(data_t *data)
DRM_MODE_CONNECTOR_eDP)
return false;
return psr_sink_support(data->drm_fd, data->debugfs_fd,
- PSR_MODE_1);
+ PSR_MODE_1, NULL);
case FEATURE_DRRS:
return intel_is_drrs_supported(data->drm_fd, data->pipe) &&
intel_output_has_drrs(data->drm_fd, data->output);
diff --git a/tests/intel/kms_fbcon_fbt.c b/tests/intel/kms_fbcon_fbt.c
index 8d6bb3cb6..a7f24e669 100644
--- a/tests/intel/kms_fbcon_fbt.c
+++ b/tests/intel/kms_fbcon_fbt.c
@@ -269,7 +269,7 @@ static bool psr_is_disabled(int debugfs_fd)
static bool psr_supported_on_chipset(int device, int debugfs_fd)
{
- return psr_sink_support(device, debugfs_fd, PSR_MODE_1);
+ return psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL);
}
static bool psr_wait_until_update(struct drm_info *drm)
@@ -280,7 +280,7 @@ static bool psr_wait_until_update(struct drm_info *drm)
static void disable_features(int device, int debugfs_fd)
{
igt_set_module_param_int(device, "enable_fbc", 0);
- if (psr_sink_support(device, debugfs_fd, PSR_MODE_1))
+ if (psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL))
psr_disable(device, debugfs_fd);
}
diff --git a/tests/intel/kms_frontbuffer_tracking.c b/tests/intel/kms_frontbuffer_tracking.c
index be340a997..3cfa22bbf 100644
--- a/tests/intel/kms_frontbuffer_tracking.c
+++ b/tests/intel/kms_frontbuffer_tracking.c
@@ -1383,7 +1383,7 @@ static void setup_psr(void)
return;
}
- if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1)) {
+ if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1, NULL)) {
igt_info("Can't test PSR: not supported by sink.\n");
return;
}
diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
index 1e9ca5d6c..e5daacb84 100644
--- a/tests/intel/kms_pm_dc.c
+++ b/tests/intel/kms_pm_dc.c
@@ -673,14 +673,16 @@ 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") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_2));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_2, NULL));
test_dc3co_vpb_simulation(&data);
}
igt_describe("This test validates display engine entry to DC5 state "
"while PSR is active");
igt_subtest("dc5-psr") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_1, NULL));
data.op_psr_mode = PSR_MODE_1;
psr_enable(data.drm_fd, data.debugfs_fd, data.op_psr_mode);
test_dc_state_psr(&data, CHECK_DC5);
@@ -689,7 +691,8 @@ igt_main
igt_describe("This test validates display engine entry to DC6 state "
"while PSR is active");
igt_subtest("dc6-psr") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_1, NULL));
data.op_psr_mode = PSR_MODE_1;
psr_enable(data.drm_fd, data.debugfs_fd, data.op_psr_mode);
igt_require_f(igt_pm_pc8_plus_residencies_enabled(data.msr_fd),
diff --git a/tests/intel/kms_psr.c b/tests/intel/kms_psr.c
index ffecc5222..260095aec 100644
--- a/tests/intel/kms_psr.c
+++ b/tests/intel/kms_psr.c
@@ -433,7 +433,7 @@ static void fill_render(data_t *data, const struct igt_fb *fb,
static bool sink_support(data_t *data, enum psr_mode mode)
{
return data->with_psr_disabled ||
- psr_sink_support(data->drm_fd, data->debugfs_fd, mode);
+ psr_sink_support(data->drm_fd, data->debugfs_fd, mode, NULL);
}
static bool psr_wait_entry_if_enabled(data_t *data)
diff --git a/tests/intel/kms_psr2_sf.c b/tests/intel/kms_psr2_sf.c
index d7a746211..2d05f1110 100644
--- a/tests/intel/kms_psr2_sf.c
+++ b/tests/intel/kms_psr2_sf.c
@@ -980,7 +980,8 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd,
- data.debugfs_fd, PSR_MODE_2),
+ data.debugfs_fd, PSR_MODE_2,
+ NULL),
"Sink does not support PSR2\n");
display_init(&data);
diff --git a/tests/intel/kms_psr2_su.c b/tests/intel/kms_psr2_su.c
index 834fec1ec..2f89de435 100644
--- a/tests/intel/kms_psr2_su.c
+++ b/tests/intel/kms_psr2_su.c
@@ -327,7 +327,8 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd,
- data.debugfs_fd, PSR_MODE_2),
+ data.debugfs_fd,
+ PSR_MODE_2, NULL),
"Sink does not support PSR2\n");
igt_require_f(intel_display_ver(intel_get_drm_devid(data.drm_fd)) < 13,
diff --git a/tests/intel/kms_psr_stress_test.c b/tests/intel/kms_psr_stress_test.c
index b6759eece..beded3b94 100644
--- a/tests/intel/kms_psr_stress_test.c
+++ b/tests/intel/kms_psr_stress_test.c
@@ -357,7 +357,7 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd, data.debugfs_fd,
- PSR_MODE_1),
+ PSR_MODE_1, NULL),
"Sink does not support PSR\n");
setup_output(&data);
diff --git a/tests/kms_feature_discovery.c b/tests/kms_feature_discovery.c
index 3a1f6d21d..428f97ffe 100644
--- a/tests/kms_feature_discovery.c
+++ b/tests/kms_feature_discovery.c
@@ -159,12 +159,12 @@ igt_main {
igt_describe("Make sure that we have eDP panel with PSR1 support.");
igt_subtest("psr1") {
- igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_1, NULL));
}
igt_describe("Make sure that we have eDP panel with PSR2 support.");
igt_subtest("psr2") {
- igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_2));
+ igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_2, NULL));
}
igt_describe("Make sure that we have DP-MST configuration.");
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability
2023-11-09 6:09 [igt-dev] [PATCH i-g-t 0/7] extend kms_psr test to validate pr Kunal Joshi
@ 2023-11-09 6:09 ` Kunal Joshi
2023-11-10 7:53 ` Hogander, Jouni
0 siblings, 1 reply; 19+ messages in thread
From: Kunal Joshi @ 2023-11-09 6:09 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi, Arun R Murthy
New debugfs directory for all DP connectors will be added
with below patch series https://patchwork.freedesktop.org/series/94470/
For DP Connectors
/sys/kernel/debug/dri/0/DP-x/i915_psr_status
For eDP Connectors
/sys/kernel/debug/dri/0/i915_edp_psr_status
or
/sys/kernel/debug/dri/0/eDP-x/i915_psr_status
v2: reuse psr_sink_support (Jouni)
Cc: Jouni Högander <jouni.hogander@intel.com>
Cc: Animesh Manna <animesh.manna@intel.com>
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
lib/igt_psr.c | 56 ++++++++++++++++++--------
lib/igt_psr.h | 3 +-
tests/intel/kms_dirtyfb.c | 2 +-
tests/intel/kms_fbcon_fbt.c | 4 +-
tests/intel/kms_frontbuffer_tracking.c | 2 +-
tests/intel/kms_pm_dc.c | 9 +++--
tests/intel/kms_psr.c | 2 +-
tests/intel/kms_psr2_sf.c | 3 +-
tests/intel/kms_psr2_su.c | 3 +-
tests/intel/kms_psr_stress_test.c | 2 +-
tests/kms_feature_discovery.c | 4 +-
11 files changed, 59 insertions(+), 31 deletions(-)
diff --git a/lib/igt_psr.c b/lib/igt_psr.c
index 13f7c567d..054622d79 100644
--- a/lib/igt_psr.c
+++ b/lib/igt_psr.c
@@ -192,31 +192,53 @@ bool psr_disable(int device, int debugfs_fd)
return psr_set(device, debugfs_fd, -1);
}
-bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode)
+bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode, igt_output_t *output)
{
+ char *line;
+ char debugfs_file[128] = {0};
char buf[PSR_STATUS_MAX_LEN];
int ret;
- ret = igt_debugfs_simple_read(debugfs_fd, "i915_edp_psr_status", buf,
+ if (output)
+ sprintf(debugfs_file, "%s/i915_psr_status", output->name);
+ else
+ sprintf(debugfs_file, "%s", "i915_edp_psr_status");
+
+ ret = igt_debugfs_simple_read(debugfs_fd, debugfs_file, buf,
sizeof(buf));
if (ret < 1)
return false;
- if (mode == PSR_MODE_1)
- return strstr(buf, "Sink_Support: yes\n") ||
- strstr(buf, "Sink support: yes");
- else
- /*
- * i915 requires PSR version 0x03 that is PSR2 + SU with
- * Y-coordinate to support PSR2
- *
- * or
- *
- * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate and SU
- * Region Early Transport to support PSR2 (eDP 1.5)
- */
- return strstr(buf, "Sink support: yes [0x03]") ||
- strstr(buf, "Sink support: yes [0x04]");
+ line = strstr(buf, "Sink support: ");
+ if (!line)
+ return false;
+
+ switch (mode) {
+ case PSR_MODE_1:
+ return strstr(line, "PSR = yes") ||
+ strstr(buf, "Sink_Support: yes\n") ||
+ strstr(buf, "Sink support: yes");
+ case PSR_MODE_2:
+ case PSR_MODE_2_SEL_FETCH:
+ /*
+ * i915 requires PSR version 0x03 that is PSR2 + SU with
+ * Y-coordinate to support PSR2
+ * or
+ *
+ * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate and SU
+ * Region Early Transport to support PSR2 (eDP 1.5)
+ */
+ return strstr(line, "PSR = yes") &&
+ (strstr(line, "[0x03]") || strstr(line, "[0x04]"));
+ case PR_MODE:
+ return strstr(line, "Panel Replay = yes");
+ case PR_MODE_SEL_FETCH:
+ return strstr(line, "Panel Replay = yes") &&
+ strstr(buf, "PSR2 selective fetch: enabled");
+ default:
+ igt_assert_f(false, "Invalid psr mode\n");
+ return false;
+ }
}
#define PSR2_SU_BLOCK_STR_LOOKUP "PSR2 SU blocks:\n0\t"
diff --git a/lib/igt_psr.h b/lib/igt_psr.h
index 243154897..e213b05e9 100644
--- a/lib/igt_psr.h
+++ b/lib/igt_psr.h
@@ -27,6 +27,7 @@
#include "igt_debugfs.h"
#include "igt_core.h"
#include "igt_aux.h"
+#include "igt_kms.h"
#define PSR_STATUS_MAX_LEN 512
@@ -46,7 +47,7 @@ bool psr_wait_update(int debugfs_fd, enum psr_mode mode);
bool psr_long_wait_update(int debugfs_fd, enum psr_mode mode);
bool psr_enable(int device, int debugfs_fd, enum psr_mode);
bool psr_disable(int device, int debugfs_fd);
-bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode);
+bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode, igt_output_t *output);
bool psr2_wait_su(int debugfs_fd, uint16_t *num_su_blocks);
void psr_print_debugfs(int debugfs_fd);
enum psr_mode psr_get_mode(int debugfs_fd);
diff --git a/tests/intel/kms_dirtyfb.c b/tests/intel/kms_dirtyfb.c
index cc9529178..f7ff1ac0b 100644
--- a/tests/intel/kms_dirtyfb.c
+++ b/tests/intel/kms_dirtyfb.c
@@ -92,7 +92,7 @@ static bool check_support(data_t *data)
DRM_MODE_CONNECTOR_eDP)
return false;
return psr_sink_support(data->drm_fd, data->debugfs_fd,
- PSR_MODE_1);
+ PSR_MODE_1, NULL);
case FEATURE_DRRS:
return intel_is_drrs_supported(data->drm_fd, data->pipe) &&
intel_output_has_drrs(data->drm_fd, data->output);
diff --git a/tests/intel/kms_fbcon_fbt.c b/tests/intel/kms_fbcon_fbt.c
index 8d6bb3cb6..a7f24e669 100644
--- a/tests/intel/kms_fbcon_fbt.c
+++ b/tests/intel/kms_fbcon_fbt.c
@@ -269,7 +269,7 @@ static bool psr_is_disabled(int debugfs_fd)
static bool psr_supported_on_chipset(int device, int debugfs_fd)
{
- return psr_sink_support(device, debugfs_fd, PSR_MODE_1);
+ return psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL);
}
static bool psr_wait_until_update(struct drm_info *drm)
@@ -280,7 +280,7 @@ static bool psr_wait_until_update(struct drm_info *drm)
static void disable_features(int device, int debugfs_fd)
{
igt_set_module_param_int(device, "enable_fbc", 0);
- if (psr_sink_support(device, debugfs_fd, PSR_MODE_1))
+ if (psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL))
psr_disable(device, debugfs_fd);
}
diff --git a/tests/intel/kms_frontbuffer_tracking.c b/tests/intel/kms_frontbuffer_tracking.c
index be340a997..3cfa22bbf 100644
--- a/tests/intel/kms_frontbuffer_tracking.c
+++ b/tests/intel/kms_frontbuffer_tracking.c
@@ -1383,7 +1383,7 @@ static void setup_psr(void)
return;
}
- if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1)) {
+ if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1, NULL)) {
igt_info("Can't test PSR: not supported by sink.\n");
return;
}
diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
index 1e9ca5d6c..e5daacb84 100644
--- a/tests/intel/kms_pm_dc.c
+++ b/tests/intel/kms_pm_dc.c
@@ -673,14 +673,16 @@ 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") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_2));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_2, NULL));
test_dc3co_vpb_simulation(&data);
}
igt_describe("This test validates display engine entry to DC5 state "
"while PSR is active");
igt_subtest("dc5-psr") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_1, NULL));
data.op_psr_mode = PSR_MODE_1;
psr_enable(data.drm_fd, data.debugfs_fd, data.op_psr_mode);
test_dc_state_psr(&data, CHECK_DC5);
@@ -689,7 +691,8 @@ igt_main
igt_describe("This test validates display engine entry to DC6 state "
"while PSR is active");
igt_subtest("dc6-psr") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_1, NULL));
data.op_psr_mode = PSR_MODE_1;
psr_enable(data.drm_fd, data.debugfs_fd, data.op_psr_mode);
igt_require_f(igt_pm_pc8_plus_residencies_enabled(data.msr_fd),
diff --git a/tests/intel/kms_psr.c b/tests/intel/kms_psr.c
index ffecc5222..260095aec 100644
--- a/tests/intel/kms_psr.c
+++ b/tests/intel/kms_psr.c
@@ -433,7 +433,7 @@ static void fill_render(data_t *data, const struct igt_fb *fb,
static bool sink_support(data_t *data, enum psr_mode mode)
{
return data->with_psr_disabled ||
- psr_sink_support(data->drm_fd, data->debugfs_fd, mode);
+ psr_sink_support(data->drm_fd, data->debugfs_fd, mode, NULL);
}
static bool psr_wait_entry_if_enabled(data_t *data)
diff --git a/tests/intel/kms_psr2_sf.c b/tests/intel/kms_psr2_sf.c
index d7a746211..2d05f1110 100644
--- a/tests/intel/kms_psr2_sf.c
+++ b/tests/intel/kms_psr2_sf.c
@@ -980,7 +980,8 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd,
- data.debugfs_fd, PSR_MODE_2),
+ data.debugfs_fd, PSR_MODE_2,
+ NULL),
"Sink does not support PSR2\n");
display_init(&data);
diff --git a/tests/intel/kms_psr2_su.c b/tests/intel/kms_psr2_su.c
index 834fec1ec..2f89de435 100644
--- a/tests/intel/kms_psr2_su.c
+++ b/tests/intel/kms_psr2_su.c
@@ -327,7 +327,8 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd,
- data.debugfs_fd, PSR_MODE_2),
+ data.debugfs_fd,
+ PSR_MODE_2, NULL),
"Sink does not support PSR2\n");
igt_require_f(intel_display_ver(intel_get_drm_devid(data.drm_fd)) < 13,
diff --git a/tests/intel/kms_psr_stress_test.c b/tests/intel/kms_psr_stress_test.c
index b6759eece..beded3b94 100644
--- a/tests/intel/kms_psr_stress_test.c
+++ b/tests/intel/kms_psr_stress_test.c
@@ -357,7 +357,7 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd, data.debugfs_fd,
- PSR_MODE_1),
+ PSR_MODE_1, NULL),
"Sink does not support PSR\n");
setup_output(&data);
diff --git a/tests/kms_feature_discovery.c b/tests/kms_feature_discovery.c
index 3a1f6d21d..428f97ffe 100644
--- a/tests/kms_feature_discovery.c
+++ b/tests/kms_feature_discovery.c
@@ -159,12 +159,12 @@ igt_main {
igt_describe("Make sure that we have eDP panel with PSR1 support.");
igt_subtest("psr1") {
- igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_1, NULL));
}
igt_describe("Make sure that we have eDP panel with PSR2 support.");
igt_subtest("psr2") {
- igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_2));
+ igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_2, NULL));
}
igt_describe("Make sure that we have DP-MST configuration.");
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread* Re: [igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability
2023-11-09 6:09 ` [igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability Kunal Joshi
@ 2023-11-10 7:53 ` Hogander, Jouni
0 siblings, 0 replies; 19+ messages in thread
From: Hogander, Jouni @ 2023-11-10 7:53 UTC (permalink / raw)
To: Joshi, Kunal1, igt-dev@lists.freedesktop.org; +Cc: Murthy, Arun R
On Thu, 2023-11-09 at 11:39 +0530, Kunal Joshi wrote:
> New debugfs directory for all DP connectors will be added
> with below patch series
> https://patchwork.freedesktop.org/series/94470/
>
> For DP Connectors
> /sys/kernel/debug/dri/0/DP-x/i915_psr_status
>
> For eDP Connectors
> /sys/kernel/debug/dri/0/i915_edp_psr_status
> or
> /sys/kernel/debug/dri/0/eDP-x/i915_psr_status
>
> v2: reuse psr_sink_support (Jouni)
>
> Cc: Jouni Högander <jouni.hogander@intel.com>
> Cc: Animesh Manna <animesh.manna@intel.com>
> Cc: Arun R Murthy <arun.r.murthy@intel.com>
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
> ---
> lib/igt_psr.c | 56 ++++++++++++++++++------
> --
> lib/igt_psr.h | 3 +-
> tests/intel/kms_dirtyfb.c | 2 +-
> tests/intel/kms_fbcon_fbt.c | 4 +-
> tests/intel/kms_frontbuffer_tracking.c | 2 +-
> tests/intel/kms_pm_dc.c | 9 +++--
> tests/intel/kms_psr.c | 2 +-
> tests/intel/kms_psr2_sf.c | 3 +-
> tests/intel/kms_psr2_su.c | 3 +-
> tests/intel/kms_psr_stress_test.c | 2 +-
> tests/kms_feature_discovery.c | 4 +-
> 11 files changed, 59 insertions(+), 31 deletions(-)
>
> diff --git a/lib/igt_psr.c b/lib/igt_psr.c
> index 13f7c567d..054622d79 100644
> --- a/lib/igt_psr.c
> +++ b/lib/igt_psr.c
> @@ -192,31 +192,53 @@ bool psr_disable(int device, int debugfs_fd)
> return psr_set(device, debugfs_fd, -1);
> }
>
> -bool psr_sink_support(int device, int debugfs_fd, enum psr_mode
> mode)
> +bool psr_sink_support(int device, int debugfs_fd, enum psr_mode
> mode, igt_output_t *output)
> {
> + char *line;
> + char debugfs_file[128] = {0};
> char buf[PSR_STATUS_MAX_LEN];
> int ret;
>
> - ret = igt_debugfs_simple_read(debugfs_fd,
> "i915_edp_psr_status", buf,
> + if (output)
> + sprintf(debugfs_file, "%s/i915_psr_status", output-
> >name);
> + else
> + sprintf(debugfs_file, "%s", "i915_edp_psr_status");
> +
> + ret = igt_debugfs_simple_read(debugfs_fd, debugfs_file, buf,
> sizeof(buf));
> if (ret < 1)
> return false;
>
> - if (mode == PSR_MODE_1)
> - return strstr(buf, "Sink_Support: yes\n") ||
> - strstr(buf, "Sink support: yes");
> - else
> - /*
> - * i915 requires PSR version 0x03 that is PSR2 + SU
> with
> - * Y-coordinate to support PSR2
> - *
> - * or
> - *
> - * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate
> and SU
> - * Region Early Transport to support PSR2 (eDP 1.5)
> - */
> - return strstr(buf, "Sink support: yes [0x03]") ||
> - strstr(buf, "Sink support: yes [0x04]");
> + line = strstr(buf, "Sink support: ");
> + if (!line)
> + return false;
> +
> + switch (mode) {
> + case PSR_MODE_1:
> + return strstr(line, "PSR = yes") ||
> + strstr(buf, "Sink_Support: yes\n") ||
> + strstr(buf, "Sink support: yes");
> + case PSR_MODE_2:
> + case PSR_MODE_2_SEL_FETCH:
> + /*
> + * i915 requires PSR version 0x03 that is
> PSR2 + SU with
> + * Y-coordinate to support PSR2
> + * or
> + *
> + * PSR version 0x4 that is PSR2 + SU w/ Y-
> coordinate and SU
> + * Region Early Transport to support PSR2
> (eDP 1.5)
> + */
> + return strstr(line, "PSR = yes") &&
> + (strstr(line, "[0x03]") ||
> strstr(line, "[0x04]"));
> + case PR_MODE:
> + return strstr(line, "Panel Replay = yes");
> + case PR_MODE_SEL_FETCH:
> + return strstr(line, "Panel Replay = yes") &&
> + strstr(buf, "PSR2 selective fetch:
> enabled");
I think patches from animesh are not yet implementing sink panel replay
selective fetch/update support info in debugfs. Anyways this "PSR2
selective fetch enable: enabled" is not about sink support. It is
generally selective fetch status. It may be disabled as well even when
Panel Replay selective fetch/update is supported by the panel.
BR,
Jouni Högander
> + default:
> + igt_assert_f(false, "Invalid psr mode\n");
> + return false;
> + }
> }
>
> #define PSR2_SU_BLOCK_STR_LOOKUP "PSR2 SU blocks:\n0\t"
> diff --git a/lib/igt_psr.h b/lib/igt_psr.h
> index 243154897..e213b05e9 100644
> --- a/lib/igt_psr.h
> +++ b/lib/igt_psr.h
> @@ -27,6 +27,7 @@
> #include "igt_debugfs.h"
> #include "igt_core.h"
> #include "igt_aux.h"
> +#include "igt_kms.h"
>
> #define PSR_STATUS_MAX_LEN 512
>
> @@ -46,7 +47,7 @@ bool psr_wait_update(int debugfs_fd, enum psr_mode
> mode);
> bool psr_long_wait_update(int debugfs_fd, enum psr_mode mode);
> bool psr_enable(int device, int debugfs_fd, enum psr_mode);
> bool psr_disable(int device, int debugfs_fd);
> -bool psr_sink_support(int device, int debugfs_fd, enum psr_mode
> mode);
> +bool psr_sink_support(int device, int debugfs_fd, enum psr_mode
> mode, igt_output_t *output);
> bool psr2_wait_su(int debugfs_fd, uint16_t *num_su_blocks);
> void psr_print_debugfs(int debugfs_fd);
> enum psr_mode psr_get_mode(int debugfs_fd);
> diff --git a/tests/intel/kms_dirtyfb.c b/tests/intel/kms_dirtyfb.c
> index cc9529178..f7ff1ac0b 100644
> --- a/tests/intel/kms_dirtyfb.c
> +++ b/tests/intel/kms_dirtyfb.c
> @@ -92,7 +92,7 @@ static bool check_support(data_t *data)
> DRM_MODE_CONNECTOR_eDP)
> return false;
> return psr_sink_support(data->drm_fd, data-
> >debugfs_fd,
> - PSR_MODE_1);
> + PSR_MODE_1, NULL);
> case FEATURE_DRRS:
> return intel_is_drrs_supported(data->drm_fd, data-
> >pipe) &&
> intel_output_has_drrs(data->drm_fd, data-
> >output);
> diff --git a/tests/intel/kms_fbcon_fbt.c
> b/tests/intel/kms_fbcon_fbt.c
> index 8d6bb3cb6..a7f24e669 100644
> --- a/tests/intel/kms_fbcon_fbt.c
> +++ b/tests/intel/kms_fbcon_fbt.c
> @@ -269,7 +269,7 @@ static bool psr_is_disabled(int debugfs_fd)
>
> static bool psr_supported_on_chipset(int device, int debugfs_fd)
> {
> - return psr_sink_support(device, debugfs_fd, PSR_MODE_1);
> + return psr_sink_support(device, debugfs_fd, PSR_MODE_1,
> NULL);
> }
>
> static bool psr_wait_until_update(struct drm_info *drm)
> @@ -280,7 +280,7 @@ static bool psr_wait_until_update(struct drm_info
> *drm)
> static void disable_features(int device, int debugfs_fd)
> {
> igt_set_module_param_int(device, "enable_fbc", 0);
> - if (psr_sink_support(device, debugfs_fd, PSR_MODE_1))
> + if (psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL))
> psr_disable(device, debugfs_fd);
> }
>
> diff --git a/tests/intel/kms_frontbuffer_tracking.c
> b/tests/intel/kms_frontbuffer_tracking.c
> index be340a997..3cfa22bbf 100644
> --- a/tests/intel/kms_frontbuffer_tracking.c
> +++ b/tests/intel/kms_frontbuffer_tracking.c
> @@ -1383,7 +1383,7 @@ static void setup_psr(void)
> return;
> }
>
> - if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1)) {
> + if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1, NULL))
> {
> igt_info("Can't test PSR: not supported by sink.\n");
> return;
> }
> diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
> index 1e9ca5d6c..e5daacb84 100644
> --- a/tests/intel/kms_pm_dc.c
> +++ b/tests/intel/kms_pm_dc.c
> @@ -673,14 +673,16 @@ 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") {
> - igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd, PSR_MODE_2));
> + igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd,
> + PSR_MODE_2, NULL));
> test_dc3co_vpb_simulation(&data);
> }
>
> igt_describe("This test validates display engine entry to DC5
> state "
> "while PSR is active");
> igt_subtest("dc5-psr") {
> - igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd, PSR_MODE_1));
> + igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd,
> + PSR_MODE_1, NULL));
> data.op_psr_mode = PSR_MODE_1;
> psr_enable(data.drm_fd, data.debugfs_fd,
> data.op_psr_mode);
> test_dc_state_psr(&data, CHECK_DC5);
> @@ -689,7 +691,8 @@ igt_main
> igt_describe("This test validates display engine entry to DC6
> state "
> "while PSR is active");
> igt_subtest("dc6-psr") {
> - igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd, PSR_MODE_1));
> + igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd,
> + PSR_MODE_1, NULL));
> data.op_psr_mode = PSR_MODE_1;
> psr_enable(data.drm_fd, data.debugfs_fd,
> data.op_psr_mode);
> igt_require_f(igt_pm_pc8_plus_residencies_enabled(dat
> a.msr_fd),
> diff --git a/tests/intel/kms_psr.c b/tests/intel/kms_psr.c
> index ffecc5222..260095aec 100644
> --- a/tests/intel/kms_psr.c
> +++ b/tests/intel/kms_psr.c
> @@ -433,7 +433,7 @@ static void fill_render(data_t *data, const
> struct igt_fb *fb,
> static bool sink_support(data_t *data, enum psr_mode mode)
> {
> return data->with_psr_disabled ||
> - psr_sink_support(data->drm_fd, data->debugfs_fd,
> mode);
> + psr_sink_support(data->drm_fd, data->debugfs_fd, mode,
> NULL);
> }
>
> static bool psr_wait_entry_if_enabled(data_t *data)
> diff --git a/tests/intel/kms_psr2_sf.c b/tests/intel/kms_psr2_sf.c
> index d7a746211..2d05f1110 100644
> --- a/tests/intel/kms_psr2_sf.c
> +++ b/tests/intel/kms_psr2_sf.c
> @@ -980,7 +980,8 @@ igt_main
> kmstest_set_vt_graphics_mode();
>
> igt_require_f(psr_sink_support(data.drm_fd,
> - data.debugfs_fd,
> PSR_MODE_2),
> + data.debugfs_fd,
> PSR_MODE_2,
> + NULL),
> "Sink does not support PSR2\n");
>
> display_init(&data);
> diff --git a/tests/intel/kms_psr2_su.c b/tests/intel/kms_psr2_su.c
> index 834fec1ec..2f89de435 100644
> --- a/tests/intel/kms_psr2_su.c
> +++ b/tests/intel/kms_psr2_su.c
> @@ -327,7 +327,8 @@ igt_main
> kmstest_set_vt_graphics_mode();
>
> igt_require_f(psr_sink_support(data.drm_fd,
> - data.debugfs_fd,
> PSR_MODE_2),
> + data.debugfs_fd,
> + PSR_MODE_2, NULL),
> "Sink does not support PSR2\n");
>
> igt_require_f(intel_display_ver(intel_get_drm_devid(d
> ata.drm_fd)) < 13,
> diff --git a/tests/intel/kms_psr_stress_test.c
> b/tests/intel/kms_psr_stress_test.c
> index b6759eece..beded3b94 100644
> --- a/tests/intel/kms_psr_stress_test.c
> +++ b/tests/intel/kms_psr_stress_test.c
> @@ -357,7 +357,7 @@ igt_main
> kmstest_set_vt_graphics_mode();
>
> igt_require_f(psr_sink_support(data.drm_fd,
> data.debugfs_fd,
> - PSR_MODE_1),
> + PSR_MODE_1, NULL),
> "Sink does not support PSR\n");
>
> setup_output(&data);
> diff --git a/tests/kms_feature_discovery.c
> b/tests/kms_feature_discovery.c
> index 3a1f6d21d..428f97ffe 100644
> --- a/tests/kms_feature_discovery.c
> +++ b/tests/kms_feature_discovery.c
> @@ -159,12 +159,12 @@ igt_main {
>
> igt_describe("Make sure that we have eDP panel with
> PSR1 support.");
> igt_subtest("psr1") {
> - igt_require(psr_sink_support(fd, debugfs_fd,
> PSR_MODE_1));
> + igt_require(psr_sink_support(fd, debugfs_fd,
> PSR_MODE_1, NULL));
> }
>
> igt_describe("Make sure that we have eDP panel with
> PSR2 support.");
> igt_subtest("psr2") {
> - igt_require(psr_sink_support(fd, debugfs_fd,
> PSR_MODE_2));
> + igt_require(psr_sink_support(fd, debugfs_fd,
> PSR_MODE_2, NULL));
> }
>
> igt_describe("Make sure that we have DP-MST
> configuration.");
^ permalink raw reply [flat|nested] 19+ messages in thread
* [igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability
2023-11-09 3:36 [igt-dev] [PATCH i-g-t 0/7] extend kms_psr test to validate pr Kunal Joshi
@ 2023-11-09 3:37 ` Kunal Joshi
0 siblings, 0 replies; 19+ messages in thread
From: Kunal Joshi @ 2023-11-09 3:37 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi, Arun R Murthy
New debugfs directory for all DP connectors will be added
with below patch series https://patchwork.freedesktop.org/series/94470/
For DP Connectors
/sys/kernel/debug/dri/0/DP-x/i915_psr_status
For eDP Connectors
/sys/kernel/debug/dri/0/i915_edp_psr_status
or
/sys/kernel/debug/dri/0/eDP-x/i915_psr_status
v2: reuse psr_sink_support (Jouni)
v3: maintain backward compatability (Jouni)
Cc: Jouni Högander <jouni.hogander@intel.com>
Cc: Animesh Manna <animesh.manna@intel.com>
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
lib/igt_psr.c | 56 ++++++++++++++++++--------
lib/igt_psr.h | 3 +-
tests/intel/kms_dirtyfb.c | 2 +-
tests/intel/kms_fbcon_fbt.c | 4 +-
tests/intel/kms_frontbuffer_tracking.c | 2 +-
tests/intel/kms_pm_dc.c | 9 +++--
tests/intel/kms_psr.c | 2 +-
tests/intel/kms_psr2_sf.c | 3 +-
tests/intel/kms_psr2_su.c | 3 +-
tests/intel/kms_psr_stress_test.c | 2 +-
tests/kms_feature_discovery.c | 4 +-
11 files changed, 59 insertions(+), 31 deletions(-)
diff --git a/lib/igt_psr.c b/lib/igt_psr.c
index 13f7c567d..054622d79 100644
--- a/lib/igt_psr.c
+++ b/lib/igt_psr.c
@@ -192,31 +192,53 @@ bool psr_disable(int device, int debugfs_fd)
return psr_set(device, debugfs_fd, -1);
}
-bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode)
+bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode, igt_output_t *output)
{
+ char *line;
+ char debugfs_file[128] = {0};
char buf[PSR_STATUS_MAX_LEN];
int ret;
- ret = igt_debugfs_simple_read(debugfs_fd, "i915_edp_psr_status", buf,
+ if (output)
+ sprintf(debugfs_file, "%s/i915_psr_status", output->name);
+ else
+ sprintf(debugfs_file, "%s", "i915_edp_psr_status");
+
+ ret = igt_debugfs_simple_read(debugfs_fd, debugfs_file, buf,
sizeof(buf));
if (ret < 1)
return false;
- if (mode == PSR_MODE_1)
- return strstr(buf, "Sink_Support: yes\n") ||
- strstr(buf, "Sink support: yes");
- else
- /*
- * i915 requires PSR version 0x03 that is PSR2 + SU with
- * Y-coordinate to support PSR2
- *
- * or
- *
- * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate and SU
- * Region Early Transport to support PSR2 (eDP 1.5)
- */
- return strstr(buf, "Sink support: yes [0x03]") ||
- strstr(buf, "Sink support: yes [0x04]");
+ line = strstr(buf, "Sink support: ");
+ if (!line)
+ return false;
+
+ switch (mode) {
+ case PSR_MODE_1:
+ return strstr(line, "PSR = yes") ||
+ strstr(buf, "Sink_Support: yes\n") ||
+ strstr(buf, "Sink support: yes");
+ case PSR_MODE_2:
+ case PSR_MODE_2_SEL_FETCH:
+ /*
+ * i915 requires PSR version 0x03 that is PSR2 + SU with
+ * Y-coordinate to support PSR2
+ * or
+ *
+ * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate and SU
+ * Region Early Transport to support PSR2 (eDP 1.5)
+ */
+ return strstr(line, "PSR = yes") &&
+ (strstr(line, "[0x03]") || strstr(line, "[0x04]"));
+ case PR_MODE:
+ return strstr(line, "Panel Replay = yes");
+ case PR_MODE_SEL_FETCH:
+ return strstr(line, "Panel Replay = yes") &&
+ strstr(buf, "PSR2 selective fetch: enabled");
+ default:
+ igt_assert_f(false, "Invalid psr mode\n");
+ return false;
+ }
}
#define PSR2_SU_BLOCK_STR_LOOKUP "PSR2 SU blocks:\n0\t"
diff --git a/lib/igt_psr.h b/lib/igt_psr.h
index 243154897..e213b05e9 100644
--- a/lib/igt_psr.h
+++ b/lib/igt_psr.h
@@ -27,6 +27,7 @@
#include "igt_debugfs.h"
#include "igt_core.h"
#include "igt_aux.h"
+#include "igt_kms.h"
#define PSR_STATUS_MAX_LEN 512
@@ -46,7 +47,7 @@ bool psr_wait_update(int debugfs_fd, enum psr_mode mode);
bool psr_long_wait_update(int debugfs_fd, enum psr_mode mode);
bool psr_enable(int device, int debugfs_fd, enum psr_mode);
bool psr_disable(int device, int debugfs_fd);
-bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode);
+bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode, igt_output_t *output);
bool psr2_wait_su(int debugfs_fd, uint16_t *num_su_blocks);
void psr_print_debugfs(int debugfs_fd);
enum psr_mode psr_get_mode(int debugfs_fd);
diff --git a/tests/intel/kms_dirtyfb.c b/tests/intel/kms_dirtyfb.c
index cc9529178..f7ff1ac0b 100644
--- a/tests/intel/kms_dirtyfb.c
+++ b/tests/intel/kms_dirtyfb.c
@@ -92,7 +92,7 @@ static bool check_support(data_t *data)
DRM_MODE_CONNECTOR_eDP)
return false;
return psr_sink_support(data->drm_fd, data->debugfs_fd,
- PSR_MODE_1);
+ PSR_MODE_1, NULL);
case FEATURE_DRRS:
return intel_is_drrs_supported(data->drm_fd, data->pipe) &&
intel_output_has_drrs(data->drm_fd, data->output);
diff --git a/tests/intel/kms_fbcon_fbt.c b/tests/intel/kms_fbcon_fbt.c
index 8d6bb3cb6..a7f24e669 100644
--- a/tests/intel/kms_fbcon_fbt.c
+++ b/tests/intel/kms_fbcon_fbt.c
@@ -269,7 +269,7 @@ static bool psr_is_disabled(int debugfs_fd)
static bool psr_supported_on_chipset(int device, int debugfs_fd)
{
- return psr_sink_support(device, debugfs_fd, PSR_MODE_1);
+ return psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL);
}
static bool psr_wait_until_update(struct drm_info *drm)
@@ -280,7 +280,7 @@ static bool psr_wait_until_update(struct drm_info *drm)
static void disable_features(int device, int debugfs_fd)
{
igt_set_module_param_int(device, "enable_fbc", 0);
- if (psr_sink_support(device, debugfs_fd, PSR_MODE_1))
+ if (psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL))
psr_disable(device, debugfs_fd);
}
diff --git a/tests/intel/kms_frontbuffer_tracking.c b/tests/intel/kms_frontbuffer_tracking.c
index be340a997..3cfa22bbf 100644
--- a/tests/intel/kms_frontbuffer_tracking.c
+++ b/tests/intel/kms_frontbuffer_tracking.c
@@ -1383,7 +1383,7 @@ static void setup_psr(void)
return;
}
- if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1)) {
+ if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1, NULL)) {
igt_info("Can't test PSR: not supported by sink.\n");
return;
}
diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
index 1e9ca5d6c..e5daacb84 100644
--- a/tests/intel/kms_pm_dc.c
+++ b/tests/intel/kms_pm_dc.c
@@ -673,14 +673,16 @@ 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") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_2));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_2, NULL));
test_dc3co_vpb_simulation(&data);
}
igt_describe("This test validates display engine entry to DC5 state "
"while PSR is active");
igt_subtest("dc5-psr") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_1, NULL));
data.op_psr_mode = PSR_MODE_1;
psr_enable(data.drm_fd, data.debugfs_fd, data.op_psr_mode);
test_dc_state_psr(&data, CHECK_DC5);
@@ -689,7 +691,8 @@ igt_main
igt_describe("This test validates display engine entry to DC6 state "
"while PSR is active");
igt_subtest("dc6-psr") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_1, NULL));
data.op_psr_mode = PSR_MODE_1;
psr_enable(data.drm_fd, data.debugfs_fd, data.op_psr_mode);
igt_require_f(igt_pm_pc8_plus_residencies_enabled(data.msr_fd),
diff --git a/tests/intel/kms_psr.c b/tests/intel/kms_psr.c
index ffecc5222..260095aec 100644
--- a/tests/intel/kms_psr.c
+++ b/tests/intel/kms_psr.c
@@ -433,7 +433,7 @@ static void fill_render(data_t *data, const struct igt_fb *fb,
static bool sink_support(data_t *data, enum psr_mode mode)
{
return data->with_psr_disabled ||
- psr_sink_support(data->drm_fd, data->debugfs_fd, mode);
+ psr_sink_support(data->drm_fd, data->debugfs_fd, mode, NULL);
}
static bool psr_wait_entry_if_enabled(data_t *data)
diff --git a/tests/intel/kms_psr2_sf.c b/tests/intel/kms_psr2_sf.c
index d7a746211..2d05f1110 100644
--- a/tests/intel/kms_psr2_sf.c
+++ b/tests/intel/kms_psr2_sf.c
@@ -980,7 +980,8 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd,
- data.debugfs_fd, PSR_MODE_2),
+ data.debugfs_fd, PSR_MODE_2,
+ NULL),
"Sink does not support PSR2\n");
display_init(&data);
diff --git a/tests/intel/kms_psr2_su.c b/tests/intel/kms_psr2_su.c
index 834fec1ec..2f89de435 100644
--- a/tests/intel/kms_psr2_su.c
+++ b/tests/intel/kms_psr2_su.c
@@ -327,7 +327,8 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd,
- data.debugfs_fd, PSR_MODE_2),
+ data.debugfs_fd,
+ PSR_MODE_2, NULL),
"Sink does not support PSR2\n");
igt_require_f(intel_display_ver(intel_get_drm_devid(data.drm_fd)) < 13,
diff --git a/tests/intel/kms_psr_stress_test.c b/tests/intel/kms_psr_stress_test.c
index b6759eece..beded3b94 100644
--- a/tests/intel/kms_psr_stress_test.c
+++ b/tests/intel/kms_psr_stress_test.c
@@ -357,7 +357,7 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd, data.debugfs_fd,
- PSR_MODE_1),
+ PSR_MODE_1, NULL),
"Sink does not support PSR\n");
setup_output(&data);
diff --git a/tests/kms_feature_discovery.c b/tests/kms_feature_discovery.c
index 3a1f6d21d..428f97ffe 100644
--- a/tests/kms_feature_discovery.c
+++ b/tests/kms_feature_discovery.c
@@ -159,12 +159,12 @@ igt_main {
igt_describe("Make sure that we have eDP panel with PSR1 support.");
igt_subtest("psr1") {
- igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_1, NULL));
}
igt_describe("Make sure that we have eDP panel with PSR2 support.");
igt_subtest("psr2") {
- igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_2));
+ igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_2, NULL));
}
igt_describe("Make sure that we have DP-MST configuration.");
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability
2023-10-31 8:09 [igt-dev] [PATCH i-g-t 0/7] extend kms_psr test to validate pr Kunal Joshi
@ 2023-10-31 8:09 ` Kunal Joshi
2023-10-31 10:40 ` Hogander, Jouni
0 siblings, 1 reply; 19+ messages in thread
From: Kunal Joshi @ 2023-10-31 8:09 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi, Arun R Murthy
New debugfs directory for all DP connectors will be added
with below patch series https://patchwork.freedesktop.org/series/94470/
For DP Connectors
/sys/kernel/debug/dri/0/DP-x/i915_psr_status
For eDP Connectors
/sys/kernel/debug/dri/0/i915_edp_psr_status
or
/sys/kernel/debug/dri/0/eDP-x/i915_psr_status
v2: reuse psr_sink_support (Jouni)
Cc: Jouni Högander <jouni.hogander@intel.com>
Cc: Animesh Manna <animesh.manna@intel.com>
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
lib/igt_psr.c | 54 ++++++++++++++++++--------
lib/igt_psr.h | 3 +-
tests/intel/kms_dirtyfb.c | 2 +-
tests/intel/kms_fbcon_fbt.c | 4 +-
tests/intel/kms_frontbuffer_tracking.c | 2 +-
tests/intel/kms_pm_dc.c | 9 +++--
tests/intel/kms_psr.c | 2 +-
tests/intel/kms_psr2_sf.c | 3 +-
tests/intel/kms_psr2_su.c | 3 +-
tests/intel/kms_psr_stress_test.c | 2 +-
tests/kms_feature_discovery.c | 4 +-
11 files changed, 57 insertions(+), 31 deletions(-)
diff --git a/lib/igt_psr.c b/lib/igt_psr.c
index 13f7c567d..aa3ca9ddb 100644
--- a/lib/igt_psr.c
+++ b/lib/igt_psr.c
@@ -192,31 +192,51 @@ bool psr_disable(int device, int debugfs_fd)
return psr_set(device, debugfs_fd, -1);
}
-bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode)
+bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode, igt_output_t *output)
{
+ char *line;
+ char debugfs_file[128] = {0};
char buf[PSR_STATUS_MAX_LEN];
int ret;
- ret = igt_debugfs_simple_read(debugfs_fd, "i915_edp_psr_status", buf,
+ if (output)
+ sprintf(debugfs_file, "%s/i915_psr_status", output->name);
+ else
+ sprintf(debugfs_file, "%s", "i915_edp_psr_status");
+
+ ret = igt_debugfs_simple_read(debugfs_fd, debugfs_file, buf,
sizeof(buf));
if (ret < 1)
return false;
- if (mode == PSR_MODE_1)
- return strstr(buf, "Sink_Support: yes\n") ||
- strstr(buf, "Sink support: yes");
- else
- /*
- * i915 requires PSR version 0x03 that is PSR2 + SU with
- * Y-coordinate to support PSR2
- *
- * or
- *
- * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate and SU
- * Region Early Transport to support PSR2 (eDP 1.5)
- */
- return strstr(buf, "Sink support: yes [0x03]") ||
- strstr(buf, "Sink support: yes [0x04]");
+ line = strstr(buf, "Sink support: ");
+ if (!line)
+ return false;
+
+ switch (mode) {
+ case PSR_MODE_1:
+ return strstr(line, "PSR = yes");
+ case PSR_MODE_2:
+ case PSR_MODE_2_SEL_FETCH:
+ /*
+ * i915 requires PSR version 0x03 that is PSR2 + SU with
+ * Y-coordinate to support PSR2
+ * or
+ *
+ * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate and SU
+ * Region Early Transport to support PSR2 (eDP 1.5)
+ */
+ return strstr(line, "PSR = yes") &&
+ (strstr(line, "[0x03]") || strstr(line, "[0x04]"));
+ case PR_MODE:
+ return strstr(line, "Panel Replay = yes");
+ case PR_MODE_SEL_FETCH:
+ return strstr(line, "Panel Replay = yes") &&
+ strstr(buf, "PSR2 selective fetch: enabled");
+ default:
+ igt_assert_f(false, "Invalid psr mode\n");
+ return false;
+ }
}
#define PSR2_SU_BLOCK_STR_LOOKUP "PSR2 SU blocks:\n0\t"
diff --git a/lib/igt_psr.h b/lib/igt_psr.h
index 243154897..e213b05e9 100644
--- a/lib/igt_psr.h
+++ b/lib/igt_psr.h
@@ -27,6 +27,7 @@
#include "igt_debugfs.h"
#include "igt_core.h"
#include "igt_aux.h"
+#include "igt_kms.h"
#define PSR_STATUS_MAX_LEN 512
@@ -46,7 +47,7 @@ bool psr_wait_update(int debugfs_fd, enum psr_mode mode);
bool psr_long_wait_update(int debugfs_fd, enum psr_mode mode);
bool psr_enable(int device, int debugfs_fd, enum psr_mode);
bool psr_disable(int device, int debugfs_fd);
-bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode);
+bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode, igt_output_t *output);
bool psr2_wait_su(int debugfs_fd, uint16_t *num_su_blocks);
void psr_print_debugfs(int debugfs_fd);
enum psr_mode psr_get_mode(int debugfs_fd);
diff --git a/tests/intel/kms_dirtyfb.c b/tests/intel/kms_dirtyfb.c
index cc9529178..f7ff1ac0b 100644
--- a/tests/intel/kms_dirtyfb.c
+++ b/tests/intel/kms_dirtyfb.c
@@ -92,7 +92,7 @@ static bool check_support(data_t *data)
DRM_MODE_CONNECTOR_eDP)
return false;
return psr_sink_support(data->drm_fd, data->debugfs_fd,
- PSR_MODE_1);
+ PSR_MODE_1, NULL);
case FEATURE_DRRS:
return intel_is_drrs_supported(data->drm_fd, data->pipe) &&
intel_output_has_drrs(data->drm_fd, data->output);
diff --git a/tests/intel/kms_fbcon_fbt.c b/tests/intel/kms_fbcon_fbt.c
index 8d6bb3cb6..a7f24e669 100644
--- a/tests/intel/kms_fbcon_fbt.c
+++ b/tests/intel/kms_fbcon_fbt.c
@@ -269,7 +269,7 @@ static bool psr_is_disabled(int debugfs_fd)
static bool psr_supported_on_chipset(int device, int debugfs_fd)
{
- return psr_sink_support(device, debugfs_fd, PSR_MODE_1);
+ return psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL);
}
static bool psr_wait_until_update(struct drm_info *drm)
@@ -280,7 +280,7 @@ static bool psr_wait_until_update(struct drm_info *drm)
static void disable_features(int device, int debugfs_fd)
{
igt_set_module_param_int(device, "enable_fbc", 0);
- if (psr_sink_support(device, debugfs_fd, PSR_MODE_1))
+ if (psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL))
psr_disable(device, debugfs_fd);
}
diff --git a/tests/intel/kms_frontbuffer_tracking.c b/tests/intel/kms_frontbuffer_tracking.c
index f90d09f9f..2d588e836 100644
--- a/tests/intel/kms_frontbuffer_tracking.c
+++ b/tests/intel/kms_frontbuffer_tracking.c
@@ -1362,7 +1362,7 @@ static void setup_psr(void)
return;
}
- if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1)) {
+ if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1, NULL)) {
igt_info("Can't test PSR: not supported by sink.\n");
return;
}
diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
index 1e9ca5d6c..e5daacb84 100644
--- a/tests/intel/kms_pm_dc.c
+++ b/tests/intel/kms_pm_dc.c
@@ -673,14 +673,16 @@ 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") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_2));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_2, NULL));
test_dc3co_vpb_simulation(&data);
}
igt_describe("This test validates display engine entry to DC5 state "
"while PSR is active");
igt_subtest("dc5-psr") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_1, NULL));
data.op_psr_mode = PSR_MODE_1;
psr_enable(data.drm_fd, data.debugfs_fd, data.op_psr_mode);
test_dc_state_psr(&data, CHECK_DC5);
@@ -689,7 +691,8 @@ igt_main
igt_describe("This test validates display engine entry to DC6 state "
"while PSR is active");
igt_subtest("dc6-psr") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_1, NULL));
data.op_psr_mode = PSR_MODE_1;
psr_enable(data.drm_fd, data.debugfs_fd, data.op_psr_mode);
igt_require_f(igt_pm_pc8_plus_residencies_enabled(data.msr_fd),
diff --git a/tests/intel/kms_psr.c b/tests/intel/kms_psr.c
index ffecc5222..260095aec 100644
--- a/tests/intel/kms_psr.c
+++ b/tests/intel/kms_psr.c
@@ -433,7 +433,7 @@ static void fill_render(data_t *data, const struct igt_fb *fb,
static bool sink_support(data_t *data, enum psr_mode mode)
{
return data->with_psr_disabled ||
- psr_sink_support(data->drm_fd, data->debugfs_fd, mode);
+ psr_sink_support(data->drm_fd, data->debugfs_fd, mode, NULL);
}
static bool psr_wait_entry_if_enabled(data_t *data)
diff --git a/tests/intel/kms_psr2_sf.c b/tests/intel/kms_psr2_sf.c
index d7a746211..2d05f1110 100644
--- a/tests/intel/kms_psr2_sf.c
+++ b/tests/intel/kms_psr2_sf.c
@@ -980,7 +980,8 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd,
- data.debugfs_fd, PSR_MODE_2),
+ data.debugfs_fd, PSR_MODE_2,
+ NULL),
"Sink does not support PSR2\n");
display_init(&data);
diff --git a/tests/intel/kms_psr2_su.c b/tests/intel/kms_psr2_su.c
index 834fec1ec..2f89de435 100644
--- a/tests/intel/kms_psr2_su.c
+++ b/tests/intel/kms_psr2_su.c
@@ -327,7 +327,8 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd,
- data.debugfs_fd, PSR_MODE_2),
+ data.debugfs_fd,
+ PSR_MODE_2, NULL),
"Sink does not support PSR2\n");
igt_require_f(intel_display_ver(intel_get_drm_devid(data.drm_fd)) < 13,
diff --git a/tests/intel/kms_psr_stress_test.c b/tests/intel/kms_psr_stress_test.c
index b6759eece..beded3b94 100644
--- a/tests/intel/kms_psr_stress_test.c
+++ b/tests/intel/kms_psr_stress_test.c
@@ -357,7 +357,7 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd, data.debugfs_fd,
- PSR_MODE_1),
+ PSR_MODE_1, NULL),
"Sink does not support PSR\n");
setup_output(&data);
diff --git a/tests/kms_feature_discovery.c b/tests/kms_feature_discovery.c
index 3a1f6d21d..428f97ffe 100644
--- a/tests/kms_feature_discovery.c
+++ b/tests/kms_feature_discovery.c
@@ -159,12 +159,12 @@ igt_main {
igt_describe("Make sure that we have eDP panel with PSR1 support.");
igt_subtest("psr1") {
- igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_1, NULL));
}
igt_describe("Make sure that we have eDP panel with PSR2 support.");
igt_subtest("psr2") {
- igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_2));
+ igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_2, NULL));
}
igt_describe("Make sure that we have DP-MST configuration.");
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread* Re: [igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability
2023-10-31 8:09 ` [igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability Kunal Joshi
@ 2023-10-31 10:40 ` Hogander, Jouni
2023-10-31 12:02 ` Hogander, Jouni
0 siblings, 1 reply; 19+ messages in thread
From: Hogander, Jouni @ 2023-10-31 10:40 UTC (permalink / raw)
To: Joshi, Kunal1, igt-dev@lists.freedesktop.org; +Cc: Murthy, Arun R
On Tue, 2023-10-31 at 13:39 +0530, Kunal Joshi wrote:
> New debugfs directory for all DP connectors will be added
> with below patch series
> https://patchwork.freedesktop.org/series/94470/
>
> For DP Connectors
> /sys/kernel/debug/dri/0/DP-x/i915_psr_status
>
> For eDP Connectors
> /sys/kernel/debug/dri/0/i915_edp_psr_status
> or
> /sys/kernel/debug/dri/0/eDP-x/i915_psr_status
>
> v2: reuse psr_sink_support (Jouni)
>
> Cc: Jouni Högander <jouni.hogander@intel.com>
> Cc: Animesh Manna <animesh.manna@intel.com>
> Cc: Arun R Murthy <arun.r.murthy@intel.com>
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
> ---
> lib/igt_psr.c | 54 ++++++++++++++++++------
> --
> lib/igt_psr.h | 3 +-
> tests/intel/kms_dirtyfb.c | 2 +-
> tests/intel/kms_fbcon_fbt.c | 4 +-
> tests/intel/kms_frontbuffer_tracking.c | 2 +-
> tests/intel/kms_pm_dc.c | 9 +++--
> tests/intel/kms_psr.c | 2 +-
> tests/intel/kms_psr2_sf.c | 3 +-
> tests/intel/kms_psr2_su.c | 3 +-
> tests/intel/kms_psr_stress_test.c | 2 +-
> tests/kms_feature_discovery.c | 4 +-
> 11 files changed, 57 insertions(+), 31 deletions(-)
>
> diff --git a/lib/igt_psr.c b/lib/igt_psr.c
> index 13f7c567d..aa3ca9ddb 100644
> --- a/lib/igt_psr.c
> +++ b/lib/igt_psr.c
> @@ -192,31 +192,51 @@ bool psr_disable(int device, int debugfs_fd)
> return psr_set(device, debugfs_fd, -1);
> }
>
> -bool psr_sink_support(int device, int debugfs_fd, enum psr_mode
> mode)
> +bool psr_sink_support(int device, int debugfs_fd, enum psr_mode
> mode, igt_output_t *output)
> {
> + char *line;
> + char debugfs_file[128] = {0};
> char buf[PSR_STATUS_MAX_LEN];
> int ret;
>
> - ret = igt_debugfs_simple_read(debugfs_fd,
> "i915_edp_psr_status", buf,
> + if (output)
> + sprintf(debugfs_file, "%s/i915_psr_status", output-
> >name);
> + else
> + sprintf(debugfs_file, "%s", "i915_edp_psr_status");
> +
> + ret = igt_debugfs_simple_read(debugfs_fd, debugfs_file, buf,
> sizeof(buf));
> if (ret < 1)
> return false;
>
> - if (mode == PSR_MODE_1)
> - return strstr(buf, "Sink_Support: yes\n") ||
> - strstr(buf, "Sink support: yes");
> - else
> - /*
> - * i915 requires PSR version 0x03 that is PSR2 + SU
> with
> - * Y-coordinate to support PSR2
> - *
> - * or
> - *
> - * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate
> and SU
> - * Region Early Transport to support PSR2 (eDP 1.5)
> - */
> - return strstr(buf, "Sink support: yes [0x03]") ||
> - strstr(buf, "Sink support: yes [0x04]");
> + line = strstr(buf, "Sink support: ");
> + if (!line)
> + return false;
> +
> + switch (mode) {
> + case PSR_MODE_1:
> + return strstr(line, "PSR = yes");
> + case PSR_MODE_2:
> + case PSR_MODE_2_SEL_FETCH:
> + /*
> + * i915 requires PSR version 0x03 that is
> PSR2 + SU with
> + * Y-coordinate to support PSR2
> + * or
> + *
> + * PSR version 0x4 that is PSR2 + SU w/ Y-
> coordinate and SU
> + * Region Early Transport to support PSR2
> (eDP 1.5)
> + */
> + return strstr(line, "PSR = yes") &&
> + (strstr(line, "[0x03]") ||
> strstr(line, "[0x04]"));
> + case PR_MODE:
> + return strstr(line, "Panel Replay = yes");
> + case PR_MODE_SEL_FETCH:
> + return strstr(line, "Panel Replay = yes") &&
> + strstr(buf, "PSR2 selective fetch:
> enabled");
I think this isn't yet implemented on kernel side, but I would assume
we use "selective update" and not PSR2. Selective fetch is feature in
our HW which can be used when doing selective updates. Panel isn't
aware of selective fetch done on source side.
BR,
Jouni Högander
> + default:
> + igt_assert_f(false, "Invalid psr mode\n");
> + return false;
> + }
> }
>
> #define PSR2_SU_BLOCK_STR_LOOKUP "PSR2 SU blocks:\n0\t"
> diff --git a/lib/igt_psr.h b/lib/igt_psr.h
> index 243154897..e213b05e9 100644
> --- a/lib/igt_psr.h
> +++ b/lib/igt_psr.h
> @@ -27,6 +27,7 @@
> #include "igt_debugfs.h"
> #include "igt_core.h"
> #include "igt_aux.h"
> +#include "igt_kms.h"
>
> #define PSR_STATUS_MAX_LEN 512
>
> @@ -46,7 +47,7 @@ bool psr_wait_update(int debugfs_fd, enum psr_mode
> mode);
> bool psr_long_wait_update(int debugfs_fd, enum psr_mode mode);
> bool psr_enable(int device, int debugfs_fd, enum psr_mode);
> bool psr_disable(int device, int debugfs_fd);
> -bool psr_sink_support(int device, int debugfs_fd, enum psr_mode
> mode);
> +bool psr_sink_support(int device, int debugfs_fd, enum psr_mode
> mode, igt_output_t *output);
> bool psr2_wait_su(int debugfs_fd, uint16_t *num_su_blocks);
> void psr_print_debugfs(int debugfs_fd);
> enum psr_mode psr_get_mode(int debugfs_fd);
> diff --git a/tests/intel/kms_dirtyfb.c b/tests/intel/kms_dirtyfb.c
> index cc9529178..f7ff1ac0b 100644
> --- a/tests/intel/kms_dirtyfb.c
> +++ b/tests/intel/kms_dirtyfb.c
> @@ -92,7 +92,7 @@ static bool check_support(data_t *data)
> DRM_MODE_CONNECTOR_eDP)
> return false;
> return psr_sink_support(data->drm_fd, data-
> >debugfs_fd,
> - PSR_MODE_1);
> + PSR_MODE_1, NULL);
> case FEATURE_DRRS:
> return intel_is_drrs_supported(data->drm_fd, data-
> >pipe) &&
> intel_output_has_drrs(data->drm_fd, data-
> >output);
> diff --git a/tests/intel/kms_fbcon_fbt.c
> b/tests/intel/kms_fbcon_fbt.c
> index 8d6bb3cb6..a7f24e669 100644
> --- a/tests/intel/kms_fbcon_fbt.c
> +++ b/tests/intel/kms_fbcon_fbt.c
> @@ -269,7 +269,7 @@ static bool psr_is_disabled(int debugfs_fd)
>
> static bool psr_supported_on_chipset(int device, int debugfs_fd)
> {
> - return psr_sink_support(device, debugfs_fd, PSR_MODE_1);
> + return psr_sink_support(device, debugfs_fd, PSR_MODE_1,
> NULL);
> }
>
> static bool psr_wait_until_update(struct drm_info *drm)
> @@ -280,7 +280,7 @@ static bool psr_wait_until_update(struct drm_info
> *drm)
> static void disable_features(int device, int debugfs_fd)
> {
> igt_set_module_param_int(device, "enable_fbc", 0);
> - if (psr_sink_support(device, debugfs_fd, PSR_MODE_1))
> + if (psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL))
> psr_disable(device, debugfs_fd);
> }
>
> diff --git a/tests/intel/kms_frontbuffer_tracking.c
> b/tests/intel/kms_frontbuffer_tracking.c
> index f90d09f9f..2d588e836 100644
> --- a/tests/intel/kms_frontbuffer_tracking.c
> +++ b/tests/intel/kms_frontbuffer_tracking.c
> @@ -1362,7 +1362,7 @@ static void setup_psr(void)
> return;
> }
>
> - if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1)) {
> + if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1, NULL))
> {
> igt_info("Can't test PSR: not supported by sink.\n");
> return;
> }
> diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
> index 1e9ca5d6c..e5daacb84 100644
> --- a/tests/intel/kms_pm_dc.c
> +++ b/tests/intel/kms_pm_dc.c
> @@ -673,14 +673,16 @@ 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") {
> - igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd, PSR_MODE_2));
> + igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd,
> + PSR_MODE_2, NULL));
> test_dc3co_vpb_simulation(&data);
> }
>
> igt_describe("This test validates display engine entry to DC5
> state "
> "while PSR is active");
> igt_subtest("dc5-psr") {
> - igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd, PSR_MODE_1));
> + igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd,
> + PSR_MODE_1, NULL));
> data.op_psr_mode = PSR_MODE_1;
> psr_enable(data.drm_fd, data.debugfs_fd,
> data.op_psr_mode);
> test_dc_state_psr(&data, CHECK_DC5);
> @@ -689,7 +691,8 @@ igt_main
> igt_describe("This test validates display engine entry to DC6
> state "
> "while PSR is active");
> igt_subtest("dc6-psr") {
> - igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd, PSR_MODE_1));
> + igt_require(psr_sink_support(data.drm_fd,
> data.debugfs_fd,
> + PSR_MODE_1, NULL));
> data.op_psr_mode = PSR_MODE_1;
> psr_enable(data.drm_fd, data.debugfs_fd,
> data.op_psr_mode);
> igt_require_f(igt_pm_pc8_plus_residencies_enabled(dat
> a.msr_fd),
> diff --git a/tests/intel/kms_psr.c b/tests/intel/kms_psr.c
> index ffecc5222..260095aec 100644
> --- a/tests/intel/kms_psr.c
> +++ b/tests/intel/kms_psr.c
> @@ -433,7 +433,7 @@ static void fill_render(data_t *data, const
> struct igt_fb *fb,
> static bool sink_support(data_t *data, enum psr_mode mode)
> {
> return data->with_psr_disabled ||
> - psr_sink_support(data->drm_fd, data->debugfs_fd,
> mode);
> + psr_sink_support(data->drm_fd, data->debugfs_fd, mode,
> NULL);
> }
>
> static bool psr_wait_entry_if_enabled(data_t *data)
> diff --git a/tests/intel/kms_psr2_sf.c b/tests/intel/kms_psr2_sf.c
> index d7a746211..2d05f1110 100644
> --- a/tests/intel/kms_psr2_sf.c
> +++ b/tests/intel/kms_psr2_sf.c
> @@ -980,7 +980,8 @@ igt_main
> kmstest_set_vt_graphics_mode();
>
> igt_require_f(psr_sink_support(data.drm_fd,
> - data.debugfs_fd,
> PSR_MODE_2),
> + data.debugfs_fd,
> PSR_MODE_2,
> + NULL),
> "Sink does not support PSR2\n");
>
> display_init(&data);
> diff --git a/tests/intel/kms_psr2_su.c b/tests/intel/kms_psr2_su.c
> index 834fec1ec..2f89de435 100644
> --- a/tests/intel/kms_psr2_su.c
> +++ b/tests/intel/kms_psr2_su.c
> @@ -327,7 +327,8 @@ igt_main
> kmstest_set_vt_graphics_mode();
>
> igt_require_f(psr_sink_support(data.drm_fd,
> - data.debugfs_fd,
> PSR_MODE_2),
> + data.debugfs_fd,
> + PSR_MODE_2, NULL),
> "Sink does not support PSR2\n");
>
> igt_require_f(intel_display_ver(intel_get_drm_devid(d
> ata.drm_fd)) < 13,
> diff --git a/tests/intel/kms_psr_stress_test.c
> b/tests/intel/kms_psr_stress_test.c
> index b6759eece..beded3b94 100644
> --- a/tests/intel/kms_psr_stress_test.c
> +++ b/tests/intel/kms_psr_stress_test.c
> @@ -357,7 +357,7 @@ igt_main
> kmstest_set_vt_graphics_mode();
>
> igt_require_f(psr_sink_support(data.drm_fd,
> data.debugfs_fd,
> - PSR_MODE_1),
> + PSR_MODE_1, NULL),
> "Sink does not support PSR\n");
>
> setup_output(&data);
> diff --git a/tests/kms_feature_discovery.c
> b/tests/kms_feature_discovery.c
> index 3a1f6d21d..428f97ffe 100644
> --- a/tests/kms_feature_discovery.c
> +++ b/tests/kms_feature_discovery.c
> @@ -159,12 +159,12 @@ igt_main {
>
> igt_describe("Make sure that we have eDP panel with
> PSR1 support.");
> igt_subtest("psr1") {
> - igt_require(psr_sink_support(fd, debugfs_fd,
> PSR_MODE_1));
> + igt_require(psr_sink_support(fd, debugfs_fd,
> PSR_MODE_1, NULL));
> }
>
> igt_describe("Make sure that we have eDP panel with
> PSR2 support.");
> igt_subtest("psr2") {
> - igt_require(psr_sink_support(fd, debugfs_fd,
> PSR_MODE_2));
> + igt_require(psr_sink_support(fd, debugfs_fd,
> PSR_MODE_2, NULL));
> }
>
> igt_describe("Make sure that we have DP-MST
> configuration.");
^ permalink raw reply [flat|nested] 19+ messages in thread* Re: [igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability
2023-10-31 10:40 ` Hogander, Jouni
@ 2023-10-31 12:02 ` Hogander, Jouni
0 siblings, 0 replies; 19+ messages in thread
From: Hogander, Jouni @ 2023-10-31 12:02 UTC (permalink / raw)
To: Joshi, Kunal1, igt-dev@lists.freedesktop.org; +Cc: Murthy, Arun R
On Tue, 2023-10-31 at 12:39 +0200, Hogander, Jouni wrote:
> On Tue, 2023-10-31 at 13:39 +0530, Kunal Joshi wrote:
> > New debugfs directory for all DP connectors will be added
> > with below patch series
> > https://patchwork.freedesktop.org/series/94470/
> >
> > For DP Connectors
> > /sys/kernel/debug/dri/0/DP-x/i915_psr_status
> >
> > For eDP Connectors
> > /sys/kernel/debug/dri/0/i915_edp_psr_status
> > or
> > /sys/kernel/debug/dri/0/eDP-x/i915_psr_status
> >
> > v2: reuse psr_sink_support (Jouni)
> >
> > Cc: Jouni Högander <jouni.hogander@intel.com>
> > Cc: Animesh Manna <animesh.manna@intel.com>
> > Cc: Arun R Murthy <arun.r.murthy@intel.com>
> > Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
> > ---
> > lib/igt_psr.c | 54 ++++++++++++++++++----
> > --
> > --
> > lib/igt_psr.h | 3 +-
> > tests/intel/kms_dirtyfb.c | 2 +-
> > tests/intel/kms_fbcon_fbt.c | 4 +-
> > tests/intel/kms_frontbuffer_tracking.c | 2 +-
> > tests/intel/kms_pm_dc.c | 9 +++--
> > tests/intel/kms_psr.c | 2 +-
> > tests/intel/kms_psr2_sf.c | 3 +-
> > tests/intel/kms_psr2_su.c | 3 +-
> > tests/intel/kms_psr_stress_test.c | 2 +-
> > tests/kms_feature_discovery.c | 4 +-
> > 11 files changed, 57 insertions(+), 31 deletions(-)
> >
> > diff --git a/lib/igt_psr.c b/lib/igt_psr.c
> > index 13f7c567d..aa3ca9ddb 100644
> > --- a/lib/igt_psr.c
> > +++ b/lib/igt_psr.c
> > @@ -192,31 +192,51 @@ bool psr_disable(int device, int debugfs_fd)
> > return psr_set(device, debugfs_fd, -1);
> > }
> >
> > -bool psr_sink_support(int device, int debugfs_fd, enum psr_mode
> > mode)
> > +bool psr_sink_support(int device, int debugfs_fd, enum psr_mode
> > mode, igt_output_t *output)
> > {
> > + char *line;
> > + char debugfs_file[128] = {0};
> > char buf[PSR_STATUS_MAX_LEN];
> > int ret;
> >
> > - ret = igt_debugfs_simple_read(debugfs_fd,
> > "i915_edp_psr_status", buf,
> > + if (output)
> > + sprintf(debugfs_file, "%s/i915_psr_status", output-
> > > name);
> > + else
> > + sprintf(debugfs_file, "%s", "i915_edp_psr_status");
> > +
> > + ret = igt_debugfs_simple_read(debugfs_fd, debugfs_file,
> > buf,
> > sizeof(buf));
> > if (ret < 1)
> > return false;
> >
> > - if (mode == PSR_MODE_1)
> > - return strstr(buf, "Sink_Support: yes\n") ||
> > - strstr(buf, "Sink support: yes");
> > - else
> > - /*
> > - * i915 requires PSR version 0x03 that is PSR2 + SU
> > with
> > - * Y-coordinate to support PSR2
> > - *
> > - * or
> > - *
> > - * PSR version 0x4 that is PSR2 + SU w/ Y-
> > coordinate
> > and SU
> > - * Region Early Transport to support PSR2 (eDP 1.5)
> > - */
> > - return strstr(buf, "Sink support: yes [0x03]") ||
> > - strstr(buf, "Sink support: yes [0x04]");
> > + line = strstr(buf, "Sink support: ");
> > + if (!line)
> > + return false;
> > +
> > + switch (mode) {
> > + case PSR_MODE_1:
> > + return strstr(line, "PSR = yes");
I think this is breaking current tests as the sink support line is like
this:
Sink support: yes [0x01]
I think we could keep them as they are currently, just add Panel replay
variants:
PR:
Sink support: Panel Replay
PR Selective update:
Sink support: Panel Replay Selective update
PSR1 + PR (not sure if such edp panel will ever exist):
Sink support: yes [0x01], Panel Replay
and so on.
BR,
Jouni Högander
> > + case PSR_MODE_2:
> > + case PSR_MODE_2_SEL_FETCH:
> > + /*
> > + * i915 requires PSR version 0x03 that is
> > PSR2 + SU with
> > + * Y-coordinate to support PSR2
> > + * or
> > + *
> > + * PSR version 0x4 that is PSR2 + SU w/ Y-
> > coordinate and SU
> > + * Region Early Transport to support PSR2
> > (eDP 1.5)
> > + */
> > + return strstr(line, "PSR = yes") &&
> > + (strstr(line, "[0x03]") ||
> > strstr(line, "[0x04]"));
> > + case PR_MODE:
> > + return strstr(line, "Panel Replay = yes");
> > + case PR_MODE_SEL_FETCH:
> > + return strstr(line, "Panel Replay = yes")
> > &&
> > + strstr(buf, "PSR2 selective fetch:
> > enabled");
>
> I think this isn't yet implemented on kernel side, but I would assume
> we use "selective update" and not PSR2. Selective fetch is feature in
> our HW which can be used when doing selective updates. Panel isn't
> aware of selective fetch done on source side.
>
> BR,
> Jouni Högander
>
>
> > + default:
> > + igt_assert_f(false, "Invalid psr mode\n");
> > + return false;
> > + }
> > }
> >
> > #define PSR2_SU_BLOCK_STR_LOOKUP "PSR2 SU blocks:\n0\t"
> > diff --git a/lib/igt_psr.h b/lib/igt_psr.h
> > index 243154897..e213b05e9 100644
> > --- a/lib/igt_psr.h
> > +++ b/lib/igt_psr.h
> > @@ -27,6 +27,7 @@
> > #include "igt_debugfs.h"
> > #include "igt_core.h"
> > #include "igt_aux.h"
> > +#include "igt_kms.h"
> >
> > #define PSR_STATUS_MAX_LEN 512
> >
> > @@ -46,7 +47,7 @@ bool psr_wait_update(int debugfs_fd, enum
> > psr_mode
> > mode);
> > bool psr_long_wait_update(int debugfs_fd, enum psr_mode mode);
> > bool psr_enable(int device, int debugfs_fd, enum psr_mode);
> > bool psr_disable(int device, int debugfs_fd);
> > -bool psr_sink_support(int device, int debugfs_fd, enum psr_mode
> > mode);
> > +bool psr_sink_support(int device, int debugfs_fd, enum psr_mode
> > mode, igt_output_t *output);
> > bool psr2_wait_su(int debugfs_fd, uint16_t *num_su_blocks);
> > void psr_print_debugfs(int debugfs_fd);
> > enum psr_mode psr_get_mode(int debugfs_fd);
> > diff --git a/tests/intel/kms_dirtyfb.c b/tests/intel/kms_dirtyfb.c
> > index cc9529178..f7ff1ac0b 100644
> > --- a/tests/intel/kms_dirtyfb.c
> > +++ b/tests/intel/kms_dirtyfb.c
> > @@ -92,7 +92,7 @@ static bool check_support(data_t *data)
> > DRM_MODE_CONNECTOR_eDP)
> > return false;
> > return psr_sink_support(data->drm_fd, data-
> > > debugfs_fd,
> > - PSR_MODE_1);
> > + PSR_MODE_1, NULL);
> > case FEATURE_DRRS:
> > return intel_is_drrs_supported(data->drm_fd, data-
> > > pipe) &&
> > intel_output_has_drrs(data->drm_fd, data-
> > > output);
> > diff --git a/tests/intel/kms_fbcon_fbt.c
> > b/tests/intel/kms_fbcon_fbt.c
> > index 8d6bb3cb6..a7f24e669 100644
> > --- a/tests/intel/kms_fbcon_fbt.c
> > +++ b/tests/intel/kms_fbcon_fbt.c
> > @@ -269,7 +269,7 @@ static bool psr_is_disabled(int debugfs_fd)
> >
> > static bool psr_supported_on_chipset(int device, int debugfs_fd)
> > {
> > - return psr_sink_support(device, debugfs_fd, PSR_MODE_1);
> > + return psr_sink_support(device, debugfs_fd, PSR_MODE_1,
> > NULL);
> > }
> >
> > static bool psr_wait_until_update(struct drm_info *drm)
> > @@ -280,7 +280,7 @@ static bool psr_wait_until_update(struct
> > drm_info
> > *drm)
> > static void disable_features(int device, int debugfs_fd)
> > {
> > igt_set_module_param_int(device, "enable_fbc", 0);
> > - if (psr_sink_support(device, debugfs_fd, PSR_MODE_1))
> > + if (psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL))
> > psr_disable(device, debugfs_fd);
> > }
> >
> > diff --git a/tests/intel/kms_frontbuffer_tracking.c
> > b/tests/intel/kms_frontbuffer_tracking.c
> > index f90d09f9f..2d588e836 100644
> > --- a/tests/intel/kms_frontbuffer_tracking.c
> > +++ b/tests/intel/kms_frontbuffer_tracking.c
> > @@ -1362,7 +1362,7 @@ static void setup_psr(void)
> > return;
> > }
> >
> > - if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1)) {
> > + if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1,
> > NULL))
> > {
> > igt_info("Can't test PSR: not supported by
> > sink.\n");
> > return;
> > }
> > diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
> > index 1e9ca5d6c..e5daacb84 100644
> > --- a/tests/intel/kms_pm_dc.c
> > +++ b/tests/intel/kms_pm_dc.c
> > @@ -673,14 +673,16 @@ 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") {
> > - igt_require(psr_sink_support(data.drm_fd,
> > data.debugfs_fd, PSR_MODE_2));
> > + igt_require(psr_sink_support(data.drm_fd,
> > data.debugfs_fd,
> > + PSR_MODE_2, NULL));
> > test_dc3co_vpb_simulation(&data);
> > }
> >
> > igt_describe("This test validates display engine entry to
> > DC5
> > state "
> > "while PSR is active");
> > igt_subtest("dc5-psr") {
> > - igt_require(psr_sink_support(data.drm_fd,
> > data.debugfs_fd, PSR_MODE_1));
> > + igt_require(psr_sink_support(data.drm_fd,
> > data.debugfs_fd,
> > + PSR_MODE_1, NULL));
> > data.op_psr_mode = PSR_MODE_1;
> > psr_enable(data.drm_fd, data.debugfs_fd,
> > data.op_psr_mode);
> > test_dc_state_psr(&data, CHECK_DC5);
> > @@ -689,7 +691,8 @@ igt_main
> > igt_describe("This test validates display engine entry to
> > DC6
> > state "
> > "while PSR is active");
> > igt_subtest("dc6-psr") {
> > - igt_require(psr_sink_support(data.drm_fd,
> > data.debugfs_fd, PSR_MODE_1));
> > + igt_require(psr_sink_support(data.drm_fd,
> > data.debugfs_fd,
> > + PSR_MODE_1, NULL));
> > data.op_psr_mode = PSR_MODE_1;
> > psr_enable(data.drm_fd, data.debugfs_fd,
> > data.op_psr_mode);
> > igt_require_f(igt_pm_pc8_plus_residencies_enabled(d
> > at
> > a.msr_fd),
> > diff --git a/tests/intel/kms_psr.c b/tests/intel/kms_psr.c
> > index ffecc5222..260095aec 100644
> > --- a/tests/intel/kms_psr.c
> > +++ b/tests/intel/kms_psr.c
> > @@ -433,7 +433,7 @@ static void fill_render(data_t *data, const
> > struct igt_fb *fb,
> > static bool sink_support(data_t *data, enum psr_mode mode)
> > {
> > return data->with_psr_disabled ||
> > - psr_sink_support(data->drm_fd, data->debugfs_fd,
> > mode);
> > + psr_sink_support(data->drm_fd, data->debugfs_fd,
> > mode,
> > NULL);
> > }
> >
> > static bool psr_wait_entry_if_enabled(data_t *data)
> > diff --git a/tests/intel/kms_psr2_sf.c b/tests/intel/kms_psr2_sf.c
> > index d7a746211..2d05f1110 100644
> > --- a/tests/intel/kms_psr2_sf.c
> > +++ b/tests/intel/kms_psr2_sf.c
> > @@ -980,7 +980,8 @@ igt_main
> > kmstest_set_vt_graphics_mode();
> >
> > igt_require_f(psr_sink_support(data.drm_fd,
> > - data.debugfs_fd,
> > PSR_MODE_2),
> > + data.debugfs_fd,
> > PSR_MODE_2,
> > + NULL),
> > "Sink does not support PSR2\n");
> >
> > display_init(&data);
> > diff --git a/tests/intel/kms_psr2_su.c b/tests/intel/kms_psr2_su.c
> > index 834fec1ec..2f89de435 100644
> > --- a/tests/intel/kms_psr2_su.c
> > +++ b/tests/intel/kms_psr2_su.c
> > @@ -327,7 +327,8 @@ igt_main
> > kmstest_set_vt_graphics_mode();
> >
> > igt_require_f(psr_sink_support(data.drm_fd,
> > - data.debugfs_fd,
> > PSR_MODE_2),
> > + data.debugfs_fd,
> > + PSR_MODE_2, NULL),
> > "Sink does not support PSR2\n");
> >
> > igt_require_f(intel_display_ver(intel_get_drm_devid
> > (d
> > ata.drm_fd)) < 13,
> > diff --git a/tests/intel/kms_psr_stress_test.c
> > b/tests/intel/kms_psr_stress_test.c
> > index b6759eece..beded3b94 100644
> > --- a/tests/intel/kms_psr_stress_test.c
> > +++ b/tests/intel/kms_psr_stress_test.c
> > @@ -357,7 +357,7 @@ igt_main
> > kmstest_set_vt_graphics_mode();
> >
> > igt_require_f(psr_sink_support(data.drm_fd,
> > data.debugfs_fd,
> > - PSR_MODE_1),
> > + PSR_MODE_1, NULL),
> > "Sink does not support PSR\n");
> >
> > setup_output(&data);
> > diff --git a/tests/kms_feature_discovery.c
> > b/tests/kms_feature_discovery.c
> > index 3a1f6d21d..428f97ffe 100644
> > --- a/tests/kms_feature_discovery.c
> > +++ b/tests/kms_feature_discovery.c
> > @@ -159,12 +159,12 @@ igt_main {
> >
> > igt_describe("Make sure that we have eDP panel with
> > PSR1 support.");
> > igt_subtest("psr1") {
> > - igt_require(psr_sink_support(fd,
> > debugfs_fd,
> > PSR_MODE_1));
> > + igt_require(psr_sink_support(fd,
> > debugfs_fd,
> > PSR_MODE_1, NULL));
> > }
> >
> > igt_describe("Make sure that we have eDP panel with
> > PSR2 support.");
> > igt_subtest("psr2") {
> > - igt_require(psr_sink_support(fd,
> > debugfs_fd,
> > PSR_MODE_2));
> > + igt_require(psr_sink_support(fd,
> > debugfs_fd,
> > PSR_MODE_2, NULL));
> > }
> >
> > igt_describe("Make sure that we have DP-MST
> > configuration.");
>
^ permalink raw reply [flat|nested] 19+ messages in thread
* [igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability
2023-10-25 14:27 [igt-dev] [PATCH i-g-t 0/7] extend kms_psr test to validate pr Kunal Joshi
@ 2023-10-25 14:27 ` Kunal Joshi
0 siblings, 0 replies; 19+ messages in thread
From: Kunal Joshi @ 2023-10-25 14:27 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi, Arun R Murthy
New debugfs directory for all DP connectors will be added
with below patch series https://patchwork.freedesktop.org/series/94470/
For DP Connectors
/sys/kernel/debug/dri/0/DP-x/i915_psr_status
For eDP Connectors
/sys/kernel/debug/dri/0/i915_edp_psr_status
or
/sys/kernel/debug/dri/0/eDP-x/i915_psr_status
v2: reuse psr_sink_support (Jouni)
Cc: Jouni Högander <jouni.hogander@intel.com>
Cc: Animesh Manna <animesh.manna@intel.com>
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
lib/igt_psr.c | 54 ++++++++++++++++++--------
lib/igt_psr.h | 3 +-
tests/intel/kms_dirtyfb.c | 2 +-
tests/intel/kms_fbcon_fbt.c | 4 +-
tests/intel/kms_frontbuffer_tracking.c | 2 +-
tests/intel/kms_pm_dc.c | 9 +++--
tests/intel/kms_psr.c | 2 +-
tests/intel/kms_psr2_sf.c | 3 +-
tests/intel/kms_psr2_su.c | 3 +-
tests/intel/kms_psr_stress_test.c | 2 +-
tests/kms_feature_discovery.c | 4 +-
11 files changed, 57 insertions(+), 31 deletions(-)
diff --git a/lib/igt_psr.c b/lib/igt_psr.c
index 13f7c567d..aa3ca9ddb 100644
--- a/lib/igt_psr.c
+++ b/lib/igt_psr.c
@@ -192,31 +192,51 @@ bool psr_disable(int device, int debugfs_fd)
return psr_set(device, debugfs_fd, -1);
}
-bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode)
+bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode, igt_output_t *output)
{
+ char *line;
+ char debugfs_file[128] = {0};
char buf[PSR_STATUS_MAX_LEN];
int ret;
- ret = igt_debugfs_simple_read(debugfs_fd, "i915_edp_psr_status", buf,
+ if (output)
+ sprintf(debugfs_file, "%s/i915_psr_status", output->name);
+ else
+ sprintf(debugfs_file, "%s", "i915_edp_psr_status");
+
+ ret = igt_debugfs_simple_read(debugfs_fd, debugfs_file, buf,
sizeof(buf));
if (ret < 1)
return false;
- if (mode == PSR_MODE_1)
- return strstr(buf, "Sink_Support: yes\n") ||
- strstr(buf, "Sink support: yes");
- else
- /*
- * i915 requires PSR version 0x03 that is PSR2 + SU with
- * Y-coordinate to support PSR2
- *
- * or
- *
- * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate and SU
- * Region Early Transport to support PSR2 (eDP 1.5)
- */
- return strstr(buf, "Sink support: yes [0x03]") ||
- strstr(buf, "Sink support: yes [0x04]");
+ line = strstr(buf, "Sink support: ");
+ if (!line)
+ return false;
+
+ switch (mode) {
+ case PSR_MODE_1:
+ return strstr(line, "PSR = yes");
+ case PSR_MODE_2:
+ case PSR_MODE_2_SEL_FETCH:
+ /*
+ * i915 requires PSR version 0x03 that is PSR2 + SU with
+ * Y-coordinate to support PSR2
+ * or
+ *
+ * PSR version 0x4 that is PSR2 + SU w/ Y-coordinate and SU
+ * Region Early Transport to support PSR2 (eDP 1.5)
+ */
+ return strstr(line, "PSR = yes") &&
+ (strstr(line, "[0x03]") || strstr(line, "[0x04]"));
+ case PR_MODE:
+ return strstr(line, "Panel Replay = yes");
+ case PR_MODE_SEL_FETCH:
+ return strstr(line, "Panel Replay = yes") &&
+ strstr(buf, "PSR2 selective fetch: enabled");
+ default:
+ igt_assert_f(false, "Invalid psr mode\n");
+ return false;
+ }
}
#define PSR2_SU_BLOCK_STR_LOOKUP "PSR2 SU blocks:\n0\t"
diff --git a/lib/igt_psr.h b/lib/igt_psr.h
index 243154897..e213b05e9 100644
--- a/lib/igt_psr.h
+++ b/lib/igt_psr.h
@@ -27,6 +27,7 @@
#include "igt_debugfs.h"
#include "igt_core.h"
#include "igt_aux.h"
+#include "igt_kms.h"
#define PSR_STATUS_MAX_LEN 512
@@ -46,7 +47,7 @@ bool psr_wait_update(int debugfs_fd, enum psr_mode mode);
bool psr_long_wait_update(int debugfs_fd, enum psr_mode mode);
bool psr_enable(int device, int debugfs_fd, enum psr_mode);
bool psr_disable(int device, int debugfs_fd);
-bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode);
+bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode, igt_output_t *output);
bool psr2_wait_su(int debugfs_fd, uint16_t *num_su_blocks);
void psr_print_debugfs(int debugfs_fd);
enum psr_mode psr_get_mode(int debugfs_fd);
diff --git a/tests/intel/kms_dirtyfb.c b/tests/intel/kms_dirtyfb.c
index cc9529178..f7ff1ac0b 100644
--- a/tests/intel/kms_dirtyfb.c
+++ b/tests/intel/kms_dirtyfb.c
@@ -92,7 +92,7 @@ static bool check_support(data_t *data)
DRM_MODE_CONNECTOR_eDP)
return false;
return psr_sink_support(data->drm_fd, data->debugfs_fd,
- PSR_MODE_1);
+ PSR_MODE_1, NULL);
case FEATURE_DRRS:
return intel_is_drrs_supported(data->drm_fd, data->pipe) &&
intel_output_has_drrs(data->drm_fd, data->output);
diff --git a/tests/intel/kms_fbcon_fbt.c b/tests/intel/kms_fbcon_fbt.c
index 8d6bb3cb6..a7f24e669 100644
--- a/tests/intel/kms_fbcon_fbt.c
+++ b/tests/intel/kms_fbcon_fbt.c
@@ -269,7 +269,7 @@ static bool psr_is_disabled(int debugfs_fd)
static bool psr_supported_on_chipset(int device, int debugfs_fd)
{
- return psr_sink_support(device, debugfs_fd, PSR_MODE_1);
+ return psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL);
}
static bool psr_wait_until_update(struct drm_info *drm)
@@ -280,7 +280,7 @@ static bool psr_wait_until_update(struct drm_info *drm)
static void disable_features(int device, int debugfs_fd)
{
igt_set_module_param_int(device, "enable_fbc", 0);
- if (psr_sink_support(device, debugfs_fd, PSR_MODE_1))
+ if (psr_sink_support(device, debugfs_fd, PSR_MODE_1, NULL))
psr_disable(device, debugfs_fd);
}
diff --git a/tests/intel/kms_frontbuffer_tracking.c b/tests/intel/kms_frontbuffer_tracking.c
index f90d09f9f..2d588e836 100644
--- a/tests/intel/kms_frontbuffer_tracking.c
+++ b/tests/intel/kms_frontbuffer_tracking.c
@@ -1362,7 +1362,7 @@ static void setup_psr(void)
return;
}
- if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1)) {
+ if (!psr_sink_support(drm.fd, drm.debugfs, PSR_MODE_1, NULL)) {
igt_info("Can't test PSR: not supported by sink.\n");
return;
}
diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
index 1e9ca5d6c..e5daacb84 100644
--- a/tests/intel/kms_pm_dc.c
+++ b/tests/intel/kms_pm_dc.c
@@ -673,14 +673,16 @@ 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") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_2));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_2, NULL));
test_dc3co_vpb_simulation(&data);
}
igt_describe("This test validates display engine entry to DC5 state "
"while PSR is active");
igt_subtest("dc5-psr") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_1, NULL));
data.op_psr_mode = PSR_MODE_1;
psr_enable(data.drm_fd, data.debugfs_fd, data.op_psr_mode);
test_dc_state_psr(&data, CHECK_DC5);
@@ -689,7 +691,8 @@ igt_main
igt_describe("This test validates display engine entry to DC6 state "
"while PSR is active");
igt_subtest("dc6-psr") {
- igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(data.drm_fd, data.debugfs_fd,
+ PSR_MODE_1, NULL));
data.op_psr_mode = PSR_MODE_1;
psr_enable(data.drm_fd, data.debugfs_fd, data.op_psr_mode);
igt_require_f(igt_pm_pc8_plus_residencies_enabled(data.msr_fd),
diff --git a/tests/intel/kms_psr.c b/tests/intel/kms_psr.c
index ffecc5222..260095aec 100644
--- a/tests/intel/kms_psr.c
+++ b/tests/intel/kms_psr.c
@@ -433,7 +433,7 @@ static void fill_render(data_t *data, const struct igt_fb *fb,
static bool sink_support(data_t *data, enum psr_mode mode)
{
return data->with_psr_disabled ||
- psr_sink_support(data->drm_fd, data->debugfs_fd, mode);
+ psr_sink_support(data->drm_fd, data->debugfs_fd, mode, NULL);
}
static bool psr_wait_entry_if_enabled(data_t *data)
diff --git a/tests/intel/kms_psr2_sf.c b/tests/intel/kms_psr2_sf.c
index d7a746211..2d05f1110 100644
--- a/tests/intel/kms_psr2_sf.c
+++ b/tests/intel/kms_psr2_sf.c
@@ -980,7 +980,8 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd,
- data.debugfs_fd, PSR_MODE_2),
+ data.debugfs_fd, PSR_MODE_2,
+ NULL),
"Sink does not support PSR2\n");
display_init(&data);
diff --git a/tests/intel/kms_psr2_su.c b/tests/intel/kms_psr2_su.c
index 834fec1ec..2f89de435 100644
--- a/tests/intel/kms_psr2_su.c
+++ b/tests/intel/kms_psr2_su.c
@@ -327,7 +327,8 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd,
- data.debugfs_fd, PSR_MODE_2),
+ data.debugfs_fd,
+ PSR_MODE_2, NULL),
"Sink does not support PSR2\n");
igt_require_f(intel_display_ver(intel_get_drm_devid(data.drm_fd)) < 13,
diff --git a/tests/intel/kms_psr_stress_test.c b/tests/intel/kms_psr_stress_test.c
index b6759eece..beded3b94 100644
--- a/tests/intel/kms_psr_stress_test.c
+++ b/tests/intel/kms_psr_stress_test.c
@@ -357,7 +357,7 @@ igt_main
kmstest_set_vt_graphics_mode();
igt_require_f(psr_sink_support(data.drm_fd, data.debugfs_fd,
- PSR_MODE_1),
+ PSR_MODE_1, NULL),
"Sink does not support PSR\n");
setup_output(&data);
diff --git a/tests/kms_feature_discovery.c b/tests/kms_feature_discovery.c
index 3a1f6d21d..428f97ffe 100644
--- a/tests/kms_feature_discovery.c
+++ b/tests/kms_feature_discovery.c
@@ -159,12 +159,12 @@ igt_main {
igt_describe("Make sure that we have eDP panel with PSR1 support.");
igt_subtest("psr1") {
- igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_1));
+ igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_1, NULL));
}
igt_describe("Make sure that we have eDP panel with PSR2 support.");
igt_subtest("psr2") {
- igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_2));
+ igt_require(psr_sink_support(fd, debugfs_fd, PSR_MODE_2, NULL));
}
igt_describe("Make sure that we have DP-MST configuration.");
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread