drm/nv04/disp: disable vblank interrupts when disabling display
Ben Skeggs [Tue, 22 Nov 2011 03:59:30 +0000 (13:59 +1000)]
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

drivers/gpu/drm/nouveau/nouveau_hw.c
drivers/gpu/drm/nouveau/nv04_display.c

index ba896e5..b87ad3b 100644 (file)
@@ -1018,11 +1018,6 @@ nv_load_state_ext(struct drm_device *dev, int head,
        }
 
        NVWriteCRTC(dev, head, NV_PCRTC_START, regp->fb_start);
-
-       /* Enable vblank interrupts. */
-       NVWriteCRTC(dev, head, NV_PCRTC_INTR_EN_0,
-                   (dev->vblank_enabled[head] ? 1 : 0));
-       NVWriteCRTC(dev, head, NV_PCRTC_INTR_0, NV_PCRTC_INTR_0_VBLANK);
 }
 
 static void
index 7047d37..44488e3 100644 (file)
@@ -98,6 +98,13 @@ nv04_display_early_init(struct drm_device *dev)
                NVSetOwner(dev, 0);
        }
 
+       /* ensure vblank interrupts are off, they can't be enabled until
+        * drm_vblank has been initialised
+        */
+       NVWriteCRTC(dev, 0, NV_PCRTC_INTR_EN_0, 0);
+       if (nv_two_heads(dev))
+               NVWriteCRTC(dev, 1, NV_PCRTC_INTR_EN_0, 0);
+
        return 0;
 }
 
@@ -246,6 +253,10 @@ nv04_display_init(struct drm_device *dev)
 void
 nv04_display_fini(struct drm_device *dev)
 {
+       /* disable vblank interrupts */
+       NVWriteCRTC(dev, 0, NV_PCRTC_INTR_EN_0, 0);
+       if (nv_two_heads(dev))
+               NVWriteCRTC(dev, 1, NV_PCRTC_INTR_EN_0, 0);
 }
 
 static void