}
        }
 
-       ret = RING_SPACE(evo, 17);
+       ret = RING_SPACE(evo, 19);
        if (ret)
                return ret;
 
        }
 
        BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, UNK082C), 1);
-       OUT_RING(evo, 0);
+       OUT_RING  (evo, 0);
+       /* required to make display sync channel not hate life */
+       BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, UNK900), 1);
+       OUT_RING  (evo, 0x00000311);
 
        /* This is the actual resolution of the mode. */
        BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, REAL_RES), 1);
 
 
        nv_wr32(dev, NV50_PDISPLAY_OBJECTS, (evo->ramin->vinst >> 8) | 9);
 
-       ret = RING_SPACE(evo, 15);
+       ret = RING_SPACE(evo, 3);
        if (ret)
                return ret;
        BEGIN_RING(evo, 0, NV50_EVO_UNK84, 2);
-       OUT_RING(evo, NV50_EVO_UNK84_NOTIFY_DISABLED);
-       OUT_RING(evo, NvEvoSync);
-       BEGIN_RING(evo, 0, NV50_EVO_CRTC(0, FB_DMA), 1);
-       OUT_RING(evo, NV50_EVO_CRTC_FB_DMA_HANDLE_NONE);
-       BEGIN_RING(evo, 0, NV50_EVO_CRTC(0, UNK0800), 1);
-       OUT_RING(evo, 0);
-       BEGIN_RING(evo, 0, NV50_EVO_CRTC(0, DISPLAY_START), 1);
-       OUT_RING(evo, 0);
-       BEGIN_RING(evo, 0, NV50_EVO_CRTC(0, UNK082C), 1);
-       OUT_RING(evo, 0);
-       /* required to make display sync channels not hate life */
-       BEGIN_RING(evo, 0, NV50_EVO_CRTC(0, UNK900), 1);
-       OUT_RING  (evo, 0x00000311);
-       BEGIN_RING(evo, 0, NV50_EVO_CRTC(1, UNK900), 1);
-       OUT_RING  (evo, 0x00000311);
-       FIRE_RING(evo);
-       if (!nv_wait(dev, 0x640004, 0xffffffff, evo->dma.put << 2))
-               NV_ERROR(dev, "evo pushbuf stalled\n");
-
+       OUT_RING  (evo, NV50_EVO_UNK84_NOTIFY_DISABLED);
+       OUT_RING  (evo, NvEvoSync);
 
-       return 0;
+       return nv50_display_sync(dev);
 }
 
 static int nv50_display_disable(struct drm_device *dev)
        if (crtc >= 0) {
                pclk  = nv_rd32(dev, NV50_PDISPLAY_CRTC_P(crtc, CLOCK));
                pclk &= 0x003fffff;
-
-               nv50_crtc_set_clock(dev, crtc, pclk);
+               if (pclk)
+                       nv50_crtc_set_clock(dev, crtc, pclk);
 
                tmp = nv_rd32(dev, NV50_PDISPLAY_CRTC_CLK_CTRL2(crtc));
                tmp &= ~0x000000f;