From: Boris Brezillon <boris.brezillon@bootlin.com>
To: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
Eric Anholt <eric@anholt.net>, David Airlie <airlied@linux.ie>,
Maxime Ripard <maxime.ripard@bootlin.com>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: Re: [PATCH v2] drm/vc4: Add a debugfs entry to disable/enable the load tracker
Date: Fri, 30 Nov 2018 19:57:44 +0100 [thread overview]
Message-ID: <20181130195744.7502e9fe@bbrezillon> (raw)
In-Reply-To: <20181130161104.16352-1-paul.kocialkowski@bootlin.com>
On Fri, 30 Nov 2018 17:11:04 +0100
Paul Kocialkowski <paul.kocialkowski@bootlin.com> wrote:
> In order to test whether the load tracker is working as expected, we
> need the ability to compare the commit result with the underrun
> indication. With the load tracker always enabled, commits that are
> expected to trigger an underrun are always rejected, so userspace
> cannot get the actual underrun indication from the hardware.
>
> Add a debugfs entry to disable/enable the load tracker, so that a DRM
> commit expected to trigger an underrun can go through with the load
> tracker disabled. The underrun indication is then available to
> userspace and can be checked against the commit result with the load
> tracker enabled.
>
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
> ---
>
> Changes since v1:
> * Moved all the debugfs-related functions and structure to vc4_debugfs.c.
>
> drivers/gpu/drm/vc4/vc4_debugfs.c | 58 +++++++++++++++++++++++++++++++
> drivers/gpu/drm/vc4/vc4_drv.c | 2 ++
> drivers/gpu/drm/vc4/vc4_drv.h | 2 ++
> drivers/gpu/drm/vc4/vc4_kms.c | 6 +++-
> 4 files changed, 67 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/vc4/vc4_debugfs.c b/drivers/gpu/drm/vc4/vc4_debugfs.c
> index 7a0003de71ab..8f4d7fadb226 100644
> --- a/drivers/gpu/drm/vc4/vc4_debugfs.c
> +++ b/drivers/gpu/drm/vc4/vc4_debugfs.c
> @@ -32,9 +32,67 @@ static const struct drm_info_list vc4_debugfs_list[] = {
>
> #define VC4_DEBUGFS_ENTRIES ARRAY_SIZE(vc4_debugfs_list)
>
> +static int vc4_debugfs_load_tracker_get(struct seq_file *m, void *data)
> +{
> + struct drm_device *dev = m->private;
> + struct vc4_dev *vc4 = to_vc4_dev(dev);
> +
> + if (vc4->load_tracker_enabled)
> + seq_printf(m, "enabled\n");
> + else
> + seq_printf(m, "disabled\n");
> +
> + return 0;
> +}
> +
> +static ssize_t vc4_debugfs_load_tracker_set(struct file *file,
> + const char __user *ubuf,
> + size_t len, loff_t *offp)
> +{
> + struct seq_file *m = file->private_data;
> + struct drm_device *dev = m->private;
> + struct vc4_dev *vc4 = to_vc4_dev(dev);
> + char buf[32] = {};
> +
> + if (len >= sizeof(buf))
> + return -EINVAL;
> +
> + if (copy_from_user(buf, ubuf, len))
> + return -EFAULT;
> +
> + if (!strncasecmp(buf, "enable", 6))
> + vc4->load_tracker_enabled = true;
> + else if (!strncasecmp(buf, "disable", 7))
> + vc4->load_tracker_enabled = false;
> + else
> + return -EINVAL;
> +
> + return len;
> +}
> +
> +static int vc4_debugfs_load_tracker_open(struct inode *inode, struct file *file)
> +{
> + return single_open(file, vc4_debugfs_load_tracker_get, inode->i_private);
> +}
> +
> +static const struct file_operations vc4_debugfs_load_tracker_fops = {
> + .owner = THIS_MODULE,
> + .open = vc4_debugfs_load_tracker_open,
> + .read = seq_read,
> + .write = vc4_debugfs_load_tracker_set,
> +};
> +
> int
> vc4_debugfs_init(struct drm_minor *minor)
> {
> + struct dentry *dentry;
> +
> + dentry = debugfs_create_file("load_tracker", S_IRUGO | S_IWUSR,
> + minor->debugfs_root, minor->dev,
> + &vc4_debugfs_load_tracker_fops);
> + if (!dentry)
> + return -ENOMEM;
Hm, maybe you could use debugfs_create_bool() instead of
re-implementing it. The values won't be enabled/disabled though
(IIRC, it's Y or N).
> +
> return drm_debugfs_create_files(vc4_debugfs_list, VC4_DEBUGFS_ENTRIES,
> minor->debugfs_root, minor);
> }
> diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c
> index 7195a0bcceb3..12ac971d24d6 100644
> --- a/drivers/gpu/drm/vc4/vc4_drv.c
> +++ b/drivers/gpu/drm/vc4/vc4_drv.c
> @@ -290,6 +290,8 @@ static int vc4_drm_bind(struct device *dev)
>
> drm_fbdev_generic_setup(drm, 32);
>
> + vc4->load_tracker_enabled = true;
> +
> return 0;
>
> unbind_all:
> diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h
> index 11369da944b6..8d0f2f16a9e8 100644
> --- a/drivers/gpu/drm/vc4/vc4_drv.h
> +++ b/drivers/gpu/drm/vc4/vc4_drv.h
> @@ -188,6 +188,8 @@ struct vc4_dev {
>
> int power_refcount;
>
> + bool load_tracker_enabled;
> +
> /* Mutex controlling the power refcount. */
> struct mutex power_lock;
>
> diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c
> index b905a19c1470..4b2509b1b8ed 100644
> --- a/drivers/gpu/drm/vc4/vc4_kms.c
> +++ b/drivers/gpu/drm/vc4/vc4_kms.c
> @@ -473,6 +473,7 @@ static const struct drm_private_state_funcs vc4_load_tracker_state_funcs = {
> static int
> vc4_atomic_check(struct drm_device *dev, struct drm_atomic_state *state)
> {
> + struct vc4_dev *vc4 = to_vc4_dev(dev);
> int ret;
>
> ret = vc4_ctm_atomic_check(dev, state);
> @@ -483,7 +484,10 @@ vc4_atomic_check(struct drm_device *dev, struct drm_atomic_state *state)
> if (ret)
> return ret;
>
> - return vc4_load_tracker_atomic_check(state);
> + if (vc4->load_tracker_enabled)
> + return vc4_load_tracker_atomic_check(state);
> +
> + return 0;
> }
>
> static const struct drm_mode_config_funcs vc4_mode_funcs = {
next prev parent reply other threads:[~2018-11-30 18:57 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-30 16:11 [PATCH v2] drm/vc4: Add a debugfs entry to disable/enable the load tracker Paul Kocialkowski
2018-11-30 16:11 ` Paul Kocialkowski
2018-11-30 18:57 ` Boris Brezillon [this message]
2018-12-01 9:59 ` Paul Kocialkowski
2018-11-30 20:30 ` Eric Anholt
2018-11-30 20:30 ` Eric Anholt
2018-12-01 9:58 ` Paul Kocialkowski
2018-12-02 7:14 ` Boris Brezillon
2018-12-02 7:14 ` Boris Brezillon
2018-12-03 15:54 ` Eric Anholt
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=20181130195744.7502e9fe@bbrezillon \
--to=boris.brezillon@bootlin.com \
--cc=airlied@linux.ie \
--cc=dri-devel@lists.freedesktop.org \
--cc=eric@anholt.net \
--cc=linux-kernel@vger.kernel.org \
--cc=maxime.ripard@bootlin.com \
--cc=paul.kocialkowski@bootlin.com \
--cc=thomas.petazzoni@bootlin.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.