drm/nouveau/kms/nv50-: clear SW state of disabled windows harder
authorBen Skeggs <bskeggs@redhat.com>
Thu, 4 Jun 2020 01:00:01 +0000 (11:00 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 4 Jun 2020 04:23:22 +0000 (14:23 +1000)
The most innocuous result of not having done this is that we end up
sending unnecessary methods when we next enable the window.

However, interactions with the code handling skipping disables when
an update immediately follows, and window ownership assignment, can
lead to upsetting the display hardware on Volta and newer.

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

index e25ead56052cd8dfe6515822c8479dde737c929b..99b9b681736da283af1c60920f1e753aed543e69 100644 (file)
@@ -192,6 +192,8 @@ nv50_wndw_atomic_check_release(struct nv50_wndw *wndw,
        wndw->func->release(wndw, asyw, asyh);
        asyw->ntfy.handle = 0;
        asyw->sema.handle = 0;
+       asyw->xlut.handle = 0;
+       memset(asyw->image.handle, 0x00, sizeof(asyw->image.handle));
 }
 
 static int
@@ -519,7 +521,8 @@ nv50_wndw_prepare_fb(struct drm_plane *plane, struct drm_plane_state *state)
                        return PTR_ERR(ctxdma);
                }
 
-               asyw->image.handle[0] = ctxdma->object.handle;
+               if (asyw->visible)
+                       asyw->image.handle[0] = ctxdma->object.handle;
        }
 
        asyw->state.fence = dma_resv_get_excl_rcu(nvbo->bo.base.resv);