PV_CONTROL_TRIGGER_UNDERFLOW |
                   PV_CONTROL_WAIT_HSTART |
                   VC4_SET_FIELD(vc4_encoder->clock_select,
-                                PV_CONTROL_CLK_SELECT) |
-                  PV_CONTROL_FIFO_CLR |
-                  PV_CONTROL_EN);
+                                PV_CONTROL_CLK_SELECT));
 }
 
 static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc)
        ret = wait_for(!(CRTC_READ(PV_V_CONTROL) & PV_VCONTROL_VIDEN), 1);
        WARN_ONCE(ret, "Timeout waiting for !PV_VCONTROL_VIDEN\n");
 
+       CRTC_WRITE(PV_CONTROL, CRTC_READ(PV_CONTROL) & ~PV_CONTROL_EN);
+
        vc4_hvs_atomic_disable(crtc, old_state);
 
        /*
 
        require_hvs_enabled(dev);
 
+       /* Reset the PV fifo. */
+       CRTC_WRITE(PV_CONTROL, CRTC_READ(PV_CONTROL) |
+                  PV_CONTROL_FIFO_CLR | PV_CONTROL_EN);
+
        /* Enable vblank irq handling before crtc is started otherwise
         * drm_crtc_get_vblank() fails in vc4_crtc_update_dlist().
         */