On Thu, Jan 25, 2018 at 04:26:25PM +0200, Peter Ujfalusi wrote:
> Instead of drivers duplicating the drm_atomic_helper_check() code to be
> able to normalize the zpos they can use the normalize_zpos flag to let the
> drm core to do it.
>
> Signed-off-by: Peter Ujfalusi <[email protected]>
> ---
> drivers/gpu/drm/drm_atomic_helper.c | 11 +++++++++++
> include/drm/drm_mode_config.h | 8 ++++++++
> include/drm/drm_plane.h | 4 ++--
> 3 files changed, 21 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c
> b/drivers/gpu/drm/drm_atomic_helper.c
> index ab4032167094..0f6a4949e6dc 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -873,6 +873,11 @@ EXPORT_SYMBOL(drm_atomic_helper_check_planes);
> * functions depend upon an updated adjusted_mode.clock to e.g. properly
> compute
> * watermarks.
> *
> + * Note that zpos normalization will add all enable planes to the state which
> + * might not desired for some drivers.
> + * For example enable/disable of a cursor plane which have fixed zpos value
> + * would trigger all other enabled planes to be forced to the state change.
> + *
> * RETURNS:
> * Zero for success or -errno
> */
> @@ -885,6 +890,12 @@ int drm_atomic_helper_check(struct drm_device *dev,
> if (ret)
> return ret;
>
> + if (dev->mode_config.normalize_zpos) {
> + ret = drm_atomic_normalize_zpos(dev, state);
> + if (ret)
> + return ret;
> + }
I think we originally had this in drm_atomic_helper_check_planes().
Looking through some of the drivers it looks like we could maybe
kill a few more LOC by putting it there.
> +
> ret = drm_atomic_helper_check_planes(dev, state);
> if (ret)
> return ret;
> diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
> index 2cb6f02df64a..987ab63ae037 100644
> --- a/include/drm/drm_mode_config.h
> +++ b/include/drm/drm_mode_config.h
> @@ -792,6 +792,14 @@ struct drm_mode_config {
> /* cursor size */
> uint32_t cursor_width, cursor_height;
>
> + /**
> + * @normalize_zpos:
> + *
> + * If true the drm core will call drm_atomic_normalize_zpos() as part of
> + * atomic mode checking from drm_atomic_helper_check()
> + */
> + bool normalize_zpos;
> +
Can we pack it next to some other bools to try and keep the struct
size down?
> /**
> * @suspend_state:
> *
> diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
> index 8185e3468a23..2c0adb124e0f 100644
> --- a/include/drm/drm_plane.h
> +++ b/include/drm/drm_plane.h
> @@ -50,8 +50,8 @@ struct drm_modeset_acquire_ctx;
> * plane with a lower ID.
> * @normalized_zpos: normalized value of zpos: unique, range from 0 to N-1
> * where N is the number of active planes for given crtc. Note that
> - * the driver must call drm_atomic_normalize_zpos() to update this before
> - * it can be trusted.
> + * the driver must set drm_mode_config.normalize_zpos or call
> + * drm_atomic_normalize_zpos() to update this before it can be trusted.
> * @src: clipped source coordinates of the plane (in 16.16)
> * @dst: clipped destination coordinates of the plane
> * @state: backpointer to global drm_atomic_state
> --
> Peter
>
> Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
> Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
--
Ville Syrjälä
Intel OTC
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel