}
 
 void
-nouveau_display_fini(struct drm_device *dev)
+nouveau_display_fini(struct drm_device *dev, bool suspend)
 {
        struct nouveau_display *disp = nouveau_display(dev);
        struct nouveau_drm *drm = nouveau_drm(dev);
        struct drm_connector *connector;
        int head;
 
+       if (!suspend)
+               drm_crtc_force_disable_all(dev);
+
        /* Make sure that drm and hw vblank irqs get properly disabled. */
        for (head = 0; head < dev->mode_config.num_crtc; head++)
                drm_vblank_off(dev, head);
        nouveau_display_vblank_fini(dev);
 
        drm_kms_helper_poll_fini(dev);
-       drm_crtc_force_disable_all(dev);
        drm_mode_config_cleanup(dev);
 
        if (disp->dtor)
 {
        struct drm_crtc *crtc;
 
-       nouveau_display_fini(dev);
+       nouveau_display_fini(dev, true);
 
        list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
                struct nouveau_framebuffer *nouveau_fb;
 
 int  nouveau_display_create(struct drm_device *dev);
 void nouveau_display_destroy(struct drm_device *dev);
 int  nouveau_display_init(struct drm_device *dev);
-void nouveau_display_fini(struct drm_device *dev);
+void nouveau_display_fini(struct drm_device *dev, bool suspend);
 int  nouveau_display_suspend(struct drm_device *dev, bool runtime);
 void nouveau_display_resume(struct drm_device *dev, bool runtime);
 int  nouveau_display_vblank_enable(struct drm_device *, unsigned int);
 
        nouveau_debugfs_fini(drm);
 
        if (dev->mode_config.num_crtc)
-               nouveau_display_fini(dev);
+               nouveau_display_fini(dev, false);
        nouveau_display_destroy(dev);
 
        nouveau_bios_takedown(dev);