Re: [RFC 5/5] drm: Do not expose HDMI 2.0+ modes to userspace/drivers unless asked to

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Mar 22, 2017 at 05:36:01PM +0000, Jose Abreu wrote:
> Perform sanity checks so that HDMI 2.0+ modes are not exported to
> drivers or userspace unless asked to.

Why? They're just normal modes, this doesn't make sense. If you want to
filter the aspect ratio stuff, that makes sense, but exposing the modes
with default aspect ratio by default should be doable.

I'm also not sure how exactly this is supposed to interact with the
partially reverted aspect ratio filtering from Shashank. I guess what you
really want is the feature flag for exposing aspect ratio, and then filter
accordingly.
-Daniel
> 
> Signed-off-by: Jose Abreu <joabreu@xxxxxxxxxxxx>
> Cc: Carlos Palminha <palminha@xxxxxxxxxxxx>
> Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx
> ---
>  drivers/gpu/drm/drm_connector.c    |  2 ++
>  drivers/gpu/drm/drm_probe_helper.c |  9 ++++++++-
>  include/drm/drm_modes.h            | 14 ++++++++++++++
>  3 files changed, 24 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> index 9f84761..430bb2b 100644
> --- a/drivers/gpu/drm/drm_connector.c
> +++ b/drivers/gpu/drm/drm_connector.c
> @@ -1200,6 +1200,8 @@ static bool drm_mode_expose_to_userspace(const struct drm_display_mode *mode,
>  	 */
>  	if (!file_priv->stereo_allowed && drm_mode_is_stereo(mode))
>  		return false;
> +	if (!file_priv->hdmi2_allowed && drm_mode_is_hdmi2(mode))
> +		return false;
>  
>  	return true;
>  }
> diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c
> index 85005d5..ddacb5d 100644
> --- a/drivers/gpu/drm/drm_probe_helper.c
> +++ b/drivers/gpu/drm/drm_probe_helper.c
> @@ -77,6 +77,10 @@
>  	    !(flags & DRM_MODE_FLAG_3D_MASK))
>  		return MODE_NO_STEREO;
>  
> +	if ((mode->flags & DRM_MODE_FLAG_HDMI2) &&
> +	    !(flags & DRM_MODE_FLAG_HDMI2))
> +		return MODE_NO_HDMI2;
> +
>  	return MODE_OK;
>  }
>  
> @@ -221,7 +225,8 @@ void drm_kms_helper_poll_enable(struct drm_device *dev)
>   *    - drm_mode_validate_size() filters out modes larger than @maxX and @maxY
>   *      (if specified)
>   *    - drm_mode_validate_flag() checks the modes against basic connector
> - *      capabilities (interlace_allowed,doublescan_allowed,stereo_allowed)
> + *      capabilities (interlace_allowed,doublescan_allowed,stereo_allowed,
> + *      hdmi2_allowed)
>   *    - the optional &drm_connector_helper_funcs.mode_valid helper can perform
>   *      driver and/or hardware specific checks
>   *
> @@ -336,6 +341,8 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
>  		mode_flags |= DRM_MODE_FLAG_DBLSCAN;
>  	if (connector->stereo_allowed)
>  		mode_flags |= DRM_MODE_FLAG_3D_MASK;
> +	if (connector->hdmi2_allowed)
> +		mode_flags |= DRM_MODE_FLAG_HDMI2;
>  
>  	list_for_each_entry(mode, &connector->modes, head) {
>  		if (mode->status == MODE_OK)
> diff --git a/include/drm/drm_modes.h b/include/drm/drm_modes.h
> index 6dd34280..83466ff 100644
> --- a/include/drm/drm_modes.h
> +++ b/include/drm/drm_modes.h
> @@ -80,6 +80,7 @@
>   * @MODE_ONE_SIZE: only one resolution is supported
>   * @MODE_NO_REDUCED: monitor doesn't accept reduced blanking
>   * @MODE_NO_STEREO: stereo modes not supported
> + * @MODE_NO_HDMI2: HDMI 2.0+ modes not supported
>   * @MODE_STALE: mode has become stale
>   * @MODE_BAD: unspecified reason
>   * @MODE_ERROR: error condition
> @@ -124,6 +125,7 @@ enum drm_mode_status {
>  	MODE_ONE_SIZE,
>  	MODE_NO_REDUCED,
>  	MODE_NO_STEREO,
> +	MODE_NO_HDMI2,
>  	MODE_STALE = -3,
>  	MODE_BAD = -2,
>  	MODE_ERROR = -1
> @@ -422,6 +424,18 @@ static inline bool drm_mode_is_stereo(const struct drm_display_mode *mode)
>  	return mode->flags & DRM_MODE_FLAG_3D_MASK;
>  }
>  
> +/**
> + * drm_mode_is_hdmi2 - check for HDMI 2.0+ mode flag
> + * @mode: drm_display_mode to check
> + *
> + * Returns:
> + * True if the mode is HDMI 2.0+ mode, false if not
> + */
> +static inline bool drm_mode_is_hdmi2(const struct drm_display_mode *mode)
> +{
> +	return mode->flags & DRM_MODE_FLAG_HDMI2;
> +}
> +
>  struct drm_connector;
>  struct drm_cmdline_mode;
>  
> -- 
> 1.9.1
> 
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@xxxxxxxxxxxxxxxxxxxxx
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux