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 <peter.ujfal...@ti.com>
> ---
>  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
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to