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.c23
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
189static 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
185static void intel_mst_pre_enable_dp(struct intel_encoder *encoder, 203static 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;