if (crtc_state->dsb) {
                intel_dsb_finish(crtc_state->dsb);
-               intel_dsb_commit(crtc_state->dsb);
+               intel_dsb_commit(crtc_state->dsb, false);
                intel_dsb_wait(crtc_state->dsb);
        }
 }
 
 /**
  * intel_dsb_commit() - Trigger workload execution of DSB.
  * @dsb: DSB context
+ * @wait_for_vblank: wait for vblank before executing
  *
  * This function is used to do actual write to hardware using DSB.
  */
-void intel_dsb_commit(struct intel_dsb *dsb)
+void intel_dsb_commit(struct intel_dsb *dsb, bool wait_for_vblank)
 {
        struct intel_crtc *crtc = dsb->crtc;
        struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
        }
 
        intel_de_write(dev_priv, DSB_CTRL(pipe, dsb->id),
+                      (wait_for_vblank ? DSB_WAIT_FOR_VBLANK : 0) |
                       DSB_ENABLE);
        intel_de_write(dev_priv, DSB_HEAD(pipe, dsb->id),
                       i915_ggtt_offset(dsb->vma));
 
 void intel_dsb_cleanup(struct intel_dsb *dsb);
 void intel_dsb_reg_write(struct intel_dsb *dsb,
                         i915_reg_t reg, u32 val);
-void intel_dsb_commit(struct intel_dsb *dsb);
+void intel_dsb_commit(struct intel_dsb *dsb,
+                     bool wait_for_vblank);
 void intel_dsb_wait(struct intel_dsb *dsb);
 
 #endif