drm/nouveau/kms/nv50-: attach immutable zpos property to planes
authorBen Skeggs <bskeggs@redhat.com>
Tue, 11 Jun 2019 06:40:31 +0000 (16:40 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 23 Aug 2019 02:55:33 +0000 (12:55 +1000)
Defaulting to the fixed layout enforced in HW by EVO, and that we
currently use by default on NVD.

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

index 7ce7145f82b8a582a382af13a572010c1e397e34..146e54ef672e3e97a3f47cf983238e16a8409670 100644 (file)
@@ -2316,6 +2316,7 @@ nv50_display_create(struct drm_device *dev)
        disp->disp = &nouveau_display(dev)->disp;
        dev->mode_config.funcs = &nv50_disp_func;
        dev->mode_config.quirk_addfb_prefer_xbgr_30bpp = true;
+       dev->mode_config.normalize_zpos = true;
 
        /* small shared memory area we use for notifiers and semaphores */
        ret = nouveau_bo_new(&drm->client, 4096, 0x1000, TTM_PL_FLAG_VRAM,
index f671fea8b26d00f558e98f0af22af1518113f520..b347a68eebd0f304548c5b27d8bd55acd0cd7b5f 100644 (file)
@@ -528,6 +528,13 @@ nv50_wndw_atomic_duplicate_state(struct drm_plane *plane)
        return &asyw->state;
 }
 
+static int
+nv50_wndw_zpos_default(struct drm_plane *plane)
+{
+       return (plane->type == DRM_PLANE_TYPE_PRIMARY) ? 0 :
+              (plane->type == DRM_PLANE_TYPE_OVERLAY) ? 1 : 255;
+}
+
 static void
 nv50_wndw_reset(struct drm_plane *plane)
 {
@@ -540,6 +547,8 @@ nv50_wndw_reset(struct drm_plane *plane)
                plane->funcs->atomic_destroy_state(plane, plane->state);
 
        __drm_atomic_helper_plane_reset(plane, &asyw->state);
+       plane->state->zpos = nv50_wndw_zpos_default(plane);
+       plane->state->normalized_zpos = nv50_wndw_zpos_default(plane);
 }
 
 static void
@@ -634,6 +643,14 @@ nv50_wndw_new_(const struct nv50_wndw_func *func, struct drm_device *dev,
        }
 
        wndw->notify.func = nv50_wndw_notify;
+
+       if (1) {
+               ret = drm_plane_create_zpos_immutable_property(&wndw->plane,
+                               nv50_wndw_zpos_default(&wndw->plane));
+               if (ret)
+                       return ret;
+       }
+
        return 0;
 }