aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/i915/intel_ddi.c8
-rw-r--r--drivers/gpu/drm/i915/intel_dp_mst.c8
2 files changed, 13 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index a6672a9abd85..92cb26b18a9b 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2324,7 +2324,8 @@ static void intel_ddi_pre_enable_dp(struct intel_encoder *encoder,
2324 intel_prepare_dp_ddi_buffers(encoder, crtc_state); 2324 intel_prepare_dp_ddi_buffers(encoder, crtc_state);
2325 2325
2326 intel_ddi_init_dp_buf_reg(encoder); 2326 intel_ddi_init_dp_buf_reg(encoder);
2327 intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON); 2327 if (!is_mst)
2328 intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
2328 intel_dp_start_link_train(intel_dp); 2329 intel_dp_start_link_train(intel_dp);
2329 if (port != PORT_A || INTEL_GEN(dev_priv) >= 9) 2330 if (port != PORT_A || INTEL_GEN(dev_priv) >= 9)
2330 intel_dp_stop_link_train(intel_dp); 2331 intel_dp_stop_link_train(intel_dp);
@@ -2422,12 +2423,15 @@ static void intel_ddi_post_disable_dp(struct intel_encoder *encoder,
2422 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 2423 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
2423 struct intel_digital_port *dig_port = enc_to_dig_port(&encoder->base); 2424 struct intel_digital_port *dig_port = enc_to_dig_port(&encoder->base);
2424 struct intel_dp *intel_dp = &dig_port->dp; 2425 struct intel_dp *intel_dp = &dig_port->dp;
2426 bool is_mst = intel_crtc_has_type(old_crtc_state,
2427 INTEL_OUTPUT_DP_MST);
2425 2428
2426 /* 2429 /*
2427 * Power down sink before disabling the port, otherwise we end 2430 * Power down sink before disabling the port, otherwise we end
2428 * up getting interrupts from the sink on detecting link loss. 2431 * up getting interrupts from the sink on detecting link loss.
2429 */ 2432 */
2430 intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF); 2433 if (!is_mst)
2434 intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF);
2431 2435
2432 intel_disable_ddi_buf(encoder); 2436 intel_disable_ddi_buf(encoder);
2433 2437
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index c3de0918ee13..9e6956c08688 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -180,9 +180,11 @@ static void intel_mst_post_disable_dp(struct intel_encoder *encoder,
180 intel_dp->active_mst_links--; 180 intel_dp->active_mst_links--;
181 181
182 intel_mst->connector = NULL; 182 intel_mst->connector = NULL;
183 if (intel_dp->active_mst_links == 0) 183 if (intel_dp->active_mst_links == 0) {
184 intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF);
184 intel_dig_port->base.post_disable(&intel_dig_port->base, 185 intel_dig_port->base.post_disable(&intel_dig_port->base,
185 old_crtc_state, NULL); 186 old_crtc_state, NULL);
187 }
186 188
187 DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links); 189 DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links);
188} 190}
@@ -223,7 +225,11 @@ static void intel_mst_pre_enable_dp(struct intel_encoder *encoder,
223 225
224 DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links); 226 DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links);
225 227
228 if (intel_dp->active_mst_links == 0)
229 intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
230
226 drm_dp_send_power_updown_phy(&intel_dp->mst_mgr, connector->port, true); 231 drm_dp_send_power_updown_phy(&intel_dp->mst_mgr, connector->port, true);
232
227 if (intel_dp->active_mst_links == 0) 233 if (intel_dp->active_mst_links == 0)
228 intel_dig_port->base.pre_enable(&intel_dig_port->base, 234 intel_dig_port->base.pre_enable(&intel_dig_port->base,
229 pipe_config, NULL); 235 pipe_config, NULL);