diff options
author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2015-10-29 15:26:03 -0400 |
---|---|---|
committer | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2015-11-10 09:50:34 -0500 |
commit | abfce949052f323b6b0531c6cdc7ad0c3d501d94 (patch) | |
tree | 79b42d28daab438106fe43c13be13fb5b57d90c7 /drivers/gpu/drm/i915 | |
parent | 6fec766283333f1a29066ceddab0d2c18410a71e (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.c | 45 |
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 | ||
1548 | static 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 | |||
1570 | void intel_dp_set_link_params(struct intel_dp *intel_dp, | 1548 | void 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 | ||
2682 | static void vlv_detach_power_sequencer(struct intel_dp *intel_dp) | 2675 | static void vlv_detach_power_sequencer(struct intel_dp *intel_dp) |