drm/omap: Use normalized zpos for plane placement
authorPeter Ujfalusi <peter.ujfalusi@ti.com>
Wed, 21 Mar 2018 10:20:29 +0000 (12:20 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Wed, 28 Mar 2018 06:45:45 +0000 (09:45 +0300)
Planes with identical zpos value will result undefined behavior:
disappearing planes, screen flickering and it is not supported by the
hardware.

Use normalized zpos to make sure that we don't encounter invalid
configuration.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
CC: Tomi Valkeinen <tomi.valkeinen@ti.com>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180321102029.15248-7-peter.ujfalusi@ti.com
drivers/gpu/drm/omapdrm/omap_drv.c
drivers/gpu/drm/omapdrm/omap_plane.c

index 3632854..ef3b0e3 100644 (file)
@@ -319,6 +319,9 @@ static int omap_modeset_init(struct drm_device *dev)
        dev->mode_config.max_width = 8192;
        dev->mode_config.max_height = 8192;
 
+       /* We want the zpos to be normalized */
+       dev->mode_config.normalize_zpos = true;
+
        dev->mode_config.funcs = &omap_mode_config_funcs;
        dev->mode_config.helper_private = &omap_mode_config_helper_funcs;
 
index 2899435..161233c 100644 (file)
@@ -65,7 +65,7 @@ static void omap_plane_atomic_update(struct drm_plane *plane,
        info.rotation_type = OMAP_DSS_ROT_NONE;
        info.rotation = DRM_MODE_ROTATE_0;
        info.global_alpha = 0xff;
-       info.zorder = state->zpos;
+       info.zorder = state->normalized_zpos;
 
        /* update scanout: */
        omap_framebuffer_update_scanout(state->fb, state, &info);