Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2b82435c authored by Imre Deak's avatar Imre Deak Committed by Rodrigo Vivi
Browse files

drm/i915/dp_mst: Fix enabling pipe clock for all streams

commit afb2c443 ("drm/i915/ddi: Push pipe clock enabling to encoders")
inadvertently stopped enabling the pipe clock for any DP-MST stream
after the first one. It also rearranged the pipe clock enabling wrt.
initial MST payload allocation step (which may or may not be a
problem, but it's contrary to the spec.).

Fix things by making the above commit truly a non-functional change.

Fixes: afb2c443 ("drm/i915/ddi: Push pipe clock enabling to encoders")
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107365


Reported-by: default avatarLyude Paul <lyude@redhat.com>
Reported-by: default avatar <dmummenschanz@web.de>
Tested-by: default avatar <dmummenschanz@web.de>
Tested-by: default avatarLyude Paul <lyude@redhat.com>
Cc: Lyude Paul <lyude@redhat.com>
Cc: dmummenschanz@web.de
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
Reviewed-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180831174739.30387-1-imre.deak@intel.com


(cherry picked from commit 2b5cf4ef541f1b2facaca58cae5e8e0b5f19ad4c)
Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent 4fe96791
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -2708,6 +2708,7 @@ static void intel_ddi_pre_enable_dp(struct intel_encoder *encoder,
	if (port != PORT_A || INTEL_GEN(dev_priv) >= 9)
		intel_dp_stop_link_train(intel_dp);

	if (!is_mst)
		intel_ddi_enable_pipe_clock(crtc_state);
}

@@ -2810,14 +2811,14 @@ static void intel_ddi_post_disable_dp(struct intel_encoder *encoder,
	bool is_mst = intel_crtc_has_type(old_crtc_state,
					  INTEL_OUTPUT_DP_MST);

	if (!is_mst) {
		intel_ddi_disable_pipe_clock(old_crtc_state);

		/*
		 * Power down sink before disabling the port, otherwise we end
		 * up getting interrupts from the sink on detecting link loss.
		 */
	if (!is_mst)
		intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF);
	}

	intel_disable_ddi_buf(encoder);

+4 −0
Original line number Diff line number Diff line
@@ -166,6 +166,8 @@ static void intel_mst_post_disable_dp(struct intel_encoder *encoder,
	struct intel_connector *connector =
		to_intel_connector(old_conn_state->connector);

	intel_ddi_disable_pipe_clock(old_crtc_state);

	/* this can fail */
	drm_dp_check_act_status(&intel_dp->mst_mgr);
	/* and this can also fail */
@@ -252,6 +254,8 @@ static void intel_mst_pre_enable_dp(struct intel_encoder *encoder,
	I915_WRITE(DP_TP_STATUS(port), temp);

	ret = drm_dp_update_payload_part1(&intel_dp->mst_mgr);

	intel_ddi_enable_pipe_clock(pipe_config);
}

static void intel_mst_enable_dp(struct intel_encoder *encoder,