[igt-dev] [PATCH i-g-t 2/7] lib/igt_psr: modified psr_sink_support for pr compatability
Hogander, Jouni
jouni.hogander at intel.com
Tue Oct 31 12:02:49 UTC 2023
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 at intel.com>
> > Cc: Animesh Manna <animesh.manna at intel.com>
> > Cc: Arun R Murthy <arun.r.murthy at intel.com>
> > Signed-off-by: Kunal Joshi <kunal1.joshi at 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.");
>
More information about the igt-dev
mailing list