drm: Add drm_mode_config->normalize_zpos boolean
authorPeter Ujfalusi <peter.ujfalusi@ti.com>
Wed, 21 Mar 2018 10:20:24 +0000 (12:20 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Wed, 28 Mar 2018 06:45:43 +0000 (09:45 +0300)
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>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180321102029.15248-2-peter.ujfalusi@ti.com
drivers/gpu/drm/drm_atomic_helper.c
include/drm/drm_mode_config.h
include/drm/drm_plane.h

index c35654591c124c267656860189973a5886d563d8..d63c806e7d38c2dc4dc38b9d485c73dadb2f448a 100644 (file)
@@ -875,6 +875,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
  */
@@ -887,6 +892,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;
+       }
+
        ret = drm_atomic_helper_check_planes(dev, state);
        if (ret)
                return ret;
index 7569f22ffef6b648b7b7af82a8a78ba8ee36b79e..33b3a96d66d0a4de3dcb0910edb75fa310eb7a4d 100644 (file)
@@ -795,6 +795,14 @@ struct drm_mode_config {
         */
        bool allow_fb_modifiers;
 
+       /**
+        * @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;
+
        /**
         * @modifiers_property: Plane property to list support modifier/format
         * combination.
index f7bf4a48b1c3dfd56f6db5f445317883ccfd813c..d6da26d66a4b8ccdc5915def4184c2426cf8d88d 100644 (file)
@@ -51,8 +51,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