@@ -209,40 +209,32 @@ static int intel_dp_mst_dsc_get_slice_count(const struct intel_connector *connec
209209 num_joined_pipes );
210210}
211211
212- static int mst_stream_find_vcpi_slots_for_bpp (struct intel_dp * intel_dp ,
213- struct intel_crtc_state * crtc_state ,
214- int max_bpp , int min_bpp ,
215- struct link_config_limits * limits ,
216- struct drm_connector_state * conn_state ,
217- int step , bool dsc )
212+ int intel_dp_mtp_tu_compute_config (struct intel_dp * intel_dp ,
213+ struct intel_crtc_state * crtc_state ,
214+ int max_bpp , int min_bpp ,
215+ struct drm_connector_state * conn_state ,
216+ int step , bool dsc )
218217{
219218 struct intel_display * display = to_intel_display (intel_dp );
220219 struct drm_atomic_state * state = crtc_state -> uapi .state ;
221- struct drm_dp_mst_topology_state * mst_state ;
222220 struct intel_connector * connector =
223221 to_intel_connector (conn_state -> connector );
224222 const struct drm_display_mode * adjusted_mode =
225223 & crtc_state -> hw .adjusted_mode ;
224+ fixed20_12 pbn_div ;
226225 int bpp , slots = - EINVAL ;
227226 int dsc_slice_count = 0 ;
228227 int max_dpt_bpp ;
229228
230- mst_state = drm_atomic_get_mst_topology_state (state , & intel_dp -> mst_mgr );
231- if (IS_ERR (mst_state ))
232- return PTR_ERR (mst_state );
233-
234- crtc_state -> lane_count = limits -> max_lane_count ;
235- crtc_state -> port_clock = limits -> max_rate ;
236-
237229 if (dsc ) {
238230 if (!intel_dp_supports_fec (intel_dp , connector , crtc_state ))
239231 return - EINVAL ;
240232
241233 crtc_state -> fec_enable = !intel_dp_is_uhbr (crtc_state );
242234 }
243235
244- mst_state -> pbn_div = drm_dp_get_vc_payload_bw (crtc_state -> port_clock ,
245- crtc_state -> lane_count );
236+ pbn_div = drm_dp_get_vc_payload_bw (crtc_state -> port_clock ,
237+ crtc_state -> lane_count );
246238
247239 max_dpt_bpp = intel_dp_mst_max_dpt_bpp (crtc_state , dsc );
248240 if (max_bpp > max_dpt_bpp ) {
@@ -302,7 +294,7 @@ static int mst_stream_find_vcpi_slots_for_bpp(struct intel_dp *intel_dp,
302294 pbn .full = dfixed_const (intel_dp_mst_calc_pbn (adjusted_mode -> crtc_clock ,
303295 link_bpp_x16 ,
304296 remote_bw_overhead ));
305- remote_tu = DIV_ROUND_UP (pbn .full , mst_state -> pbn_div .full );
297+ remote_tu = DIV_ROUND_UP (pbn .full , pbn_div .full );
306298
307299 /*
308300 * Aligning the TUs ensures that symbols consisting of multiple
@@ -320,7 +312,7 @@ static int mst_stream_find_vcpi_slots_for_bpp(struct intel_dp *intel_dp,
320312 * allocated for the whole path and the TUs allocated for the
321313 * first branch device's link also applies here.
322314 */
323- pbn .full = remote_tu * mst_state -> pbn_div .full ;
315+ pbn .full = remote_tu * pbn_div .full ;
324316
325317 drm_WARN_ON (display -> drm , remote_tu < crtc_state -> dp_m_n .tu );
326318 crtc_state -> dp_m_n .tu = remote_tu ;
@@ -355,6 +347,31 @@ static int mst_stream_find_vcpi_slots_for_bpp(struct intel_dp *intel_dp,
355347 return 0 ;
356348}
357349
350+ static int mst_stream_find_vcpi_slots_for_bpp (struct intel_dp * intel_dp ,
351+ struct intel_crtc_state * crtc_state ,
352+ int max_bpp , int min_bpp ,
353+ struct link_config_limits * limits ,
354+ struct drm_connector_state * conn_state ,
355+ int step , bool dsc )
356+ {
357+ struct drm_atomic_state * state = crtc_state -> uapi .state ;
358+ struct drm_dp_mst_topology_state * mst_state ;
359+
360+ mst_state = drm_atomic_get_mst_topology_state (state , & intel_dp -> mst_mgr );
361+ if (IS_ERR (mst_state ))
362+ return PTR_ERR (mst_state );
363+
364+ crtc_state -> lane_count = limits -> max_lane_count ;
365+ crtc_state -> port_clock = limits -> max_rate ;
366+
367+ mst_state -> pbn_div = drm_dp_get_vc_payload_bw (crtc_state -> port_clock ,
368+ crtc_state -> lane_count );
369+
370+ return intel_dp_mtp_tu_compute_config (intel_dp , crtc_state ,
371+ max_bpp , min_bpp ,
372+ conn_state , step , dsc );
373+ }
374+
358375static int mst_stream_compute_link_config (struct intel_dp * intel_dp ,
359376 struct intel_crtc_state * crtc_state ,
360377 struct drm_connector_state * conn_state ,
0 commit comments