All of lore.kernel.org
 help / color / mirror / Atom feed
From: Liviu Dudau <Liviu.Dudau@arm.com>
To: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Gustavo Padovan <gustavo@padovan.org>,
	Sean Paul <seanpaul@chromium.org>,
	Jonathan Corbet <corbet@lwn.net>,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	David Airlie <airlied@linux.ie>,
	Brian Starkey <brian.starkey@arm.com>,
	Alexandru-Cosmin Gheorghe <alexandru-cosmin.gheorghe@arm.com>,
	Eric Anholt <eric@anholt.net>,
	Boris Brezillon <boris.brezillon@bootlin.com>,
	Maxime Ripard <maxime.ripard@bootlin.com>,
	Daniel Stone <daniels@collabora.com>
Subject: Re: [PATCH v8 3/3] drm: writeback: Add client capability for exposing writeback connectors
Date: Wed, 23 May 2018 13:27:17 +0100	[thread overview]
Message-ID: <20180523122716.GF1582@e110455-lin.cambridge.arm.com> (raw)
In-Reply-To: <7d0201a9-8eed-f332-b6cb-241560cd05c4@linux.intel.com>

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.

> 
> 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.

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!  /
  ---------------
    ¯\_(ツ)_/¯

WARNING: multiple messages have this Message-ID (diff)
From: Liviu Dudau <Liviu.Dudau@arm.com>
To: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: 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: Wed, 23 May 2018 13:27:17 +0100	[thread overview]
Message-ID: <20180523122716.GF1582@e110455-lin.cambridge.arm.com> (raw)
In-Reply-To: <7d0201a9-8eed-f332-b6cb-241560cd05c4@linux.intel.com>

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.

> 
> 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.

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

  reply	other threads:[~2018-05-23 12:27 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 [this message]
2018-05-23 12:27       ` Liviu Dudau
2018-05-24  7:50       ` Daniel Vetter

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=20180523122716.GF1582@e110455-lin.cambridge.arm.com \
    --to=liviu.dudau@arm.com \
    --cc=airlied@linux.ie \
    --cc=alexandru-cosmin.gheorghe@arm.com \
    --cc=boris.brezillon@bootlin.com \
    --cc=brian.starkey@arm.com \
    --cc=corbet@lwn.net \
    --cc=daniels@collabora.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=eric@anholt.net \
    --cc=gustavo@padovan.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=maxime.ripard@bootlin.com \
    --cc=seanpaul@chromium.org \
    /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.