From: Daniel Vetter <daniel@ffwll.ch>
To: Liviu Dudau <Liviu.Dudau@arm.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <maxime.ripard@bootlin.com>,
Daniel Stone <daniels@collabora.com>,
Jonathan Corbet <corbet@lwn.net>, David Airlie <airlied@linux.ie>,
Boris Brezillon <boris.brezillon@bootlin.com>,
Alexandru-Cosmin Gheorghe <alexandru-cosmin.gheorghe@arm.com>,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v8 3/3] drm: writeback: Add client capability for exposing writeback connectors
Date: Thu, 24 May 2018 09:50:20 +0200 [thread overview]
Message-ID: <20180524075020.GZ3438@phenom.ffwll.local> (raw)
In-Reply-To: <20180523122716.GF1582@e110455-lin.cambridge.arm.com>
On Wed, May 23, 2018 at 01:27:17PM +0100, Liviu Dudau wrote:
> On Wed, May 23, 2018 at 11:34:32AM +0200, Maarten Lankhorst wrote:
> > Op 18-05-18 om 17:17 schreef Liviu Dudau:
> > > Due to the fact that writeback connectors behave in a special way
> > > in DRM (they always report being disconnected) we might confuse some
> > > userspace. Add a client capability for writeback connectors that will
> > > filter them out for clients that don't understand the capability.
> > >
> > > Re-requested-by: Sean Paul <seanpaul@chromium.org>
> > > Cc: Brian Starkey <brian.starkey@arm.com>
> > > Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
> > > ---
> > > drivers/gpu/drm/drm_ioctl.c | 7 +++++++
> > > drivers/gpu/drm/drm_mode_config.c | 5 +++++
> > > include/drm/drm_file.h | 7 +++++++
> > > include/uapi/drm/drm.h | 9 +++++++++
> > > 4 files changed, 28 insertions(+)
> > >
> > > diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
> > > index af782911c505d..59951ff3e3630 100644
> > > --- a/drivers/gpu/drm/drm_ioctl.c
> > > +++ b/drivers/gpu/drm/drm_ioctl.c
> > > @@ -325,6 +325,13 @@ drm_setclientcap(struct drm_device *dev, void *data, struct drm_file *file_priv)
> > > file_priv->atomic = req->value;
> > > file_priv->universal_planes = req->value;
> > > break;
> > > + case DRM_CLIENT_CAP_WRITEBACK_CONNECTORS:
> > > + if (!file_priv->atomic || !drm_core_check_feature(dev, DRIVER_ATOMIC))
> > > + return -EINVAL;
> > Wondering how you can set the atomic cap without DRIVER_ATOMIC. :)
>
> Caps can only be set one at a time. I was trying to cater for the cases
> where userspace can set the WRITEBACK_CONNECTORS client cap before or
> after setting the atomic cap.
The way we usually solve this is that if there's a dependency in caps, we
set them all. E.g. atomic above also sets universal planes. I recommend we
do the same for writeback.
> > That part could be dropped I think. We should probably WARN when trying to create a writeback connector without the DRIVER_ATOMIC cap set.
>
> I could still keep the check for file_priv->atomic being set when
> accepting the DRM_CLIENT_CAP_WRITEBACK_CONNECTORS and would not need a
> warn.
Or this.
-Daniel
>
> Best regards,
> Liviu
>
> > > + if (req->value > 1)
> > > + return -EINVAL;
> > > + file_priv->writeback_connectors = req->value;
> > > + break;
> > > default:
> > > return -EINVAL;
> > > }
> > > diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> > > index e5c653357024d..21e353bd3948e 100644
> > > --- a/drivers/gpu/drm/drm_mode_config.c
> > > +++ b/drivers/gpu/drm/drm_mode_config.c
> > > @@ -145,6 +145,11 @@ int drm_mode_getresources(struct drm_device *dev, void *data,
> > > count = 0;
> > > connector_id = u64_to_user_ptr(card_res->connector_id_ptr);
> > > drm_for_each_connector_iter(connector, &conn_iter) {
> > > + /* only expose writeback connectors if userspace understands them */
> > > + if (!file_priv->writeback_connectors &&
> > > + (connector->connector_type == DRM_MODE_CONNECTOR_WRITEBACK))
> > > + continue;
> > > +
> > > if (drm_lease_held(file_priv, connector->base.id)) {
> > > if (count < card_res->count_connectors &&
> > > put_user(connector->base.id, connector_id + count)) {
> > > diff --git a/include/drm/drm_file.h b/include/drm/drm_file.h
> > > index 5176c3797680c..2a09b3c8965c6 100644
> > > --- a/include/drm/drm_file.h
> > > +++ b/include/drm/drm_file.h
> > > @@ -181,6 +181,13 @@ struct drm_file {
> > > /** @atomic: True if client understands atomic properties. */
> > > unsigned atomic:1;
> > >
> > > + /**
> > > + * @writeback_connectors:
> > > + *
> > > + * True if client understands writeback connectors
> > > + */
> > > + unsigned writeback_connectors:1;
> > > +
> > > /**
> > > * @is_master:
> > > *
> > > diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h
> > > index 6fdff5945c8a0..59f27ea928b42 100644
> > > --- a/include/uapi/drm/drm.h
> > > +++ b/include/uapi/drm/drm.h
> > > @@ -680,6 +680,15 @@ struct drm_get_cap {
> > > */
> > > #define DRM_CLIENT_CAP_ATOMIC 3
> > >
> > > +/**
> > > + * DRM_CLIENT_CAP_WRITEBACK_CONNECTORS
> > > + *
> > > + * If set to 1, the DRM core will expose special connectors to be used for
> > > + * writing back to memory the scene setup in the commit. Depends on client
> > > + * also supporting DRM_CLIENT_CAP_ATOMIC
> > > + */
> > > +#define DRM_CLIENT_CAP_WRITEBACK_CONNECTORS 4
> > > +
> > > /** DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */
> > > struct drm_set_client_cap {
> > > __u64 capability;
> >
> > ~Maarten
> >
>
> --
> ====================
> | I would like to |
> | fix the world, |
> | but they're not |
> | giving me the |
> \ source code! /
> ---------------
> ¯\_(ツ)_/¯
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
prev parent reply other threads:[~2018-05-24 7:50 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-18 15:17 [PATCH v8 0/3] drm: Introduce writeback connectors Liviu Dudau
2018-05-18 15:17 ` Liviu Dudau
2018-05-18 15:17 ` [PATCH v8 1/3] drm: Add writeback connector type Liviu Dudau
2018-05-18 15:17 ` Liviu Dudau
2018-05-18 15:17 ` [PATCH v8 2/3] drm: writeback: Add out-fences for writeback connectors Liviu Dudau
2018-05-18 15:17 ` Liviu Dudau
2018-05-21 19:02 ` Eric Anholt
2018-05-21 19:02 ` Eric Anholt
2018-05-22 16:35 ` Liviu Dudau
2018-05-22 16:35 ` Liviu Dudau
2018-05-18 15:17 ` [PATCH v8 3/3] drm: writeback: Add client capability for exposing " Liviu Dudau
2018-05-18 15:17 ` Liviu Dudau
2018-05-23 9:34 ` Maarten Lankhorst
2018-05-23 9:34 ` Maarten Lankhorst
2018-05-23 12:27 ` Liviu Dudau
2018-05-23 12:27 ` Liviu Dudau
2018-05-24 7:50 ` Daniel Vetter [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=20180524075020.GZ3438@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=Liviu.Dudau@arm.com \
--cc=airlied@linux.ie \
--cc=alexandru-cosmin.gheorghe@arm.com \
--cc=boris.brezillon@bootlin.com \
--cc=corbet@lwn.net \
--cc=daniels@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=maxime.ripard@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.