[igt-dev] [PATCH i-g-t 2/2] test: kms_frontbuffer_tracking: Fix DRRS subtests
Petri Latvala
petri.latvala at intel.com
Thu Apr 14 09:42:26 UTC 2022
On Wed, Apr 13, 2022 at 10:46:04PM +0300, Souza, Jose wrote:
> On Wed, 2022-04-06 at 10:33 +0300, Petri Latvala wrote:
> > On Tue, Apr 05, 2022 at 12:12:15PM -0700, José Roberto de Souza wrote:
> > > Due to recent refactors in i915, it completely changed
> > > i915_drrs_status breaking all DRRS subtests, so here using
> > > the newly added DRRS helpers to fix it.
> > >
> > > Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > > Signed-off-by: José Roberto de Souza <jose.souza at intel.com>
> > > ---
> > > tests/i915/kms_frontbuffer_tracking.c | 57 +++------------------------
> > > 1 file changed, 5 insertions(+), 52 deletions(-)
> > >
> > > diff --git a/tests/i915/kms_frontbuffer_tracking.c b/tests/i915/kms_frontbuffer_tracking.c
> > > index 814ddb46ce..59ba6cfc11 100644
> > > --- a/tests/i915/kms_frontbuffer_tracking.c
> > > +++ b/tests/i915/kms_frontbuffer_tracking.c
> > > @@ -34,6 +34,7 @@
> > > #include "i915/gem_create.h"
> > > #include "igt.h"
> > > #include "igt_sysfs.h"
> > > +#include "igt_drrs.h"
> > > #include "igt_psr.h"
> > >
> > > IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and "
> > > @@ -723,13 +724,6 @@ static void set_mode_for_params(struct modeset_params *params)
> > > igt_display_commit(&drm.display);
> > > }
> > >
> > > -static void __debugfs_read(const char *param, char *buf, int len)
> > > -{
> > > - len = igt_debugfs_simple_read(drm.debugfs, param, buf, len);
> > > - if (len < 0)
> > > - igt_assert(len == -ENOENT || len == -ENODEV);
> > > -}
> > > -
> > > static int __debugfs_write(const char *param, char *buf, int len)
> > > {
> > > return igt_sysfs_write(drm.debugfs, param, buf, len - 1);
> > > @@ -790,47 +784,11 @@ static void drrs_set(unsigned int val)
> > > igt_assert_f(ret == (sizeof(buf) - 1), "debugfs_write failed");
> > > }
> > >
> > > -static bool is_drrs_high(void)
> > > -{
> > > - char buf[MAX_DRRS_STATUS_BUF_LEN];
> > > -
> > > - debugfs_read("i915_drrs_status", buf);
> > > - return strstr(buf, "DRRS_HIGH_RR");
> > > -}
> > > -
> > > -static bool is_drrs_low(void)
> > > -{
> > > - char buf[MAX_DRRS_STATUS_BUF_LEN];
> > > -
> > > - debugfs_read("i915_drrs_status", buf);
> > > - return strstr(buf, "DRRS_LOW_RR");
> > > -}
> > > -
> > > -static bool is_drrs_supported(void)
> > > -{
> > > - char buf[MAX_DRRS_STATUS_BUF_LEN];
> > > -
> > > - debugfs_read("i915_drrs_status", buf);
> > > - return strcasestr(buf, "DRRS Supported: Yes");
> > > -}
> > > -
> > > -static bool is_drrs_inactive(void)
> > > -{
> > > - char buf[MAX_DRRS_STATUS_BUF_LEN];
> > > -
> > > - debugfs_read("i915_drrs_status", buf);
> > > -
> > > - if (strstr(buf, "DRRS_State: "))
> > > - return false;
> > > -
> > > - return true;
> > > -}
> > > -
> > > static void drrs_print_status(void)
> > > {
> > > char buf[MAX_DRRS_STATUS_BUF_LEN];
> > >
> > > - debugfs_read("i915_drrs_status", buf);
> > > + drrs_write_status(drm.debugfs, prim_mode_params.pipe, buf, sizeof(buf));
> > > igt_info("DRRS STATUS :\n%s\n", buf);
> > > }
> > >
> > > @@ -951,7 +909,7 @@ static bool fbc_wait_until_enabled(void)
> > >
> > > static bool drrs_wait_until_rr_switch_to_low(void)
> > > {
> > > - return igt_wait(is_drrs_low(), 5000, 1);
> > > + return igt_wait(drrs_is_low_refresh_rate(drm.debugfs, prim_mode_params.pipe), 5000, 1);
> > > }
> > >
> > > #define fbc_enable() igt_set_module_param_int(drm.fd, "enable_fbc", 1)
> > > @@ -1460,11 +1418,6 @@ static void setup_drrs(void)
> > > return;
> > > }
> > >
> > > - if (!is_drrs_supported()) {
> > > - igt_info("Can't test DRRS: Not supported.\n");
> > > - return;
> > > - }
> > > -
> > > drrs.can_test = true;
> > > }
> > >
> > > @@ -1607,7 +1560,7 @@ static void do_status_assertions(int flags)
> > > }
> > >
> > > if (flags & ASSERT_DRRS_HIGH) {
> > > - if (!is_drrs_high()) {
> > > + if (drrs_is_low_refresh_rate(drm.debugfs, prim_mode_params.pipe)) {
> > > drrs_print_status();
> > > igt_assert_f(false, "DRRS HIGH\n");
> > > }
> > > @@ -1617,7 +1570,7 @@ static void do_status_assertions(int flags)
> > > igt_assert_f(false, "DRRS LOW\n");
> > > }
> > > } else if (flags & ASSERT_DRRS_INACTIVE) {
> > > - if (!is_drrs_inactive()) {
> > > + if (drrs_is_active(drm.debugfs, prim_mode_params.pipe)) {
> > > drrs_print_status();
> > > igt_assert_f(false, "DRRS INACTIVE\n");
> > > }
> >
> > With how the DRRS state handling is moved to lib it's hard to read
> > from the patch series what actually changed in the kernel.
>
> This is now the output:
>
> gta at DUT4020-ADLP:~$ sudo more /sys/kernel/debug/dri/0/i915_drrs_status
> [CRTC:80:pipe A]:
> DRRS Enabled: no
> DRRS Active: no
> Busy_frontbuffer_bits: 0x0
> DRRS refresh rate: high
> [CRTC:131:pipe B]:
> DRRS Enabled: no
> DRRS Active: no
> Busy_frontbuffer_bits: 0x0
> DRRS refresh rate: high
> [CRTC:182:pipe C]:
> DRRS Enabled: no
> DRRS Active: no
> Busy_frontbuffer_bits: 0x0
> DRRS refresh rate: high
> [CRTC:233:pipe D]:
> DRRS Enabled: no
> DRRS Active: no
> Busy_frontbuffer_bits: 0x0
> DRRS refresh rate: high
>
> So completely different than the old one
>
> >
> > Does this now handle just the new semantics? Is the old one used in
> > any stable kernels?
>
> Semantics also have changed a bit, so stable kernels would be broken with the fix.
>
> What should be done here?
A fallback to parse the old format would be neat.
If the DRRS stuff is moved to a different path (per-crtc), can the old
path use old format (if exists) and new path use new format?
--
Petri Latvala
More information about the igt-dev
mailing list