[PATCH 6/7] drm: Drop drm_helper_probe_single_connector_modes_nomerge()

Daniel Vetter daniel at ffwll.ch
Fri Dec 4 00:30:07 PST 2015


On Thu, Dec 03, 2015 at 11:14:14PM +0200, ville.syrjala at linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> 
> Now that the mode type bit merge logic is fixed to only merge
> between new probed modes, hopefully we can eliminat the special
> case for qxl and virtio. That is make the merge the mode type
> bits from all matching new probed modes, just like every other
> driver.
> 
> qxl and virtio got excluded from the merging in
> commit 3fbd6439e463 ("drm: copy mode type in drm_mode_connector_list_update()")
> commit abce1ec9b08a ("Revert "drm: copy mode type in drm_mode_connector_list_update()"")
> commit b87577b7c768 ("drm: try harder to avoid regression when merging mode bits")
> 
> Cc: Marc-André Lureau <marcandre.lureau at redhat.com>
> Cc: Dave Airlie <airlied at redhat.com>
> Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
> Cc: Adam Jackson <ajax at redhat.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>

Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>

> ---
>  drivers/gpu/drm/drm_modes.c              | 12 ++----
>  drivers/gpu/drm/drm_probe_helper.c       | 65 +++++++++++---------------------
>  drivers/gpu/drm/qxl/qxl_display.c        |  2 +-
>  drivers/gpu/drm/virtio/virtgpu_display.c |  2 +-
>  drivers/gpu/drm/vmwgfx/vmwgfx_kms.c      |  2 +-
>  include/drm/drm_crtc_helper.h            |  4 --
>  include/drm/drm_modes.h                  |  2 +-
>  7 files changed, 28 insertions(+), 61 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
> index 8c803e3af1da..2e86e3412623 100644
> --- a/drivers/gpu/drm/drm_modes.c
> +++ b/drivers/gpu/drm/drm_modes.c
> @@ -1171,7 +1171,6 @@ EXPORT_SYMBOL(drm_mode_sort);
>  /**
>   * drm_mode_connector_list_update - update the mode list for the connector
>   * @connector: the connector to update
> - * @merge_type_bits: whether to merge or overwrite type bits
>   *
>   * This moves the modes from the @connector probed_modes list
>   * to the actual mode list. It compares the probed mode against the current
> @@ -1180,8 +1179,7 @@ EXPORT_SYMBOL(drm_mode_sort);
>   * This is just a helper functions doesn't validate any modes itself and also
>   * doesn't prune any invalid modes. Callers need to do that themselves.
>   */
> -void drm_mode_connector_list_update(struct drm_connector *connector,
> -				    bool merge_type_bits)
> +void drm_mode_connector_list_update(struct drm_connector *connector)
>  {
>  	struct drm_display_mode *pmode, *pt;
>  
> @@ -1214,14 +1212,10 @@ void drm_mode_connector_list_update(struct drm_connector *connector,
>  				drm_mode_copy(mode, pmode);
>  			} else if ((mode->type & DRM_MODE_TYPE_PREFERRED) == 0 &&
>  				   (pmode->type & DRM_MODE_TYPE_PREFERRED) != 0) {
> -				if (merge_type_bits)
> -					pmode->type |= mode->type;
> +				pmode->type |= mode->type;
>  				drm_mode_copy(mode, pmode);
>  			} else {
> -				if (merge_type_bits)
> -					mode->type |= pmode->type;
> -				else
> -					mode->type = pmode->type;
> +				mode->type |= pmode->type;
>  			}
>  
>  			list_del(&pmode->head);
> diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c
> index 2e0c8bfacd35..c4c5730db5d1 100644
> --- a/drivers/gpu/drm/drm_probe_helper.c
> +++ b/drivers/gpu/drm/drm_probe_helper.c
> @@ -126,9 +126,26 @@ void drm_kms_helper_poll_enable_locked(struct drm_device *dev)
>  }
>  EXPORT_SYMBOL(drm_kms_helper_poll_enable_locked);
>  
> -
> -static int drm_helper_probe_single_connector_modes_merge_bits(struct drm_connector *connector,
> -							      uint32_t maxX, uint32_t maxY, bool merge_type_bits)
> +/**
> + * drm_helper_probe_single_connector_modes - get complete set of display modes
> + * @connector: connector to probe
> + * @maxX: max width for modes
> + * @maxY: max height for modes
> + *
> + * Based on the helper callbacks implemented by @connector try to detect all
> + * valid modes.  Modes will first be added to the connector's probed_modes list,
> + * then culled (based on validity and the @maxX, @maxY parameters) and put into
> + * the normal modes list.
> + *
> + * Intended to be use as a generic implementation of the ->fill_modes()
> + * @connector vfunc for drivers that use the crtc helpers for output mode
> + * filtering and detection.
> + *
> + * Returns:
> + * The number of modes found on @connector.
> + */
> +int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
> +					    uint32_t maxX, uint32_t maxY)
>  {
>  	struct drm_device *dev = connector->dev;
>  	struct drm_display_mode *mode;
> @@ -219,7 +236,7 @@ static int drm_helper_probe_single_connector_modes_merge_bits(struct drm_connect
>  	if (count == 0)
>  		goto prune;
>  
> -	drm_mode_connector_list_update(connector, merge_type_bits);
> +	drm_mode_connector_list_update(connector);
>  
>  	if (connector->interlace_allowed)
>  		mode_flags |= DRM_MODE_FLAG_INTERLACE;
> @@ -263,49 +280,9 @@ prune:
>  
>  	return count;
>  }
> -
> -/**
> - * drm_helper_probe_single_connector_modes - get complete set of display modes
> - * @connector: connector to probe
> - * @maxX: max width for modes
> - * @maxY: max height for modes
> - *
> - * Based on the helper callbacks implemented by @connector try to detect all
> - * valid modes.  Modes will first be added to the connector's probed_modes list,
> - * then culled (based on validity and the @maxX, @maxY parameters) and put into
> - * the normal modes list.
> - *
> - * Intended to be use as a generic implementation of the ->fill_modes()
> - * @connector vfunc for drivers that use the crtc helpers for output mode
> - * filtering and detection.
> - *
> - * Returns:
> - * The number of modes found on @connector.
> - */
> -int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
> -					    uint32_t maxX, uint32_t maxY)
> -{
> -	return drm_helper_probe_single_connector_modes_merge_bits(connector, maxX, maxY, true);
> -}
>  EXPORT_SYMBOL(drm_helper_probe_single_connector_modes);
>  
>  /**
> - * drm_helper_probe_single_connector_modes_nomerge - get complete set of display modes
> - * @connector: connector to probe
> - * @maxX: max width for modes
> - * @maxY: max height for modes
> - *
> - * This operates like drm_hehlper_probe_single_connector_modes except it
> - * replaces the mode bits instead of merging them for preferred modes.
> - */
> -int drm_helper_probe_single_connector_modes_nomerge(struct drm_connector *connector,
> -					    uint32_t maxX, uint32_t maxY)
> -{
> -	return drm_helper_probe_single_connector_modes_merge_bits(connector, maxX, maxY, false);
> -}
> -EXPORT_SYMBOL(drm_helper_probe_single_connector_modes_nomerge);
> -
> -/**
>   * drm_kms_helper_hotplug_event - fire off KMS hotplug events
>   * @dev: drm_device whose connector state changed
>   *
> diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
> index cddba079197f..7f9c0eb63169 100644
> --- a/drivers/gpu/drm/qxl/qxl_display.c
> +++ b/drivers/gpu/drm/qxl/qxl_display.c
> @@ -935,7 +935,7 @@ static const struct drm_connector_funcs qxl_connector_funcs = {
>  	.save = qxl_conn_save,
>  	.restore = qxl_conn_restore,
>  	.detect = qxl_conn_detect,
> -	.fill_modes = drm_helper_probe_single_connector_modes_nomerge,
> +	.fill_modes = drm_helper_probe_single_connector_modes,
>  	.set_property = qxl_conn_set_property,
>  	.destroy = qxl_conn_destroy,
>  };
> diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
> index 8e6044d7660a..306a7df7d013 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_display.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_display.c
> @@ -412,7 +412,7 @@ static const struct drm_connector_funcs virtio_gpu_connector_funcs = {
>  	.save = virtio_gpu_conn_save,
>  	.restore = virtio_gpu_conn_restore,
>  	.detect = virtio_gpu_conn_detect,
> -	.fill_modes = drm_helper_probe_single_connector_modes_nomerge,
> +	.fill_modes = drm_helper_probe_single_connector_modes,
>  	.destroy = virtio_gpu_conn_destroy,
>  	.reset = drm_atomic_helper_connector_reset,
>  	.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> index e38db35132ed..808b247f3cfb 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> @@ -1554,7 +1554,7 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector,
>  		drm_mode_probed_add(connector, mode);
>  	}
>  
> -	drm_mode_connector_list_update(connector, true);
> +	drm_mode_connector_list_update(connector);
>  	/* Move the prefered mode first, help apps pick the right mode. */
>  	drm_mode_sort(&connector->modes);
>  
> diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
> index e22ab29d2d00..cb7bb91dc036 100644
> --- a/include/drm/drm_crtc_helper.h
> +++ b/include/drm/drm_crtc_helper.h
> @@ -229,10 +229,6 @@ int drm_helper_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y,
>  extern int drm_helper_probe_single_connector_modes(struct drm_connector
>  						   *connector, uint32_t maxX,
>  						   uint32_t maxY);
> -extern int drm_helper_probe_single_connector_modes_nomerge(struct drm_connector
> -							   *connector,
> -							   uint32_t maxX,
> -							   uint32_t maxY);
>  extern void drm_kms_helper_poll_init(struct drm_device *dev);
>  extern void drm_kms_helper_poll_fini(struct drm_device *dev);
>  extern bool drm_helper_hpd_irq_event(struct drm_device *dev);
> diff --git a/include/drm/drm_modes.h b/include/drm/drm_modes.h
> index 256a1bbb125c..28023544e048 100644
> --- a/include/drm/drm_modes.h
> +++ b/include/drm/drm_modes.h
> @@ -234,7 +234,7 @@ enum drm_mode_status drm_mode_validate_size(const struct drm_display_mode *mode,
>  void drm_mode_prune_invalid(struct drm_device *dev,
>  			    struct list_head *mode_list, bool verbose);
>  void drm_mode_sort(struct list_head *mode_list);
> -void drm_mode_connector_list_update(struct drm_connector *connector, bool merge_type_bits);
> +void drm_mode_connector_list_update(struct drm_connector *connector);
>  
>  /* parsing cmdline modes */
>  bool
> -- 
> 2.4.10
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the dri-devel mailing list