Commit f6971d74 authored by Jani Nikula's avatar Jani Nikula
Browse files

drm/i915/mst: adapt intel_dp_mtp_tu_compute_config() for 128b/132b SST



Handle 128b/132b SST in intel_dp_mtp_tu_compute_config(). The remote
bandwidth overhead and time slot allocation are only relevant for MST;
SST only needs the local bandwidth and a check that 64 slots isn't
exceeded.

Reviewed-by: default avatarImre Deak <imre.deak@intel.com>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/b59c94b0aac2c073b0306c0a0040b26330f94260.1735912293.git.jani.nikula@intel.com
parent 1ed21a66
Loading
Loading
Loading
Loading
+61 −48
Original line number Diff line number Diff line
@@ -257,10 +257,7 @@ int intel_dp_mtp_tu_compute_config(struct intel_dp *intel_dp,

	for (bpp = max_bpp; bpp >= min_bpp; bpp -= step) {
		int local_bw_overhead;
		int remote_bw_overhead;
		int link_bpp_x16;
		int remote_tu;
		fixed20_12 pbn;

		drm_dbg_kms(display->drm, "Trying bpp %d\n", bpp);

@@ -269,14 +266,19 @@ int intel_dp_mtp_tu_compute_config(struct intel_dp *intel_dp,

		local_bw_overhead = intel_dp_mst_bw_overhead(crtc_state,
							     false, dsc_slice_count, link_bpp_x16);
		remote_bw_overhead = intel_dp_mst_bw_overhead(crtc_state,
							      true, dsc_slice_count, link_bpp_x16);

		intel_dp_mst_compute_m_n(crtc_state,
					 local_bw_overhead,
					 link_bpp_x16,
					 &crtc_state->dp_m_n);

		if (intel_dp->is_mst) {
			int remote_bw_overhead;
			int remote_tu;
			fixed20_12 pbn;

			remote_bw_overhead = intel_dp_mst_bw_overhead(crtc_state,
								      true, dsc_slice_count, link_bpp_x16);

			/*
			 * The TU size programmed to the HW determines which slots in
			 * an MTP frame are used for this stream, which needs to match
@@ -320,6 +322,17 @@ int intel_dp_mtp_tu_compute_config(struct intel_dp *intel_dp,
			slots = drm_dp_atomic_find_time_slots(state, &intel_dp->mst_mgr,
							      connector->port,
							      dfixed_trunc(pbn));
		} else {
			/* Same as above for remote_tu */
			crtc_state->dp_m_n.tu = ALIGN(crtc_state->dp_m_n.tu,
						      4 / crtc_state->lane_count);

			if (crtc_state->dp_m_n.tu <= 64)
				slots = crtc_state->dp_m_n.tu;
			else
				slots = -EINVAL;
		}

		if (slots == -EDEADLK)
			return slots;