drm/nouveau/kms/nv50-: create primary plane before overlay planes
authorBen Skeggs <bskeggs@redhat.com>
Tue, 11 Jun 2019 07:03:21 +0000 (17:03 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 23 Aug 2019 02:55:33 +0000 (12:55 +1000)
zpos normalisation uses plane id to determine ordering for duplicate zpos
values, and we likely want to keep primary plane on the bottom here.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/dispnv50/head.c

index 0d1108eadcff4f20361c39fc37ece9a697eaffd9..71c23bf1fe25915534fc0b61c46a760f500ce921 100644 (file)
@@ -480,7 +480,7 @@ nv50_head_create(struct drm_device *dev, int index)
        struct nouveau_drm *drm = nouveau_drm(dev);
        struct nv50_disp *disp = nv50_disp(dev);
        struct nv50_head *head;
-       struct nv50_wndw *curs, *wndw;
+       struct nv50_wndw *base, *ovly, *curs;
        struct drm_crtc *crtc;
        int ret;
 
@@ -492,13 +492,13 @@ nv50_head_create(struct drm_device *dev, int index)
        head->base.index = index;
 
        if (disp->disp->object.oclass < GV100_DISP) {
-               ret = nv50_ovly_new(drm, head->base.index, &wndw);
-               ret = nv50_base_new(drm, head->base.index, &wndw);
+               ret = nv50_base_new(drm, head->base.index, &base);
+               ret = nv50_ovly_new(drm, head->base.index, &ovly);
        } else {
-               ret = nv50_wndw_new(drm, DRM_PLANE_TYPE_OVERLAY,
-                                   head->base.index * 2 + 1, &wndw);
                ret = nv50_wndw_new(drm, DRM_PLANE_TYPE_PRIMARY,
-                                   head->base.index * 2 + 0, &wndw);
+                                   head->base.index * 2 + 0, &base);
+               ret = nv50_wndw_new(drm, DRM_PLANE_TYPE_OVERLAY,
+                                   head->base.index * 2 + 1, &ovly);
        }
        if (ret == 0)
                ret = nv50_curs_new(drm, head->base.index, &curs);
@@ -508,7 +508,7 @@ nv50_head_create(struct drm_device *dev, int index)
        }
 
        crtc = &head->base.base;
-       drm_crtc_init_with_planes(dev, crtc, &wndw->plane, &curs->plane,
+       drm_crtc_init_with_planes(dev, crtc, &base->plane, &curs->plane,
                                  &nv50_head_func, "head-%d", head->base.index);
        drm_crtc_helper_add(crtc, &nv50_head_help);
        drm_mode_crtc_set_gamma_size(crtc, 256);