[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