aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2015-10-29 15:26:03 -0400
committerVille Syrjälä <ville.syrjala@linux.intel.com>2015-11-10 09:50:34 -0500
commitabfce949052f323b6b0531c6cdc7ad0c3d501d94 (patch)
tree79b42d28daab438106fe43c13be13fb5b57d90c7 /drivers/gpu/drm/i915
parent6fec766283333f1a29066ceddab0d2c18410a71e (diff)
drm/i915: Configure eDP PLL freq from ironlake_edp_pll_on()
ironlake_set_pll_cpu_edp() only gets called just before ironlake_edp_pll_on(), so just pull the code into ironlake_edp_pll_on(). Also toss in a debug print into ironlake_edp_pll_off() to match the one we have in ironlake_edp_pll_on(). Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1446146763-31821-15-git-send-email-ville.syrjala@linux.intel.com Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915')
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c45
1 files changed, 19 insertions, 26 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index d93f9f31bfd9..99b7f1d51415 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1545,28 +1545,6 @@ found:
1545 return true; 1545 return true;
1546} 1546}
1547 1547
1548static void ironlake_set_pll_cpu_edp(struct intel_dp *intel_dp)
1549{
1550 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
1551 struct intel_crtc *crtc = to_intel_crtc(dig_port->base.base.crtc);
1552 struct drm_device *dev = crtc->base.dev;
1553 struct drm_i915_private *dev_priv = dev->dev_private;
1554
1555 DRM_DEBUG_KMS("eDP PLL enable for clock %d\n",
1556 crtc->config->port_clock);
1557
1558 intel_dp->DP &= ~DP_PLL_FREQ_MASK;
1559
1560 if (crtc->config->port_clock == 162000)
1561 intel_dp->DP |= DP_PLL_FREQ_162MHZ;
1562 else
1563 intel_dp->DP |= DP_PLL_FREQ_270MHZ;
1564
1565 I915_WRITE(DP_A, intel_dp->DP);
1566 POSTING_READ(DP_A);
1567 udelay(500);
1568}
1569
1570void intel_dp_set_link_params(struct intel_dp *intel_dp, 1548void intel_dp_set_link_params(struct intel_dp *intel_dp,
1571 const struct intel_crtc_state *pipe_config) 1549 const struct intel_crtc_state *pipe_config)
1572{ 1550{
@@ -2176,7 +2154,20 @@ static void ironlake_edp_pll_on(struct intel_dp *intel_dp)
2176 assert_dp_port_disabled(intel_dp); 2154 assert_dp_port_disabled(intel_dp);
2177 assert_edp_pll_disabled(dev_priv); 2155 assert_edp_pll_disabled(dev_priv);
2178 2156
2179 DRM_DEBUG_KMS("\n"); 2157 DRM_DEBUG_KMS("enabling eDP PLL for clock %d\n",
2158 crtc->config->port_clock);
2159
2160 intel_dp->DP &= ~DP_PLL_FREQ_MASK;
2161
2162 if (crtc->config->port_clock == 162000)
2163 intel_dp->DP |= DP_PLL_FREQ_162MHZ;
2164 else
2165 intel_dp->DP |= DP_PLL_FREQ_270MHZ;
2166
2167 I915_WRITE(DP_A, intel_dp->DP);
2168 POSTING_READ(DP_A);
2169 udelay(500);
2170
2180 intel_dp->DP |= DP_PLL_ENABLE; 2171 intel_dp->DP |= DP_PLL_ENABLE;
2181 2172
2182 I915_WRITE(DP_A, intel_dp->DP); 2173 I915_WRITE(DP_A, intel_dp->DP);
@@ -2194,6 +2185,8 @@ static void ironlake_edp_pll_off(struct intel_dp *intel_dp)
2194 assert_dp_port_disabled(intel_dp); 2185 assert_dp_port_disabled(intel_dp);
2195 assert_edp_pll_enabled(dev_priv); 2186 assert_edp_pll_enabled(dev_priv);
2196 2187
2188 DRM_DEBUG_KMS("disabling eDP PLL\n");
2189
2197 intel_dp->DP &= ~DP_PLL_ENABLE; 2190 intel_dp->DP &= ~DP_PLL_ENABLE;
2198 2191
2199 I915_WRITE(DP_A, intel_dp->DP); 2192 I915_WRITE(DP_A, intel_dp->DP);
@@ -2393,6 +2386,8 @@ static void ilk_post_disable_dp(struct intel_encoder *encoder)
2393 enum port port = dp_to_dig_port(intel_dp)->port; 2386 enum port port = dp_to_dig_port(intel_dp)->port;
2394 2387
2395 intel_dp_link_down(intel_dp); 2388 intel_dp_link_down(intel_dp);
2389
2390 /* Only ilk+ has port A */
2396 if (port == PORT_A) 2391 if (port == PORT_A)
2397 ironlake_edp_pll_off(intel_dp); 2392 ironlake_edp_pll_off(intel_dp);
2398} 2393}
@@ -2673,10 +2668,8 @@ static void g4x_pre_enable_dp(struct intel_encoder *encoder)
2673 } 2668 }
2674 2669
2675 /* Only ilk+ has port A */ 2670 /* Only ilk+ has port A */
2676 if (port == PORT_A) { 2671 if (port == PORT_A)
2677 ironlake_set_pll_cpu_edp(intel_dp);
2678 ironlake_edp_pll_on(intel_dp); 2672 ironlake_edp_pll_on(intel_dp);
2679 }
2680} 2673}
2681 2674
2682static void vlv_detach_power_sequencer(struct intel_dp *intel_dp) 2675static void vlv_detach_power_sequencer(struct intel_dp *intel_dp)