aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_dp_mst.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp_mst.c')
-rw-r--r--drivers/gpu/drm/i915/intel_dp_mst.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index 3e4be5a3becd..ff8ba55853be 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -39,7 +39,7 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
39 struct intel_dp *intel_dp = &intel_dig_port->dp; 39 struct intel_dp *intel_dp = &intel_dig_port->dp;
40 struct drm_atomic_state *state; 40 struct drm_atomic_state *state;
41 int bpp, i; 41 int bpp, i;
42 int lane_count, slots, rate; 42 int lane_count, slots;
43 struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode; 43 struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode;
44 struct drm_connector *drm_connector; 44 struct drm_connector *drm_connector;
45 struct intel_connector *connector, *found = NULL; 45 struct intel_connector *connector, *found = NULL;
@@ -56,20 +56,11 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
56 */ 56 */
57 lane_count = drm_dp_max_lane_count(intel_dp->dpcd); 57 lane_count = drm_dp_max_lane_count(intel_dp->dpcd);
58 58
59 rate = intel_dp_max_link_rate(intel_dp);
60 59
61 if (intel_dp->num_sink_rates) { 60 pipe_config->lane_count = lane_count;
62 intel_dp->link_bw = 0;
63 intel_dp->rate_select = intel_dp_rate_select(intel_dp, rate);
64 } else {
65 intel_dp->link_bw = drm_dp_link_rate_to_bw_code(rate);
66 intel_dp->rate_select = 0;
67 }
68
69 intel_dp->lane_count = lane_count;
70 61
71 pipe_config->pipe_bpp = 24; 62 pipe_config->pipe_bpp = 24;
72 pipe_config->port_clock = rate; 63 pipe_config->port_clock = intel_dp_max_link_rate(intel_dp);
73 64
74 state = pipe_config->base.state; 65 state = pipe_config->base.state;
75 66
@@ -184,6 +175,8 @@ static void intel_mst_pre_enable_dp(struct intel_encoder *encoder)
184 if (intel_dp->active_mst_links == 0) { 175 if (intel_dp->active_mst_links == 0) {
185 enum port port = intel_ddi_get_encoder_port(encoder); 176 enum port port = intel_ddi_get_encoder_port(encoder);
186 177
178 intel_dp_set_link_params(intel_dp, intel_crtc->config);
179
187 /* FIXME: add support for SKL */ 180 /* FIXME: add support for SKL */
188 if (INTEL_INFO(dev)->gen < 9) 181 if (INTEL_INFO(dev)->gen < 9)
189 I915_WRITE(PORT_CLK_SEL(port), 182 I915_WRITE(PORT_CLK_SEL(port),
@@ -286,6 +279,10 @@ static void intel_dp_mst_enc_get_config(struct intel_encoder *encoder,
286 break; 279 break;
287 } 280 }
288 pipe_config->base.adjusted_mode.flags |= flags; 281 pipe_config->base.adjusted_mode.flags |= flags;
282
283 pipe_config->lane_count =
284 ((temp & DDI_PORT_WIDTH_MASK) >> DDI_PORT_WIDTH_SHIFT) + 1;
285
289 intel_dp_get_m_n(crtc, pipe_config); 286 intel_dp_get_m_n(crtc, pipe_config);
290 287
291 intel_ddi_clock_get(&intel_dig_port->base, pipe_config); 288 intel_ddi_clock_get(&intel_dig_port->base, pipe_config);