[igt-dev] [PATCH i-g-t 1/2] lib: Add DRRS helpers
Ville Syrjälä
ville.syrjala at linux.intel.com
Wed Apr 13 19:59:54 UTC 2022
On Tue, Apr 05, 2022 at 12:12:14PM -0700, José Roberto de Souza wrote:
> Due to recent refactors in i915, it completely changed
> i915_drrs_status breaking all DRRS tests in kms_frontbuffer_tracking
> so here adding DRRS helpers to a separate file so it can be used by
> kms_frontbuffer_tracking and any future tests.
>
> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Signed-off-by: José Roberto de Souza <jose.souza at intel.com>
> ---
> lib/igt_drrs.c | 151 ++++++++++++++++++++++++++++++++++++++++++++++++
> lib/igt_drrs.h | 31 ++++++++++
> lib/meson.build | 1 +
> 3 files changed, 183 insertions(+)
> create mode 100644 lib/igt_drrs.c
> create mode 100644 lib/igt_drrs.h
>
> diff --git a/lib/igt_drrs.c b/lib/igt_drrs.c
> new file mode 100644
> index 0000000000..8c424c32e3
> --- /dev/null
> +++ b/lib/igt_drrs.c
> @@ -0,0 +1,151 @@
> +/*
> + * Copyright © 2022 Intel Corporation
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> + * IN THE SOFTWARE.
> + */
> +
> +#include "drmtest.h"
> +#include "igt_drrs.h"
> +
> +#define DRRS_ENABLE_STR "DRRS Enabled: "
> +#define DRRS_ACTIVE_STR "DRRS Active: "
> +#define DRRS_REFRESH_RATE_STR "DRRS refresh rate: "
> +
> +struct drrs_status {
> + bool enabled;
> + bool active;
> + bool low_refresh_rate;
> +};
> +
> +static bool is_yes_or_no(char *ch)
> +{
> + return strncmp(ch, "yes", 3) == 0;
> +}
> +
> +static const char *yes_or_no(bool r)
> +{
> + return r ? "yes" : "no";
> +}
> +
> +static bool parse(int debugfs_fd, enum pipe pipe, struct drrs_status *status)
> +{
> + char buf[1024], search[16], *ch;
> + int ret;
> +
> + ret = igt_debugfs_simple_read(debugfs_fd, "i915_drrs_status", buf,
> + sizeof(buf));
> + if (ret < 0) {
> + igt_info("Could not read i915_drrs_status: %s\n",
> + strerror(-ret));
> + return false;
> + }
> +
> + snprintf(search, sizeof(search), ":pipe %s]:", kmstest_pipe_name(pipe));
We should probably just move DRRS over to per-crtc/connector
debugfs files. Would avoid nasty stuff like this.
> + ch = strstr(buf, search);
> + if (!ch)
> + return false;
> +
> + ch = strstr(buf, DRRS_ENABLE_STR);
> + if (!ch)
> + return false;
> + ch += sizeof(DRRS_ENABLE_STR);
> + status->enabled = is_yes_or_no(ch);
> +
> + ch = strstr(buf, DRRS_ACTIVE_STR);
> + if (!ch)
> + return false;
> + ch += sizeof(DRRS_ACTIVE_STR);
> + status->active = is_yes_or_no(ch);
> +
> + ch = strstr(buf, DRRS_REFRESH_RATE_STR);
> + if (!ch)
> + return false;
> + ch += sizeof(DRRS_REFRESH_RATE_STR);
> + status->low_refresh_rate = strncmp(ch, "low", 3) == 0;
> +
> + return true;
> +}
> +
> +bool drrs_is_enabled(int debugfs_fd, enum pipe pipe)
> +{
> + struct drrs_status status;
> + bool ret;
> +
> + ret = parse(debugfs_fd, pipe, &status);
> + if (!ret)
> + return false;
> +
> + return status.enabled;
> +}
> +
> +bool drrs_is_active(int debugfs_fd, enum pipe pipe)
> +{
> + struct drrs_status status;
> + bool ret;
> +
> + ret = parse(debugfs_fd, pipe, &status);
> + if (!ret)
> + return false;
> +
> + return status.active;
> +}
> +
> +bool drrs_is_low_refresh_rate(int debugfs_fd, enum pipe pipe)
> +{
> + struct drrs_status status;
> + bool ret;
> +
> + ret = parse(debugfs_fd, pipe, &status);
> + if (!ret)
> + return false;
> +
> + return status.low_refresh_rate;
> +}
> +
> +bool drrs_write_status(int debugfs_fd, enum pipe pipe, char *buf, int len)
> +{
> + struct drrs_status status;
> + int ret, used = 0;
> +
> + ret = parse(debugfs_fd, pipe, &status);
> + if (!ret)
> + return false;
> +
> + ret = snprintf(buf, len - used, DRRS_ENABLE_STR "%s\n",
> + yes_or_no(status.enabled));
> + if (ret < 0 || ret >= (len - used))
> + return false;
> + used += ret;
> + buf += ret;
> +
> + ret = snprintf(buf, len - used, DRRS_ACTIVE_STR "%s\n",
> + yes_or_no(status.active));
> + if (ret < 0 || ret >= (len - used))
> + return false;
> + used += ret;
> + buf += ret;
> +
> + ret = snprintf(buf, len - used, DRRS_REFRESH_RATE_STR "%s\n",
> + status.low_refresh_rate ? "low" : "high");
> + if (ret < 0 || ret >= (len - used))
> + return false;
> +
> + return true;
> +}
> \ No newline at end of file
> diff --git a/lib/igt_drrs.h b/lib/igt_drrs.h
> new file mode 100644
> index 0000000000..ff79fb20fb
> --- /dev/null
> +++ b/lib/igt_drrs.h
> @@ -0,0 +1,31 @@
> +/*
> + * Copyright © 2022 Intel Corporation
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> + * IN THE SOFTWARE.
> + */
> +
> +#pragma once
> +
> +#include "igt_kms.h"
> +
> +bool drrs_is_enabled(int debugfs_fd, enum pipe pipe);
> +bool drrs_is_active(int debugfs_fd, enum pipe pipe);
> +bool drrs_is_low_refresh_rate(int debugfs_fd, enum pipe pipe);
> +bool drrs_write_status(int debugfs_fd, enum pipe pipe, char *buf, int len);
> diff --git a/lib/meson.build b/lib/meson.build
> index ccee7a5965..3176b27813 100644
> --- a/lib/meson.build
> +++ b/lib/meson.build
> @@ -77,6 +77,7 @@ lib_sources = [
> 'igt_dummyload.c',
> 'igt_store.c',
> 'uwildmat/uwildmat.c',
> + 'igt_drrs.c',
> 'igt_kmod.c',
> 'igt_panfrost.c',
> 'igt_v3d.c',
> --
> 2.35.1
--
Ville Syrjälä
Intel
More information about the igt-dev
mailing list