aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_dp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp.c')
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c511
1 files changed, 77 insertions, 434 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index f192f58708c2..ffa43eca14d3 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -131,11 +131,6 @@ static void vlv_steal_power_sequencer(struct drm_device *dev,
131 enum pipe pipe); 131 enum pipe pipe);
132static void intel_dp_unset_edid(struct intel_dp *intel_dp); 132static void intel_dp_unset_edid(struct intel_dp *intel_dp);
133 133
134static unsigned int intel_dp_unused_lane_mask(int lane_count)
135{
136 return ~((1 << lane_count) - 1) & 0xf;
137}
138
139static int 134static int
140intel_dp_max_link_bw(struct intel_dp *intel_dp) 135intel_dp_max_link_bw(struct intel_dp *intel_dp)
141{ 136{
@@ -775,6 +770,7 @@ static uint32_t skl_get_aux_send_ctl(struct intel_dp *intel_dp,
775 DP_AUX_CH_CTL_TIME_OUT_1600us | 770 DP_AUX_CH_CTL_TIME_OUT_1600us |
776 DP_AUX_CH_CTL_RECEIVE_ERROR | 771 DP_AUX_CH_CTL_RECEIVE_ERROR |
777 (send_bytes << DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT) | 772 (send_bytes << DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT) |
773 DP_AUX_CH_CTL_FW_SYNC_PULSE_SKL(32) |
778 DP_AUX_CH_CTL_SYNC_PULSE_SKL(32); 774 DP_AUX_CH_CTL_SYNC_PULSE_SKL(32);
779} 775}
780 776
@@ -1181,7 +1177,6 @@ static void intel_aux_reg_init(struct intel_dp *intel_dp)
1181static void 1177static void
1182intel_dp_aux_fini(struct intel_dp *intel_dp) 1178intel_dp_aux_fini(struct intel_dp *intel_dp)
1183{ 1179{
1184 drm_dp_aux_unregister(&intel_dp->aux);
1185 kfree(intel_dp->aux.name); 1180 kfree(intel_dp->aux.name);
1186} 1181}
1187 1182
@@ -1216,15 +1211,6 @@ intel_dp_aux_init(struct intel_dp *intel_dp, struct intel_connector *connector)
1216 return 0; 1211 return 0;
1217} 1212}
1218 1213
1219static void
1220intel_dp_connector_unregister(struct intel_connector *intel_connector)
1221{
1222 struct intel_dp *intel_dp = intel_attached_dp(&intel_connector->base);
1223
1224 intel_dp_aux_fini(intel_dp);
1225 intel_connector_unregister(intel_connector);
1226}
1227
1228static int 1214static int
1229intel_dp_sink_rates(struct intel_dp *intel_dp, const int **sink_rates) 1215intel_dp_sink_rates(struct intel_dp *intel_dp, const int **sink_rates)
1230{ 1216{
@@ -1582,6 +1568,27 @@ found:
1582 &pipe_config->dp_m2_n2); 1568 &pipe_config->dp_m2_n2);
1583 } 1569 }
1584 1570
1571 /*
1572 * DPLL0 VCO may need to be adjusted to get the correct
1573 * clock for eDP. This will affect cdclk as well.
1574 */
1575 if (is_edp(intel_dp) &&
1576 (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv))) {
1577 int vco;
1578
1579 switch (pipe_config->port_clock / 2) {
1580 case 108000:
1581 case 216000:
1582 vco = 8640000;
1583 break;
1584 default:
1585 vco = 8100000;
1586 break;
1587 }
1588
1589 to_intel_atomic_state(pipe_config->base.state)->cdclk_pll_vco = vco;
1590 }
1591
1585 if (!HAS_DDI(dev)) 1592 if (!HAS_DDI(dev))
1586 intel_dp_set_clock(encoder, pipe_config); 1593 intel_dp_set_clock(encoder, pipe_config);
1587 1594
@@ -2460,50 +2467,6 @@ static void vlv_post_disable_dp(struct intel_encoder *encoder)
2460 intel_dp_link_down(intel_dp); 2467 intel_dp_link_down(intel_dp);
2461} 2468}
2462 2469
2463static void chv_data_lane_soft_reset(struct intel_encoder *encoder,
2464 bool reset)
2465{
2466 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
2467 enum dpio_channel ch = vlv_dport_to_channel(enc_to_dig_port(&encoder->base));
2468 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
2469 enum pipe pipe = crtc->pipe;
2470 uint32_t val;
2471
2472 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW0(ch));
2473 if (reset)
2474 val &= ~(DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET);
2475 else
2476 val |= DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET;
2477 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW0(ch), val);
2478
2479 if (crtc->config->lane_count > 2) {
2480 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW0(ch));
2481 if (reset)
2482 val &= ~(DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET);
2483 else
2484 val |= DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET;
2485 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW0(ch), val);
2486 }
2487
2488 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW1(ch));
2489 val |= CHV_PCS_REQ_SOFTRESET_EN;
2490 if (reset)
2491 val &= ~DPIO_PCS_CLK_SOFT_RESET;
2492 else
2493 val |= DPIO_PCS_CLK_SOFT_RESET;
2494 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW1(ch), val);
2495
2496 if (crtc->config->lane_count > 2) {
2497 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW1(ch));
2498 val |= CHV_PCS_REQ_SOFTRESET_EN;
2499 if (reset)
2500 val &= ~DPIO_PCS_CLK_SOFT_RESET;
2501 else
2502 val |= DPIO_PCS_CLK_SOFT_RESET;
2503 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW1(ch), val);
2504 }
2505}
2506
2507static void chv_post_disable_dp(struct intel_encoder *encoder) 2470static void chv_post_disable_dp(struct intel_encoder *encoder)
2508{ 2471{
2509 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); 2472 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
@@ -2811,266 +2774,38 @@ static void vlv_init_panel_power_sequencer(struct intel_dp *intel_dp)
2811 2774
2812static void vlv_pre_enable_dp(struct intel_encoder *encoder) 2775static void vlv_pre_enable_dp(struct intel_encoder *encoder)
2813{ 2776{
2814 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); 2777 vlv_phy_pre_encoder_enable(encoder);
2815 struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
2816 struct drm_device *dev = encoder->base.dev;
2817 struct drm_i915_private *dev_priv = dev->dev_private;
2818 struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
2819 enum dpio_channel port = vlv_dport_to_channel(dport);
2820 int pipe = intel_crtc->pipe;
2821 u32 val;
2822
2823 mutex_lock(&dev_priv->sb_lock);
2824
2825 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW8(port));
2826 val = 0;
2827 if (pipe)
2828 val |= (1<<21);
2829 else
2830 val &= ~(1<<21);
2831 val |= 0x001000c4;
2832 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW8(port), val);
2833 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW14(port), 0x00760018);
2834 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW23(port), 0x00400888);
2835
2836 mutex_unlock(&dev_priv->sb_lock);
2837 2778
2838 intel_enable_dp(encoder); 2779 intel_enable_dp(encoder);
2839} 2780}
2840 2781
2841static void vlv_dp_pre_pll_enable(struct intel_encoder *encoder) 2782static void vlv_dp_pre_pll_enable(struct intel_encoder *encoder)
2842{ 2783{
2843 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
2844 struct drm_device *dev = encoder->base.dev;
2845 struct drm_i915_private *dev_priv = dev->dev_private;
2846 struct intel_crtc *intel_crtc =
2847 to_intel_crtc(encoder->base.crtc);
2848 enum dpio_channel port = vlv_dport_to_channel(dport);
2849 int pipe = intel_crtc->pipe;
2850
2851 intel_dp_prepare(encoder); 2784 intel_dp_prepare(encoder);
2852 2785
2853 /* Program Tx lane resets to default */ 2786 vlv_phy_pre_pll_enable(encoder);
2854 mutex_lock(&dev_priv->sb_lock);
2855 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(port),
2856 DPIO_PCS_TX_LANE2_RESET |
2857 DPIO_PCS_TX_LANE1_RESET);
2858 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW1(port),
2859 DPIO_PCS_CLK_CRI_RXEB_EIOS_EN |
2860 DPIO_PCS_CLK_CRI_RXDIGFILTSG_EN |
2861 (1<<DPIO_PCS_CLK_DATAWIDTH_SHIFT) |
2862 DPIO_PCS_CLK_SOFT_RESET);
2863
2864 /* Fix up inter-pair skew failure */
2865 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW12(port), 0x00750f00);
2866 vlv_dpio_write(dev_priv, pipe, VLV_TX_DW11(port), 0x00001500);
2867 vlv_dpio_write(dev_priv, pipe, VLV_TX_DW14(port), 0x40400000);
2868 mutex_unlock(&dev_priv->sb_lock);
2869} 2787}
2870 2788
2871static void chv_pre_enable_dp(struct intel_encoder *encoder) 2789static void chv_pre_enable_dp(struct intel_encoder *encoder)
2872{ 2790{
2873 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); 2791 chv_phy_pre_encoder_enable(encoder);
2874 struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
2875 struct drm_device *dev = encoder->base.dev;
2876 struct drm_i915_private *dev_priv = dev->dev_private;
2877 struct intel_crtc *intel_crtc =
2878 to_intel_crtc(encoder->base.crtc);
2879 enum dpio_channel ch = vlv_dport_to_channel(dport);
2880 int pipe = intel_crtc->pipe;
2881 int data, i, stagger;
2882 u32 val;
2883
2884 mutex_lock(&dev_priv->sb_lock);
2885
2886 /* allow hardware to manage TX FIFO reset source */
2887 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW11(ch));
2888 val &= ~DPIO_LANEDESKEW_STRAP_OVRD;
2889 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW11(ch), val);
2890
2891 if (intel_crtc->config->lane_count > 2) {
2892 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW11(ch));
2893 val &= ~DPIO_LANEDESKEW_STRAP_OVRD;
2894 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW11(ch), val);
2895 }
2896
2897 /* Program Tx lane latency optimal setting*/
2898 for (i = 0; i < intel_crtc->config->lane_count; i++) {
2899 /* Set the upar bit */
2900 if (intel_crtc->config->lane_count == 1)
2901 data = 0x0;
2902 else
2903 data = (i == 1) ? 0x0 : 0x1;
2904 vlv_dpio_write(dev_priv, pipe, CHV_TX_DW14(ch, i),
2905 data << DPIO_UPAR_SHIFT);
2906 }
2907
2908 /* Data lane stagger programming */
2909 if (intel_crtc->config->port_clock > 270000)
2910 stagger = 0x18;
2911 else if (intel_crtc->config->port_clock > 135000)
2912 stagger = 0xd;
2913 else if (intel_crtc->config->port_clock > 67500)
2914 stagger = 0x7;
2915 else if (intel_crtc->config->port_clock > 33750)
2916 stagger = 0x4;
2917 else
2918 stagger = 0x2;
2919
2920 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW11(ch));
2921 val |= DPIO_TX2_STAGGER_MASK(0x1f);
2922 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW11(ch), val);
2923
2924 if (intel_crtc->config->lane_count > 2) {
2925 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW11(ch));
2926 val |= DPIO_TX2_STAGGER_MASK(0x1f);
2927 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW11(ch), val);
2928 }
2929
2930 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW12(ch),
2931 DPIO_LANESTAGGER_STRAP(stagger) |
2932 DPIO_LANESTAGGER_STRAP_OVRD |
2933 DPIO_TX1_STAGGER_MASK(0x1f) |
2934 DPIO_TX1_STAGGER_MULT(6) |
2935 DPIO_TX2_STAGGER_MULT(0));
2936
2937 if (intel_crtc->config->lane_count > 2) {
2938 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW12(ch),
2939 DPIO_LANESTAGGER_STRAP(stagger) |
2940 DPIO_LANESTAGGER_STRAP_OVRD |
2941 DPIO_TX1_STAGGER_MASK(0x1f) |
2942 DPIO_TX1_STAGGER_MULT(7) |
2943 DPIO_TX2_STAGGER_MULT(5));
2944 }
2945
2946 /* Deassert data lane reset */
2947 chv_data_lane_soft_reset(encoder, false);
2948
2949 mutex_unlock(&dev_priv->sb_lock);
2950 2792
2951 intel_enable_dp(encoder); 2793 intel_enable_dp(encoder);
2952 2794
2953 /* Second common lane will stay alive on its own now */ 2795 /* Second common lane will stay alive on its own now */
2954 if (dport->release_cl2_override) { 2796 chv_phy_release_cl2_override(encoder);
2955 chv_phy_powergate_ch(dev_priv, DPIO_PHY0, DPIO_CH1, false);
2956 dport->release_cl2_override = false;
2957 }
2958} 2797}
2959 2798
2960static void chv_dp_pre_pll_enable(struct intel_encoder *encoder) 2799static void chv_dp_pre_pll_enable(struct intel_encoder *encoder)
2961{ 2800{
2962 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
2963 struct drm_device *dev = encoder->base.dev;
2964 struct drm_i915_private *dev_priv = dev->dev_private;
2965 struct intel_crtc *intel_crtc =
2966 to_intel_crtc(encoder->base.crtc);
2967 enum dpio_channel ch = vlv_dport_to_channel(dport);
2968 enum pipe pipe = intel_crtc->pipe;
2969 unsigned int lane_mask =
2970 intel_dp_unused_lane_mask(intel_crtc->config->lane_count);
2971 u32 val;
2972
2973 intel_dp_prepare(encoder); 2801 intel_dp_prepare(encoder);
2974 2802
2975 /* 2803 chv_phy_pre_pll_enable(encoder);
2976 * Must trick the second common lane into life.
2977 * Otherwise we can't even access the PLL.
2978 */
2979 if (ch == DPIO_CH0 && pipe == PIPE_B)
2980 dport->release_cl2_override =
2981 !chv_phy_powergate_ch(dev_priv, DPIO_PHY0, DPIO_CH1, true);
2982
2983 chv_phy_powergate_lanes(encoder, true, lane_mask);
2984
2985 mutex_lock(&dev_priv->sb_lock);
2986
2987 /* Assert data lane reset */
2988 chv_data_lane_soft_reset(encoder, true);
2989
2990 /* program left/right clock distribution */
2991 if (pipe != PIPE_B) {
2992 val = vlv_dpio_read(dev_priv, pipe, _CHV_CMN_DW5_CH0);
2993 val &= ~(CHV_BUFLEFTENA1_MASK | CHV_BUFRIGHTENA1_MASK);
2994 if (ch == DPIO_CH0)
2995 val |= CHV_BUFLEFTENA1_FORCE;
2996 if (ch == DPIO_CH1)
2997 val |= CHV_BUFRIGHTENA1_FORCE;
2998 vlv_dpio_write(dev_priv, pipe, _CHV_CMN_DW5_CH0, val);
2999 } else {
3000 val = vlv_dpio_read(dev_priv, pipe, _CHV_CMN_DW1_CH1);
3001 val &= ~(CHV_BUFLEFTENA2_MASK | CHV_BUFRIGHTENA2_MASK);
3002 if (ch == DPIO_CH0)
3003 val |= CHV_BUFLEFTENA2_FORCE;
3004 if (ch == DPIO_CH1)
3005 val |= CHV_BUFRIGHTENA2_FORCE;
3006 vlv_dpio_write(dev_priv, pipe, _CHV_CMN_DW1_CH1, val);
3007 }
3008
3009 /* program clock channel usage */
3010 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW8(ch));
3011 val |= CHV_PCS_USEDCLKCHANNEL_OVRRIDE;
3012 if (pipe != PIPE_B)
3013 val &= ~CHV_PCS_USEDCLKCHANNEL;
3014 else
3015 val |= CHV_PCS_USEDCLKCHANNEL;
3016 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW8(ch), val);
3017
3018 if (intel_crtc->config->lane_count > 2) {
3019 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW8(ch));
3020 val |= CHV_PCS_USEDCLKCHANNEL_OVRRIDE;
3021 if (pipe != PIPE_B)
3022 val &= ~CHV_PCS_USEDCLKCHANNEL;
3023 else
3024 val |= CHV_PCS_USEDCLKCHANNEL;
3025 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW8(ch), val);
3026 }
3027
3028 /*
3029 * This a a bit weird since generally CL
3030 * matches the pipe, but here we need to
3031 * pick the CL based on the port.
3032 */
3033 val = vlv_dpio_read(dev_priv, pipe, CHV_CMN_DW19(ch));
3034 if (pipe != PIPE_B)
3035 val &= ~CHV_CMN_USEDCLKCHANNEL;
3036 else
3037 val |= CHV_CMN_USEDCLKCHANNEL;
3038 vlv_dpio_write(dev_priv, pipe, CHV_CMN_DW19(ch), val);
3039
3040 mutex_unlock(&dev_priv->sb_lock);
3041} 2804}
3042 2805
3043static void chv_dp_post_pll_disable(struct intel_encoder *encoder) 2806static void chv_dp_post_pll_disable(struct intel_encoder *encoder)
3044{ 2807{
3045 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 2808 chv_phy_post_pll_disable(encoder);
3046 enum pipe pipe = to_intel_crtc(encoder->base.crtc)->pipe;
3047 u32 val;
3048
3049 mutex_lock(&dev_priv->sb_lock);
3050
3051 /* disable left/right clock distribution */
3052 if (pipe != PIPE_B) {
3053 val = vlv_dpio_read(dev_priv, pipe, _CHV_CMN_DW5_CH0);
3054 val &= ~(CHV_BUFLEFTENA1_MASK | CHV_BUFRIGHTENA1_MASK);
3055 vlv_dpio_write(dev_priv, pipe, _CHV_CMN_DW5_CH0, val);
3056 } else {
3057 val = vlv_dpio_read(dev_priv, pipe, _CHV_CMN_DW1_CH1);
3058 val &= ~(CHV_BUFLEFTENA2_MASK | CHV_BUFRIGHTENA2_MASK);
3059 vlv_dpio_write(dev_priv, pipe, _CHV_CMN_DW1_CH1, val);
3060 }
3061
3062 mutex_unlock(&dev_priv->sb_lock);
3063
3064 /*
3065 * Leave the power down bit cleared for at least one
3066 * lane so that chv_powergate_phy_ch() will power
3067 * on something when the channel is otherwise unused.
3068 * When the port is off and the override is removed
3069 * the lanes power down anyway, so otherwise it doesn't
3070 * really matter what the state of power down bits is
3071 * after this.
3072 */
3073 chv_phy_powergate_lanes(encoder, false, 0x0);
3074} 2809}
3075 2810
3076/* 2811/*
@@ -3178,16 +2913,10 @@ intel_dp_pre_emphasis_max(struct intel_dp *intel_dp, uint8_t voltage_swing)
3178 2913
3179static uint32_t vlv_signal_levels(struct intel_dp *intel_dp) 2914static uint32_t vlv_signal_levels(struct intel_dp *intel_dp)
3180{ 2915{
3181 struct drm_device *dev = intel_dp_to_dev(intel_dp); 2916 struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
3182 struct drm_i915_private *dev_priv = dev->dev_private;
3183 struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
3184 struct intel_crtc *intel_crtc =
3185 to_intel_crtc(dport->base.base.crtc);
3186 unsigned long demph_reg_value, preemph_reg_value, 2917 unsigned long demph_reg_value, preemph_reg_value,
3187 uniqtranscale_reg_value; 2918 uniqtranscale_reg_value;
3188 uint8_t train_set = intel_dp->train_set[0]; 2919 uint8_t train_set = intel_dp->train_set[0];
3189 enum dpio_channel port = vlv_dport_to_channel(dport);
3190 int pipe = intel_crtc->pipe;
3191 2920
3192 switch (train_set & DP_TRAIN_PRE_EMPHASIS_MASK) { 2921 switch (train_set & DP_TRAIN_PRE_EMPHASIS_MASK) {
3193 case DP_TRAIN_PRE_EMPH_LEVEL_0: 2922 case DP_TRAIN_PRE_EMPH_LEVEL_0:
@@ -3262,37 +2991,18 @@ static uint32_t vlv_signal_levels(struct intel_dp *intel_dp)
3262 return 0; 2991 return 0;
3263 } 2992 }
3264 2993
3265 mutex_lock(&dev_priv->sb_lock); 2994 vlv_set_phy_signal_level(encoder, demph_reg_value, preemph_reg_value,
3266 vlv_dpio_write(dev_priv, pipe, VLV_TX_DW5(port), 0x00000000); 2995 uniqtranscale_reg_value, 0);
3267 vlv_dpio_write(dev_priv, pipe, VLV_TX_DW4(port), demph_reg_value);
3268 vlv_dpio_write(dev_priv, pipe, VLV_TX_DW2(port),
3269 uniqtranscale_reg_value);
3270 vlv_dpio_write(dev_priv, pipe, VLV_TX_DW3(port), 0x0C782040);
3271 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW11(port), 0x00030000);
3272 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW9(port), preemph_reg_value);
3273 vlv_dpio_write(dev_priv, pipe, VLV_TX_DW5(port), 0x80000000);
3274 mutex_unlock(&dev_priv->sb_lock);
3275 2996
3276 return 0; 2997 return 0;
3277} 2998}
3278 2999
3279static bool chv_need_uniq_trans_scale(uint8_t train_set)
3280{
3281 return (train_set & DP_TRAIN_PRE_EMPHASIS_MASK) == DP_TRAIN_PRE_EMPH_LEVEL_0 &&
3282 (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) == DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
3283}
3284
3285static uint32_t chv_signal_levels(struct intel_dp *intel_dp) 3000static uint32_t chv_signal_levels(struct intel_dp *intel_dp)
3286{ 3001{
3287 struct drm_device *dev = intel_dp_to_dev(intel_dp); 3002 struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
3288 struct drm_i915_private *dev_priv = dev->dev_private; 3003 u32 deemph_reg_value, margin_reg_value;
3289 struct intel_digital_port *dport = dp_to_dig_port(intel_dp); 3004 bool uniq_trans_scale = false;
3290 struct intel_crtc *intel_crtc = to_intel_crtc(dport->base.base.crtc);
3291 u32 deemph_reg_value, margin_reg_value, val;
3292 uint8_t train_set = intel_dp->train_set[0]; 3005 uint8_t train_set = intel_dp->train_set[0];
3293 enum dpio_channel ch = vlv_dport_to_channel(dport);
3294 enum pipe pipe = intel_crtc->pipe;
3295 int i;
3296 3006
3297 switch (train_set & DP_TRAIN_PRE_EMPHASIS_MASK) { 3007 switch (train_set & DP_TRAIN_PRE_EMPHASIS_MASK) {
3298 case DP_TRAIN_PRE_EMPH_LEVEL_0: 3008 case DP_TRAIN_PRE_EMPH_LEVEL_0:
@@ -3312,7 +3022,7 @@ static uint32_t chv_signal_levels(struct intel_dp *intel_dp)
3312 case DP_TRAIN_VOLTAGE_SWING_LEVEL_3: 3022 case DP_TRAIN_VOLTAGE_SWING_LEVEL_3:
3313 deemph_reg_value = 128; 3023 deemph_reg_value = 128;
3314 margin_reg_value = 154; 3024 margin_reg_value = 154;
3315 /* FIXME extra to set for 1200 */ 3025 uniq_trans_scale = true;
3316 break; 3026 break;
3317 default: 3027 default:
3318 return 0; 3028 return 0;
@@ -3364,88 +3074,8 @@ static uint32_t chv_signal_levels(struct intel_dp *intel_dp)
3364 return 0; 3074 return 0;
3365 } 3075 }
3366 3076
3367 mutex_lock(&dev_priv->sb_lock); 3077 chv_set_phy_signal_level(encoder, deemph_reg_value,
3368 3078 margin_reg_value, uniq_trans_scale);
3369 /* Clear calc init */
3370 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW10(ch));
3371 val &= ~(DPIO_PCS_SWING_CALC_TX0_TX2 | DPIO_PCS_SWING_CALC_TX1_TX3);
3372 val &= ~(DPIO_PCS_TX1DEEMP_MASK | DPIO_PCS_TX2DEEMP_MASK);
3373 val |= DPIO_PCS_TX1DEEMP_9P5 | DPIO_PCS_TX2DEEMP_9P5;
3374 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW10(ch), val);
3375
3376 if (intel_crtc->config->lane_count > 2) {
3377 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW10(ch));
3378 val &= ~(DPIO_PCS_SWING_CALC_TX0_TX2 | DPIO_PCS_SWING_CALC_TX1_TX3);
3379 val &= ~(DPIO_PCS_TX1DEEMP_MASK | DPIO_PCS_TX2DEEMP_MASK);
3380 val |= DPIO_PCS_TX1DEEMP_9P5 | DPIO_PCS_TX2DEEMP_9P5;
3381 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW10(ch), val);
3382 }
3383
3384 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW9(ch));
3385 val &= ~(DPIO_PCS_TX1MARGIN_MASK | DPIO_PCS_TX2MARGIN_MASK);
3386 val |= DPIO_PCS_TX1MARGIN_000 | DPIO_PCS_TX2MARGIN_000;
3387 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW9(ch), val);
3388
3389 if (intel_crtc->config->lane_count > 2) {
3390 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW9(ch));
3391 val &= ~(DPIO_PCS_TX1MARGIN_MASK | DPIO_PCS_TX2MARGIN_MASK);
3392 val |= DPIO_PCS_TX1MARGIN_000 | DPIO_PCS_TX2MARGIN_000;
3393 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW9(ch), val);
3394 }
3395
3396 /* Program swing deemph */
3397 for (i = 0; i < intel_crtc->config->lane_count; i++) {
3398 val = vlv_dpio_read(dev_priv, pipe, CHV_TX_DW4(ch, i));
3399 val &= ~DPIO_SWING_DEEMPH9P5_MASK;
3400 val |= deemph_reg_value << DPIO_SWING_DEEMPH9P5_SHIFT;
3401 vlv_dpio_write(dev_priv, pipe, CHV_TX_DW4(ch, i), val);
3402 }
3403
3404 /* Program swing margin */
3405 for (i = 0; i < intel_crtc->config->lane_count; i++) {
3406 val = vlv_dpio_read(dev_priv, pipe, CHV_TX_DW2(ch, i));
3407
3408 val &= ~DPIO_SWING_MARGIN000_MASK;
3409 val |= margin_reg_value << DPIO_SWING_MARGIN000_SHIFT;
3410
3411 /*
3412 * Supposedly this value shouldn't matter when unique transition
3413 * scale is disabled, but in fact it does matter. Let's just
3414 * always program the same value and hope it's OK.
3415 */
3416 val &= ~(0xff << DPIO_UNIQ_TRANS_SCALE_SHIFT);
3417 val |= 0x9a << DPIO_UNIQ_TRANS_SCALE_SHIFT;
3418
3419 vlv_dpio_write(dev_priv, pipe, CHV_TX_DW2(ch, i), val);
3420 }
3421
3422 /*
3423 * The document said it needs to set bit 27 for ch0 and bit 26
3424 * for ch1. Might be a typo in the doc.
3425 * For now, for this unique transition scale selection, set bit
3426 * 27 for ch0 and ch1.
3427 */
3428 for (i = 0; i < intel_crtc->config->lane_count; i++) {
3429 val = vlv_dpio_read(dev_priv, pipe, CHV_TX_DW3(ch, i));
3430 if (chv_need_uniq_trans_scale(train_set))
3431 val |= DPIO_TX_UNIQ_TRANS_SCALE_EN;
3432 else
3433 val &= ~DPIO_TX_UNIQ_TRANS_SCALE_EN;
3434 vlv_dpio_write(dev_priv, pipe, CHV_TX_DW3(ch, i), val);
3435 }
3436
3437 /* Start swing calculation */
3438 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW10(ch));
3439 val |= DPIO_PCS_SWING_CALC_TX0_TX2 | DPIO_PCS_SWING_CALC_TX1_TX3;
3440 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW10(ch), val);
3441
3442 if (intel_crtc->config->lane_count > 2) {
3443 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW10(ch));
3444 val |= DPIO_PCS_SWING_CALC_TX0_TX2 | DPIO_PCS_SWING_CALC_TX1_TX3;
3445 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW10(ch), val);
3446 }
3447
3448 mutex_unlock(&dev_priv->sb_lock);
3449 3079
3450 return 0; 3080 return 0;
3451} 3081}
@@ -3714,7 +3344,6 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp)
3714 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); 3344 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
3715 struct drm_device *dev = dig_port->base.base.dev; 3345 struct drm_device *dev = dig_port->base.base.dev;
3716 struct drm_i915_private *dev_priv = dev->dev_private; 3346 struct drm_i915_private *dev_priv = dev->dev_private;
3717 uint8_t rev;
3718 3347
3719 if (drm_dp_dpcd_read(&intel_dp->aux, 0x000, intel_dp->dpcd, 3348 if (drm_dp_dpcd_read(&intel_dp->aux, 0x000, intel_dp->dpcd,
3720 sizeof(intel_dp->dpcd)) < 0) 3349 sizeof(intel_dp->dpcd)) < 0)
@@ -3771,6 +3400,15 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp)
3771 DRM_DEBUG_KMS("PSR2 %s on sink", 3400 DRM_DEBUG_KMS("PSR2 %s on sink",
3772 dev_priv->psr.psr2_support ? "supported" : "not supported"); 3401 dev_priv->psr.psr2_support ? "supported" : "not supported");
3773 } 3402 }
3403
3404 /* Read the eDP Display control capabilities registers */
3405 memset(intel_dp->edp_dpcd, 0, sizeof(intel_dp->edp_dpcd));
3406 if ((intel_dp->dpcd[DP_EDP_CONFIGURATION_CAP] & DP_DPCD_DISPLAY_CONTROL_CAPABLE) &&
3407 (drm_dp_dpcd_read(&intel_dp->aux, DP_EDP_DPCD_REV,
3408 intel_dp->edp_dpcd, sizeof(intel_dp->edp_dpcd)) ==
3409 sizeof(intel_dp->edp_dpcd)))
3410 DRM_DEBUG_KMS("EDP DPCD : %*ph\n", (int) sizeof(intel_dp->edp_dpcd),
3411 intel_dp->edp_dpcd);
3774 } 3412 }
3775 3413
3776 DRM_DEBUG_KMS("Display Port TPS3 support: source %s, sink %s\n", 3414 DRM_DEBUG_KMS("Display Port TPS3 support: source %s, sink %s\n",
@@ -3778,10 +3416,7 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp)
3778 yesno(drm_dp_tps3_supported(intel_dp->dpcd))); 3416 yesno(drm_dp_tps3_supported(intel_dp->dpcd)));
3779 3417
3780 /* Intermediate frequency support */ 3418 /* Intermediate frequency support */
3781 if (is_edp(intel_dp) && 3419 if (is_edp(intel_dp) && (intel_dp->edp_dpcd[0] >= 0x03)) { /* eDp v1.4 or higher */
3782 (intel_dp->dpcd[DP_EDP_CONFIGURATION_CAP] & DP_DPCD_DISPLAY_CONTROL_CAPABLE) &&
3783 (drm_dp_dpcd_read(&intel_dp->aux, DP_EDP_DPCD_REV, &rev, 1) == 1) &&
3784 (rev >= 0x03)) { /* eDp v1.4 or higher */
3785 __le16 sink_rates[DP_MAX_SUPPORTED_RATES]; 3420 __le16 sink_rates[DP_MAX_SUPPORTED_RATES];
3786 int i; 3421 int i;
3787 3422
@@ -4812,6 +4447,13 @@ done:
4812} 4447}
4813 4448
4814static void 4449static void
4450intel_dp_connector_unregister(struct drm_connector *connector)
4451{
4452 drm_dp_aux_unregister(&intel_attached_dp(connector)->aux);
4453 intel_connector_unregister(connector);
4454}
4455
4456static void
4815intel_dp_connector_destroy(struct drm_connector *connector) 4457intel_dp_connector_destroy(struct drm_connector *connector)
4816{ 4458{
4817 struct intel_connector *intel_connector = to_intel_connector(connector); 4459 struct intel_connector *intel_connector = to_intel_connector(connector);
@@ -4851,6 +4493,9 @@ void intel_dp_encoder_destroy(struct drm_encoder *encoder)
4851 intel_dp->edp_notifier.notifier_call = NULL; 4493 intel_dp->edp_notifier.notifier_call = NULL;
4852 } 4494 }
4853 } 4495 }
4496
4497 intel_dp_aux_fini(intel_dp);
4498
4854 drm_encoder_cleanup(encoder); 4499 drm_encoder_cleanup(encoder);
4855 kfree(intel_dig_port); 4500 kfree(intel_dig_port);
4856} 4501}
@@ -4927,6 +4572,7 @@ static const struct drm_connector_funcs intel_dp_connector_funcs = {
4927 .fill_modes = drm_helper_probe_single_connector_modes, 4572 .fill_modes = drm_helper_probe_single_connector_modes,
4928 .set_property = intel_dp_set_property, 4573 .set_property = intel_dp_set_property,
4929 .atomic_get_property = intel_connector_atomic_get_property, 4574 .atomic_get_property = intel_connector_atomic_get_property,
4575 .early_unregister = intel_dp_connector_unregister,
4930 .destroy = intel_dp_connector_destroy, 4576 .destroy = intel_dp_connector_destroy,
4931 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, 4577 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
4932 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, 4578 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
@@ -4935,7 +4581,6 @@ static const struct drm_connector_funcs intel_dp_connector_funcs = {
4935static const struct drm_connector_helper_funcs intel_dp_connector_helper_funcs = { 4581static const struct drm_connector_helper_funcs intel_dp_connector_helper_funcs = {
4936 .get_modes = intel_dp_get_modes, 4582 .get_modes = intel_dp_get_modes,
4937 .mode_valid = intel_dp_mode_valid, 4583 .mode_valid = intel_dp_mode_valid,
4938 .best_encoder = intel_best_encoder,
4939}; 4584};
4940 4585
4941static const struct drm_encoder_funcs intel_dp_enc_funcs = { 4586static const struct drm_encoder_funcs intel_dp_enc_funcs = {
@@ -4977,9 +4622,6 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)
4977 intel_display_power_get(dev_priv, power_domain); 4622 intel_display_power_get(dev_priv, power_domain);
4978 4623
4979 if (long_hpd) { 4624 if (long_hpd) {
4980 /* indicate that we need to restart link training */
4981 intel_dp->train_set_valid = false;
4982
4983 intel_dp_long_pulse(intel_dp->attached_connector); 4625 intel_dp_long_pulse(intel_dp->attached_connector);
4984 if (intel_dp->is_mst) 4626 if (intel_dp->is_mst)
4985 ret = IRQ_HANDLED; 4627 ret = IRQ_HANDLED;
@@ -5590,14 +5232,14 @@ void intel_edp_drrs_flush(struct drm_device *dev,
5590 * 5232 *
5591 * DRRS saves power by switching to low RR based on usage scenarios. 5233 * DRRS saves power by switching to low RR based on usage scenarios.
5592 * 5234 *
5593 * eDP DRRS:- 5235 * The implementation is based on frontbuffer tracking implementation. When
5594 * The implementation is based on frontbuffer tracking implementation. 5236 * there is a disturbance on the screen triggered by user activity or a periodic
5595 * When there is a disturbance on the screen triggered by user activity or a 5237 * system activity, DRRS is disabled (RR is changed to high RR). When there is
5596 * periodic system activity, DRRS is disabled (RR is changed to high RR). 5238 * no movement on screen, after a timeout of 1 second, a switch to low RR is
5597 * When there is no movement on screen, after a timeout of 1 second, a switch 5239 * made.
5598 * to low RR is made. 5240 *
5599 * For integration with frontbuffer tracking code, 5241 * For integration with frontbuffer tracking code, intel_edp_drrs_invalidate()
5600 * intel_edp_drrs_invalidate() and intel_edp_drrs_flush() are called. 5242 * and intel_edp_drrs_flush() are called.
5601 * 5243 *
5602 * DRRS can be further extended to support other internal panels and also 5244 * DRRS can be further extended to support other internal panels and also
5603 * the scenario of video playback wherein RR is set based on the rate 5245 * the scenario of video playback wherein RR is set based on the rate
@@ -5725,8 +5367,11 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
5725 if (!fixed_mode && dev_priv->vbt.lfp_lvds_vbt_mode) { 5367 if (!fixed_mode && dev_priv->vbt.lfp_lvds_vbt_mode) {
5726 fixed_mode = drm_mode_duplicate(dev, 5368 fixed_mode = drm_mode_duplicate(dev,
5727 dev_priv->vbt.lfp_lvds_vbt_mode); 5369 dev_priv->vbt.lfp_lvds_vbt_mode);
5728 if (fixed_mode) 5370 if (fixed_mode) {
5729 fixed_mode->type |= DRM_MODE_TYPE_PREFERRED; 5371 fixed_mode->type |= DRM_MODE_TYPE_PREFERRED;
5372 connector->display_info.width_mm = fixed_mode->width_mm;
5373 connector->display_info.height_mm = fixed_mode->height_mm;
5374 }
5730 } 5375 }
5731 mutex_unlock(&dev->mode_config.mutex); 5376 mutex_unlock(&dev->mode_config.mutex);
5732 5377
@@ -5840,7 +5485,6 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
5840 intel_connector->get_hw_state = intel_ddi_connector_get_hw_state; 5485 intel_connector->get_hw_state = intel_ddi_connector_get_hw_state;
5841 else 5486 else
5842 intel_connector->get_hw_state = intel_connector_get_hw_state; 5487 intel_connector->get_hw_state = intel_connector_get_hw_state;
5843 intel_connector->unregister = intel_dp_connector_unregister;
5844 5488
5845 /* Set up the hotplug pin. */ 5489 /* Set up the hotplug pin. */
5846 switch (port) { 5490 switch (port) {
@@ -5923,9 +5567,9 @@ fail:
5923 return false; 5567 return false;
5924} 5568}
5925 5569
5926void 5570bool intel_dp_init(struct drm_device *dev,
5927intel_dp_init(struct drm_device *dev, 5571 i915_reg_t output_reg,
5928 i915_reg_t output_reg, enum port port) 5572 enum port port)
5929{ 5573{
5930 struct drm_i915_private *dev_priv = dev->dev_private; 5574 struct drm_i915_private *dev_priv = dev->dev_private;
5931 struct intel_digital_port *intel_dig_port; 5575 struct intel_digital_port *intel_dig_port;
@@ -5935,7 +5579,7 @@ intel_dp_init(struct drm_device *dev,
5935 5579
5936 intel_dig_port = kzalloc(sizeof(*intel_dig_port), GFP_KERNEL); 5580 intel_dig_port = kzalloc(sizeof(*intel_dig_port), GFP_KERNEL);
5937 if (!intel_dig_port) 5581 if (!intel_dig_port)
5938 return; 5582 return false;
5939 5583
5940 intel_connector = intel_connector_alloc(); 5584 intel_connector = intel_connector_alloc();
5941 if (!intel_connector) 5585 if (!intel_connector)
@@ -5945,7 +5589,7 @@ intel_dp_init(struct drm_device *dev,
5945 encoder = &intel_encoder->base; 5589 encoder = &intel_encoder->base;
5946 5590
5947 if (drm_encoder_init(dev, &intel_encoder->base, &intel_dp_enc_funcs, 5591 if (drm_encoder_init(dev, &intel_encoder->base, &intel_dp_enc_funcs,
5948 DRM_MODE_ENCODER_TMDS, NULL)) 5592 DRM_MODE_ENCODER_TMDS, "DP %c", port_name(port)))
5949 goto err_encoder_init; 5593 goto err_encoder_init;
5950 5594
5951 intel_encoder->compute_config = intel_dp_compute_config; 5595 intel_encoder->compute_config = intel_dp_compute_config;
@@ -5992,7 +5636,7 @@ intel_dp_init(struct drm_device *dev,
5992 if (!intel_dp_init_connector(intel_dig_port, intel_connector)) 5636 if (!intel_dp_init_connector(intel_dig_port, intel_connector))
5993 goto err_init_connector; 5637 goto err_init_connector;
5994 5638
5995 return; 5639 return true;
5996 5640
5997err_init_connector: 5641err_init_connector:
5998 drm_encoder_cleanup(encoder); 5642 drm_encoder_cleanup(encoder);
@@ -6000,8 +5644,7 @@ err_encoder_init:
6000 kfree(intel_connector); 5644 kfree(intel_connector);
6001err_connector_alloc: 5645err_connector_alloc:
6002 kfree(intel_dig_port); 5646 kfree(intel_dig_port);
6003 5647 return false;
6004 return;
6005} 5648}
6006 5649
6007void intel_dp_mst_suspend(struct drm_device *dev) 5650void intel_dp_mst_suspend(struct drm_device *dev)