Lines Matching refs:link

55 	link->ctx->logger
170 static enum signal_type link_detect_sink_signal_type(struct dc_link *link, in link_detect_sink_signal_type() argument
176 if (link->is_dig_mapping_flexible) in link_detect_sink_signal_type()
179 enc_id = link->link_enc->id; in link_detect_sink_signal_type()
180 result = get_basic_signal_type(enc_id, link->link_id); in link_detect_sink_signal_type()
183 if (link->ep_type != DISPLAY_ENDPOINT_PHY) in link_detect_sink_signal_type()
199 if (link->link_id.id == CONNECTOR_ID_PCIE) { in link_detect_sink_signal_type()
203 switch (link->link_id.id) { in link_detect_sink_signal_type()
209 &link->dc->res_pool->audio_support; in link_detect_sink_signal_type()
212 if (link->link_id.id == CONNECTOR_ID_HDMI_TYPE_A) in link_detect_sink_signal_type()
226 if (!dm_helpers_is_dp_sink_present(link)) in link_detect_sink_signal_type()
311 ddc->link, in i2c_read()
331 struct dc_link *link = ddc->link; in query_dp_dual_mode_adaptor() local
356 CONN_DATA_DETECT(ddc->link, type2_dongle_buf, sizeof(type2_dongle_buf), in query_dp_dual_mode_adaptor()
403 CONN_DATA_DETECT(ddc->link, type2_dongle_buf, in query_dp_dual_mode_adaptor()
411 CONN_DATA_DETECT(ddc->link, type2_dongle_buf, in query_dp_dual_mode_adaptor()
418 CONN_DATA_DETECT(ddc->link, type2_dongle_buf, in query_dp_dual_mode_adaptor()
435 CONN_DATA_DETECT(ddc->link, type2_dongle_buf, in query_dp_dual_mode_adaptor()
442 CONN_DATA_DETECT(ddc->link, type2_dongle_buf, in query_dp_dual_mode_adaptor()
463 static void link_disconnect_sink(struct dc_link *link) in link_disconnect_sink() argument
465 if (link->local_sink) { in link_disconnect_sink()
466 dc_sink_release(link->local_sink); in link_disconnect_sink()
467 link->local_sink = NULL; in link_disconnect_sink()
470 link->dpcd_sink_count = 0; in link_disconnect_sink()
474 static void link_disconnect_remap(struct dc_sink *prev_sink, struct dc_link *link) in link_disconnect_remap() argument
476 dc_sink_release(link->local_sink); in link_disconnect_remap()
477 link->local_sink = prev_sink; in link_disconnect_remap()
480 static void query_hdcp_capability(enum signal_type signal, struct dc_link *link) in query_hdcp_capability() argument
487 memset(link->hdcp_caps.rx_caps.raw, 0, in query_hdcp_capability()
488 sizeof(link->hdcp_caps.rx_caps.raw)); in query_hdcp_capability()
490 if ((link->connector_signal == SIGNAL_TYPE_DISPLAY_PORT && in query_hdcp_capability()
491 link->ddc->transaction_type == in query_hdcp_capability()
493 link->connector_signal == SIGNAL_TYPE_EDP) { in query_hdcp_capability()
494 msg22.data = link->hdcp_caps.rx_caps.raw; in query_hdcp_capability()
495 msg22.length = sizeof(link->hdcp_caps.rx_caps.raw); in query_hdcp_capability()
498 msg22.data = &link->hdcp_caps.rx_caps.fields.version; in query_hdcp_capability()
499 msg22.length = sizeof(link->hdcp_caps.rx_caps.fields.version); in query_hdcp_capability()
503 msg22.link = HDCP_LINK_PRIMARY; in query_hdcp_capability()
505 dc_process_hdcp_msg(signal, link, &msg22); in query_hdcp_capability()
508 msg14.data = &link->hdcp_caps.bcaps.raw; in query_hdcp_capability()
509 msg14.length = sizeof(link->hdcp_caps.bcaps.raw); in query_hdcp_capability()
512 msg14.link = HDCP_LINK_PRIMARY; in query_hdcp_capability()
515 dc_process_hdcp_msg(signal, link, &msg14); in query_hdcp_capability()
519 static void read_current_link_settings_on_detect(struct dc_link *link) in read_current_link_settings_on_detect() argument
531 status = core_link_read_dpcd(link, in read_current_link_settings_on_detect()
541 link->cur_link_settings.lane_count = in read_current_link_settings_on_detect()
550 core_link_read_dpcd(link, DP_LINK_BW_SET, in read_current_link_settings_on_detect()
554 if (link->connector_signal == SIGNAL_TYPE_EDP) { in read_current_link_settings_on_detect()
558 core_link_read_dpcd(link, DP_LINK_RATE_SET, in read_current_link_settings_on_detect()
562 if (link_rate_set < link->dpcd_caps.edp_supported_link_rates_count) { in read_current_link_settings_on_detect()
563 link->cur_link_settings.link_rate = in read_current_link_settings_on_detect()
564 link->dpcd_caps.edp_supported_link_rates[link_rate_set]; in read_current_link_settings_on_detect()
565 link->cur_link_settings.link_rate_set = link_rate_set; in read_current_link_settings_on_detect()
566 link->cur_link_settings.use_link_rate_set = true; in read_current_link_settings_on_detect()
573 link->cur_link_settings.link_rate = link_bw_set; in read_current_link_settings_on_detect()
574 link->cur_link_settings.use_link_rate_set = false; in read_current_link_settings_on_detect()
577 core_link_read_dpcd(link, DP_MAX_DOWNSPREAD, in read_current_link_settings_on_detect()
579 link->cur_link_settings.link_spread = in read_current_link_settings_on_detect()
584 static bool detect_dp(struct dc_link *link, in detect_dp() argument
588 struct audio_support *audio_support = &link->dc->res_pool->audio_support; in detect_dp()
590 sink_caps->signal = link_detect_sink_signal_type(link, reason); in detect_dp()
596 if (!detect_dp_sink_caps(link)) { in detect_dp()
600 if (is_dp_branch_device(link)) in detect_dp()
602 link->type = dc_connection_sst_branch; in detect_dp()
604 if (link->dc->debug.disable_dp_plus_plus_wa && in detect_dp()
605 link->link_enc->features.flags.bits.IS_UHBR20_CAPABLE) in detect_dp()
609 sink_caps->signal = dp_passive_dongle_detection(link->ddc, in detect_dp()
612 link->dpcd_caps.dongle_type = sink_caps->dongle_type; in detect_dp()
613 link->dpcd_caps.is_dongle_type_one = sink_caps->is_dongle_type_one; in detect_dp()
614 link->dpcd_caps.dpcd_rev.raw = 0; in detect_dp()
615 link->dpcd_caps.usb4_dp_tun_info.dp_tun_cap.raw = 0; in detect_dp()
633 static bool wait_for_entering_dp_alt_mode(struct dc_link *link) in wait_for_entering_dp_alt_mode() argument
648 DC_LOGGER_INIT(link->ctx->logger); in wait_for_entering_dp_alt_mode()
655 if (!link->link_enc->funcs->is_in_alt_mode) in wait_for_entering_dp_alt_mode()
658 is_in_alt_mode = link->link_enc->funcs->is_in_alt_mode(link->link_enc); in wait_for_entering_dp_alt_mode()
664 enter_timestamp = dm_get_timestamp(link->ctx); in wait_for_entering_dp_alt_mode()
669 if (link->link_enc->funcs->is_in_alt_mode(link->link_enc)) { in wait_for_entering_dp_alt_mode()
670 finish_timestamp = dm_get_timestamp(link->ctx); in wait_for_entering_dp_alt_mode()
672 dm_get_elapse_time_in_ns(link->ctx, in wait_for_entering_dp_alt_mode()
680 finish_timestamp = dm_get_timestamp(link->ctx); in wait_for_entering_dp_alt_mode()
681 time_taken_in_ns = dm_get_elapse_time_in_ns(link->ctx, finish_timestamp, in wait_for_entering_dp_alt_mode()
688 static void apply_dpia_mst_dsc_always_on_wa(struct dc_link *link) in apply_dpia_mst_dsc_always_on_wa() argument
693 if (link->ep_type == DISPLAY_ENDPOINT_USB4_DPIA && in apply_dpia_mst_dsc_always_on_wa()
694 link->type == dc_connection_mst_branch && in apply_dpia_mst_dsc_always_on_wa()
695 link->dpcd_caps.branch_dev_id == DP_BRANCH_DEVICE_ID_90CC24 && in apply_dpia_mst_dsc_always_on_wa()
696 link->dpcd_caps.branch_hw_revision == DP_BRANCH_HW_REV_20 && in apply_dpia_mst_dsc_always_on_wa()
697 link->dpcd_caps.dsc_caps.dsc_basic_caps.fields.dsc_support.DSC_SUPPORT && in apply_dpia_mst_dsc_always_on_wa()
698 !link->dc->debug.dpia_debug.bits.disable_mst_dsc_work_around) in apply_dpia_mst_dsc_always_on_wa()
699 link->wa_flags.dpia_mst_dsc_always_on = true; in apply_dpia_mst_dsc_always_on_wa()
701 if (link->ep_type == DISPLAY_ENDPOINT_USB4_DPIA && in apply_dpia_mst_dsc_always_on_wa()
702 link->type == dc_connection_mst_branch && in apply_dpia_mst_dsc_always_on_wa()
703 link->dpcd_caps.branch_dev_id == DP_BRANCH_DEVICE_ID_90CC24 && in apply_dpia_mst_dsc_always_on_wa()
704 link->dpcd_caps.branch_vendor_specific_data[2] == MST_HUB_ID_0x5A && in apply_dpia_mst_dsc_always_on_wa()
705 link->dpcd_caps.dsc_caps.dsc_basic_caps.fields.dsc_support.DSC_SUPPORT && in apply_dpia_mst_dsc_always_on_wa()
706 !link->dc->debug.dpia_debug.bits.disable_mst_dsc_work_around) { in apply_dpia_mst_dsc_always_on_wa()
707 link->wa_flags.dpia_mst_dsc_always_on = true; in apply_dpia_mst_dsc_always_on_wa()
711 static void revert_dpia_mst_dsc_always_on_wa(struct dc_link *link) in revert_dpia_mst_dsc_always_on_wa() argument
714 if (link->ep_type == DISPLAY_ENDPOINT_USB4_DPIA) in revert_dpia_mst_dsc_always_on_wa()
715 link->wa_flags.dpia_mst_dsc_always_on = false; in revert_dpia_mst_dsc_always_on_wa()
718 static bool discover_dp_mst_topology(struct dc_link *link, enum dc_detect_reason reason) in discover_dp_mst_topology() argument
720 DC_LOGGER_INIT(link->ctx->logger); in discover_dp_mst_topology()
723 link->link_index); in discover_dp_mst_topology()
725 link->type = dc_connection_mst_branch; in discover_dp_mst_topology()
726 apply_dpia_mst_dsc_always_on_wa(link); in discover_dp_mst_topology()
728 dm_helpers_dp_update_branch_info(link->ctx, link); in discover_dp_mst_topology()
729 if (dm_helpers_dp_mst_start_top_mgr(link->ctx, in discover_dp_mst_topology()
730 link, (reason == DETECT_REASON_BOOT || reason == DETECT_REASON_RESUMEFROMS3S4))) { in discover_dp_mst_topology()
731 link_disconnect_sink(link); in discover_dp_mst_topology()
733 link->type = dc_connection_sst_branch; in discover_dp_mst_topology()
736 return link->type == dc_connection_mst_branch; in discover_dp_mst_topology()
739 bool link_reset_cur_dp_mst_topology(struct dc_link *link) in link_reset_cur_dp_mst_topology() argument
741 DC_LOGGER_INIT(link->ctx->logger); in link_reset_cur_dp_mst_topology()
744 link->link_index); in link_reset_cur_dp_mst_topology()
746 revert_dpia_mst_dsc_always_on_wa(link); in link_reset_cur_dp_mst_topology()
747 return dm_helpers_dp_mst_stop_top_mgr(link->ctx, link); in link_reset_cur_dp_mst_topology()
777 static void verify_link_capability_destructive(struct dc_link *link, in verify_link_capability_destructive() argument
782 should_prepare_phy_clocks_for_link_verification(link->dc, reason); in verify_link_capability_destructive()
785 prepare_phy_clocks_for_destructive_link_verification(link->dc); in verify_link_capability_destructive()
787 if (dc_is_dp_signal(link->local_sink->sink_signal)) { in verify_link_capability_destructive()
789 dp_get_max_link_cap(link); in verify_link_capability_destructive()
790 link_set_all_streams_dpms_off_for_link(link); in verify_link_capability_destructive()
792 link, &known_limit_link_setting, in verify_link_capability_destructive()
799 restore_phy_clocks_for_destructive_link_verification(link->dc); in verify_link_capability_destructive()
802 static void verify_link_capability_non_destructive(struct dc_link *link) in verify_link_capability_non_destructive() argument
804 if (dc_is_dp_signal(link->local_sink->sink_signal)) { in verify_link_capability_non_destructive()
805 if (dc_is_embedded_signal(link->local_sink->sink_signal) || in verify_link_capability_non_destructive()
806 link->ep_type == DISPLAY_ENDPOINT_USB4_DPIA) in verify_link_capability_non_destructive()
810 link->verified_link_cap = link->reported_link_cap; in verify_link_capability_non_destructive()
812 link->verified_link_cap = dp_get_max_link_cap(link); in verify_link_capability_non_destructive()
816 static bool should_verify_link_capability_destructively(struct dc_link *link, in should_verify_link_capability_destructively() argument
823 if (!link->dc->config.unify_link_enc_assignment) in should_verify_link_capability_destructively()
824 is_link_enc_unavailable = link->link_enc && in should_verify_link_capability_destructively()
825 link->dc->res_pool->funcs->link_encs_assign && in should_verify_link_capability_destructively()
827 link->ctx->dc, in should_verify_link_capability_destructively()
828 link->link_enc->preferred_engine, in should_verify_link_capability_destructively()
829 link); in should_verify_link_capability_destructively()
831 if (dc_is_dp_signal(link->local_sink->sink_signal)) { in should_verify_link_capability_destructively()
832 max_link_cap = dp_get_max_link_cap(link); in should_verify_link_capability_destructively()
835 if (link->dc->debug.skip_detection_link_training || in should_verify_link_capability_destructively()
836 dc_is_embedded_signal(link->local_sink->sink_signal) || in should_verify_link_capability_destructively()
837 (link->ep_type == DISPLAY_ENDPOINT_USB4_DPIA && in should_verify_link_capability_destructively()
838 !link->dc->config.enable_dpia_pre_training)) { in should_verify_link_capability_destructively()
842 if (link->dpcd_caps.is_mst_capable || in should_verify_link_capability_destructively()
852 static void verify_link_capability(struct dc_link *link, struct dc_sink *sink, in verify_link_capability() argument
855 if (should_verify_link_capability_destructively(link, reason)) in verify_link_capability()
856 verify_link_capability_destructive(link, sink, reason); in verify_link_capability()
858 verify_link_capability_non_destructive(link); in verify_link_capability()
868 static bool detect_link_and_local_sink(struct dc_link *link, in detect_link_and_local_sink() argument
875 struct audio_support *aud_support = &link->dc->res_pool->audio_support; in detect_link_and_local_sink()
878 struct dc_context *dc_ctx = link->ctx; in detect_link_and_local_sink()
886 DC_LOGGER_INIT(link->ctx->logger); in detect_link_and_local_sink()
888 if (dc_is_virtual_signal(link->connector_signal)) in detect_link_and_local_sink()
891 if (((link->connector_signal == SIGNAL_TYPE_LVDS || in detect_link_and_local_sink()
892 link->connector_signal == SIGNAL_TYPE_EDP) && in detect_link_and_local_sink()
893 (!link->dc->config.allow_edp_hotplug_detection)) && in detect_link_and_local_sink()
894 link->local_sink) { in detect_link_and_local_sink()
896 if (link->connector_signal == SIGNAL_TYPE_EDP && in detect_link_and_local_sink()
897 (link->dpcd_sink_ext_caps.bits.oled == 1)) { in detect_link_and_local_sink()
898 dpcd_set_source_specific_data(link); in detect_link_and_local_sink()
900 set_default_brightness_aux(link); in detect_link_and_local_sink()
906 if (!link_detect_connection_type(link, &new_connection_type)) { in detect_link_and_local_sink()
911 prev_sink = link->local_sink; in detect_link_and_local_sink()
914 memcpy(&prev_dpcd_caps, &link->dpcd_caps, sizeof(struct dpcd_caps)); in detect_link_and_local_sink()
917 link_disconnect_sink(link); in detect_link_and_local_sink()
919 link->type = new_connection_type; in detect_link_and_local_sink()
920 link->link_state_valid = false; in detect_link_and_local_sink()
923 switch (link->connector_signal) { in detect_link_and_local_sink()
952 detect_edp_sink_caps(link); in detect_link_and_local_sink()
953 read_current_link_settings_on_detect(link); in detect_link_and_local_sink()
959 link->dpcd_caps.sink_dev_id == DP_BRANCH_DEVICE_ID_0022B9 && in detect_link_and_local_sink()
960 memcmp(&link->dpcd_caps.branch_dev_name, DP_SINK_BRANCH_DEV_NAME_7580, in detect_link_and_local_sink()
961 sizeof(link->dpcd_caps.branch_dev_name)) == 0) { in detect_link_and_local_sink()
964 if (!link->dpcd_caps.set_power_state_capable_edp) in detect_link_and_local_sink()
965 link->wa_flags.dp_keep_receiver_powered = true; in detect_link_and_local_sink()
976 if (link->ep_type == DISPLAY_ENDPOINT_PHY && in detect_link_and_local_sink()
977 link->link_enc->features.flags.bits.DP_IS_USB_C == 1) { in detect_link_and_local_sink()
980 if (!wait_for_entering_dp_alt_mode(link)) in detect_link_and_local_sink()
984 if (!detect_dp(link, &sink_caps, reason)) { in detect_link_and_local_sink()
992 if (link->type == dc_connection_sst_branch && in detect_link_and_local_sink()
993 link->dpcd_caps.sink_count.bits.SINK_COUNT == 0) { in detect_link_and_local_sink()
1001 if (link->type == dc_connection_sst_branch && in detect_link_and_local_sink()
1002 is_dp_active_dongle(link) && in detect_link_and_local_sink()
1003 (link->dpcd_caps.dongle_type != in detect_link_and_local_sink()
1008 if (link->ep_type == DISPLAY_ENDPOINT_USB4_DPIA && in detect_link_and_local_sink()
1009 link->reported_link_cap.link_rate > LINK_RATE_HIGH3) in detect_link_and_local_sink()
1010 link->reported_link_cap.link_rate = LINK_RATE_HIGH3; in detect_link_and_local_sink()
1012 if (link->dpcd_caps.usb4_dp_tun_info.dp_tun_cap.bits.dp_tunneling in detect_link_and_local_sink()
1013 && link->dpcd_caps.usb4_dp_tun_info.dp_tun_cap.bits.dpia_bw_alloc in detect_link_and_local_sink()
1014 && link->dpcd_caps.usb4_dp_tun_info.driver_bw_cap.bits.driver_bw_alloc_support) { in detect_link_and_local_sink()
1015 if (link_dpia_enable_usb4_dp_bw_alloc_mode(link) == false) in detect_link_and_local_sink()
1016 link->dpcd_caps.usb4_dp_tun_info.dp_tun_cap.bits.dpia_bw_alloc = false; in detect_link_and_local_sink()
1023 link->connector_signal); in detect_link_and_local_sink()
1029 if (link->dpcd_caps.sink_count.bits.SINK_COUNT) in detect_link_and_local_sink()
1030 link->dpcd_sink_count = in detect_link_and_local_sink()
1031 link->dpcd_caps.sink_count.bits.SINK_COUNT; in detect_link_and_local_sink()
1033 link->dpcd_sink_count = 1; in detect_link_and_local_sink()
1035 set_ddc_transaction_type(link->ddc, in detect_link_and_local_sink()
1038 link->aux_mode = in detect_link_and_local_sink()
1039 link_is_in_aux_transaction_mode(link->ddc); in detect_link_and_local_sink()
1041 sink_init_data.link = link; in detect_link_and_local_sink()
1052 sink->link->dongle_max_pix_clk = sink_caps.max_hdmi_pixel_clock; in detect_link_and_local_sink()
1056 link->local_sink = sink; in detect_link_and_local_sink()
1058 edid_status = dm_helpers_read_local_edid(link->ctx, in detect_link_and_local_sink()
1059 link, sink); in detect_link_and_local_sink()
1078 if (dc_is_hdmi_signal(link->connector_signal) || in detect_link_and_local_sink()
1079 dc_is_dvi_signal(link->connector_signal)) { in detect_link_and_local_sink()
1086 if (link->type == dc_connection_sst_branch && in detect_link_and_local_sink()
1087 link->dpcd_caps.dongle_type == in detect_link_and_local_sink()
1096 link_disconnect_sink(link); in detect_link_and_local_sink()
1113 link->ctx->dc->debug.hdmi20_disable = true; in detect_link_and_local_sink()
1116 link->dpcd_sink_ext_caps.raw = 0; in detect_link_and_local_sink()
1118 if (dc_is_hdmi_signal(link->connector_signal)) in detect_link_and_local_sink()
1119 read_scdc_caps(link->ddc, link->local_sink); in detect_link_and_local_sink()
1121 if (link->connector_signal == SIGNAL_TYPE_DISPLAY_PORT && in detect_link_and_local_sink()
1128 query_hdcp_capability(sink->sink_signal, link); in detect_link_and_local_sink()
1132 link_disconnect_remap(prev_sink, link); in detect_link_and_local_sink()
1136 query_hdcp_capability(sink->sink_signal, link); in detect_link_and_local_sink()
1144 if (link->local_sink && dc_is_dp_signal(sink_caps.signal)) in detect_link_and_local_sink()
1145 dp_trace_init(link); in detect_link_and_local_sink()
1149 CONN_DATA_DETECT(link, in detect_link_and_local_sink()
1188 if (link->connector_signal == SIGNAL_TYPE_EDP) { in detect_link_and_local_sink()
1191 dc_ctx->dc->res_pool->funcs->get_panel_config_defaults(&link->panel_config); in detect_link_and_local_sink()
1193 dm_helpers_init_panel_settings(dc_ctx, &link->panel_config, sink); in detect_link_and_local_sink()
1195 dm_helpers_override_panel_settings(dc_ctx, &link->panel_config); in detect_link_and_local_sink()
1198 if (link->reported_link_cap.link_rate == LINK_RATE_UNKNOWN) in detect_link_and_local_sink()
1199 link->panel_config.ilr.optimize_edp_link_rate = true; in detect_link_and_local_sink()
1200 link->reported_link_cap.link_rate = get_max_edp_link_rate(link); in detect_link_and_local_sink()
1205 link->type = dc_connection_none; in detect_link_and_local_sink()
1207 memset(&link->hdcp_caps, 0, sizeof(struct hdcp_caps)); in detect_link_and_local_sink()
1213 link->dongle_max_pix_clk = 0; in detect_link_and_local_sink()
1215 dc_link_clear_dprx_states(link); in detect_link_and_local_sink()
1216 dp_trace_reset(link); in detect_link_and_local_sink()
1220 link->link_index, sink, in detect_link_and_local_sink()
1238 bool link_detect_connection_type(struct dc_link *link, enum dc_connection_type *type) in link_detect_connection_type() argument
1242 if (link->connector_signal == SIGNAL_TYPE_LVDS) { in link_detect_connection_type()
1247 if (link->connector_signal == SIGNAL_TYPE_EDP) { in link_detect_connection_type()
1249 if (!link->dc->config.edp_no_power_sequencing) in link_detect_connection_type()
1250 link->dc->hwss.edp_power_control(link, true); in link_detect_connection_type()
1251 link->dc->hwss.edp_wait_for_hpd_ready(link, true); in link_detect_connection_type()
1255 if (link->ep_type != DISPLAY_ENDPOINT_PHY) { in link_detect_connection_type()
1256 if (link->is_hpd_pending || !dpia_query_hpd_status(link)) in link_detect_connection_type()
1265 if (!query_hpd_status(link, &is_hpd_high)) in link_detect_connection_type()
1273 if (link->connector_signal == SIGNAL_TYPE_EDP) { in link_detect_connection_type()
1275 if (!link->dc->config.edp_no_power_sequencing) in link_detect_connection_type()
1276 link->dc->hwss.edp_power_control(link, false); in link_detect_connection_type()
1286 bool link_detect(struct dc_link *link, enum dc_detect_reason reason) in link_detect() argument
1290 enum dc_connection_type pre_link_type = link->type; in link_detect()
1292 DC_LOGGER_INIT(link->ctx->logger); in link_detect()
1294 is_local_sink_detect_success = detect_link_and_local_sink(link, reason); in link_detect()
1296 if (is_local_sink_detect_success && link->local_sink) in link_detect()
1297 verify_link_capability(link, link->local_sink, reason); in link_detect()
1300 link->link_index, is_local_sink_detect_success, pre_link_type, link->type); in link_detect()
1302 if (is_local_sink_detect_success && link->local_sink && in link_detect()
1303 dc_is_dp_signal(link->local_sink->sink_signal) && in link_detect()
1304 link->dpcd_caps.is_mst_capable) in link_detect()
1305 is_delegated_to_mst_top_mgr = discover_dp_mst_topology(link, reason); in link_detect()
1308 link->type != dc_connection_mst_branch) in link_detect()
1309 is_delegated_to_mst_top_mgr = link_reset_cur_dp_mst_topology(link); in link_detect()
1314 void link_clear_dprx_states(struct dc_link *link) in link_clear_dprx_states() argument
1316 memset(&link->dprx_states, 0, sizeof(link->dprx_states)); in link_clear_dprx_states()
1319 bool link_is_hdcp14(struct dc_link *link, enum signal_type signal) in link_is_hdcp14() argument
1326 ret = link->hdcp_caps.bcaps.bits.HDCP_CAPABLE; in link_is_hdcp14()
1343 bool link_is_hdcp22(struct dc_link *link, enum signal_type signal) in link_is_hdcp22() argument
1350 ret = (link->hdcp_caps.bcaps.bits.HDCP_CAPABLE && in link_is_hdcp22()
1351 link->hdcp_caps.rx_caps.fields.byte0.hdcp_capable && in link_is_hdcp22()
1352 (link->hdcp_caps.rx_caps.fields.version == 0x2)) ? 1 : 0; in link_is_hdcp22()
1357 ret = (link->hdcp_caps.rx_caps.fields.version == 0x4) ? 1:0; in link_is_hdcp22()
1366 const struct dc_link_status *link_get_status(const struct dc_link *link) in link_get_status() argument
1368 return &link->link_status; in link_get_status()
1388 struct dc_link *link, in link_add_remote_sink() argument
1406 if (!init_data->link) { in link_add_remote_sink()
1420 link, in link_add_remote_sink()
1425 link, in link_add_remote_sink()
1445 void link_remove_remote_sink(struct dc_link *link, struct dc_sink *sink) in link_remove_remote_sink() argument
1449 if (!link->sink_count) { in link_remove_remote_sink()
1454 for (i = 0; i < link->sink_count; i++) { in link_remove_remote_sink()
1455 if (link->remote_sinks[i] == sink) { in link_remove_remote_sink()
1457 link->remote_sinks[i] = NULL; in link_remove_remote_sink()
1460 while (i < link->sink_count - 1) { in link_remove_remote_sink()
1461 link->remote_sinks[i] = link->remote_sinks[i+1]; in link_remove_remote_sink()
1464 link->remote_sinks[i] = NULL; in link_remove_remote_sink()
1465 link->sink_count--; in link_remove_remote_sink()