All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Cc: nicolai.haehnle@amd.com, michel@daenzer.net,
	amd-gfx@lists.freedesktop.org, Christian.Koenig@amd.com,
	manasi.d.navare@intel.com, dri-devel@lists.freedesktop.org,
	Alexander.Deucher@amd.com, Marek.Olsak@amd.com
Subject: Re: [PATCH v2 1/3] drm: Add variable refresh rate properties to connector
Date: Mon, 24 Sep 2018 21:32:11 +0300	[thread overview]
Message-ID: <20180924183211.GW5565@intel.com> (raw)
In-Reply-To: <20180924181537.12092-2-nicholas.kazlauskas@amd.com>

On Mon, Sep 24, 2018 at 02:15:35PM -0400, Nicholas Kazlauskas wrote:
> Modern display hardware is capable of supporting variable refresh rates
> and adaptive sync technologies. The properties for querying and
> controlling these features should be exposed on the DRM connector.
> 
> This patch introduces two new properties for variable refresh rate
> support:
> 
> - variable_refresh_capable
> - variable_refresh_enabled
> 
> These are optional properties that can be added to a DRM connector
> dynamically by using drm_connector_attach_variable_refresh_properties.
> 
> DRM drivers should set variable_refresh_capable as applicable for
> their hardware. The property variable_refresh_enabled is a userspace
> controlled option.
> 
> Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
> ---
>  drivers/gpu/drm/drm_atomic_uapi.c |  6 ++++++
>  drivers/gpu/drm/drm_connector.c   | 35 +++++++++++++++++++++++++++++++
>  include/drm/drm_connector.h       | 27 ++++++++++++++++++++++++
>  3 files changed, 68 insertions(+)
> 
> diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
> index d5b7f315098c..0bb27a24a55c 100644
> --- a/drivers/gpu/drm/drm_atomic_uapi.c
> +++ b/drivers/gpu/drm/drm_atomic_uapi.c
> @@ -723,6 +723,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector,
>  		state->content_type = val;
>  	} else if (property == connector->scaling_mode_property) {
>  		state->scaling_mode = val;
> +	} else if (property == connector->variable_refresh_enabled_property) {
> +		state->variable_refresh_enabled = val;
>  	} else if (property == connector->content_protection_property) {
>  		if (val == DRM_MODE_CONTENT_PROTECTION_ENABLED) {
>  			DRM_DEBUG_KMS("only drivers can set CP Enabled\n");
> @@ -797,6 +799,10 @@ drm_atomic_connector_get_property(struct drm_connector *connector,
>  		*val = state->content_type;
>  	} else if (property == connector->scaling_mode_property) {
>  		*val = state->scaling_mode;
> +	} else if (property == connector->variable_refresh_capable_property) {
> +		*val = state->variable_refresh_capable;

Immutable props don't take this path. See
__drm_object_property_get_value().

> +	} else if (property == connector->variable_refresh_enabled_property) {
> +		*val = state->variable_refresh_enabled;
>  	} else if (property == connector->content_protection_property) {
>  		*val = state->content_protection;
>  	} else if (property == config->writeback_fb_id_property) {
> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> index 1e40e5decbe9..fc1732639bd3 100644
> --- a/drivers/gpu/drm/drm_connector.c
> +++ b/drivers/gpu/drm/drm_connector.c
> @@ -1254,6 +1254,41 @@ int drm_mode_create_scaling_mode_property(struct drm_device *dev)
>  }
>  EXPORT_SYMBOL(drm_mode_create_scaling_mode_property);
>  
> +/**
> + * drm_connector_attach_variable_refresh_properties - creates and attaches
> + * properties for connectors that support adaptive refresh
> + * @connector: connector to create adaptive refresh properties on
> + */
> +int drm_connector_attach_variable_refresh_properties(
> +	struct drm_connector *connector)
> +{
> +	struct drm_device *dev = connector->dev;
> +	struct drm_property *prop;
> +
> +	if (!connector->variable_refresh_capable_property) {
> +		prop = drm_property_create_bool(dev, DRM_MODE_PROP_IMMUTABLE,
> +			"variable_refresh_capable");
> +		if (!prop)
> +			return -ENOMEM;
> +
> +		connector->variable_refresh_capable_property = prop;
> +		drm_object_attach_property(&connector->base, prop, 0);
> +	}
> +
> +	if (!connector->variable_refresh_enabled_property) {
> +		prop = drm_property_create_bool(dev, 0,
> +			"variable_refresh_enabled");
> +		if (!prop)
> +			return -ENOMEM;
> +
> +		connector->variable_refresh_enabled_property = prop;
> +		drm_object_attach_property(&connector->base, prop, 0);
> +	}
> +
> +	return 0;
> +}
> +EXPORT_SYMBOL(drm_connector_attach_variable_refresh_properties);
> +
>  /**
>   * drm_connector_attach_scaling_mode_property - attach atomic scaling mode property
>   * @connector: connector to attach scaling mode property on.
> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
> index 91a877fa00cb..e2c26842bd50 100644
> --- a/include/drm/drm_connector.h
> +++ b/include/drm/drm_connector.h
> @@ -449,6 +449,18 @@ struct drm_connector_state {
>  	 */
>  	unsigned int content_protection;
>  
> +	/**
> +	 * @variable_refresh_enabled: Connector property used to check
> +	 * if variable refresh is supported on the device.
> +	 */
> +	bool variable_refresh_capable;
> +
> +	/**
> +	 * @variable_refresh_enabled: Connector property used to check
> +	 * if variable refresh is enabled.
> +	 */
> +	bool variable_refresh_enabled;
> +
>  	/**
>  	 * @writeback_job: Writeback job for writeback connectors
>  	 *
> @@ -910,6 +922,19 @@ struct drm_connector {
>  	 */
>  	struct drm_property *scaling_mode_property;
>  
> +	/**
> +	 * @variable_refresh_capable_property: Optional property for
> +	 * querying hardware support for variable refresh.
> +	 */
> +	struct drm_property *variable_refresh_capable_property;
> +
> +	/**
> +	 * @variable_refresh_enabled_property: Optional property for
> +	 * enabling or disabling support for variable refresh
> +	 * on the connector.
> +	 */
> +	struct drm_property *variable_refresh_enabled_property;
> +
>  	/**
>  	 * @content_protection_property: DRM ENUM property for content
>  	 * protection. See drm_connector_attach_content_protection_property().
> @@ -1183,6 +1208,8 @@ int drm_mode_create_scaling_mode_property(struct drm_device *dev);
>  int drm_connector_attach_content_type_property(struct drm_connector *dev);
>  int drm_connector_attach_scaling_mode_property(struct drm_connector *connector,
>  					       u32 scaling_mode_mask);
> +int drm_connector_attach_variable_refresh_properties(
> +	struct drm_connector *connector);
>  int drm_connector_attach_content_protection_property(
>  		struct drm_connector *connector);
>  int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
> -- 
> 2.19.0

-- 
Ville Syrjälä
Intel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2018-09-24 18:32 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-24 18:15 [PATCH v2 0/3] A DRM API for adaptive sync and variable refresh rate support Nicholas Kazlauskas
     [not found] ` <20180924181537.12092-1-nicholas.kazlauskas-5C7GfCeVMHo@public.gmane.org>
2018-09-24 18:15   ` [PATCH v2 1/3] drm: Add variable refresh rate properties to connector Nicholas Kazlauskas
2018-09-24 18:32     ` Ville Syrjälä [this message]
2018-10-01  7:05       ` Daniel Vetter
2018-09-24 18:15   ` [PATCH v2 3/3] drm/amd/display: Set FreeSync state using DRM VRR properties Nicholas Kazlauskas
2018-09-24 18:15 ` [PATCH v2 2/3] drm: Add variable refresh property to DRM CRTC Nicholas Kazlauskas
2018-09-24 18:38   ` Ville Syrjälä
2018-09-24 19:06     ` Kazlauskas, Nicholas
     [not found]       ` <4aa1583c-2be0-8cec-2857-6c3e489965b4-5C7GfCeVMHo@public.gmane.org>
2018-09-24 20:26         ` Ville Syrjälä
     [not found]           ` <20180924202655.GA9144-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2018-09-25 13:28             ` Michel Dänzer
     [not found]               ` <2158aa72-9156-5592-822a-c815f373fd53-otUistvHUpPR7s880joybQ@public.gmane.org>
2018-09-25 14:04                 ` Ville Syrjälä
     [not found]                   ` <20180925140433.GH9144-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2018-09-25 14:35                     ` Michel Dänzer
2018-09-25 15:28                       ` Ville Syrjälä
     [not found]                         ` <20180925152817.GK9144-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2018-10-01  7:10                           ` Daniel Vetter
2018-09-25 13:51             ` Kazlauskas, Nicholas
2018-10-05  8:10               ` Pekka Paalanen
2018-10-05 16:21                 ` Kazlauskas, Nicholas
     [not found]                   ` <fdc195dd-9650-8194-3a16-393f61bb2eee-5C7GfCeVMHo@public.gmane.org>
2018-10-05 16:56                     ` Michel Dänzer
2018-10-05 17:48                       ` Kazlauskas, Nicholas
2018-10-08 10:57                         ` Michel Dänzer
2018-10-10  7:14                     ` Pekka Paalanen
2018-10-10 13:35                       ` Kazlauskas, Nicholas
     [not found]                         ` <3bb5e05d-f7e6-8e44-cfae-202191d64245-5C7GfCeVMHo@public.gmane.org>
2018-10-12  7:23                           ` Pekka Paalanen
2018-10-12  7:35                             ` Koenig, Christian
     [not found]                               ` <894d12d3-aa0b-c0f6-6347-7d13e58e651a-5C7GfCeVMHo@public.gmane.org>
2018-10-12  9:21                                 ` Pekka Paalanen
2018-10-12 11:20                                   ` Koenig, Christian
2018-10-12 12:58                                     ` Kazlauskas, Nicholas
2018-10-15 13:57                                       ` Pekka Paalanen
2018-10-15 16:02                                         ` Kazlauskas, Nicholas
     [not found]                                           ` <52103366-510d-15a6-61d2-26196a4f0e57-5C7GfCeVMHo@public.gmane.org>
2018-10-16  7:36                                             ` Pekka Paalanen
2018-10-01  7:15 ` [PATCH v2 0/3] A DRM API for adaptive sync and variable refresh rate support Daniel Vetter
2018-10-02 14:49   ` Harry Wentland
2018-10-03  8:41     ` Daniel Vetter
     [not found]       ` <20181003084120.GP11082-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
2018-10-03 18:35         ` Manasi Navare
2018-10-11 19:37           ` Harry Wentland
2018-10-11 19:41         ` Harry Wentland
2018-10-03  8:25   ` Mike Lothian
     [not found]     ` <CAHbf0-HhjG2xc1sAjHBR=Ep11LzumO6tdyzBcKSZ8h82H28Zbg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-10-11 19:44       ` Harry Wentland
2018-10-12  8:26         ` Michel Dänzer
     [not found]           ` <ac5b5865-6bb0-08e8-d83c-26893e75b11e-otUistvHUpPR7s880joybQ@public.gmane.org>
2018-10-12  8:31             ` Koenig, Christian
     [not found]               ` <84c4a243-ca2c-49a7-9e2c-22666292aea9-5C7GfCeVMHo@public.gmane.org>
2018-10-25 17:57                 ` Wentland, Harry
     [not found]                   ` <1c3d19a7-3afa-6de5-59e0-37a19d73848b-5C7GfCeVMHo@public.gmane.org>
2018-10-26  9:33                     ` Michel Dänzer

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=20180924183211.GW5565@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=Alexander.Deucher@amd.com \
    --cc=Christian.Koenig@amd.com \
    --cc=Marek.Olsak@amd.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=manasi.d.navare@intel.com \
    --cc=michel@daenzer.net \
    --cc=nicholas.kazlauskas@amd.com \
    --cc=nicolai.haehnle@amd.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.