Lines Matching refs:aconnector

183 …s_freesync_video_mode(const struct drm_display_mode *mode, struct amdgpu_dm_connector *aconnector);
207 static void update_subconnector_property(struct amdgpu_dm_connector *aconnector) in update_subconnector_property() argument
209 struct dc_link *link = aconnector->dc_link; in update_subconnector_property()
210 struct drm_connector *connector = &aconnector->base; in update_subconnector_property()
216 if (aconnector->dc_sink) in update_subconnector_property()
250 static void handle_hpd_irq_helper(struct amdgpu_dm_connector *aconnector);
771 struct amdgpu_dm_connector *aconnector; in dmub_hpd_callback() local
808 aconnector = to_amdgpu_dm_connector(connector); in dmub_hpd_callback()
809 if (link && aconnector->dc_link == link) { in dmub_hpd_callback()
818 hpd_aconnector = aconnector; in dmub_hpd_callback()
1040 struct amdgpu_dm_connector *aconnector; in amdgpu_dm_audio_component_get_eld() local
1053 aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_audio_component_get_eld()
1054 if (aconnector->audio_inst != port) in amdgpu_dm_audio_component_get_eld()
1466 struct amdgpu_dm_connector *aconnector, in force_connector_state() argument
1469 struct drm_connector *connector = &aconnector->base; in force_connector_state()
1472 aconnector->base.force = force_state; in force_connector_state()
1475 mutex_lock(&aconnector->hpd_lock); in force_connector_state()
1477 mutex_unlock(&aconnector->hpd_lock); in force_connector_state()
1483 struct amdgpu_dm_connector *aconnector; in dm_handle_hpd_rx_offload_work() local
1493 aconnector = offload_work->offload_wq->aconnector; in dm_handle_hpd_rx_offload_work()
1495 if (!aconnector) { in dm_handle_hpd_rx_offload_work()
1500 adev = drm_to_adev(aconnector->base.dev); in dm_handle_hpd_rx_offload_work()
1501 dc_link = aconnector->dc_link; in dm_handle_hpd_rx_offload_work()
1503 mutex_lock(&aconnector->hpd_lock); in dm_handle_hpd_rx_offload_work()
1506 mutex_unlock(&aconnector->hpd_lock); in dm_handle_hpd_rx_offload_work()
1516 dm_handle_mst_sideband_msg_ready_event(&aconnector->mst_mgr, DOWN_OR_UP_MSG_RDY_EVENT); in dm_handle_hpd_rx_offload_work()
1527 if (aconnector->timing_changed) { in dm_handle_hpd_rx_offload_work()
1529 force_connector_state(aconnector, DRM_FORCE_OFF); in dm_handle_hpd_rx_offload_work()
1531 force_connector_state(aconnector, DRM_FORCE_UNSPECIFIED); in dm_handle_hpd_rx_offload_work()
2710 struct amdgpu_dm_connector *aconnector; in detect_mst_link_for_all_connectors() local
2721 aconnector = to_amdgpu_dm_connector(connector); in detect_mst_link_for_all_connectors()
2722 if (aconnector->dc_link->type == dc_connection_mst_branch && in detect_mst_link_for_all_connectors()
2723 aconnector->mst_mgr.aux) { in detect_mst_link_for_all_connectors()
2725 aconnector, in detect_mst_link_for_all_connectors()
2726 aconnector->base.base.id); in detect_mst_link_for_all_connectors()
2728 ret = drm_dp_mst_topology_mgr_set_mst(&aconnector->mst_mgr, true); in detect_mst_link_for_all_connectors()
2731 aconnector->dc_link->type = in detect_mst_link_for_all_connectors()
2733 ret = dm_helpers_dp_mst_stop_top_mgr(aconnector->dc_link->ctx, in detect_mst_link_for_all_connectors()
2734 aconnector->dc_link); in detect_mst_link_for_all_connectors()
2841 void hdmi_cec_unset_edid(struct amdgpu_dm_connector *aconnector) in hdmi_cec_unset_edid() argument
2843 struct cec_notifier *n = aconnector->notifier; in hdmi_cec_unset_edid()
2851 void hdmi_cec_set_edid(struct amdgpu_dm_connector *aconnector) in hdmi_cec_set_edid() argument
2853 struct drm_connector *connector = &aconnector->base; in hdmi_cec_set_edid()
2854 struct cec_notifier *n = aconnector->notifier; in hdmi_cec_set_edid()
2865 struct amdgpu_dm_connector *aconnector; in s3_handle_hdmi_cec() local
2874 aconnector = to_amdgpu_dm_connector(connector); in s3_handle_hdmi_cec()
2876 hdmi_cec_unset_edid(aconnector); in s3_handle_hdmi_cec()
2878 hdmi_cec_set_edid(aconnector); in s3_handle_hdmi_cec()
2885 struct amdgpu_dm_connector *aconnector; in s3_handle_mst() local
2896 aconnector = to_amdgpu_dm_connector(connector); in s3_handle_mst()
2897 if (aconnector->dc_link->type != dc_connection_mst_branch || in s3_handle_mst()
2898 aconnector->mst_root) in s3_handle_mst()
2901 mgr = &aconnector->mst_mgr; in s3_handle_mst()
2910 try_to_configure_aux_timeout(aconnector->dc_link->ddc, LINK_AUX_DEFAULT_LTTPR_TIMEOUT_PERIOD); in s3_handle_mst()
2911 if (!dp_is_lttpr_present(aconnector->dc_link)) in s3_handle_mst()
2912 try_to_configure_aux_timeout(aconnector->dc_link->ddc, LINK_AUX_DEFAULT_TIMEOUT_PERIOD); in s3_handle_mst()
3385 struct amdgpu_dm_connector *aconnector; in dm_resume() local
3512 aconnector = to_amdgpu_dm_connector(connector); in dm_resume()
3514 if (!aconnector->dc_link) in dm_resume()
3521 if (aconnector->mst_root) in dm_resume()
3524 guard(mutex)(&aconnector->hpd_lock); in dm_resume()
3525 if (!dc_link_detect_connection_type(aconnector->dc_link, &new_connection_type)) in dm_resume()
3528 if (aconnector->base.force && new_connection_type == dc_connection_none) { in dm_resume()
3529 emulated_link_detect(aconnector->dc_link); in dm_resume()
3533 ret = dc_link_detect(aconnector->dc_link, DETECT_REASON_RESUMEFROMS3S4); in dm_resume()
3536 apply_delay_after_dpcd_poweroff(adev, aconnector->dc_sink); in dm_resume()
3540 if (aconnector->fake_enable && aconnector->dc_link->local_sink) in dm_resume()
3541 aconnector->fake_enable = false; in dm_resume()
3543 if (aconnector->dc_sink) in dm_resume()
3544 dc_sink_release(aconnector->dc_sink); in dm_resume()
3545 aconnector->dc_sink = NULL; in dm_resume()
3546 amdgpu_dm_update_connector_after_detect(aconnector); in dm_resume()
3592 aconnector = to_amdgpu_dm_connector(connector); in dm_resume()
3593 if (aconnector->dc_link->type != dc_connection_mst_branch || in dm_resume()
3594 aconnector->mst_root) in dm_resume()
3597 drm_dp_mst_topology_queue_probe(&aconnector->mst_mgr); in dm_resume()
3667 static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector) in update_connector_ext_caps() argument
3675 if (aconnector->bl_idx == -1 || in update_connector_ext_caps()
3676 aconnector->dc_link->connector_signal != SIGNAL_TYPE_EDP) in update_connector_ext_caps()
3679 conn_base = &aconnector->base; in update_connector_ext_caps()
3682 caps = &adev->dm.backlight_caps[aconnector->bl_idx]; in update_connector_ext_caps()
3683 caps->ext_caps = &aconnector->dc_link->dpcd_sink_ext_caps; in update_connector_ext_caps()
3699 aconnector->dc_link->backlight_control_type = BACKLIGHT_CONTROL_AMD_AUX; in update_connector_ext_caps()
3711 min_input_signal_override = drm_get_panel_min_brightness_quirk(aconnector->drm_edid); in update_connector_ext_caps()
3719 struct amdgpu_dm_connector *aconnector) in DEFINE_FREE()
3721 struct drm_connector *connector = &aconnector->base; in DEFINE_FREE()
3726 if (aconnector->mst_mgr.mst_state == true) in DEFINE_FREE()
3729 sink = aconnector->dc_link->local_sink; in DEFINE_FREE()
3738 if (aconnector->base.force != DRM_FORCE_UNSPECIFIED in DEFINE_FREE()
3739 && aconnector->dc_em_sink) { in DEFINE_FREE()
3748 if (aconnector->dc_sink) { in DEFINE_FREE()
3756 dc_sink_release(aconnector->dc_sink); in DEFINE_FREE()
3758 aconnector->dc_sink = sink; in DEFINE_FREE()
3759 dc_sink_retain(aconnector->dc_sink); in DEFINE_FREE()
3761 aconnector->drm_edid); in DEFINE_FREE()
3764 if (!aconnector->dc_sink) { in DEFINE_FREE()
3765 aconnector->dc_sink = aconnector->dc_em_sink; in DEFINE_FREE()
3766 dc_sink_retain(aconnector->dc_sink); in DEFINE_FREE()
3780 if (aconnector->dc_sink == sink) { in DEFINE_FREE()
3786 aconnector->connector_id); in DEFINE_FREE()
3791 aconnector->connector_id, aconnector->dc_sink, sink); in DEFINE_FREE()
3804 if (aconnector->dc_sink) { in DEFINE_FREE()
3806 dc_sink_release(aconnector->dc_sink); in DEFINE_FREE()
3809 aconnector->dc_sink = sink; in DEFINE_FREE()
3810 dc_sink_retain(aconnector->dc_sink); in DEFINE_FREE()
3812 aconnector->drm_edid = NULL; in DEFINE_FREE()
3813 hdmi_cec_unset_edid(aconnector); in DEFINE_FREE()
3814 if (aconnector->dc_link->aux_mode) { in DEFINE_FREE()
3815 drm_dp_cec_unset_edid(&aconnector->dm_dp_aux.aux); in DEFINE_FREE()
3820 aconnector->drm_edid = drm_edid_alloc(edid, sink->dc_edid.length); in DEFINE_FREE()
3821 drm_edid_connector_update(connector, aconnector->drm_edid); in DEFINE_FREE()
3823 hdmi_cec_set_edid(aconnector); in DEFINE_FREE()
3824 if (aconnector->dc_link->aux_mode) in DEFINE_FREE()
3825 drm_dp_cec_attach(&aconnector->dm_dp_aux.aux, in DEFINE_FREE()
3829 if (!aconnector->timing_requested) { in DEFINE_FREE()
3830 aconnector->timing_requested = in DEFINE_FREE()
3832 if (!aconnector->timing_requested) in DEFINE_FREE()
3837 amdgpu_dm_update_freesync_caps(connector, aconnector->drm_edid); in DEFINE_FREE()
3838 update_connector_ext_caps(aconnector); in DEFINE_FREE()
3840 hdmi_cec_unset_edid(aconnector); in DEFINE_FREE()
3841 drm_dp_cec_unset_edid(&aconnector->dm_dp_aux.aux); in DEFINE_FREE()
3843 aconnector->num_modes = 0; in DEFINE_FREE()
3844 dc_sink_release(aconnector->dc_sink); in DEFINE_FREE()
3845 aconnector->dc_sink = NULL; in DEFINE_FREE()
3846 drm_edid_free(aconnector->drm_edid); in DEFINE_FREE()
3847 aconnector->drm_edid = NULL; in DEFINE_FREE()
3848 kfree(aconnector->timing_requested); in DEFINE_FREE()
3849 aconnector->timing_requested = NULL; in DEFINE_FREE()
3855 update_subconnector_property(aconnector); in DEFINE_FREE()
3858 static void handle_hpd_irq_helper(struct amdgpu_dm_connector *aconnector) in handle_hpd_irq_helper() argument
3860 struct drm_connector *connector = &aconnector->base; in handle_hpd_irq_helper()
3865 struct dc *dc = aconnector->dc_link->ctx->dc; in handle_hpd_irq_helper()
3875 guard(mutex)(&aconnector->hpd_lock); in handle_hpd_irq_helper()
3878 hdcp_reset_display(adev->dm.hdcp_workqueue, aconnector->dc_link->link_index); in handle_hpd_irq_helper()
3881 if (aconnector->fake_enable) in handle_hpd_irq_helper()
3882 aconnector->fake_enable = false; in handle_hpd_irq_helper()
3884 aconnector->timing_changed = false; in handle_hpd_irq_helper()
3886 if (!dc_link_detect_connection_type(aconnector->dc_link, &new_connection_type)) in handle_hpd_irq_helper()
3889 if (aconnector->base.force && new_connection_type == dc_connection_none) { in handle_hpd_irq_helper()
3890 emulated_link_detect(aconnector->dc_link); in handle_hpd_irq_helper()
3896 if (aconnector->base.force == DRM_FORCE_UNSPECIFIED) in handle_hpd_irq_helper()
3901 ret = dc_link_detect(aconnector->dc_link, DETECT_REASON_HPD); in handle_hpd_irq_helper()
3905 apply_delay_after_dpcd_poweroff(adev, aconnector->dc_sink); in handle_hpd_irq_helper()
3906 amdgpu_dm_update_connector_after_detect(aconnector); in handle_hpd_irq_helper()
3912 if (aconnector->base.force == DRM_FORCE_UNSPECIFIED) in handle_hpd_irq_helper()
3920 struct amdgpu_dm_connector *aconnector = (struct amdgpu_dm_connector *)param; in handle_hpd_irq() local
3922 handle_hpd_irq_helper(aconnector); in handle_hpd_irq()
3947 struct amdgpu_dm_connector *aconnector = (struct amdgpu_dm_connector *)param; in handle_hpd_rx_irq() local
3948 struct drm_connector *connector = &aconnector->base; in handle_hpd_rx_irq()
3950 struct dc_link *dc_link = aconnector->dc_link; in handle_hpd_rx_irq()
3951 bool is_mst_root_connector = aconnector->mst_mgr.mst_state; in handle_hpd_rx_irq()
3960 struct dc *dc = aconnector->dc_link->ctx->dc; in handle_hpd_rx_irq()
3972 mutex_lock(&aconnector->hpd_lock); in handle_hpd_rx_irq()
4032 if (aconnector->base.force && new_connection_type == dc_connection_none) { in handle_hpd_rx_irq()
4035 if (aconnector->fake_enable) in handle_hpd_rx_irq()
4036 aconnector->fake_enable = false; in handle_hpd_rx_irq()
4038 amdgpu_dm_update_connector_after_detect(aconnector); in handle_hpd_rx_irq()
4055 if (aconnector->fake_enable) in handle_hpd_rx_irq()
4056 aconnector->fake_enable = false; in handle_hpd_rx_irq()
4058 amdgpu_dm_update_connector_after_detect(aconnector); in handle_hpd_rx_irq()
4070 hdcp_handle_cpirq(adev->dm.hdcp_workqueue, aconnector->base.index); in handle_hpd_rx_irq()
4074 drm_dp_cec_irq(&aconnector->dm_dp_aux.aux); in handle_hpd_rx_irq()
4076 mutex_unlock(&aconnector->hpd_lock); in handle_hpd_rx_irq()
4083 struct amdgpu_dm_connector *aconnector; in register_hpd_handlers() local
4116 aconnector = to_amdgpu_dm_connector(connector); in register_hpd_handlers()
4117 dc_link = aconnector->dc_link; in register_hpd_handlers()
4131 handle_hpd_irq, (void *) aconnector)) in register_hpd_handlers()
4149 handle_hpd_rx_irq, (void *) aconnector)) in register_hpd_handlers()
4982 amdgpu_dm_register_backlight_device(struct amdgpu_dm_connector *aconnector) in amdgpu_dm_register_backlight_device() argument
4984 struct drm_device *drm = aconnector->base.dev; in amdgpu_dm_register_backlight_device()
4990 if (aconnector->bl_idx == -1) in amdgpu_dm_register_backlight_device()
5015 drm->primary->index + aconnector->bl_idx); in amdgpu_dm_register_backlight_device()
5017 dm->backlight_dev[aconnector->bl_idx] = in amdgpu_dm_register_backlight_device()
5018 backlight_device_register(bl_name, aconnector->base.kdev, dm, in amdgpu_dm_register_backlight_device()
5020 dm->brightness[aconnector->bl_idx] = props.brightness; in amdgpu_dm_register_backlight_device()
5022 if (IS_ERR(dm->backlight_dev[aconnector->bl_idx])) { in amdgpu_dm_register_backlight_device()
5024 dm->backlight_dev[aconnector->bl_idx] = NULL; in amdgpu_dm_register_backlight_device()
5071 struct amdgpu_dm_connector *aconnector) in setup_backlight_device() argument
5073 struct dc_link *link = aconnector->dc_link; in setup_backlight_device()
5085 aconnector->bl_idx = bl_idx; in setup_backlight_device()
5091 update_connector_ext_caps(aconnector); in setup_backlight_device()
5108 struct amdgpu_dm_connector *aconnector = NULL; in amdgpu_dm_initialize_drm_device() local
5288 aconnector = kzalloc(sizeof(*aconnector), GFP_KERNEL); in amdgpu_dm_initialize_drm_device()
5289 if (!aconnector) in amdgpu_dm_initialize_drm_device()
5301 if (amdgpu_dm_connector_init(dm, aconnector, i, aencoder)) { in amdgpu_dm_initialize_drm_device()
5307 dm->hpd_rx_offload_wq[aconnector->base.index].aconnector = in amdgpu_dm_initialize_drm_device()
5308 aconnector; in amdgpu_dm_initialize_drm_device()
5313 if (aconnector->base.force && new_connection_type == dc_connection_none) { in amdgpu_dm_initialize_drm_device()
5315 amdgpu_dm_update_connector_after_detect(aconnector); in amdgpu_dm_initialize_drm_device()
5325 amdgpu_dm_update_connector_after_detect(aconnector); in amdgpu_dm_initialize_drm_device()
5326 setup_backlight_device(dm, aconnector); in amdgpu_dm_initialize_drm_device()
5330 if (amdgpu_dm_set_replay_caps(link, aconnector)) in amdgpu_dm_initialize_drm_device()
5337 amdgpu_set_panel_orientation(&aconnector->base); in amdgpu_dm_initialize_drm_device()
5413 kfree(aconnector); in amdgpu_dm_initialize_drm_device()
6343 struct amdgpu_dm_connector *aconnector = NULL; in fill_stream_properties_from_drm_display_mode() local
6348 aconnector = to_amdgpu_dm_connector(connector); in fill_stream_properties_from_drm_display_mode()
6362 && aconnector in fill_stream_properties_from_drm_display_mode()
6363 && aconnector->force_yuv420_output) in fill_stream_properties_from_drm_display_mode()
6398 if (aconnector && is_freesync_video_mode(mode_in, aconnector)) { in fill_stream_properties_from_drm_display_mode()
6634 get_highest_refresh_rate_mode(struct amdgpu_dm_connector *aconnector, in get_highest_refresh_rate_mode() argument
6640 &aconnector->base.probed_modes : in get_highest_refresh_rate_mode()
6641 &aconnector->base.modes; in get_highest_refresh_rate_mode()
6643 if (aconnector->base.connector_type == DRM_MODE_CONNECTOR_WRITEBACK) in get_highest_refresh_rate_mode()
6646 if (aconnector->freesync_vid_base.clock != 0) in get_highest_refresh_rate_mode()
6647 return &aconnector->freesync_vid_base; in get_highest_refresh_rate_mode()
6660 &aconnector->base.modes, struct drm_display_mode, head); in get_highest_refresh_rate_mode()
6685 drm_mode_copy(&aconnector->freesync_vid_base, m_pref); in get_highest_refresh_rate_mode()
6690 struct amdgpu_dm_connector *aconnector) in is_freesync_video_mode() argument
6695 high_mode = get_highest_refresh_rate_mode(aconnector, false); in is_freesync_video_mode()
6717 static void update_dsc_caps(struct amdgpu_dm_connector *aconnector, in update_dsc_caps() argument
6724 if (aconnector->dc_link && (sink->sink_signal == SIGNAL_TYPE_DISPLAY_PORT || in update_dsc_caps()
6728 dc_dsc_parse_dsc_dpcd(aconnector->dc_link->ctx->dc, in update_dsc_caps()
6729 aconnector->dc_link->dpcd_caps.dsc_caps.dsc_basic_caps.raw, in update_dsc_caps()
6730 aconnector->dc_link->dpcd_caps.dsc_caps.dsc_branch_decoder_caps.raw, in update_dsc_caps()
6735 static void apply_dsc_policy_for_edp(struct amdgpu_dm_connector *aconnector, in apply_dsc_policy_for_edp() argument
6767 dc_link_get_highest_encoding_format(aconnector->dc_link), in apply_dsc_policy_for_edp()
6776 dc_link_get_highest_encoding_format(aconnector->dc_link), in apply_dsc_policy_for_edp()
6791 dc_link_get_highest_encoding_format(aconnector->dc_link), in apply_dsc_policy_for_edp()
6798 static void apply_dsc_policy_for_stream(struct amdgpu_dm_connector *aconnector, in apply_dsc_policy_for_stream() argument
6802 struct drm_connector *drm_connector = &aconnector->base; in apply_dsc_policy_for_stream()
6814 link_bandwidth_kbps = dc_link_bandwidth_kbps(aconnector->dc_link, in apply_dsc_policy_for_stream()
6815 dc_link_get_link_cap(aconnector->dc_link)); in apply_dsc_policy_for_stream()
6819 aconnector->dsc_settings.dsc_force_enable == DSC_CLK_FORCE_ENABLE); in apply_dsc_policy_for_stream()
6822 !aconnector->dc_link->panel_config.dsc.disable_dsc_edp && in apply_dsc_policy_for_stream()
6823 … dc->caps.edp_dsc_support && aconnector->dsc_settings.dsc_force_enable != DSC_CLK_FORCE_DISABLE) { in apply_dsc_policy_for_stream()
6825 apply_dsc_policy_for_edp(aconnector, sink, stream, dsc_caps, max_dsc_target_bpp_limit_override); in apply_dsc_policy_for_stream()
6829 if (dc_dsc_compute_config(aconnector->dc_link->ctx->dc->res_pool->dscs[0], in apply_dsc_policy_for_stream()
6834 dc_link_get_highest_encoding_format(aconnector->dc_link), in apply_dsc_policy_for_stream()
6842 dc_link_get_highest_encoding_format(aconnector->dc_link)); in apply_dsc_policy_for_stream()
6849 if (dc_dsc_compute_config(aconnector->dc_link->ctx->dc->res_pool->dscs[0], in apply_dsc_policy_for_stream()
6854 dc_link_get_highest_encoding_format(aconnector->dc_link), in apply_dsc_policy_for_stream()
6864 if (aconnector->dsc_settings.dsc_force_enable == DSC_CLK_FORCE_ENABLE) in apply_dsc_policy_for_stream()
6867 if (stream->timing.flags.DSC && aconnector->dsc_settings.dsc_num_slices_h) in apply_dsc_policy_for_stream()
6868 stream->timing.dsc_cfg.num_slices_h = aconnector->dsc_settings.dsc_num_slices_h; in apply_dsc_policy_for_stream()
6870 if (stream->timing.flags.DSC && aconnector->dsc_settings.dsc_num_slices_v) in apply_dsc_policy_for_stream()
6871 stream->timing.dsc_cfg.num_slices_v = aconnector->dsc_settings.dsc_num_slices_v; in apply_dsc_policy_for_stream()
6873 if (stream->timing.flags.DSC && aconnector->dsc_settings.dsc_bits_per_pixel) in apply_dsc_policy_for_stream()
6874 stream->timing.dsc_cfg.bits_per_pixel = aconnector->dsc_settings.dsc_bits_per_pixel; in apply_dsc_policy_for_stream()
6885 struct amdgpu_dm_connector *aconnector = NULL; in create_stream_for_sink() local
6913 aconnector = NULL; in create_stream_for_sink()
6914 aconnector = to_amdgpu_dm_connector(connector); in create_stream_for_sink()
6915 link = aconnector->dc_link; in create_stream_for_sink()
6925 if (!aconnector || !aconnector->dc_sink) { in create_stream_for_sink()
6931 sink = aconnector->dc_sink; in create_stream_for_sink()
6943 stream->dm_stream_context = aconnector; in create_stream_for_sink()
6971 } else if (aconnector) { in create_stream_for_sink()
6973 is_freesync_video_mode(&mode, aconnector); in create_stream_for_sink()
6975 freesync_mode = get_highest_refresh_rate_mode(aconnector, false); in create_stream_for_sink()
7005 if (!aconnector) in create_stream_for_sink()
7008 if (aconnector->timing_changed) { in create_stream_for_sink()
7009 drm_dbg(aconnector->base.dev, in create_stream_for_sink()
7012 aconnector->timing_requested->display_color_depth); in create_stream_for_sink()
7013 stream->timing = *aconnector->timing_requested; in create_stream_for_sink()
7018 update_dsc_caps(aconnector, sink, stream, &dsc_caps); in create_stream_for_sink()
7019 …if (aconnector->dsc_settings.dsc_force_enable != DSC_CLK_FORCE_DISABLE && dsc_caps.is_dsc_supporte… in create_stream_for_sink()
7020 apply_dsc_policy_for_stream(aconnector, sink, stream, &dsc_caps); in create_stream_for_sink()
7041 if (aconnector->dc_sink) { in create_stream_for_sink()
7042 edid_caps = &aconnector->dc_sink->edid_caps; in create_stream_for_sink()
7057 aconnector->sr_skip_count = AMDGPU_DM_PSR_ENTRY_DELAY; in create_stream_for_sink()
7070 struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_connector_detect() local
7079 if (aconnector->base.force == DRM_FORCE_UNSPECIFIED && in amdgpu_dm_connector_detect()
7080 !aconnector->fake_enable) in amdgpu_dm_connector_detect()
7081 connected = (aconnector->dc_sink != NULL); in amdgpu_dm_connector_detect()
7083 connected = (aconnector->base.force == DRM_FORCE_ON || in amdgpu_dm_connector_detect()
7084 aconnector->base.force == DRM_FORCE_ON_DIGITAL); in amdgpu_dm_connector_detect()
7086 update_subconnector_property(aconnector); in amdgpu_dm_connector_detect()
7290 struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_connector_destroy() local
7298 if (aconnector->mst_mgr.dev) in amdgpu_dm_connector_destroy()
7299 drm_dp_mst_topology_mgr_destroy(&aconnector->mst_mgr); in amdgpu_dm_connector_destroy()
7301 if (aconnector->bl_idx != -1) { in amdgpu_dm_connector_destroy()
7302 backlight_device_unregister(dm->backlight_dev[aconnector->bl_idx]); in amdgpu_dm_connector_destroy()
7303 dm->backlight_dev[aconnector->bl_idx] = NULL; in amdgpu_dm_connector_destroy()
7306 if (aconnector->dc_em_sink) in amdgpu_dm_connector_destroy()
7307 dc_sink_release(aconnector->dc_em_sink); in amdgpu_dm_connector_destroy()
7308 aconnector->dc_em_sink = NULL; in amdgpu_dm_connector_destroy()
7309 if (aconnector->dc_sink) in amdgpu_dm_connector_destroy()
7310 dc_sink_release(aconnector->dc_sink); in amdgpu_dm_connector_destroy()
7311 aconnector->dc_sink = NULL; in amdgpu_dm_connector_destroy()
7313 drm_dp_cec_unregister_connector(&aconnector->dm_dp_aux.aux); in amdgpu_dm_connector_destroy()
7316 if (aconnector->i2c) { in amdgpu_dm_connector_destroy()
7317 i2c_del_adapter(&aconnector->i2c->base); in amdgpu_dm_connector_destroy()
7318 kfree(aconnector->i2c); in amdgpu_dm_connector_destroy()
7320 kfree(aconnector->dm_dp_aux.aux.name); in amdgpu_dm_connector_destroy()
7415 struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_connector_funcs_force() local
7416 struct dc_link *dc_link = aconnector->dc_link; in amdgpu_dm_connector_funcs_force()
7417 struct dc_sink *dc_em_sink = aconnector->dc_em_sink; in amdgpu_dm_connector_funcs_force()
7422 ddc = &aconnector->dm_dp_aux.aux.ddc; in amdgpu_dm_connector_funcs_force()
7424 ddc = &aconnector->i2c->base; in amdgpu_dm_connector_funcs_force()
7433 aconnector->drm_edid = drm_edid; in amdgpu_dm_connector_funcs_force()
7468 static void create_eml_sink(struct amdgpu_dm_connector *aconnector) in create_eml_sink() argument
7470 struct drm_connector *connector = &aconnector->base; in create_eml_sink()
7471 struct dc_link *dc_link = aconnector->dc_link; in create_eml_sink()
7473 .link = aconnector->dc_link, in create_eml_sink()
7481 ddc = &aconnector->dm_dp_aux.aux.ddc; in create_eml_sink()
7483 ddc = &aconnector->i2c->base; in create_eml_sink()
7495 aconnector->drm_edid = drm_edid; in create_eml_sink()
7498 aconnector->dc_em_sink = dc_link_add_remote_sink( in create_eml_sink()
7499 aconnector->dc_link, in create_eml_sink()
7504 if (aconnector->base.force == DRM_FORCE_ON) { in create_eml_sink()
7505 aconnector->dc_sink = aconnector->dc_link->local_sink ? in create_eml_sink()
7506 aconnector->dc_link->local_sink : in create_eml_sink()
7507 aconnector->dc_em_sink; in create_eml_sink()
7508 if (aconnector->dc_sink) in create_eml_sink()
7509 dc_sink_retain(aconnector->dc_sink); in create_eml_sink()
7513 static void handle_edid_mgmt(struct amdgpu_dm_connector *aconnector) in handle_edid_mgmt() argument
7515 struct dc_link *link = (struct dc_link *)aconnector->dc_link; in handle_edid_mgmt()
7526 create_eml_sink(aconnector); in handle_edid_mgmt()
7598 struct amdgpu_dm_connector *aconnector = NULL; in create_validate_stream_for_sink() local
7610 aconnector = to_amdgpu_dm_connector(connector); in create_validate_stream_for_sink()
7612 if (aconnector && in create_validate_stream_for_sink()
7613 (aconnector->dc_link->connector_signal == SIGNAL_TYPE_HDMI_TYPE_A || in create_validate_stream_for_sink()
7614 aconnector->dc_link->dpcd_caps.dongle_type == DISPLAY_DONGLE_DP_HDMI_CONVERTER)) in create_validate_stream_for_sink()
7628 if (!aconnector) /* writeback connector */ in create_validate_stream_for_sink()
7632 dc_result = dm_dp_mst_is_port_support_mode(aconnector, stream); in create_validate_stream_for_sink()
7655 !aconnector->force_yuv420_output) { in create_validate_stream_for_sink()
7659 aconnector->force_yuv420_output = true; in create_validate_stream_for_sink()
7662 aconnector->force_yuv420_output = false; in create_validate_stream_for_sink()
7679 struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_connector_mode_valid() local
7689 if (aconnector->base.force != DRM_FORCE_UNSPECIFIED && in amdgpu_dm_connector_mode_valid()
7690 !aconnector->dc_em_sink) in amdgpu_dm_connector_mode_valid()
7691 handle_edid_mgmt(aconnector); in amdgpu_dm_connector_mode_valid()
7695 if (dc_sink == NULL && aconnector->base.force != DRM_FORCE_ON_DIGITAL && in amdgpu_dm_connector_mode_valid()
7696 aconnector->base.force != DRM_FORCE_ON) { in amdgpu_dm_connector_mode_valid()
7895 struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); in dm_encoder_helper_atomic_check() local
7905 if (!aconnector->mst_output_port) in dm_encoder_helper_atomic_check()
7908 mst_port = aconnector->mst_output_port; in dm_encoder_helper_atomic_check()
7909 mst_mgr = &aconnector->mst_root->mst_mgr; in dm_encoder_helper_atomic_check()
7918 mst_state->pbn_div.full = dfixed_const(dm_mst_get_pbn_divider(aconnector->mst_root->dc_link)); in dm_encoder_helper_atomic_check()
7924 aconnector->force_yuv420_output; in dm_encoder_helper_atomic_check()
7955 struct amdgpu_dm_connector *aconnector; in dm_update_mst_vcpi_slots_for_dsc() local
7965 aconnector = to_amdgpu_dm_connector(connector); in dm_update_mst_vcpi_slots_for_dsc()
7967 if (!aconnector->mst_output_port) in dm_update_mst_vcpi_slots_for_dsc()
7980 if ((struct amdgpu_dm_connector *)stream->dm_stream_context == aconnector) in dm_update_mst_vcpi_slots_for_dsc()
7992 if (vars[j].aconnector == aconnector) { in dm_update_mst_vcpi_slots_for_dsc()
8007 ret = drm_dp_mst_atomic_enable_dsc(state, aconnector->mst_output_port, in dm_update_mst_vcpi_slots_for_dsc()
8015 vcpi = drm_dp_mst_atomic_enable_dsc(state, aconnector->mst_output_port, pbn, true); in dm_update_mst_vcpi_slots_for_dsc()
8239 static bool is_duplicate_mode(struct amdgpu_dm_connector *aconnector, in is_duplicate_mode() argument
8244 list_for_each_entry(m, &aconnector->base.probed_modes, head) { in is_duplicate_mode()
8252 static uint add_fs_modes(struct amdgpu_dm_connector *aconnector) in add_fs_modes() argument
8282 m = get_highest_refresh_rate_mode(aconnector, true); in add_fs_modes()
8293 if (common_rates[i] < aconnector->min_vfreq * 1000 || in add_fs_modes()
8294 common_rates[i] > aconnector->max_vfreq * 1000) in add_fs_modes()
8308 new_mode = drm_mode_duplicate(aconnector->base.dev, m); in add_fs_modes()
8318 if (!is_duplicate_mode(aconnector, new_mode)) { in add_fs_modes()
8319 drm_mode_probed_add(&aconnector->base, new_mode); in add_fs_modes()
8322 drm_mode_destroy(aconnector->base.dev, new_mode); in add_fs_modes()
8378 struct amdgpu_dm_connector *aconnector, in amdgpu_dm_connector_init_helper() argument
8389 if (aconnector->base.funcs->reset) in amdgpu_dm_connector_init_helper()
8390 aconnector->base.funcs->reset(&aconnector->base); in amdgpu_dm_connector_init_helper()
8392 aconnector->connector_id = link_index; in amdgpu_dm_connector_init_helper()
8393 aconnector->bl_idx = -1; in amdgpu_dm_connector_init_helper()
8394 aconnector->dc_link = link; in amdgpu_dm_connector_init_helper()
8395 aconnector->base.interlace_allowed = false; in amdgpu_dm_connector_init_helper()
8396 aconnector->base.doublescan_allowed = false; in amdgpu_dm_connector_init_helper()
8397 aconnector->base.stereo_allowed = false; in amdgpu_dm_connector_init_helper()
8398 aconnector->base.dpms = DRM_MODE_DPMS_OFF; in amdgpu_dm_connector_init_helper()
8399 aconnector->hpd.hpd = AMDGPU_HPD_NONE; /* not used */ in amdgpu_dm_connector_init_helper()
8400 aconnector->audio_inst = -1; in amdgpu_dm_connector_init_helper()
8401 aconnector->pack_sdp_v1_3 = false; in amdgpu_dm_connector_init_helper()
8402 aconnector->as_type = ADAPTIVE_SYNC_TYPE_NONE; in amdgpu_dm_connector_init_helper()
8403 memset(&aconnector->vsdb_info, 0, sizeof(aconnector->vsdb_info)); in amdgpu_dm_connector_init_helper()
8404 mutex_init(&aconnector->hpd_lock); in amdgpu_dm_connector_init_helper()
8405 mutex_init(&aconnector->handle_mst_msg_ready); in amdgpu_dm_connector_init_helper()
8413 aconnector->base.polled = DRM_CONNECTOR_POLL_HPD; in amdgpu_dm_connector_init_helper()
8414 aconnector->base.ycbcr_420_allowed = in amdgpu_dm_connector_init_helper()
8418 aconnector->base.polled = DRM_CONNECTOR_POLL_HPD; in amdgpu_dm_connector_init_helper()
8422 aconnector->base.ycbcr_420_allowed = in amdgpu_dm_connector_init_helper()
8426 aconnector->base.polled = DRM_CONNECTOR_POLL_HPD; in amdgpu_dm_connector_init_helper()
8432 drm_object_attach_property(&aconnector->base.base, in amdgpu_dm_connector_init_helper()
8437 || (connector_type == DRM_MODE_CONNECTOR_DisplayPort && !aconnector->mst_root)) in amdgpu_dm_connector_init_helper()
8438 drm_connector_attach_broadcast_rgb_property(&aconnector->base); in amdgpu_dm_connector_init_helper()
8440 drm_object_attach_property(&aconnector->base.base, in amdgpu_dm_connector_init_helper()
8443 drm_object_attach_property(&aconnector->base.base, in amdgpu_dm_connector_init_helper()
8446 drm_object_attach_property(&aconnector->base.base, in amdgpu_dm_connector_init_helper()
8450 if (!aconnector->mst_root) in amdgpu_dm_connector_init_helper()
8451 drm_connector_attach_max_bpc_property(&aconnector->base, 8, 16); in amdgpu_dm_connector_init_helper()
8453 aconnector->base.state->max_bpc = 16; in amdgpu_dm_connector_init_helper()
8454 aconnector->base.state->max_requested_bpc = aconnector->base.state->max_bpc; in amdgpu_dm_connector_init_helper()
8458 drm_connector_attach_content_type_property(&aconnector->base); in amdgpu_dm_connector_init_helper()
8462 if (!drm_mode_create_hdmi_colorspace_property(&aconnector->base, supported_colorspaces)) in amdgpu_dm_connector_init_helper()
8463 drm_connector_attach_colorspace_property(&aconnector->base); in amdgpu_dm_connector_init_helper()
8464 } else if ((connector_type == DRM_MODE_CONNECTOR_DisplayPort && !aconnector->mst_root) || in amdgpu_dm_connector_init_helper()
8466 if (!drm_mode_create_dp_colorspace_property(&aconnector->base, supported_colorspaces)) in amdgpu_dm_connector_init_helper()
8467 drm_connector_attach_colorspace_property(&aconnector->base); in amdgpu_dm_connector_init_helper()
8473 drm_connector_attach_hdr_output_metadata_property(&aconnector->base); in amdgpu_dm_connector_init_helper()
8475 if (!aconnector->mst_root) in amdgpu_dm_connector_init_helper()
8476 drm_connector_attach_vrr_capable_property(&aconnector->base); in amdgpu_dm_connector_init_helper()
8479 drm_connector_attach_content_protection_property(&aconnector->base, true); in amdgpu_dm_connector_init_helper()
8562 int amdgpu_dm_initialize_hdmi_connector(struct amdgpu_dm_connector *aconnector) in amdgpu_dm_initialize_hdmi_connector() argument
8565 struct drm_device *ddev = aconnector->base.dev; in amdgpu_dm_initialize_hdmi_connector()
8573 cec_fill_conn_info_from_drm(&conn_info, &aconnector->base); in amdgpu_dm_initialize_hdmi_connector()
8574 aconnector->notifier = in amdgpu_dm_initialize_hdmi_connector()
8576 if (!aconnector->notifier) { in amdgpu_dm_initialize_hdmi_connector()
8589 struct amdgpu_dm_connector *aconnector, in amdgpu_dm_connector_init() argument
8600 link->priv = aconnector; in amdgpu_dm_connector_init()
8609 aconnector->i2c = i2c; in amdgpu_dm_connector_init()
8621 &aconnector->base, in amdgpu_dm_connector_init()
8628 aconnector->connector_id = -1; in amdgpu_dm_connector_init()
8633 &aconnector->base, in amdgpu_dm_connector_init()
8638 aconnector, in amdgpu_dm_connector_init()
8644 &aconnector->base, &aencoder->base); in amdgpu_dm_connector_init()
8648 amdgpu_dm_initialize_hdmi_connector(aconnector); in amdgpu_dm_connector_init()
8652 amdgpu_dm_initialize_dp_connector(dm, aconnector, link->link_index); in amdgpu_dm_connector_init()
8657 aconnector->i2c = NULL; in amdgpu_dm_connector_init()
8804 struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); in is_content_protection_different() local
8884 connector->dpms == DRM_MODE_DPMS_ON && aconnector->dc_sink != NULL) { in is_content_protection_different()
9672 struct amdgpu_dm_connector *aconnector; in amdgpu_dm_commit_audio() local
9703 aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_commit_audio()
9706 inst = aconnector->audio_inst; in amdgpu_dm_commit_audio()
9707 aconnector->audio_inst = -1; in amdgpu_dm_commit_audio()
9738 aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_commit_audio()
9742 aconnector->audio_inst = inst; in amdgpu_dm_commit_audio()
10108 struct amdgpu_dm_connector *aconnector; in amdgpu_dm_atomic_commit_tail() local
10113 aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_atomic_commit_tail()
10128 if (aconnector->dc_sink) { in amdgpu_dm_atomic_commit_tail()
10129 if (aconnector->dc_sink->sink_signal != SIGNAL_TYPE_VIRTUAL && in amdgpu_dm_atomic_commit_tail()
10130 aconnector->dc_sink->sink_signal != SIGNAL_TYPE_NONE) { in amdgpu_dm_atomic_commit_tail()
10132 aconnector->dc_sink->edid_caps.display_name); in amdgpu_dm_atomic_commit_tail()
10164 struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_atomic_commit_tail() local
10181 hdcp_reset_display(adev->dm.hdcp_workqueue, aconnector->dc_link->link_index); in amdgpu_dm_atomic_commit_tail()
10203 if (aconnector->dc_link && aconnector->dc_sink && in amdgpu_dm_atomic_commit_tail()
10204 aconnector->dc_link->type == dc_connection_mst_branch) { in amdgpu_dm_atomic_commit_tail()
10207 &hdcp_work[aconnector->dc_link->link_index]; in amdgpu_dm_atomic_commit_tail()
10221 if (aconnector->dc_link) in amdgpu_dm_atomic_commit_tail()
10223 adev->dm.hdcp_workqueue, aconnector->dc_link->link_index, aconnector, in amdgpu_dm_atomic_commit_tail()
10559 struct amdgpu_dm_connector *aconnector; in dm_restore_drm_connector_state() local
10566 aconnector = to_amdgpu_dm_connector(connector); in dm_restore_drm_connector_state()
10568 if (!aconnector->dc_sink || !connector->state || !connector->encoder) in dm_restore_drm_connector_state()
10584 if (acrtc_state->stream->sink != aconnector->dc_sink) in dm_restore_drm_connector_state()
10585 dm_force_atomic_commit(&aconnector->base); in dm_restore_drm_connector_state()
10644 struct amdgpu_dm_connector *aconnector; in get_freesync_config_for_crtc() local
10652 aconnector = to_amdgpu_dm_connector(new_con_state->base.connector); in get_freesync_config_for_crtc()
10655 vrefresh >= aconnector->min_vfreq && in get_freesync_config_for_crtc()
10656 vrefresh <= aconnector->max_vfreq; in get_freesync_config_for_crtc()
10662 config.min_refresh_in_uhz = aconnector->min_vfreq * 1000000; in get_freesync_config_for_crtc()
10663 config.max_refresh_in_uhz = aconnector->max_vfreq * 1000000; in get_freesync_config_for_crtc()
10754 struct amdgpu_dm_connector *aconnector = NULL; in dm_update_crtc_state() local
10765 aconnector = to_amdgpu_dm_connector(connector); in dm_update_crtc_state()
10882 } else if (amdgpu_freesync_vid_mode && aconnector && in dm_update_crtc_state()
10884 aconnector)) { in dm_update_crtc_state()
10887 high_mode = get_highest_refresh_rate_mode(aconnector, false); in dm_update_crtc_state()
11548 struct amdgpu_dm_connector *aconnector = NULL; in add_affected_mst_dsc_crtcs() local
11561 aconnector = to_amdgpu_dm_connector(connector); in add_affected_mst_dsc_crtcs()
11562 if (!aconnector->mst_output_port || !aconnector->mst_root) in add_affected_mst_dsc_crtcs()
11563 aconnector = NULL; in add_affected_mst_dsc_crtcs()
11568 if (!aconnector) in add_affected_mst_dsc_crtcs()
11571 return drm_dp_mst_add_affected_dsc_crtcs(state, &aconnector->mst_root->mst_mgr); in add_affected_mst_dsc_crtcs()
12123 struct amdgpu_dm_connector *aconnector; in amdgpu_dm_atomic_check() local
12131 aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_atomic_check()
12132 link_coding_cap = dc_link_dp_mst_decide_link_encoding_format(aconnector->dc_link); in amdgpu_dm_atomic_check()
12402 static bool parse_edid_cea(struct amdgpu_dm_connector *aconnector, in parse_edid_cea() argument
12406 struct amdgpu_device *adev = drm_to_adev(aconnector->base.dev); in parse_edid_cea()
12461 static int parse_amd_vsdb(struct amdgpu_dm_connector *aconnector, in parse_amd_vsdb() argument
12496 static int parse_hdmi_amd_vsdb(struct amdgpu_dm_connector *aconnector, in parse_hdmi_amd_vsdb() argument
12523 valid_vsdb_found = parse_edid_cea(aconnector, edid_ext, EDID_LENGTH, vsdb_info); in parse_hdmi_amd_vsdb()