|
@@ -2324,7 +2324,8 @@ static void intel_ddi_pre_enable_dp(struct intel_encoder *encoder,
|
|
|
intel_prepare_dp_ddi_buffers(encoder, crtc_state);
|
|
|
|
|
|
intel_ddi_init_dp_buf_reg(encoder);
|
|
|
- intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
|
|
|
+ if (!is_mst)
|
|
|
+ intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
|
|
|
intel_dp_start_link_train(intel_dp);
|
|
|
if (port != PORT_A || INTEL_GEN(dev_priv) >= 9)
|
|
|
intel_dp_stop_link_train(intel_dp);
|
|
@@ -2422,12 +2423,15 @@ static void intel_ddi_post_disable_dp(struct intel_encoder *encoder,
|
|
|
struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
|
|
|
struct intel_digital_port *dig_port = enc_to_dig_port(&encoder->base);
|
|
|
struct intel_dp *intel_dp = &dig_port->dp;
|
|
|
+ bool is_mst = intel_crtc_has_type(old_crtc_state,
|
|
|
+ INTEL_OUTPUT_DP_MST);
|
|
|
|
|
|
/*
|
|
|
* Power down sink before disabling the port, otherwise we end
|
|
|
* up getting interrupts from the sink on detecting link loss.
|
|
|
*/
|
|
|
- intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF);
|
|
|
+ if (!is_mst)
|
|
|
+ intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF);
|
|
|
|
|
|
intel_disable_ddi_buf(encoder);
|
|
|
|