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.ujfalusi@xxxxxx> > --- > 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@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel