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@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