@@ -209,40 +209,32 @@ static int intel_dp_mst_dsc_get_slice_count(const struct intel_connector *connec
209
209
num_joined_pipes );
210
210
}
211
211
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 )
218
217
{
219
218
struct intel_display * display = to_intel_display (intel_dp );
220
219
struct drm_atomic_state * state = crtc_state -> uapi .state ;
221
- struct drm_dp_mst_topology_state * mst_state ;
222
220
struct intel_connector * connector =
223
221
to_intel_connector (conn_state -> connector );
224
222
const struct drm_display_mode * adjusted_mode =
225
223
& crtc_state -> hw .adjusted_mode ;
224
+ fixed20_12 pbn_div ;
226
225
int bpp , slots = - EINVAL ;
227
226
int dsc_slice_count = 0 ;
228
227
int max_dpt_bpp ;
229
228
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
-
237
229
if (dsc ) {
238
230
if (!intel_dp_supports_fec (intel_dp , connector , crtc_state ))
239
231
return - EINVAL ;
240
232
241
233
crtc_state -> fec_enable = !intel_dp_is_uhbr (crtc_state );
242
234
}
243
235
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 );
246
238
247
239
max_dpt_bpp = intel_dp_mst_max_dpt_bpp (crtc_state , dsc );
248
240
if (max_bpp > max_dpt_bpp ) {
@@ -302,7 +294,7 @@ static int mst_stream_find_vcpi_slots_for_bpp(struct intel_dp *intel_dp,
302
294
pbn .full = dfixed_const (intel_dp_mst_calc_pbn (adjusted_mode -> crtc_clock ,
303
295
link_bpp_x16 ,
304
296
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 );
306
298
307
299
/*
308
300
* 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,
320
312
* allocated for the whole path and the TUs allocated for the
321
313
* first branch device's link also applies here.
322
314
*/
323
- pbn .full = remote_tu * mst_state -> pbn_div .full ;
315
+ pbn .full = remote_tu * pbn_div .full ;
324
316
325
317
drm_WARN_ON (display -> drm , remote_tu < crtc_state -> dp_m_n .tu );
326
318
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,
355
347
return 0 ;
356
348
}
357
349
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
+
358
375
static int mst_stream_compute_link_config (struct intel_dp * intel_dp ,
359
376
struct intel_crtc_state * crtc_state ,
360
377
struct drm_connector_state * conn_state ,
0 commit comments