val |= TRANS_CHICKEN2_TIMING_OVERRIDE;
                /* Configure frame start delay to match the CPU */
                val &= ~TRANS_CHICKEN2_FRAME_START_DELAY_MASK;
-               val |= TRANS_CHICKEN2_FRAME_START_DELAY(0);
+               val |= TRANS_CHICKEN2_FRAME_START_DELAY(dev_priv->framestart_delay - 1);
                intel_de_write(dev_priv, reg, val);
        }
 
        if (HAS_PCH_IBX(dev_priv)) {
                /* Configure frame start delay to match the CPU */
                val &= ~TRANS_FRAME_START_DELAY_MASK;
-               val |= TRANS_FRAME_START_DELAY(0);
+               val |= TRANS_FRAME_START_DELAY(dev_priv->framestart_delay - 1);
 
                /*
                 * Make the BPC in transcoder be consistent with
        val |= TRANS_CHICKEN2_TIMING_OVERRIDE;
        /* Configure frame start delay to match the CPU */
        val &= ~TRANS_CHICKEN2_FRAME_START_DELAY_MASK;
-       val |= TRANS_CHICKEN2_FRAME_START_DELAY(0);
+       val |= TRANS_CHICKEN2_FRAME_START_DELAY(dev_priv->framestart_delay - 1);
        intel_de_write(dev_priv, TRANS_CHICKEN2(PIPE_A), val);
 
        val = TRANS_ENABLE;
 
        val = intel_de_read(dev_priv, reg);
        val &= ~HSW_FRAME_START_DELAY_MASK;
-       val |= HSW_FRAME_START_DELAY(0);
+       val |= HSW_FRAME_START_DELAY(dev_priv->framestart_delay - 1);
        intel_de_write(dev_priv, reg, val);
 }
 
 
        pipeconf |= PIPECONF_GAMMA_MODE(crtc_state->gamma_mode);
 
-       pipeconf |= PIPECONF_FRAME_START_DELAY(0);
+       pipeconf |= PIPECONF_FRAME_START_DELAY(dev_priv->framestart_delay - 1);
 
        intel_de_write(dev_priv, PIPECONF(crtc->pipe), pipeconf);
        intel_de_posting_read(dev_priv, PIPECONF(crtc->pipe));
 }
 
-
 static bool i9xx_has_pfit(struct drm_i915_private *dev_priv)
 {
        if (IS_I830(dev_priv))
 
        val |= PIPECONF_GAMMA_MODE(crtc_state->gamma_mode);
 
-       val |= PIPECONF_FRAME_START_DELAY(0);
+       val |= PIPECONF_FRAME_START_DELAY(dev_priv->framestart_delay - 1);
 
        intel_de_write(dev_priv, PIPECONF(pipe), val);
        intel_de_posting_read(dev_priv, PIPECONF(pipe));
        i915->flip_wq = alloc_workqueue("i915_flip", WQ_HIGHPRI |
                                        WQ_UNBOUND, WQ_UNBOUND_MAX_ACTIVE);
 
+       i915->framestart_delay = 1; /* 1-4 */
+
        intel_mode_config_init(i915);
 
        ret = intel_cdclk_init(i915);
 
                val = intel_de_read(dev_priv, reg);
                val &= ~HSW_FRAME_START_DELAY_MASK;
-               val |= HSW_FRAME_START_DELAY(0);
+               val |= HSW_FRAME_START_DELAY(dev_priv->framestart_delay - 1);
                intel_de_write(dev_priv, reg, val);
        } else {
                i915_reg_t reg = PIPECONF(cpu_transcoder);
 
                val = intel_de_read(dev_priv, reg);
                val &= ~PIPECONF_FRAME_START_DELAY_MASK;
-               val |= PIPECONF_FRAME_START_DELAY(0);
+               val |= PIPECONF_FRAME_START_DELAY(dev_priv->framestart_delay - 1);
                intel_de_write(dev_priv, reg, val);
        }
 
 
                val = intel_de_read(dev_priv, reg);
                val &= ~TRANS_FRAME_START_DELAY_MASK;
-               val |= TRANS_FRAME_START_DELAY(0);
+               val |= TRANS_FRAME_START_DELAY(dev_priv->framestart_delay - 1);
                intel_de_write(dev_priv, reg, val);
        } else {
                enum pipe pch_transcoder = intel_crtc_pch_transcoder(crtc);
 
                val = intel_de_read(dev_priv, reg);
                val &= ~TRANS_CHICKEN2_FRAME_START_DELAY_MASK;
-               val |= TRANS_CHICKEN2_FRAME_START_DELAY(0);
+               val |= TRANS_CHICKEN2_FRAME_START_DELAY(dev_priv->framestart_delay - 1);
                intel_de_write(dev_priv, reg, val);
        }
 }