aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c38
1 files changed, 14 insertions, 24 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index a899f93cb0ee..3b490c097400 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -780,24 +780,29 @@ void intel_dp_init_link_config(struct intel_dp *intel_dp)
780 } 780 }
781} 781}
782 782
783static void ironlake_set_pll_edp(struct drm_crtc *crtc, int clock) 783static void ironlake_set_pll_cpu_edp(struct intel_dp *intel_dp)
784{ 784{
785 struct drm_device *dev = crtc->dev; 785 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
786 struct intel_crtc *crtc = to_intel_crtc(dig_port->base.base.crtc);
787 struct drm_device *dev = crtc->base.dev;
786 struct drm_i915_private *dev_priv = dev->dev_private; 788 struct drm_i915_private *dev_priv = dev->dev_private;
787 u32 dpa_ctl; 789 u32 dpa_ctl;
788 790
789 DRM_DEBUG_KMS("eDP PLL enable for clock %d\n", clock); 791 DRM_DEBUG_KMS("eDP PLL enable for clock %d\n",
792 crtc->config.adjusted_mode.clock);
790 dpa_ctl = I915_READ(DP_A); 793 dpa_ctl = I915_READ(DP_A);
791 dpa_ctl &= ~DP_PLL_FREQ_MASK; 794 dpa_ctl &= ~DP_PLL_FREQ_MASK;
792 795
793 if (clock < 200000) { 796 if (crtc->config.adjusted_mode.clock == 162000) {
794 /* For a long time we've carried around a ILK-DevA w/a for the 797 /* For a long time we've carried around a ILK-DevA w/a for the
795 * 160MHz clock. If we're really unlucky, it's still required. 798 * 160MHz clock. If we're really unlucky, it's still required.
796 */ 799 */
797 DRM_DEBUG_KMS("160MHz cpu eDP clock, might need ilk devA w/a\n"); 800 DRM_DEBUG_KMS("160MHz cpu eDP clock, might need ilk devA w/a\n");
798 dpa_ctl |= DP_PLL_FREQ_160MHZ; 801 dpa_ctl |= DP_PLL_FREQ_160MHZ;
802 intel_dp->DP |= DP_PLL_FREQ_160MHZ;
799 } else { 803 } else {
800 dpa_ctl |= DP_PLL_FREQ_270MHZ; 804 dpa_ctl |= DP_PLL_FREQ_270MHZ;
805 intel_dp->DP |= DP_PLL_FREQ_270MHZ;
801 } 806 }
802 807
803 I915_WRITE(DP_A, dpa_ctl); 808 I915_WRITE(DP_A, dpa_ctl);
@@ -814,8 +819,7 @@ intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
814 struct drm_i915_private *dev_priv = dev->dev_private; 819 struct drm_i915_private *dev_priv = dev->dev_private;
815 struct intel_dp *intel_dp = enc_to_intel_dp(encoder); 820 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
816 enum port port = dp_to_dig_port(intel_dp)->port; 821 enum port port = dp_to_dig_port(intel_dp)->port;
817 struct drm_crtc *crtc = encoder->crtc; 822 struct intel_crtc *crtc = to_intel_crtc(encoder->crtc);
818 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
819 823
820 /* 824 /*
821 * There are four kinds of DP registers: 825 * There are four kinds of DP registers:
@@ -845,7 +849,7 @@ intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
845 849
846 if (intel_dp->has_audio) { 850 if (intel_dp->has_audio) {
847 DRM_DEBUG_DRIVER("Enabling DP audio on pipe %c\n", 851 DRM_DEBUG_DRIVER("Enabling DP audio on pipe %c\n",
848 pipe_name(intel_crtc->pipe)); 852 pipe_name(crtc->pipe));
849 intel_dp->DP |= DP_AUDIO_OUTPUT_ENABLE; 853 intel_dp->DP |= DP_AUDIO_OUTPUT_ENABLE;
850 intel_write_eld(encoder, adjusted_mode); 854 intel_write_eld(encoder, adjusted_mode);
851 } 855 }
@@ -864,13 +868,7 @@ intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
864 if (intel_dp->link_configuration[1] & DP_LANE_COUNT_ENHANCED_FRAME_EN) 868 if (intel_dp->link_configuration[1] & DP_LANE_COUNT_ENHANCED_FRAME_EN)
865 intel_dp->DP |= DP_ENHANCED_FRAMING; 869 intel_dp->DP |= DP_ENHANCED_FRAMING;
866 870
867 intel_dp->DP |= intel_crtc->pipe << 29; 871 intel_dp->DP |= crtc->pipe << 29;
868
869 /* don't miss out required setting for eDP */
870 if (adjusted_mode->clock < 200000)
871 intel_dp->DP |= DP_PLL_FREQ_160MHZ;
872 else
873 intel_dp->DP |= DP_PLL_FREQ_270MHZ;
874 } else if (!HAS_PCH_CPT(dev) || port == PORT_A) { 872 } else if (!HAS_PCH_CPT(dev) || port == PORT_A) {
875 if (!HAS_PCH_SPLIT(dev) && !IS_VALLEYVIEW(dev)) 873 if (!HAS_PCH_SPLIT(dev) && !IS_VALLEYVIEW(dev))
876 intel_dp->DP |= intel_dp->color_range; 874 intel_dp->DP |= intel_dp->color_range;
@@ -884,22 +882,14 @@ intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
884 if (intel_dp->link_configuration[1] & DP_LANE_COUNT_ENHANCED_FRAME_EN) 882 if (intel_dp->link_configuration[1] & DP_LANE_COUNT_ENHANCED_FRAME_EN)
885 intel_dp->DP |= DP_ENHANCED_FRAMING; 883 intel_dp->DP |= DP_ENHANCED_FRAMING;
886 884
887 if (intel_crtc->pipe == 1) 885 if (crtc->pipe == 1)
888 intel_dp->DP |= DP_PIPEB_SELECT; 886 intel_dp->DP |= DP_PIPEB_SELECT;
889
890 if (port == PORT_A && !IS_VALLEYVIEW(dev)) {
891 /* don't miss out required setting for eDP */
892 if (adjusted_mode->clock < 200000)
893 intel_dp->DP |= DP_PLL_FREQ_160MHZ;
894 else
895 intel_dp->DP |= DP_PLL_FREQ_270MHZ;
896 }
897 } else { 887 } else {
898 intel_dp->DP |= DP_LINK_TRAIN_OFF_CPT; 888 intel_dp->DP |= DP_LINK_TRAIN_OFF_CPT;
899 } 889 }
900 890
901 if (port == PORT_A && !IS_VALLEYVIEW(dev)) 891 if (port == PORT_A && !IS_VALLEYVIEW(dev))
902 ironlake_set_pll_edp(crtc, adjusted_mode->clock); 892 ironlake_set_pll_cpu_edp(intel_dp);
903} 893}
904 894
905#define IDLE_ON_MASK (PP_ON | 0 | PP_SEQUENCE_MASK | 0 | PP_SEQUENCE_STATE_MASK) 895#define IDLE_ON_MASK (PP_ON | 0 | PP_SEQUENCE_MASK | 0 | PP_SEQUENCE_STATE_MASK)