[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
Fri Nov 10 07:53:40 UTC 2023


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 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                          | 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.");



More information about the igt-dev mailing list