aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_dp_mst.c
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2017-10-27 09:43:48 -0400
committerVille Syrjälä <ville.syrjala@linux.intel.com>2017-10-27 15:14:37 -0400
commit5161d058dff4d53c78a046350d64beff54e9a9f7 (patch)
treec07321569a956dcbff1f64944a72cfa0f2c03b8e /drivers/gpu/drm/i915/intel_dp_mst.c
parent742745f1ee4f5a36e5cc5e8b360b519df45efa89 (diff)
drm/i915: Fix BXT lane latency optimal setting with MST
Call the DDI .pre_pll_enable() hook from the MST code so that BXT gets the correct lane latency optimal setting applied. And we obviously need to compute the correct value, and read it out to keep the state checker happy. While at it drop the useless 'encoder' parameter to bxt_ddi_phy_calc_lane_lat_optim_mask() Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Cc: Imre Deak <imre.deak@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20171027134348.31190-1-ville.syrjala@linux.intel.com Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
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;