drm/nouveau/kms/nv50: skip core channel cursor update on position-only changes
authorBen Skeggs <bskeggs@redhat.com>
Mon, 1 May 2017 06:53:40 +0000 (16:53 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 11 May 2017 22:29:41 +0000 (08:29 +1000)
The DRM core used to only call prepare_fb/cleanup_fb() when a plane's
framebuffer changed, which achieved the desired effect.

It's apparently now up to the driver to decide on its own.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Cc: stable@vger.kernel.org [4.11+]
drivers/gpu/drm/nouveau/nv50_display.c

index 84b9bb43d93a8a583705d39fb4b15451b78ac725..fcec2aba9ad70c5e0452e1115d9b9ed6ca72c425 100644 (file)
@@ -1119,9 +1119,13 @@ static void
 nv50_curs_prepare(struct nv50_wndw *wndw, struct nv50_head_atom *asyh,
                  struct nv50_wndw_atom *asyw)
 {
-       asyh->curs.handle = nv50_disp(wndw->plane.dev)->mast.base.vram.handle;
-       asyh->curs.offset = asyw->image.offset;
-       asyh->set.curs = asyh->curs.visible;
+       u32 handle = nv50_disp(wndw->plane.dev)->mast.base.vram.handle;
+       u32 offset = asyw->image.offset;
+       if (asyh->curs.handle != handle || asyh->curs.offset != offset) {
+               asyh->curs.handle = handle;
+               asyh->curs.offset = offset;
+               asyh->set.curs = asyh->curs.visible;
+       }
 }
 
 static void