diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp_mst.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp_mst.c | 21 |
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); |