drm/i915: Disable CPU underruns around eDP port and vdd enable on ILK-IVB
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 20 Nov 2015 20:09:19 +0000 (22:09 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 24 Nov 2015 14:13:46 +0000 (16:13 +0200)
We sometimes get a spurious CPU pipe underrun somewhere between
enabling port A and enabling vdd for the panel. Observed on both
ILK and IVB with port A eDP. Suppress FIFO underrun reporting
around the port and vdd enable to avoid the dmesg errors.

Not sure if port D eDP would suffer from the same issue, but assume
that it doesn't until proven differently.

Testcase: igt/kms_setmode
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1448050160-14124-2-git-send-email-ville.syrjala@linux.intel.com
Acked-by: Chris Wilson <chris@chris-wilson.co.uk>
drivers/gpu/drm/i915/intel_dp.c

index bec443a629da064eac97a852c0dbc84919c66a55..2805f0d4ba4501c7aa3d1c991c3dc6bf93a79792 100644 (file)
@@ -2697,6 +2697,15 @@ static void intel_enable_dp(struct intel_encoder *encoder)
        if (IS_VALLEYVIEW(dev))
                vlv_init_panel_power_sequencer(intel_dp);
 
+       /*
+        * We get an occasional spurious underrun between the port
+        * enable and vdd enable, when enabling port A eDP.
+        *
+        * FIXME: Not sure if this applies to (PCH) port D eDP as well
+        */
+       if (port == PORT_A)
+               intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false);
+
        intel_dp_enable_port(intel_dp);
 
        if (port == PORT_A && IS_GEN5(dev_priv)) {
@@ -2714,6 +2723,9 @@ static void intel_enable_dp(struct intel_encoder *encoder)
        edp_panel_on(intel_dp);
        edp_panel_vdd_off(intel_dp, true);
 
+       if (port == PORT_A)
+               intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true);
+
        pps_unlock(intel_dp);
 
        if (IS_VALLEYVIEW(dev)) {