From: "Souza, Jose" <jose.souza@intel.com>
To: "igt-dev@lists.freedesktop.org" <igt-dev@lists.freedesktop.org>,
"maarten.lankhorst@linux.intel.com"
<maarten.lankhorst@linux.intel.com>
Subject: Re: [igt-dev] [PATCH i-g-t v5 1/4] lib/psr: Add support for toggling edp psr through debugfs, v5.
Date: Tue, 4 Sep 2018 21:41:21 +0000 [thread overview]
Message-ID: <15a80c0cf8f7832a6dae469c0a4e9dbe2117fc24.camel@intel.com> (raw)
In-Reply-To: <20180817085642.19501-1-maarten.lankhorst@linux.intel.com>
On Fri, 2018-08-17 at 10:56 +0200, Maarten Lankhorst wrote:
> It's harmful to write to enable_psr at runtime, and the patch that
> allows
> us to change i915_edp_psr_debug with the panel running will require
> us
> to abandon the module parameter. Hence the userspace change needs to
> be
> put in IGT first before we can change it at kernel time.
>
> Toggling it to debugfs will mean we can skip a modeset when changing
> our
> feature set.
>
> Changes since v1:
> - Rebase with the previous patches dropped.
> Changes since v2:
> - Rebase on top of new api in i915_edp_psr_debug.
> Changes since v3:
> - Enable IRQ debugging for extra logging.
> - Force PSR1 mode. (dhnkrn)
> - Move PSR enable/disable functions to lib/igt_psr. (dhnkrn)
> Changes since v4:
> - Redisable irqs right away when debugfs api doesn't work. (dhnkrn)
> - Use hex everywhere. (dhnkrn)
>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
> lib/igt_psr.c | 86
> +++++++++++++++++++++++++++++++-
> lib/igt_psr.h | 2 +
> tests/kms_frontbuffer_tracking.c | 6 +--
> 3 files changed, 89 insertions(+), 5 deletions(-)
>
> diff --git a/lib/igt_psr.c b/lib/igt_psr.c
> index c979b0b59936..614caa6fd809 100644
> --- a/lib/igt_psr.c
> +++ b/lib/igt_psr.c
> @@ -21,7 +21,9 @@
> * IN THE SOFTWARE.
> */
>
> -#include "igt_psr.h"
> +#include "igt_psr.h"
> +#include "igt_sysfs.h"
> +#include <errno.h>
>
> bool psr_active(int fd, bool check_active)
> {
> @@ -38,3 +40,85 @@ bool psr_wait_entry(int fd)
> {
> return igt_wait(psr_active(fd, true), 500, 1);
> }
> +
> +static ssize_t psr_write(int fd, const char *buf)
> +{
> + return igt_sysfs_write(fd, "i915_edp_psr_debug", buf,
> strlen(buf));
> +}
> +
> +static int has_psr_debugfs(int fd)
> +{
> + int ret;
> +
> + /*
> + * Check if new PSR debugfs api is usable by writing an invalid
> value.
> + * Legacy mode will return OK here, debugfs api will return
> -EINVAL.
> + * -ENODEV is returned.
> + */
> + ret = psr_write(fd, "0xf");
> + if (ret == -EINVAL)
> + return 0;
> + else if (ret < 0)
> + return ret;
> +
> + /* legacy debugfs api, we enabled irqs by writing, disable
> them. */
> + psr_write(fd, "0");
> + return -EINVAL;
> +}
> +
> +static bool psr_modparam_set(int val)
> +{
> + static int oldval = -1;
This looks wrong, why not read the module parameter? it will guaratee
that the returned value is correct here if something else left the
parameter with another value.
> +
> + igt_set_module_param_int("enable_psr", val);
> +
> + if (val == oldval)
> + return false;
> +
> + oldval = val;
> + return true;
> +}
> +
> +static int psr_restore_debugfs_fd = -1;
Maybe move this to the top of the file.
Other than that LGTM.
> +
> +static void restore_psr_debugfs(int sig)
> +{
> + psr_write(psr_restore_debugfs_fd, "0");
> +}
> +
> +static bool psr_set(int fd, bool enable)
> +{
> + int ret;
> +
> + ret = has_psr_debugfs(fd);
> + if (ret == -ENODEV) {
> + igt_skip_on_f(enable, "PSR not available\n");
> + return false;
> + }
> +
> + if (ret == -EINVAL) {
> + ret = psr_modparam_set(enable);
> + } else {
> + ret = psr_write(fd, enable ? "0x3" : "0x1");
> + igt_assert(ret > 0);
> + }
> +
> + /* Restore original value on exit */
> + if (psr_restore_debugfs_fd == -1) {
> + psr_restore_debugfs_fd = dup(fd);
> + igt_assert(psr_restore_debugfs_fd >= 0);
> + igt_install_exit_handler(restore_psr_debugfs);
> + }
> +
> + return ret;
> +}
> +
> +bool psr_enable(int fd)
> +{
> + return psr_set(fd, true);
> +}
> +
> +bool psr_disable(int fd)
> +{
> + return psr_set(fd, false);
> +}
> diff --git a/lib/igt_psr.h b/lib/igt_psr.h
> index 980f85e04b3e..0ef22c3d1258 100644
> --- a/lib/igt_psr.h
> +++ b/lib/igt_psr.h
> @@ -30,5 +30,7 @@
>
> bool psr_wait_entry(int fd);
> bool psr_active(int fd, bool check_active);
> +bool psr_enable(int fd);
> +bool psr_disable(int fd);
>
> #endif
> diff --git a/tests/kms_frontbuffer_tracking.c
> b/tests/kms_frontbuffer_tracking.c
> index 1dfd7c1cee8d..7ea2f697184d 100644
> --- a/tests/kms_frontbuffer_tracking.c
> +++ b/tests/kms_frontbuffer_tracking.c
> @@ -941,8 +941,6 @@ static bool
> drrs_wait_until_rr_switch_to_low(void)
>
> #define fbc_enable() igt_set_module_param_int("enable_fbc", 1)
> #define fbc_disable() igt_set_module_param_int("enable_fbc", 0)
> -#define psr_enable() igt_set_module_param_int("enable_psr", 1)
> -#define psr_disable() igt_set_module_param_int("enable_psr", 0)
> #define drrs_enable() drrs_set(1)
> #define drrs_disable() drrs_set(0)
>
> @@ -1137,7 +1135,7 @@ static void disable_features(const struct
> test_mode *t)
> return;
>
> fbc_disable();
> - psr_disable();
> + psr_disable(drm.debugfs);
> drrs_disable();
> }
>
> @@ -1719,7 +1717,7 @@ static void enable_features_for_test(const
> struct test_mode *t)
> if (t->feature & FEATURE_FBC)
> fbc_enable();
> if (t->feature & FEATURE_PSR)
> - psr_enable();
> + psr_enable(drm.debugfs);
> if (t->feature & FEATURE_DRRS)
> drrs_enable();
> }
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
prev parent reply other threads:[~2018-09-04 21:41 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-17 8:56 [igt-dev] [PATCH i-g-t v5 1/4] lib/psr: Add support for toggling edp psr through debugfs, v5 Maarten Lankhorst
2018-08-17 8:56 ` [igt-dev] [PATCH i-g-t v5 2/4] tests/kms_frontbuffer_tracking: Attempt to enable both screens simultaneously Maarten Lankhorst
2018-08-17 8:56 ` [igt-dev] [PATCH i-g-t v5 3/4] tests/kms_frontbuffer_tracking: Remove redundant modesets for toggling features, v5 Maarten Lankhorst
2018-08-17 8:56 ` [igt-dev] [PATCH i-g-t v5 4/4] tests/kms_frontbuffer_tracking: Don't unset mode after reading CRC Maarten Lankhorst
2018-08-18 0:04 ` Dhinakaran Pandiyan
2018-08-22 10:17 ` Maarten Lankhorst
2018-08-30 2:02 ` Dhinakaran Pandiyan
2018-08-30 9:12 ` Maarten Lankhorst
2018-08-17 11:04 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,v5,1/4] lib/psr: Add support for toggling edp psr through debugfs, v5 Patchwork
2018-08-17 14:31 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2018-08-18 0:02 ` [igt-dev] [PATCH i-g-t v5 1/4] " Dhinakaran Pandiyan
2018-09-04 21:41 ` Souza, Jose [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=15a80c0cf8f7832a6dae469c0a4e9dbe2117fc24.camel@intel.com \
--to=jose.souza@intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=maarten.lankhorst@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).