Lines Matching +full:dp +full:- +full:connector
60 int symbol_clock = crtc_state->port_clock / 32; in intel_dp_mst_check_constraints()
62 if (output_bpp * adjusted_mode->crtc_clock >= in intel_dp_mst_check_constraints()
64 drm_dbg_kms(&i915->drm, "UHBR check failed(required bw %d available %d)\n", in intel_dp_mst_check_constraints()
65 output_bpp * adjusted_mode->crtc_clock, symbol_clock * 72); in intel_dp_mst_check_constraints()
66 return -EINVAL; in intel_dp_mst_check_constraints()
74 const struct intel_connector *connector, in intel_dp_mst_bw_overhead() argument
78 &crtc_state->hw.adjusted_mode; in intel_dp_mst_bw_overhead()
85 flags |= crtc_state->fec_enable ? DRM_DP_BW_OVERHEAD_FEC : 0; in intel_dp_mst_bw_overhead()
90 dsc_slice_count = intel_dp_dsc_get_slice_count(connector, in intel_dp_mst_bw_overhead()
91 adjusted_mode->clock, in intel_dp_mst_bw_overhead()
92 adjusted_mode->hdisplay, in intel_dp_mst_bw_overhead()
96 overhead = drm_dp_bw_overhead(crtc_state->lane_count, in intel_dp_mst_bw_overhead()
97 adjusted_mode->hdisplay, in intel_dp_mst_bw_overhead()
106 return max(overhead, intel_dp_bw_fec_overhead(crtc_state->fec_enable)); in intel_dp_mst_bw_overhead()
110 const struct intel_connector *connector, in intel_dp_mst_compute_m_n() argument
116 &crtc_state->hw.adjusted_mode; in intel_dp_mst_compute_m_n()
119 intel_link_compute_m_n(bpp_x16, crtc_state->lane_count, in intel_dp_mst_compute_m_n()
120 adjusted_mode->crtc_clock, in intel_dp_mst_compute_m_n()
121 crtc_state->port_clock, in intel_dp_mst_compute_m_n()
125 m_n->tu = DIV_ROUND_UP_ULL(mul_u32_u32(m_n->data_m, 64), m_n->data_n); in intel_dp_mst_compute_m_n()
149 struct drm_atomic_state *state = crtc_state->uapi.state; in intel_dp_mst_find_vcpi_slots_for_bpp()
151 struct intel_dp *intel_dp = &intel_mst->primary->dp; in intel_dp_mst_find_vcpi_slots_for_bpp()
153 struct intel_connector *connector = in intel_dp_mst_find_vcpi_slots_for_bpp() local
154 to_intel_connector(conn_state->connector); in intel_dp_mst_find_vcpi_slots_for_bpp()
155 struct drm_i915_private *i915 = to_i915(connector->base.dev); in intel_dp_mst_find_vcpi_slots_for_bpp()
157 &crtc_state->hw.adjusted_mode; in intel_dp_mst_find_vcpi_slots_for_bpp()
158 int bpp, slots = -EINVAL; in intel_dp_mst_find_vcpi_slots_for_bpp()
161 mst_state = drm_atomic_get_mst_topology_state(state, &intel_dp->mst_mgr); in intel_dp_mst_find_vcpi_slots_for_bpp()
165 crtc_state->lane_count = limits->max_lane_count; in intel_dp_mst_find_vcpi_slots_for_bpp()
166 crtc_state->port_clock = limits->max_rate; in intel_dp_mst_find_vcpi_slots_for_bpp()
169 if (!intel_dp_supports_fec(intel_dp, connector, crtc_state)) in intel_dp_mst_find_vcpi_slots_for_bpp()
170 return -EINVAL; in intel_dp_mst_find_vcpi_slots_for_bpp()
172 crtc_state->fec_enable = !intel_dp_is_uhbr(crtc_state); in intel_dp_mst_find_vcpi_slots_for_bpp()
175 mst_state->pbn_div = drm_dp_get_vc_payload_bw(&intel_dp->mst_mgr, in intel_dp_mst_find_vcpi_slots_for_bpp()
176 crtc_state->port_clock, in intel_dp_mst_find_vcpi_slots_for_bpp()
177 crtc_state->lane_count); in intel_dp_mst_find_vcpi_slots_for_bpp()
179 drm_dbg_kms(&i915->drm, "Looking for slots in range min bpp %d max bpp %d\n", in intel_dp_mst_find_vcpi_slots_for_bpp()
182 for (bpp = max_bpp; bpp >= min_bpp; bpp -= step) { in intel_dp_mst_find_vcpi_slots_for_bpp()
188 drm_dbg_kms(&i915->drm, "Trying bpp %d\n", bpp); in intel_dp_mst_find_vcpi_slots_for_bpp()
195 intel_dp_output_bpp(crtc_state->output_format, bpp)); in intel_dp_mst_find_vcpi_slots_for_bpp()
197 local_bw_overhead = intel_dp_mst_bw_overhead(crtc_state, connector, in intel_dp_mst_find_vcpi_slots_for_bpp()
199 remote_bw_overhead = intel_dp_mst_bw_overhead(crtc_state, connector, in intel_dp_mst_find_vcpi_slots_for_bpp()
202 intel_dp_mst_compute_m_n(crtc_state, connector, in intel_dp_mst_find_vcpi_slots_for_bpp()
205 &crtc_state->dp_m_n); in intel_dp_mst_find_vcpi_slots_for_bpp()
214 * the ALLOCATE_PAYLOAD side-band message matches the payload in intel_dp_mst_find_vcpi_slots_for_bpp()
218 * crtc_state->dp_m_n.tu), provided that the driver doesn't in intel_dp_mst_find_vcpi_slots_for_bpp()
221 crtc_state->pbn = intel_dp_mst_calc_pbn(adjusted_mode->crtc_clock, in intel_dp_mst_find_vcpi_slots_for_bpp()
225 remote_tu = DIV_ROUND_UP(dfixed_const(crtc_state->pbn), mst_state->pbn_div.full); in intel_dp_mst_find_vcpi_slots_for_bpp()
227 drm_WARN_ON(&i915->drm, remote_tu < crtc_state->dp_m_n.tu); in intel_dp_mst_find_vcpi_slots_for_bpp()
228 crtc_state->dp_m_n.tu = remote_tu; in intel_dp_mst_find_vcpi_slots_for_bpp()
230 slots = drm_dp_atomic_find_time_slots(state, &intel_dp->mst_mgr, in intel_dp_mst_find_vcpi_slots_for_bpp()
231 connector->port, in intel_dp_mst_find_vcpi_slots_for_bpp()
232 crtc_state->pbn); in intel_dp_mst_find_vcpi_slots_for_bpp()
233 if (slots == -EDEADLK) in intel_dp_mst_find_vcpi_slots_for_bpp()
237 drm_WARN_ON(&i915->drm, slots != crtc_state->dp_m_n.tu); in intel_dp_mst_find_vcpi_slots_for_bpp()
248 drm_dbg_kms(&i915->drm, "failed finding vcpi slots:%d\n", in intel_dp_mst_find_vcpi_slots_for_bpp()
252 crtc_state->pipe_bpp = bpp; in intel_dp_mst_find_vcpi_slots_for_bpp()
254 crtc_state->dsc.compressed_bpp_x16 = to_bpp_x16(bpp); in intel_dp_mst_find_vcpi_slots_for_bpp()
255 drm_dbg_kms(&i915->drm, "Got %d slots for pipe bpp %d dsc %d\n", slots, bpp, dsc); in intel_dp_mst_find_vcpi_slots_for_bpp()
266 int slots = -EINVAL; in intel_dp_mst_compute_link_config()
273 to_bpp_int(limits->link.max_bpp_x16), in intel_dp_mst_compute_link_config()
274 to_bpp_int(limits->link.min_bpp_x16), in intel_dp_mst_compute_link_config()
289 struct intel_connector *connector = in intel_dp_dsc_mst_compute_link_config() local
290 to_intel_connector(conn_state->connector); in intel_dp_dsc_mst_compute_link_config()
291 struct drm_i915_private *i915 = to_i915(connector->base.dev); in intel_dp_dsc_mst_compute_link_config()
292 int slots = -EINVAL; in intel_dp_dsc_mst_compute_link_config()
301 dsc_max_bpc = min_t(u8, 12, conn_state->max_requested_bpc); in intel_dp_dsc_mst_compute_link_config()
303 dsc_max_bpc = min_t(u8, 10, conn_state->max_requested_bpc); in intel_dp_dsc_mst_compute_link_config()
305 max_bpp = min_t(u8, dsc_max_bpc * 3, limits->pipe.max_bpp); in intel_dp_dsc_mst_compute_link_config()
306 min_bpp = limits->pipe.min_bpp; in intel_dp_dsc_mst_compute_link_config()
308 num_bpc = drm_dp_dsc_sink_supported_input_bpcs(connector->dp.dsc_dpcd, in intel_dp_dsc_mst_compute_link_config()
311 drm_dbg_kms(&i915->drm, "DSC Source supported min bpp %d max bpp %d\n", in intel_dp_dsc_mst_compute_link_config()
324 drm_dbg_kms(&i915->drm, "DSC Sink supported min bpp %d max bpp %d\n", in intel_dp_dsc_mst_compute_link_config()
333 max_compressed_bpp = intel_dp_dsc_sink_max_compressed_bpp(connector, in intel_dp_dsc_mst_compute_link_config()
337 to_bpp_int(limits->link.max_bpp_x16)); in intel_dp_dsc_mst_compute_link_config()
341 to_bpp_int_roundup(limits->link.min_bpp_x16)); in intel_dp_dsc_mst_compute_link_config()
343 drm_dbg_kms(&i915->drm, "DSC Sink supported compressed min bpp %d compressed max bpp %d\n", in intel_dp_dsc_mst_compute_link_config()
348 crtc_state->pipe_bpp); in intel_dp_dsc_mst_compute_link_config()
350 crtc_state->pipe_bpp); in intel_dp_dsc_mst_compute_link_config()
365 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in intel_dp_mst_update_slots()
367 struct intel_dp *intel_dp = &intel_mst->primary->dp; in intel_dp_mst_update_slots()
368 struct drm_dp_mst_topology_mgr *mgr = &intel_dp->mst_mgr; in intel_dp_mst_update_slots()
373 topology_state = drm_atomic_get_mst_topology_state(conn_state->state, mgr); in intel_dp_mst_update_slots()
375 drm_dbg_kms(&i915->drm, "slot update failed\n"); in intel_dp_mst_update_slots()
387 struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev); in intel_dp_mst_dsc_source_support()
391 * transcoder underruns, re-enable DSC after fixing this issue. in intel_dp_mst_dsc_source_support()
398 return DIV_ROUND_CLOSEST_ULL(mul_u32_u32(mode->htotal - mode->hdisplay, in mode_hblank_period_ns()
400 mode->crtc_clock); in mode_hblank_period_ns()
404 hblank_expansion_quirk_needs_dsc(const struct intel_connector *connector, in hblank_expansion_quirk_needs_dsc() argument
408 &crtc_state->hw.adjusted_mode; in hblank_expansion_quirk_needs_dsc()
410 if (!connector->dp.dsc_hblank_expansion_quirk) in hblank_expansion_quirk_needs_dsc()
420 adjust_limits_for_dsc_hblank_expansion_quirk(const struct intel_connector *connector, in adjust_limits_for_dsc_hblank_expansion_quirk() argument
425 struct drm_i915_private *i915 = to_i915(connector->base.dev); in adjust_limits_for_dsc_hblank_expansion_quirk()
426 const struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); in adjust_limits_for_dsc_hblank_expansion_quirk()
427 int min_bpp_x16 = limits->link.min_bpp_x16; in adjust_limits_for_dsc_hblank_expansion_quirk()
429 if (!hblank_expansion_quirk_needs_dsc(connector, crtc_state)) in adjust_limits_for_dsc_hblank_expansion_quirk()
434 drm_dbg_kms(&i915->drm, in adjust_limits_for_dsc_hblank_expansion_quirk()
435 "[CRTC:%d:%s][CONNECTOR:%d:%s] DSC needed by hblank expansion quirk\n", in adjust_limits_for_dsc_hblank_expansion_quirk()
436 crtc->base.base.id, crtc->base.name, in adjust_limits_for_dsc_hblank_expansion_quirk()
437 connector->base.base.id, connector->base.name); in adjust_limits_for_dsc_hblank_expansion_quirk()
441 drm_dbg_kms(&i915->drm, in adjust_limits_for_dsc_hblank_expansion_quirk()
442 … "[CRTC:%d:%s][CONNECTOR:%d:%s] Increasing link min bpp to 24 due to hblank expansion quirk\n", in adjust_limits_for_dsc_hblank_expansion_quirk()
443 crtc->base.base.id, crtc->base.name, in adjust_limits_for_dsc_hblank_expansion_quirk()
444 connector->base.base.id, connector->base.name); in adjust_limits_for_dsc_hblank_expansion_quirk()
446 if (limits->link.max_bpp_x16 < to_bpp_x16(24)) in adjust_limits_for_dsc_hblank_expansion_quirk()
449 limits->link.min_bpp_x16 = to_bpp_x16(24); in adjust_limits_for_dsc_hblank_expansion_quirk()
454 drm_WARN_ON(&i915->drm, limits->min_rate != limits->max_rate); in adjust_limits_for_dsc_hblank_expansion_quirk()
456 if (limits->max_rate < 540000) in adjust_limits_for_dsc_hblank_expansion_quirk()
458 else if (limits->max_rate < 810000) in adjust_limits_for_dsc_hblank_expansion_quirk()
461 if (limits->link.min_bpp_x16 >= min_bpp_x16) in adjust_limits_for_dsc_hblank_expansion_quirk()
464 drm_dbg_kms(&i915->drm, in adjust_limits_for_dsc_hblank_expansion_quirk()
465 …"[CRTC:%d:%s][CONNECTOR:%d:%s] Increasing link min bpp to " BPP_X16_FMT " in DSC mode due to hblan… in adjust_limits_for_dsc_hblank_expansion_quirk()
466 crtc->base.base.id, crtc->base.name, in adjust_limits_for_dsc_hblank_expansion_quirk()
467 connector->base.base.id, connector->base.name, in adjust_limits_for_dsc_hblank_expansion_quirk()
470 if (limits->link.max_bpp_x16 < min_bpp_x16) in adjust_limits_for_dsc_hblank_expansion_quirk()
473 limits->link.min_bpp_x16 = min_bpp_x16; in adjust_limits_for_dsc_hblank_expansion_quirk()
480 const struct intel_connector *connector, in intel_dp_mst_compute_config_limits() argument
486 * for MST we always configure max link bw - the spec doesn't in intel_dp_mst_compute_config_limits()
489 limits->min_rate = limits->max_rate = in intel_dp_mst_compute_config_limits()
492 limits->min_lane_count = limits->max_lane_count = in intel_dp_mst_compute_config_limits()
495 limits->pipe.min_bpp = intel_dp_min_bpp(crtc_state->output_format); in intel_dp_mst_compute_config_limits()
504 limits->pipe.max_bpp = min(crtc_state->pipe_bpp, 24); in intel_dp_mst_compute_config_limits()
514 return adjust_limits_for_dsc_hblank_expansion_quirk(connector, in intel_dp_mst_compute_config_limits()
524 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); in intel_dp_mst_compute_config()
526 struct intel_dp *intel_dp = &intel_mst->primary->dp; in intel_dp_mst_compute_config()
527 const struct intel_connector *connector = in intel_dp_mst_compute_config() local
528 to_intel_connector(conn_state->connector); in intel_dp_mst_compute_config()
530 &pipe_config->hw.adjusted_mode; in intel_dp_mst_compute_config()
535 if (pipe_config->fec_enable && in intel_dp_mst_compute_config()
536 !intel_dp_supports_fec(intel_dp, connector, pipe_config)) in intel_dp_mst_compute_config()
537 return -EINVAL; in intel_dp_mst_compute_config()
539 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) in intel_dp_mst_compute_config()
540 return -EINVAL; in intel_dp_mst_compute_config()
542 pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB; in intel_dp_mst_compute_config()
543 pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; in intel_dp_mst_compute_config()
544 pipe_config->has_pch_encoder = false; in intel_dp_mst_compute_config()
546 dsc_needed = intel_dp->force_dsc_en || in intel_dp_mst_compute_config()
548 connector, in intel_dp_mst_compute_config()
557 if (ret == -EDEADLK) in intel_dp_mst_compute_config()
566 drm_dbg_kms(&dev_priv->drm, "Try DSC (fallback=%s, force=%s)\n", in intel_dp_mst_compute_config()
568 str_yes_no(intel_dp->force_dsc_en)); in intel_dp_mst_compute_config()
571 return -EINVAL; in intel_dp_mst_compute_config()
574 connector, in intel_dp_mst_compute_config()
578 return -EINVAL; in intel_dp_mst_compute_config()
584 drm_WARN(&dev_priv->drm, intel_dp->force_dsc_bpc, "Cannot Force BPC for MST\n"); in intel_dp_mst_compute_config()
589 drm_dbg_kms(&dev_priv->drm, "Trying to find VCPI slots in DSC mode\n"); in intel_dp_mst_compute_config()
598 pipe_config->dp_m_n.tu, false); in intel_dp_mst_compute_config()
608 pipe_config->limited_color_range = in intel_dp_mst_compute_config()
612 pipe_config->lane_lat_optim_mask = in intel_dp_mst_compute_config()
613 bxt_ddi_phy_calc_lane_lat_optim_mask(pipe_config->lane_count); in intel_dp_mst_compute_config()
626 * all CPU transcoders streaming over the same DP link.
632 struct drm_i915_private *dev_priv = to_i915(state->base.dev); in intel_dp_mst_transcoder_mask()
634 struct intel_connector *connector; in intel_dp_mst_transcoder_mask() local
641 for_each_new_intel_connector_in_state(state, connector, conn_state, i) { in intel_dp_mst_transcoder_mask()
645 if (connector->mst_port != mst_port || !conn_state->base.crtc) in intel_dp_mst_transcoder_mask()
648 crtc = to_intel_crtc(conn_state->base.crtc); in intel_dp_mst_transcoder_mask()
651 if (!crtc_state->hw.active) in intel_dp_mst_transcoder_mask()
654 transcoders |= BIT(crtc_state->cpu_transcoder); in intel_dp_mst_transcoder_mask()
665 struct intel_connector *connector; in get_pipes_downstream_of_mst_port() local
669 for_each_new_intel_connector_in_state(state, connector, conn_state, i) { in get_pipes_downstream_of_mst_port()
670 if (!conn_state->base.crtc) in get_pipes_downstream_of_mst_port()
673 if (&connector->mst_port->mst_mgr != mst_mgr) in get_pipes_downstream_of_mst_port()
676 if (connector->port != parent_port && in get_pipes_downstream_of_mst_port()
678 connector->port, in get_pipes_downstream_of_mst_port()
682 mask |= BIT(to_intel_crtc(conn_state->base.crtc)->pipe); in get_pipes_downstream_of_mst_port()
692 struct drm_i915_private *i915 = to_i915(state->base.dev); in intel_dp_mst_check_fec_change()
700 for_each_intel_crtc_in_pipe_mask(&i915->drm, crtc, mst_pipe_mask) { in intel_dp_mst_check_fec_change()
704 /* Atomic connector check should've added all the MST CRTCs. */ in intel_dp_mst_check_fec_change()
705 if (drm_WARN_ON(&i915->drm, !crtc_state)) in intel_dp_mst_check_fec_change()
706 return -EINVAL; in intel_dp_mst_check_fec_change()
708 if (crtc_state->fec_enable) in intel_dp_mst_check_fec_change()
709 fec_pipe_mask |= BIT(crtc->pipe); in intel_dp_mst_check_fec_change()
715 limits->force_fec_pipes |= mst_pipe_mask; in intel_dp_mst_check_fec_change()
720 return ret ? : -EAGAIN; in intel_dp_mst_check_fec_change()
732 ret = drm_dp_mst_atomic_check_mgr(&state->base, mst_mgr, mst_state, &mst_port); in intel_dp_mst_check_bw()
733 if (ret != -ENOSPC) in intel_dp_mst_check_bw()
741 return ret ? : -EAGAIN; in intel_dp_mst_check_bw()
745 * intel_dp_mst_atomic_check_link - check all modeset MST link configuration
755 * - 0 if the confugration is valid
756 * - %-EAGAIN, if the configuration is invalid and @limits got updated
759 * - Other negative error, if the configuration is invalid without a
770 for_each_new_mst_mgr_in_state(&state->base, mgr, mst_state, i) { in intel_dp_mst_atomic_check_link()
788 struct intel_atomic_state *state = to_intel_atomic_state(conn_state->state); in intel_dp_mst_compute_config_late()
790 struct intel_dp *intel_dp = &intel_mst->primary->dp; in intel_dp_mst_compute_config_late()
793 crtc_state->mst_master_transcoder = in intel_dp_mst_compute_config_late()
794 ffs(intel_dp_mst_transcoder_mask(state, intel_dp)) - 1; in intel_dp_mst_compute_config_late()
813 intel_dp_mst_atomic_topology_check(struct intel_connector *connector, in intel_dp_mst_atomic_topology_check() argument
816 struct drm_i915_private *dev_priv = to_i915(state->base.dev); in intel_dp_mst_atomic_topology_check()
821 if (!intel_connector_needs_modeset(state, &connector->base)) in intel_dp_mst_atomic_topology_check()
824 drm_connector_list_iter_begin(&dev_priv->drm, &connector_list_iter); in intel_dp_mst_atomic_topology_check()
830 if (connector_iter->mst_port != connector->mst_port || in intel_dp_mst_atomic_topology_check()
831 connector_iter == connector) in intel_dp_mst_atomic_topology_check()
841 if (!conn_iter_state->base.crtc) in intel_dp_mst_atomic_topology_check()
844 crtc = to_intel_crtc(conn_iter_state->base.crtc); in intel_dp_mst_atomic_topology_check()
845 crtc_state = intel_atomic_get_crtc_state(&state->base, crtc); in intel_dp_mst_atomic_topology_check()
851 ret = drm_atomic_add_affected_planes(&state->base, &crtc->base); in intel_dp_mst_atomic_topology_check()
854 crtc_state->uapi.mode_changed = true; in intel_dp_mst_atomic_topology_check()
862 intel_dp_mst_atomic_check(struct drm_connector *connector, in intel_dp_mst_atomic_check() argument
867 to_intel_connector(connector); in intel_dp_mst_atomic_check()
870 ret = intel_digital_connector_atomic_check(connector, &state->base); in intel_dp_mst_atomic_check()
878 return drm_dp_atomic_release_time_slots(&state->base, in intel_dp_mst_atomic_check()
879 &intel_connector->mst_port->mst_mgr, in intel_dp_mst_atomic_check()
880 intel_connector->port); in intel_dp_mst_atomic_check()
886 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in clear_act_sent()
895 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in wait_for_act_sent()
897 struct intel_dp *intel_dp = &intel_mst->primary->dp; in wait_for_act_sent()
901 drm_err(&i915->drm, "Timed out waiting for ACT sent\n"); in wait_for_act_sent()
903 drm_dp_check_act_status(&intel_dp->mst_mgr); in wait_for_act_sent()
912 struct intel_digital_port *dig_port = intel_mst->primary; in intel_mst_disable_dp()
913 struct intel_dp *intel_dp = &dig_port->dp; in intel_mst_disable_dp()
914 struct intel_connector *connector = in intel_mst_disable_dp() local
915 to_intel_connector(old_conn_state->connector); in intel_mst_disable_dp()
916 struct drm_i915_private *i915 = to_i915(connector->base.dev); in intel_mst_disable_dp()
918 drm_dbg_kms(&i915->drm, "active links %d\n", in intel_mst_disable_dp()
919 intel_dp->active_mst_links); in intel_mst_disable_dp()
921 intel_hdcp_disable(intel_mst->connector); in intel_mst_disable_dp()
923 intel_dp_sink_disable_decompression(state, connector, old_crtc_state); in intel_mst_disable_dp()
932 struct intel_digital_port *dig_port = intel_mst->primary; in intel_mst_post_disable_dp()
933 struct intel_dp *intel_dp = &dig_port->dp; in intel_mst_post_disable_dp()
934 struct intel_connector *connector = in intel_mst_post_disable_dp() local
935 to_intel_connector(old_conn_state->connector); in intel_mst_post_disable_dp()
937 drm_atomic_get_old_mst_topology_state(&state->base, &intel_dp->mst_mgr); in intel_mst_post_disable_dp()
939 drm_atomic_get_new_mst_topology_state(&state->base, &intel_dp->mst_mgr); in intel_mst_post_disable_dp()
941 drm_atomic_get_mst_payload_state(old_mst_state, connector->port); in intel_mst_post_disable_dp()
943 drm_atomic_get_mst_payload_state(new_mst_state, connector->port); in intel_mst_post_disable_dp()
944 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_mst_post_disable_dp()
947 intel_dp->active_mst_links--; in intel_mst_post_disable_dp()
948 last_mst_stream = intel_dp->active_mst_links == 0; in intel_mst_post_disable_dp()
949 drm_WARN_ON(&dev_priv->drm, in intel_mst_post_disable_dp()
957 drm_dp_remove_payload_part1(&intel_dp->mst_mgr, new_mst_state, new_payload); in intel_mst_post_disable_dp()
961 intel_de_rmw(dev_priv, TRANS_DDI_FUNC_CTL(old_crtc_state->cpu_transcoder), in intel_mst_post_disable_dp()
966 drm_dp_remove_payload_part2(&intel_dp->mst_mgr, new_mst_state, in intel_mst_post_disable_dp()
982 drm_dp_send_power_updown_phy(&intel_dp->mst_mgr, connector->port, in intel_mst_post_disable_dp()
989 intel_dp_set_infoframes(&dig_port->base, false, in intel_mst_post_disable_dp()
992 * From TGL spec: "If multi-stream slave transcoder: Configure in intel_mst_post_disable_dp()
1002 intel_mst->connector = NULL; in intel_mst_post_disable_dp()
1004 dig_port->base.post_disable(state, &dig_port->base, in intel_mst_post_disable_dp()
1007 drm_dbg_kms(&dev_priv->drm, "active links %d\n", in intel_mst_post_disable_dp()
1008 intel_dp->active_mst_links); in intel_mst_post_disable_dp()
1017 struct intel_digital_port *dig_port = intel_mst->primary; in intel_mst_post_pll_disable_dp()
1018 struct intel_dp *intel_dp = &dig_port->dp; in intel_mst_post_pll_disable_dp()
1020 if (intel_dp->active_mst_links == 0 && in intel_mst_post_pll_disable_dp()
1021 dig_port->base.post_pll_disable) in intel_mst_post_pll_disable_dp()
1022 dig_port->base.post_pll_disable(state, encoder, old_crtc_state, old_conn_state); in intel_mst_post_pll_disable_dp()
1031 struct intel_digital_port *dig_port = intel_mst->primary; in intel_mst_pre_pll_enable_dp()
1032 struct intel_dp *intel_dp = &dig_port->dp; in intel_mst_pre_pll_enable_dp()
1034 if (intel_dp->active_mst_links == 0) in intel_mst_pre_pll_enable_dp()
1035 dig_port->base.pre_pll_enable(state, &dig_port->base, in intel_mst_pre_pll_enable_dp()
1042 intel_ddi_update_active_dpll(state, &dig_port->base, in intel_mst_pre_pll_enable_dp()
1043 to_intel_crtc(pipe_config->uapi.crtc)); in intel_mst_pre_pll_enable_dp()
1052 struct intel_digital_port *dig_port = intel_mst->primary; in intel_mst_pre_enable_dp()
1053 struct intel_dp *intel_dp = &dig_port->dp; in intel_mst_pre_enable_dp()
1054 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); in intel_mst_pre_enable_dp()
1055 struct intel_connector *connector = in intel_mst_pre_enable_dp() local
1056 to_intel_connector(conn_state->connector); in intel_mst_pre_enable_dp()
1058 drm_atomic_get_new_mst_topology_state(&state->base, &intel_dp->mst_mgr); in intel_mst_pre_enable_dp()
1062 /* MST encoders are bound to a crtc, not to a connector, in intel_mst_pre_enable_dp()
1065 connector->encoder = encoder; in intel_mst_pre_enable_dp()
1066 intel_mst->connector = connector; in intel_mst_pre_enable_dp()
1067 first_mst_stream = intel_dp->active_mst_links == 0; in intel_mst_pre_enable_dp()
1068 drm_WARN_ON(&dev_priv->drm, in intel_mst_pre_enable_dp()
1072 drm_dbg_kms(&dev_priv->drm, "active links %d\n", in intel_mst_pre_enable_dp()
1073 intel_dp->active_mst_links); in intel_mst_pre_enable_dp()
1078 drm_dp_send_power_updown_phy(&intel_dp->mst_mgr, connector->port, true); in intel_mst_pre_enable_dp()
1080 intel_dp_sink_enable_decompression(state, connector, pipe_config); in intel_mst_pre_enable_dp()
1083 dig_port->base.pre_enable(state, &dig_port->base, in intel_mst_pre_enable_dp()
1086 intel_dp->active_mst_links++; in intel_mst_pre_enable_dp()
1088 ret = drm_dp_add_payload_part1(&intel_dp->mst_mgr, mst_state, in intel_mst_pre_enable_dp()
1089 drm_atomic_get_mst_payload_state(mst_state, connector->port)); in intel_mst_pre_enable_dp()
1091 drm_dbg_kms(&dev_priv->drm, "Failed to create MST payload for %s: %d\n", in intel_mst_pre_enable_dp()
1092 connector->base.name, ret); in intel_mst_pre_enable_dp()
1096 * dig_port->base.pre_enable() and should be done here. For in intel_mst_pre_enable_dp()
1104 intel_dsc_dp_pps_write(&dig_port->base, pipe_config); in intel_mst_pre_enable_dp()
1114 struct intel_digital_port *dig_port = intel_mst->primary; in intel_mst_enable_dp()
1115 struct intel_dp *intel_dp = &dig_port->dp; in intel_mst_enable_dp()
1116 struct intel_connector *connector = to_intel_connector(conn_state->connector); in intel_mst_enable_dp() local
1117 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); in intel_mst_enable_dp()
1119 drm_atomic_get_new_mst_topology_state(&state->base, &intel_dp->mst_mgr); in intel_mst_enable_dp()
1120 enum transcoder trans = pipe_config->cpu_transcoder; in intel_mst_enable_dp()
1121 bool first_mst_stream = intel_dp->active_mst_links == 1; in intel_mst_enable_dp()
1123 drm_WARN_ON(&dev_priv->drm, pipe_config->has_pch_encoder); in intel_mst_enable_dp()
1127 &pipe_config->hw.adjusted_mode; in intel_mst_enable_dp()
1128 u64 crtc_clock_hz = KHz(adjusted_mode->crtc_clock); in intel_mst_enable_dp()
1130 intel_de_write(dev_priv, TRANS_DP2_VFREQHIGH(pipe_config->cpu_transcoder), in intel_mst_enable_dp()
1132 intel_de_write(dev_priv, TRANS_DP2_VFREQLOW(pipe_config->cpu_transcoder), in intel_mst_enable_dp()
1143 drm_dbg_kms(&dev_priv->drm, "active links %d\n", in intel_mst_enable_dp()
1144 intel_dp->active_mst_links); in intel_mst_enable_dp()
1151 drm_dp_add_payload_part2(&intel_dp->mst_mgr, &state->base, in intel_mst_enable_dp()
1152 drm_atomic_get_mst_payload_state(mst_state, connector->port)); in intel_mst_enable_dp()
1157 pipe_config->fec_enable ? FECSTALL_DIS_DPTSTREAM_DPTTG : 0); in intel_mst_enable_dp()
1172 *pipe = intel_mst->pipe; in intel_dp_mst_enc_get_hw_state()
1173 if (intel_mst->connector) in intel_dp_mst_enc_get_hw_state()
1182 struct intel_digital_port *dig_port = intel_mst->primary; in intel_dp_mst_enc_get_config()
1184 dig_port->base.get_config(&dig_port->base, pipe_config); in intel_dp_mst_enc_get_config()
1191 struct intel_digital_port *dig_port = intel_mst->primary; in intel_dp_mst_initial_fastset_check()
1193 return intel_dp_initial_fastset_check(&dig_port->base, crtc_state); in intel_dp_mst_initial_fastset_check()
1196 static int intel_dp_mst_get_ddc_modes(struct drm_connector *connector) in intel_dp_mst_get_ddc_modes() argument
1198 struct intel_connector *intel_connector = to_intel_connector(connector); in intel_dp_mst_get_ddc_modes()
1199 struct intel_dp *intel_dp = intel_connector->mst_port; in intel_dp_mst_get_ddc_modes()
1203 if (drm_connector_is_unregistered(connector)) in intel_dp_mst_get_ddc_modes()
1204 return intel_connector_update_modes(connector, NULL); in intel_dp_mst_get_ddc_modes()
1206 drm_edid = drm_dp_mst_edid_read(connector, &intel_dp->mst_mgr, intel_connector->port); in intel_dp_mst_get_ddc_modes()
1208 ret = intel_connector_update_modes(connector, drm_edid); in intel_dp_mst_get_ddc_modes()
1216 intel_dp_mst_connector_late_register(struct drm_connector *connector) in intel_dp_mst_connector_late_register() argument
1218 struct intel_connector *intel_connector = to_intel_connector(connector); in intel_dp_mst_connector_late_register()
1221 ret = drm_dp_mst_connector_late_register(connector, in intel_dp_mst_connector_late_register()
1222 intel_connector->port); in intel_dp_mst_connector_late_register()
1226 ret = intel_connector_register(connector); in intel_dp_mst_connector_late_register()
1228 drm_dp_mst_connector_early_unregister(connector, in intel_dp_mst_connector_late_register()
1229 intel_connector->port); in intel_dp_mst_connector_late_register()
1235 intel_dp_mst_connector_early_unregister(struct drm_connector *connector) in intel_dp_mst_connector_early_unregister() argument
1237 struct intel_connector *intel_connector = to_intel_connector(connector); in intel_dp_mst_connector_early_unregister()
1239 intel_connector_unregister(connector); in intel_dp_mst_connector_early_unregister()
1240 drm_dp_mst_connector_early_unregister(connector, in intel_dp_mst_connector_early_unregister()
1241 intel_connector->port); in intel_dp_mst_connector_early_unregister()
1255 static int intel_dp_mst_get_modes(struct drm_connector *connector) in intel_dp_mst_get_modes() argument
1257 return intel_dp_mst_get_ddc_modes(connector); in intel_dp_mst_get_modes()
1261 intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, in intel_dp_mst_mode_valid_ctx() argument
1266 struct drm_i915_private *dev_priv = to_i915(connector->dev); in intel_dp_mst_mode_valid_ctx()
1267 struct intel_connector *intel_connector = to_intel_connector(connector); in intel_dp_mst_mode_valid_ctx()
1268 struct intel_dp *intel_dp = intel_connector->mst_port; in intel_dp_mst_mode_valid_ctx()
1269 struct drm_dp_mst_topology_mgr *mgr = &intel_dp->mst_mgr; in intel_dp_mst_mode_valid_ctx()
1270 struct drm_dp_mst_port *port = intel_connector->port; in intel_dp_mst_mode_valid_ctx()
1272 int max_dotclk = to_i915(connector->dev)->max_dotclk_freq; in intel_dp_mst_mode_valid_ctx()
1278 int target_clock = mode->clock; in intel_dp_mst_mode_valid_ctx()
1280 if (drm_connector_is_unregistered(connector)) { in intel_dp_mst_mode_valid_ctx()
1289 if (mode->flags & DRM_MODE_FLAG_DBLSCAN) { in intel_dp_mst_mode_valid_ctx()
1298 mode_rate = intel_dp_link_required(mode->clock, min_bpp); in intel_dp_mst_mode_valid_ctx()
1300 ret = drm_modeset_lock(&mgr->base.lock, ctx); in intel_dp_mst_mode_valid_ctx()
1306 * - Also check if compression would allow for the mode in intel_dp_mst_mode_valid_ctx()
1307 * - Calculate the overhead using drm_dp_bw_overhead() / in intel_dp_mst_mode_valid_ctx()
1311 * - Check here and during compute config the BW reported by in intel_dp_mst_mode_valid_ctx()
1316 if (mode_rate > max_rate || mode->clock > max_dotclk || in intel_dp_mst_mode_valid_ctx()
1317 drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port->full_pbn) { in intel_dp_mst_mode_valid_ctx()
1322 if (mode->clock < 10000) { in intel_dp_mst_mode_valid_ctx()
1327 if (mode->flags & DRM_MODE_FLAG_DBLCLK) { in intel_dp_mst_mode_valid_ctx()
1332 if (intel_dp_need_bigjoiner(intel_dp, mode->hdisplay, target_clock)) { in intel_dp_mst_mode_valid_ctx()
1342 drm_dp_sink_supports_dsc(intel_connector->dp.dsc_dpcd)) { in intel_dp_mst_mode_valid_ctx()
1344 * TBD pass the connector BPC, in intel_dp_mst_mode_valid_ctx()
1349 if (drm_dp_sink_supports_fec(intel_connector->dp.fec_capability)) { in intel_dp_mst_mode_valid_ctx()
1355 mode->hdisplay, in intel_dp_mst_mode_valid_ctx()
1362 mode->hdisplay, in intel_dp_mst_mode_valid_ctx()
1387 static struct drm_encoder *intel_mst_atomic_best_encoder(struct drm_connector *connector, in intel_mst_atomic_best_encoder() argument
1391 connector); in intel_mst_atomic_best_encoder()
1392 struct intel_connector *intel_connector = to_intel_connector(connector); in intel_mst_atomic_best_encoder()
1393 struct intel_dp *intel_dp = intel_connector->mst_port; in intel_mst_atomic_best_encoder()
1394 struct intel_crtc *crtc = to_intel_crtc(connector_state->crtc); in intel_mst_atomic_best_encoder()
1396 return &intel_dp->mst_encoders[crtc->pipe]->base.base; in intel_mst_atomic_best_encoder()
1400 intel_dp_mst_detect(struct drm_connector *connector, in intel_dp_mst_detect() argument
1403 struct drm_i915_private *i915 = to_i915(connector->dev); in intel_dp_mst_detect()
1404 struct intel_connector *intel_connector = to_intel_connector(connector); in intel_dp_mst_detect()
1405 struct intel_dp *intel_dp = intel_connector->mst_port; in intel_dp_mst_detect()
1410 if (drm_connector_is_unregistered(connector)) in intel_dp_mst_detect()
1413 return drm_dp_mst_detect_port(connector, ctx, &intel_dp->mst_mgr, in intel_dp_mst_detect()
1414 intel_connector->port); in intel_dp_mst_detect()
1437 static bool intel_dp_mst_get_hw_state(struct intel_connector *connector) in intel_dp_mst_get_hw_state() argument
1439 if (intel_attached_encoder(connector) && connector->base.state->crtc) { in intel_dp_mst_get_hw_state()
1441 if (!intel_attached_encoder(connector)->get_hw_state(intel_attached_encoder(connector), &pipe)) in intel_dp_mst_get_hw_state()
1449 struct drm_connector *connector, in intel_dp_mst_add_properties() argument
1452 struct drm_i915_private *i915 = to_i915(connector->dev); in intel_dp_mst_add_properties()
1454 drm_object_attach_property(&connector->base, in intel_dp_mst_add_properties()
1455 i915->drm.mode_config.path_property, 0); in intel_dp_mst_add_properties()
1456 drm_object_attach_property(&connector->base, in intel_dp_mst_add_properties()
1457 i915->drm.mode_config.tile_property, 0); in intel_dp_mst_add_properties()
1459 intel_attach_force_audio_property(connector); in intel_dp_mst_add_properties()
1460 intel_attach_broadcast_rgb_property(connector); in intel_dp_mst_add_properties()
1463 * Reuse the prop from the SST connector because we're in intel_dp_mst_add_properties()
1466 connector->max_bpc_property = in intel_dp_mst_add_properties()
1467 intel_dp->attached_connector->base.max_bpc_property; in intel_dp_mst_add_properties()
1468 if (connector->max_bpc_property) in intel_dp_mst_add_properties()
1469 drm_connector_attach_max_bpc_property(connector, 6, 12); in intel_dp_mst_add_properties()
1471 return drm_connector_set_path_property(connector, pathprop); in intel_dp_mst_add_properties()
1476 struct intel_connector *connector) in intel_dp_mst_read_decompression_port_dsc_caps() argument
1480 if (!connector->dp.dsc_decompression_aux) in intel_dp_mst_read_decompression_port_dsc_caps()
1483 if (drm_dp_read_dpcd_caps(connector->dp.dsc_decompression_aux, dpcd_caps) < 0) in intel_dp_mst_read_decompression_port_dsc_caps()
1486 intel_dp_get_dsc_sink_cap(dpcd_caps[DP_DPCD_REV], connector); in intel_dp_mst_read_decompression_port_dsc_caps()
1489 static bool detect_dsc_hblank_expansion_quirk(const struct intel_connector *connector) in detect_dsc_hblank_expansion_quirk() argument
1491 struct drm_i915_private *i915 = to_i915(connector->base.dev); in detect_dsc_hblank_expansion_quirk()
1495 if (!connector->dp.dsc_decompression_aux) in detect_dsc_hblank_expansion_quirk()
1498 if (drm_dp_read_desc(connector->dp.dsc_decompression_aux, in detect_dsc_hblank_expansion_quirk()
1506 if (drm_dp_read_dpcd_caps(connector->dp.dsc_decompression_aux, dpcd) < 0) in detect_dsc_hblank_expansion_quirk()
1512 drm_dbg_kms(&i915->drm, in detect_dsc_hblank_expansion_quirk()
1513 "[CONNECTOR:%d:%s] DSC HBLANK expansion quirk detected\n", in detect_dsc_hblank_expansion_quirk()
1514 connector->base.base.id, connector->base.name); in detect_dsc_hblank_expansion_quirk()
1525 struct drm_device *dev = dig_port->base.base.dev; in intel_dp_add_mst_connector()
1528 struct drm_connector *connector; in intel_dp_add_mst_connector() local
1536 intel_connector->get_hw_state = intel_dp_mst_get_hw_state; in intel_dp_add_mst_connector()
1537 intel_connector->sync_state = intel_dp_connector_sync_state; in intel_dp_add_mst_connector()
1538 intel_connector->mst_port = intel_dp; in intel_dp_add_mst_connector()
1539 intel_connector->port = port; in intel_dp_add_mst_connector()
1542 intel_connector->dp.dsc_decompression_aux = drm_dp_mst_dsc_aux_for_port(port); in intel_dp_add_mst_connector()
1544 intel_connector->dp.dsc_hblank_expansion_quirk = in intel_dp_add_mst_connector()
1547 connector = &intel_connector->base; in intel_dp_add_mst_connector()
1548 ret = drm_connector_init(dev, connector, &intel_dp_mst_connector_funcs, in intel_dp_add_mst_connector()
1556 drm_connector_helper_add(connector, &intel_dp_mst_connector_helper_funcs); in intel_dp_add_mst_connector()
1560 &intel_dp->mst_encoders[pipe]->base.base; in intel_dp_add_mst_connector()
1562 ret = drm_connector_attach_encoder(&intel_connector->base, enc); in intel_dp_add_mst_connector()
1567 ret = intel_dp_mst_add_properties(intel_dp, connector, pathprop); in intel_dp_add_mst_connector()
1573 drm_dbg_kms(&dev_priv->drm, "[%s:%d] HDCP MST init failed, skipping.\n", in intel_dp_add_mst_connector()
1574 connector->name, connector->base.id); in intel_dp_add_mst_connector()
1576 return connector; in intel_dp_add_mst_connector()
1579 drm_connector_cleanup(connector); in intel_dp_add_mst_connector()
1601 struct drm_device *dev = dig_port->base.base.dev; in intel_dp_create_fake_mst_encoder()
1608 intel_mst->pipe = pipe; in intel_dp_create_fake_mst_encoder()
1609 intel_encoder = &intel_mst->base; in intel_dp_create_fake_mst_encoder()
1610 intel_mst->primary = dig_port; in intel_dp_create_fake_mst_encoder()
1612 drm_encoder_init(dev, &intel_encoder->base, &intel_dp_mst_enc_funcs, in intel_dp_create_fake_mst_encoder()
1613 DRM_MODE_ENCODER_DPMST, "DP-MST %c", pipe_name(pipe)); in intel_dp_create_fake_mst_encoder()
1615 intel_encoder->type = INTEL_OUTPUT_DP_MST; in intel_dp_create_fake_mst_encoder()
1616 intel_encoder->power_domain = dig_port->base.power_domain; in intel_dp_create_fake_mst_encoder()
1617 intel_encoder->port = dig_port->base.port; in intel_dp_create_fake_mst_encoder()
1618 intel_encoder->cloneable = 0; in intel_dp_create_fake_mst_encoder()
1621 * of possible_crtcs of all the encoders of a given connector in intel_dp_create_fake_mst_encoder()
1622 * to figure out which crtcs can drive said connector. What in intel_dp_create_fake_mst_encoder()
1627 intel_encoder->pipe_mask = ~0; in intel_dp_create_fake_mst_encoder()
1629 intel_encoder->compute_config = intel_dp_mst_compute_config; in intel_dp_create_fake_mst_encoder()
1630 intel_encoder->compute_config_late = intel_dp_mst_compute_config_late; in intel_dp_create_fake_mst_encoder()
1631 intel_encoder->disable = intel_mst_disable_dp; in intel_dp_create_fake_mst_encoder()
1632 intel_encoder->post_disable = intel_mst_post_disable_dp; in intel_dp_create_fake_mst_encoder()
1633 intel_encoder->post_pll_disable = intel_mst_post_pll_disable_dp; in intel_dp_create_fake_mst_encoder()
1634 intel_encoder->update_pipe = intel_ddi_update_pipe; in intel_dp_create_fake_mst_encoder()
1635 intel_encoder->pre_pll_enable = intel_mst_pre_pll_enable_dp; in intel_dp_create_fake_mst_encoder()
1636 intel_encoder->pre_enable = intel_mst_pre_enable_dp; in intel_dp_create_fake_mst_encoder()
1637 intel_encoder->enable = intel_mst_enable_dp; in intel_dp_create_fake_mst_encoder()
1638 intel_encoder->audio_enable = intel_audio_codec_enable; in intel_dp_create_fake_mst_encoder()
1639 intel_encoder->audio_disable = intel_audio_codec_disable; in intel_dp_create_fake_mst_encoder()
1640 intel_encoder->get_hw_state = intel_dp_mst_enc_get_hw_state; in intel_dp_create_fake_mst_encoder()
1641 intel_encoder->get_config = intel_dp_mst_enc_get_config; in intel_dp_create_fake_mst_encoder()
1642 intel_encoder->initial_fastset_check = intel_dp_mst_initial_fastset_check; in intel_dp_create_fake_mst_encoder()
1651 struct intel_dp *intel_dp = &dig_port->dp; in intel_dp_create_fake_mst_encoders()
1652 struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev); in intel_dp_create_fake_mst_encoders()
1656 intel_dp->mst_encoders[pipe] = intel_dp_create_fake_mst_encoder(dig_port, pipe); in intel_dp_create_fake_mst_encoders()
1663 return dig_port->dp.active_mst_links; in intel_dp_mst_encoder_active_links()
1669 struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); in intel_dp_mst_encoder_init()
1670 struct intel_dp *intel_dp = &dig_port->dp; in intel_dp_mst_encoder_init()
1671 enum port port = dig_port->base.port; in intel_dp_mst_encoder_init()
1683 intel_dp->mst_mgr.cbs = &mst_cbs; in intel_dp_mst_encoder_init()
1687 ret = drm_dp_mst_topology_mgr_init(&intel_dp->mst_mgr, &i915->drm, in intel_dp_mst_encoder_init()
1688 &intel_dp->aux, 16, 3, conn_base_id); in intel_dp_mst_encoder_init()
1690 intel_dp->mst_mgr.cbs = NULL; in intel_dp_mst_encoder_init()
1699 return intel_dp->mst_mgr.cbs; in intel_dp_mst_source_support()
1705 struct intel_dp *intel_dp = &dig_port->dp; in intel_dp_mst_encoder_cleanup()
1710 drm_dp_mst_topology_mgr_destroy(&intel_dp->mst_mgr); in intel_dp_mst_encoder_cleanup()
1713 intel_dp->mst_mgr.cbs = NULL; in intel_dp_mst_encoder_cleanup()
1718 return crtc_state->mst_master_transcoder == crtc_state->cpu_transcoder; in intel_dp_mst_is_master_trans()
1723 return crtc_state->mst_master_transcoder != INVALID_TRANSCODER && in intel_dp_mst_is_slave_trans()
1724 crtc_state->mst_master_transcoder != crtc_state->cpu_transcoder; in intel_dp_mst_is_slave_trans()
1728 * intel_dp_mst_add_topology_state_for_connector - add MST topology state for a connector
1730 * @connector: connector to add the state for
1731 * @crtc: the CRTC @connector is attached to
1733 * Add the MST topology state for @connector to @state.
1739 struct intel_connector *connector, in intel_dp_mst_add_topology_state_for_connector() argument
1744 if (!connector->mst_port) in intel_dp_mst_add_topology_state_for_connector()
1747 mst_state = drm_atomic_get_mst_topology_state(&state->base, in intel_dp_mst_add_topology_state_for_connector()
1748 &connector->mst_port->mst_mgr); in intel_dp_mst_add_topology_state_for_connector()
1752 mst_state->pending_crtc_mask |= drm_crtc_mask(&crtc->base); in intel_dp_mst_add_topology_state_for_connector()
1758 * intel_dp_mst_add_topology_state_for_crtc - add MST topology state for a CRTC
1773 for_each_new_connector_in_state(&state->base, _connector, conn_state, i) { in intel_dp_mst_add_topology_state_for_crtc()
1774 struct intel_connector *connector = to_intel_connector(_connector); in intel_dp_mst_add_topology_state_for_crtc() local
1777 if (conn_state->crtc != &crtc->base) in intel_dp_mst_add_topology_state_for_crtc()
1780 ret = intel_dp_mst_add_topology_state_for_connector(state, connector, crtc); in intel_dp_mst_add_topology_state_for_crtc()
1797 for_each_oldnew_connector_in_state(&state->base, _connector, in get_connector_in_state_for_crtc()
1799 struct intel_connector *connector = in get_connector_in_state_for_crtc() local
1802 if (old_conn_state->crtc == &crtc->base || in get_connector_in_state_for_crtc()
1803 new_conn_state->crtc == &crtc->base) in get_connector_in_state_for_crtc()
1804 return connector; in get_connector_in_state_for_crtc()
1811 * intel_dp_mst_crtc_needs_modeset - check if changes in topology need to modeset the given CRTC
1839 for_each_new_connector_in_state(&state->base, _connector, conn_state, i) { in intel_dp_mst_crtc_needs_modeset()
1840 const struct intel_connector *connector = in intel_dp_mst_crtc_needs_modeset() local
1846 if (connector->mst_port != crtc_connector->mst_port || in intel_dp_mst_crtc_needs_modeset()
1847 !conn_state->crtc) in intel_dp_mst_crtc_needs_modeset()
1850 crtc_iter = to_intel_crtc(conn_state->crtc); in intel_dp_mst_crtc_needs_modeset()
1858 if (old_crtc_state->dsc.compression_enable == in intel_dp_mst_crtc_needs_modeset()
1859 new_crtc_state->dsc.compression_enable) in intel_dp_mst_crtc_needs_modeset()
1868 if (connector->dp.dsc_decompression_aux == in intel_dp_mst_crtc_needs_modeset()
1869 &connector->mst_port->aux) in intel_dp_mst_crtc_needs_modeset()