diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp_mst.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp_mst.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c index 3d62c63c0763..c34ffa959e90 100644 --- a/drivers/gpu/drm/i915/intel_dp_mst.c +++ b/drivers/gpu/drm/i915/intel_dp_mst.c | |||
@@ -88,6 +88,10 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder, | |||
88 | 88 | ||
89 | pipe_config->dp_m_n.tu = slots; | 89 | pipe_config->dp_m_n.tu = slots; |
90 | 90 | ||
91 | if (IS_GEN9_LP(dev_priv)) | ||
92 | pipe_config->lane_lat_optim_mask = | ||
93 | bxt_ddi_phy_calc_lane_lat_optim_mask(pipe_config->lane_count); | ||
94 | |||
91 | intel_ddi_compute_min_voltage_level(dev_priv, pipe_config); | 95 | intel_ddi_compute_min_voltage_level(dev_priv, pipe_config); |
92 | 96 | ||
93 | return true; | 97 | return true; |
@@ -182,6 +186,20 @@ static void intel_mst_post_disable_dp(struct intel_encoder *encoder, | |||
182 | DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links); | 186 | DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links); |
183 | } | 187 | } |
184 | 188 | ||
189 | static void intel_mst_pre_pll_enable_dp(struct intel_encoder *encoder, | ||
190 | const struct intel_crtc_state *pipe_config, | ||
191 | const struct drm_connector_state *conn_state) | ||
192 | { | ||
193 | struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base); | ||
194 | struct intel_digital_port *intel_dig_port = intel_mst->primary; | ||
195 | struct intel_dp *intel_dp = &intel_dig_port->dp; | ||
196 | |||
197 | if (intel_dp->active_mst_links == 0 && | ||
198 | intel_dig_port->base.pre_pll_enable) | ||
199 | intel_dig_port->base.pre_pll_enable(&intel_dig_port->base, | ||
200 | pipe_config, NULL); | ||
201 | } | ||
202 | |||
185 | static void intel_mst_pre_enable_dp(struct intel_encoder *encoder, | 203 | static void intel_mst_pre_enable_dp(struct intel_encoder *encoder, |
186 | const struct intel_crtc_state *pipe_config, | 204 | const struct intel_crtc_state *pipe_config, |
187 | const struct drm_connector_state *conn_state) | 205 | const struct drm_connector_state *conn_state) |
@@ -311,6 +329,10 @@ static void intel_dp_mst_enc_get_config(struct intel_encoder *encoder, | |||
311 | 329 | ||
312 | intel_ddi_clock_get(&intel_dig_port->base, pipe_config); | 330 | intel_ddi_clock_get(&intel_dig_port->base, pipe_config); |
313 | 331 | ||
332 | if (IS_GEN9_LP(dev_priv)) | ||
333 | pipe_config->lane_lat_optim_mask = | ||
334 | bxt_ddi_phy_get_lane_lat_optim_mask(encoder); | ||
335 | |||
314 | intel_ddi_compute_min_voltage_level(dev_priv, pipe_config); | 336 | intel_ddi_compute_min_voltage_level(dev_priv, pipe_config); |
315 | } | 337 | } |
316 | 338 | ||
@@ -582,6 +604,7 @@ intel_dp_create_fake_mst_encoder(struct intel_digital_port *intel_dig_port, enum | |||
582 | intel_encoder->compute_config = intel_dp_mst_compute_config; | 604 | intel_encoder->compute_config = intel_dp_mst_compute_config; |
583 | intel_encoder->disable = intel_mst_disable_dp; | 605 | intel_encoder->disable = intel_mst_disable_dp; |
584 | intel_encoder->post_disable = intel_mst_post_disable_dp; | 606 | intel_encoder->post_disable = intel_mst_post_disable_dp; |
607 | intel_encoder->pre_pll_enable = intel_mst_pre_pll_enable_dp; | ||
585 | intel_encoder->pre_enable = intel_mst_pre_enable_dp; | 608 | intel_encoder->pre_enable = intel_mst_pre_enable_dp; |
586 | intel_encoder->enable = intel_mst_enable_dp; | 609 | intel_encoder->enable = intel_mst_enable_dp; |
587 | intel_encoder->get_hw_state = intel_dp_mst_enc_get_hw_state; | 610 | intel_encoder->get_hw_state = intel_dp_mst_enc_get_hw_state; |