Lines Matching refs:aconnector
184 …s_freesync_video_mode(const struct drm_display_mode *mode, struct amdgpu_dm_connector *aconnector);
208 static void update_subconnector_property(struct amdgpu_dm_connector *aconnector) in update_subconnector_property() argument
210 struct dc_link *link = aconnector->dc_link; in update_subconnector_property()
211 struct drm_connector *connector = &aconnector->base; in update_subconnector_property()
217 if (aconnector->dc_sink) in update_subconnector_property()
251 static void handle_hpd_irq_helper(struct amdgpu_dm_connector *aconnector);
789 struct amdgpu_dm_connector *aconnector; in dmub_hpd_callback() local
826 aconnector = to_amdgpu_dm_connector(connector); in dmub_hpd_callback()
827 if (link && aconnector->dc_link == link) { in dmub_hpd_callback()
836 hpd_aconnector = aconnector; in dmub_hpd_callback()
1073 struct amdgpu_dm_connector *aconnector; in amdgpu_dm_audio_component_get_eld() local
1086 aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_audio_component_get_eld()
1087 if (aconnector->audio_inst != port) in amdgpu_dm_audio_component_get_eld()
1500 struct amdgpu_dm_connector *aconnector, in force_connector_state() argument
1503 struct drm_connector *connector = &aconnector->base; in force_connector_state()
1506 aconnector->base.force = force_state; in force_connector_state()
1509 mutex_lock(&aconnector->hpd_lock); in force_connector_state()
1511 mutex_unlock(&aconnector->hpd_lock); in force_connector_state()
1517 struct amdgpu_dm_connector *aconnector; in dm_handle_hpd_rx_offload_work() local
1527 aconnector = offload_work->offload_wq->aconnector; in dm_handle_hpd_rx_offload_work()
1530 if (!aconnector) { in dm_handle_hpd_rx_offload_work()
1535 dc_link = aconnector->dc_link; in dm_handle_hpd_rx_offload_work()
1537 mutex_lock(&aconnector->hpd_lock); in dm_handle_hpd_rx_offload_work()
1540 mutex_unlock(&aconnector->hpd_lock); in dm_handle_hpd_rx_offload_work()
1550 dm_handle_mst_sideband_msg_ready_event(&aconnector->mst_mgr, DOWN_OR_UP_MSG_RDY_EVENT); in dm_handle_hpd_rx_offload_work()
1561 if (aconnector->timing_changed) { in dm_handle_hpd_rx_offload_work()
1563 force_connector_state(aconnector, DRM_FORCE_OFF); in dm_handle_hpd_rx_offload_work()
1565 force_connector_state(aconnector, DRM_FORCE_UNSPECIFIED); in dm_handle_hpd_rx_offload_work()
2623 struct amdgpu_dm_connector *aconnector; in detect_mst_link_for_all_connectors() local
2634 aconnector = to_amdgpu_dm_connector(connector); in detect_mst_link_for_all_connectors()
2635 if (aconnector->dc_link->type == dc_connection_mst_branch && in detect_mst_link_for_all_connectors()
2636 aconnector->mst_mgr.aux) { in detect_mst_link_for_all_connectors()
2638 aconnector, in detect_mst_link_for_all_connectors()
2639 aconnector->base.base.id); in detect_mst_link_for_all_connectors()
2641 ret = drm_dp_mst_topology_mgr_set_mst(&aconnector->mst_mgr, true); in detect_mst_link_for_all_connectors()
2644 aconnector->dc_link->type = in detect_mst_link_for_all_connectors()
2646 ret = dm_helpers_dp_mst_stop_top_mgr(aconnector->dc_link->ctx, in detect_mst_link_for_all_connectors()
2647 aconnector->dc_link); in detect_mst_link_for_all_connectors()
2754 void hdmi_cec_unset_edid(struct amdgpu_dm_connector *aconnector) in hdmi_cec_unset_edid() argument
2756 struct cec_notifier *n = aconnector->notifier; in hdmi_cec_unset_edid()
2764 void hdmi_cec_set_edid(struct amdgpu_dm_connector *aconnector) in hdmi_cec_set_edid() argument
2766 struct drm_connector *connector = &aconnector->base; in hdmi_cec_set_edid()
2767 struct cec_notifier *n = aconnector->notifier; in hdmi_cec_set_edid()
2778 struct amdgpu_dm_connector *aconnector; in s3_handle_hdmi_cec() local
2787 aconnector = to_amdgpu_dm_connector(connector); in s3_handle_hdmi_cec()
2789 hdmi_cec_unset_edid(aconnector); in s3_handle_hdmi_cec()
2791 hdmi_cec_set_edid(aconnector); in s3_handle_hdmi_cec()
2798 struct amdgpu_dm_connector *aconnector; in s3_handle_mst() local
2809 aconnector = to_amdgpu_dm_connector(connector); in s3_handle_mst()
2810 if (aconnector->dc_link->type != dc_connection_mst_branch || in s3_handle_mst()
2811 aconnector->mst_root) in s3_handle_mst()
2814 mgr = &aconnector->mst_mgr; in s3_handle_mst()
2823 try_to_configure_aux_timeout(aconnector->dc_link->ddc, LINK_AUX_DEFAULT_LTTPR_TIMEOUT_PERIOD); in s3_handle_mst()
2824 if (!dp_is_lttpr_present(aconnector->dc_link)) in s3_handle_mst()
2825 try_to_configure_aux_timeout(aconnector->dc_link->ddc, LINK_AUX_DEFAULT_TIMEOUT_PERIOD); in s3_handle_mst()
3367 struct amdgpu_dm_connector *aconnector; in dm_resume() local
3490 aconnector = to_amdgpu_dm_connector(connector); in dm_resume()
3492 if (!aconnector->dc_link) in dm_resume()
3499 if (aconnector->mst_root) in dm_resume()
3502 guard(mutex)(&aconnector->hpd_lock); in dm_resume()
3503 if (!dc_link_detect_connection_type(aconnector->dc_link, &new_connection_type)) in dm_resume()
3506 if (aconnector->base.force && new_connection_type == dc_connection_none) { in dm_resume()
3507 emulated_link_detect(aconnector->dc_link); in dm_resume()
3511 ret = dc_link_detect(aconnector->dc_link, DETECT_REASON_RESUMEFROMS3S4); in dm_resume()
3514 apply_delay_after_dpcd_poweroff(adev, aconnector->dc_sink); in dm_resume()
3518 if (aconnector->fake_enable && aconnector->dc_link->local_sink) in dm_resume()
3519 aconnector->fake_enable = false; in dm_resume()
3521 if (aconnector->dc_sink) in dm_resume()
3522 dc_sink_release(aconnector->dc_sink); in dm_resume()
3523 aconnector->dc_sink = NULL; in dm_resume()
3524 amdgpu_dm_update_connector_after_detect(aconnector); in dm_resume()
3537 aconnector = to_amdgpu_dm_connector(connector); in dm_resume()
3538 if (aconnector->dc_link->type != dc_connection_mst_branch || in dm_resume()
3539 aconnector->mst_root) in dm_resume()
3542 drm_dp_mst_topology_queue_probe(&aconnector->mst_mgr); in dm_resume()
3613 static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector) in update_connector_ext_caps() argument
3621 if (aconnector->bl_idx == -1 || in update_connector_ext_caps()
3622 aconnector->dc_link->connector_signal != SIGNAL_TYPE_EDP) in update_connector_ext_caps()
3625 conn_base = &aconnector->base; in update_connector_ext_caps()
3628 caps = &adev->dm.backlight_caps[aconnector->bl_idx]; in update_connector_ext_caps()
3629 caps->ext_caps = &aconnector->dc_link->dpcd_sink_ext_caps; in update_connector_ext_caps()
3645 aconnector->dc_link->backlight_control_type = BACKLIGHT_CONTROL_AMD_AUX; in update_connector_ext_caps()
3659 min_input_signal_override = drm_get_panel_min_brightness_quirk(aconnector->drm_edid); in update_connector_ext_caps()
3667 struct amdgpu_dm_connector *aconnector) in DEFINE_FREE()
3669 struct drm_connector *connector = &aconnector->base; in DEFINE_FREE()
3674 if (aconnector->mst_mgr.mst_state == true) in DEFINE_FREE()
3677 sink = aconnector->dc_link->local_sink; in DEFINE_FREE()
3686 if (aconnector->base.force != DRM_FORCE_UNSPECIFIED in DEFINE_FREE()
3687 && aconnector->dc_em_sink) { in DEFINE_FREE()
3696 if (aconnector->dc_sink) { in DEFINE_FREE()
3704 dc_sink_release(aconnector->dc_sink); in DEFINE_FREE()
3706 aconnector->dc_sink = sink; in DEFINE_FREE()
3707 dc_sink_retain(aconnector->dc_sink); in DEFINE_FREE()
3709 aconnector->drm_edid); in DEFINE_FREE()
3712 if (!aconnector->dc_sink) { in DEFINE_FREE()
3713 aconnector->dc_sink = aconnector->dc_em_sink; in DEFINE_FREE()
3714 dc_sink_retain(aconnector->dc_sink); in DEFINE_FREE()
3728 if (aconnector->dc_sink == sink) { in DEFINE_FREE()
3734 aconnector->connector_id); in DEFINE_FREE()
3739 aconnector->connector_id, aconnector->dc_sink, sink); in DEFINE_FREE()
3752 if (aconnector->dc_sink) { in DEFINE_FREE()
3754 dc_sink_release(aconnector->dc_sink); in DEFINE_FREE()
3757 aconnector->dc_sink = sink; in DEFINE_FREE()
3758 dc_sink_retain(aconnector->dc_sink); in DEFINE_FREE()
3760 aconnector->drm_edid = NULL; in DEFINE_FREE()
3761 hdmi_cec_unset_edid(aconnector); in DEFINE_FREE()
3762 if (aconnector->dc_link->aux_mode) { in DEFINE_FREE()
3763 drm_dp_cec_unset_edid(&aconnector->dm_dp_aux.aux); in DEFINE_FREE()
3768 aconnector->drm_edid = drm_edid_alloc(edid, sink->dc_edid.length); in DEFINE_FREE()
3769 drm_edid_connector_update(connector, aconnector->drm_edid); in DEFINE_FREE()
3771 hdmi_cec_set_edid(aconnector); in DEFINE_FREE()
3772 if (aconnector->dc_link->aux_mode) in DEFINE_FREE()
3773 drm_dp_cec_attach(&aconnector->dm_dp_aux.aux, in DEFINE_FREE()
3777 if (!aconnector->timing_requested) { in DEFINE_FREE()
3778 aconnector->timing_requested = in DEFINE_FREE()
3780 if (!aconnector->timing_requested) in DEFINE_FREE()
3785 amdgpu_dm_update_freesync_caps(connector, aconnector->drm_edid); in DEFINE_FREE()
3786 update_connector_ext_caps(aconnector); in DEFINE_FREE()
3788 hdmi_cec_unset_edid(aconnector); in DEFINE_FREE()
3789 drm_dp_cec_unset_edid(&aconnector->dm_dp_aux.aux); in DEFINE_FREE()
3791 aconnector->num_modes = 0; in DEFINE_FREE()
3792 dc_sink_release(aconnector->dc_sink); in DEFINE_FREE()
3793 aconnector->dc_sink = NULL; in DEFINE_FREE()
3794 drm_edid_free(aconnector->drm_edid); in DEFINE_FREE()
3795 aconnector->drm_edid = NULL; in DEFINE_FREE()
3796 kfree(aconnector->timing_requested); in DEFINE_FREE()
3797 aconnector->timing_requested = NULL; in DEFINE_FREE()
3803 update_subconnector_property(aconnector); in DEFINE_FREE()
3806 static void handle_hpd_irq_helper(struct amdgpu_dm_connector *aconnector) in handle_hpd_irq_helper() argument
3808 struct drm_connector *connector = &aconnector->base; in handle_hpd_irq_helper()
3813 struct dc *dc = aconnector->dc_link->ctx->dc; in handle_hpd_irq_helper()
3823 guard(mutex)(&aconnector->hpd_lock); in handle_hpd_irq_helper()
3826 hdcp_reset_display(adev->dm.hdcp_workqueue, aconnector->dc_link->link_index); in handle_hpd_irq_helper()
3829 if (aconnector->fake_enable) in handle_hpd_irq_helper()
3830 aconnector->fake_enable = false; in handle_hpd_irq_helper()
3832 aconnector->timing_changed = false; in handle_hpd_irq_helper()
3834 if (!dc_link_detect_connection_type(aconnector->dc_link, &new_connection_type)) in handle_hpd_irq_helper()
3837 if (aconnector->base.force && new_connection_type == dc_connection_none) { in handle_hpd_irq_helper()
3838 emulated_link_detect(aconnector->dc_link); in handle_hpd_irq_helper()
3844 if (aconnector->base.force == DRM_FORCE_UNSPECIFIED) in handle_hpd_irq_helper()
3849 ret = dc_link_detect(aconnector->dc_link, DETECT_REASON_HPD); in handle_hpd_irq_helper()
3853 apply_delay_after_dpcd_poweroff(adev, aconnector->dc_sink); in handle_hpd_irq_helper()
3854 amdgpu_dm_update_connector_after_detect(aconnector); in handle_hpd_irq_helper()
3860 if (aconnector->base.force == DRM_FORCE_UNSPECIFIED) in handle_hpd_irq_helper()
3868 struct amdgpu_dm_connector *aconnector = (struct amdgpu_dm_connector *)param; in handle_hpd_irq() local
3870 handle_hpd_irq_helper(aconnector); in handle_hpd_irq()
3896 struct amdgpu_dm_connector *aconnector = (struct amdgpu_dm_connector *)param; in handle_hpd_rx_irq() local
3897 struct drm_connector *connector = &aconnector->base; in handle_hpd_rx_irq()
3899 struct dc_link *dc_link = aconnector->dc_link; in handle_hpd_rx_irq()
3900 bool is_mst_root_connector = aconnector->mst_mgr.mst_state; in handle_hpd_rx_irq()
3909 struct dc *dc = aconnector->dc_link->ctx->dc; in handle_hpd_rx_irq()
3921 mutex_lock(&aconnector->hpd_lock); in handle_hpd_rx_irq()
3981 if (aconnector->base.force && new_connection_type == dc_connection_none) { in handle_hpd_rx_irq()
3984 if (aconnector->fake_enable) in handle_hpd_rx_irq()
3985 aconnector->fake_enable = false; in handle_hpd_rx_irq()
3987 amdgpu_dm_update_connector_after_detect(aconnector); in handle_hpd_rx_irq()
4004 if (aconnector->fake_enable) in handle_hpd_rx_irq()
4005 aconnector->fake_enable = false; in handle_hpd_rx_irq()
4007 amdgpu_dm_update_connector_after_detect(aconnector); in handle_hpd_rx_irq()
4019 hdcp_handle_cpirq(adev->dm.hdcp_workqueue, aconnector->base.index); in handle_hpd_rx_irq()
4023 drm_dp_cec_irq(&aconnector->dm_dp_aux.aux); in handle_hpd_rx_irq()
4025 mutex_unlock(&aconnector->hpd_lock); in handle_hpd_rx_irq()
4032 struct amdgpu_dm_connector *aconnector; in register_hpd_handlers() local
4065 aconnector = to_amdgpu_dm_connector(connector); in register_hpd_handlers()
4066 dc_link = aconnector->dc_link; in register_hpd_handlers()
4080 handle_hpd_irq, (void *) aconnector)) in register_hpd_handlers()
4098 handle_hpd_rx_irq, (void *) aconnector)) in register_hpd_handlers()
4966 amdgpu_dm_register_backlight_device(struct amdgpu_dm_connector *aconnector) in amdgpu_dm_register_backlight_device() argument
4968 struct drm_device *drm = aconnector->base.dev; in amdgpu_dm_register_backlight_device()
4975 if (aconnector->bl_idx == -1) in amdgpu_dm_register_backlight_device()
4985 caps = &dm->backlight_caps[aconnector->bl_idx]; in amdgpu_dm_register_backlight_device()
5003 drm->primary->index + aconnector->bl_idx); in amdgpu_dm_register_backlight_device()
5005 dm->backlight_dev[aconnector->bl_idx] = in amdgpu_dm_register_backlight_device()
5006 backlight_device_register(bl_name, aconnector->base.kdev, dm, in amdgpu_dm_register_backlight_device()
5008 dm->brightness[aconnector->bl_idx] = props.brightness; in amdgpu_dm_register_backlight_device()
5010 if (IS_ERR(dm->backlight_dev[aconnector->bl_idx])) { in amdgpu_dm_register_backlight_device()
5012 dm->backlight_dev[aconnector->bl_idx] = NULL; in amdgpu_dm_register_backlight_device()
5059 struct amdgpu_dm_connector *aconnector) in setup_backlight_device() argument
5061 struct dc_link *link = aconnector->dc_link; in setup_backlight_device()
5073 aconnector->bl_idx = bl_idx; in setup_backlight_device()
5079 update_connector_ext_caps(aconnector); in setup_backlight_device()
5096 struct amdgpu_dm_connector *aconnector = NULL; in amdgpu_dm_initialize_drm_device() local
5276 aconnector = kzalloc(sizeof(*aconnector), GFP_KERNEL); in amdgpu_dm_initialize_drm_device()
5277 if (!aconnector) in amdgpu_dm_initialize_drm_device()
5289 if (amdgpu_dm_connector_init(dm, aconnector, i, aencoder)) { in amdgpu_dm_initialize_drm_device()
5295 dm->hpd_rx_offload_wq[aconnector->base.index].aconnector = in amdgpu_dm_initialize_drm_device()
5296 aconnector; in amdgpu_dm_initialize_drm_device()
5301 if (aconnector->base.force && new_connection_type == dc_connection_none) { in amdgpu_dm_initialize_drm_device()
5303 amdgpu_dm_update_connector_after_detect(aconnector); in amdgpu_dm_initialize_drm_device()
5313 amdgpu_dm_update_connector_after_detect(aconnector); in amdgpu_dm_initialize_drm_device()
5314 setup_backlight_device(dm, aconnector); in amdgpu_dm_initialize_drm_device()
5318 if (amdgpu_dm_set_replay_caps(link, aconnector)) in amdgpu_dm_initialize_drm_device()
5332 amdgpu_set_panel_orientation(&aconnector->base); in amdgpu_dm_initialize_drm_device()
5408 kfree(aconnector); in amdgpu_dm_initialize_drm_device()
6339 struct amdgpu_dm_connector *aconnector = NULL; in fill_stream_properties_from_drm_display_mode() local
6345 aconnector = to_amdgpu_dm_connector(connector); in fill_stream_properties_from_drm_display_mode()
6359 && aconnector in fill_stream_properties_from_drm_display_mode()
6360 && aconnector->force_yuv420_output) in fill_stream_properties_from_drm_display_mode()
6403 if (aconnector && is_freesync_video_mode(mode_in, aconnector)) { in fill_stream_properties_from_drm_display_mode()
6639 get_highest_refresh_rate_mode(struct amdgpu_dm_connector *aconnector, in get_highest_refresh_rate_mode() argument
6645 &aconnector->base.probed_modes : in get_highest_refresh_rate_mode()
6646 &aconnector->base.modes; in get_highest_refresh_rate_mode()
6648 if (aconnector->base.connector_type == DRM_MODE_CONNECTOR_WRITEBACK) in get_highest_refresh_rate_mode()
6651 if (aconnector->freesync_vid_base.clock != 0) in get_highest_refresh_rate_mode()
6652 return &aconnector->freesync_vid_base; in get_highest_refresh_rate_mode()
6665 &aconnector->base.modes, struct drm_display_mode, head); in get_highest_refresh_rate_mode()
6667 drm_dbg_driver(aconnector->base.dev, "No preferred mode found in EDID\n"); in get_highest_refresh_rate_mode()
6690 drm_mode_copy(&aconnector->freesync_vid_base, m_pref); in get_highest_refresh_rate_mode()
6695 struct amdgpu_dm_connector *aconnector) in is_freesync_video_mode() argument
6700 high_mode = get_highest_refresh_rate_mode(aconnector, false); in is_freesync_video_mode()
6722 static void update_dsc_caps(struct amdgpu_dm_connector *aconnector, in update_dsc_caps() argument
6729 if (aconnector->dc_link && (sink->sink_signal == SIGNAL_TYPE_DISPLAY_PORT || in update_dsc_caps()
6733 dc_dsc_parse_dsc_dpcd(aconnector->dc_link->ctx->dc, in update_dsc_caps()
6734 aconnector->dc_link->dpcd_caps.dsc_caps.dsc_basic_caps.raw, in update_dsc_caps()
6735 aconnector->dc_link->dpcd_caps.dsc_caps.dsc_branch_decoder_caps.raw, in update_dsc_caps()
6740 static void apply_dsc_policy_for_edp(struct amdgpu_dm_connector *aconnector, in apply_dsc_policy_for_edp() argument
6772 dc_link_get_highest_encoding_format(aconnector->dc_link), in apply_dsc_policy_for_edp()
6781 dc_link_get_highest_encoding_format(aconnector->dc_link), in apply_dsc_policy_for_edp()
6796 dc_link_get_highest_encoding_format(aconnector->dc_link), in apply_dsc_policy_for_edp()
6803 static void apply_dsc_policy_for_stream(struct amdgpu_dm_connector *aconnector, in apply_dsc_policy_for_stream() argument
6807 struct drm_connector *drm_connector = &aconnector->base; in apply_dsc_policy_for_stream()
6819 link_bandwidth_kbps = dc_link_bandwidth_kbps(aconnector->dc_link, in apply_dsc_policy_for_stream()
6820 dc_link_get_link_cap(aconnector->dc_link)); in apply_dsc_policy_for_stream()
6824 aconnector->dsc_settings.dsc_force_enable == DSC_CLK_FORCE_ENABLE); in apply_dsc_policy_for_stream()
6827 !aconnector->dc_link->panel_config.dsc.disable_dsc_edp && in apply_dsc_policy_for_stream()
6828 … dc->caps.edp_dsc_support && aconnector->dsc_settings.dsc_force_enable != DSC_CLK_FORCE_DISABLE) { in apply_dsc_policy_for_stream()
6830 apply_dsc_policy_for_edp(aconnector, sink, stream, dsc_caps, max_dsc_target_bpp_limit_override); in apply_dsc_policy_for_stream()
6834 if (dc_dsc_compute_config(aconnector->dc_link->ctx->dc->res_pool->dscs[0], in apply_dsc_policy_for_stream()
6839 dc_link_get_highest_encoding_format(aconnector->dc_link), in apply_dsc_policy_for_stream()
6847 dc_link_get_highest_encoding_format(aconnector->dc_link)); in apply_dsc_policy_for_stream()
6854 if (dc_dsc_compute_config(aconnector->dc_link->ctx->dc->res_pool->dscs[0], in apply_dsc_policy_for_stream()
6859 dc_link_get_highest_encoding_format(aconnector->dc_link), in apply_dsc_policy_for_stream()
6869 if (aconnector->dsc_settings.dsc_force_enable == DSC_CLK_FORCE_ENABLE) in apply_dsc_policy_for_stream()
6872 if (stream->timing.flags.DSC && aconnector->dsc_settings.dsc_num_slices_h) in apply_dsc_policy_for_stream()
6873 stream->timing.dsc_cfg.num_slices_h = aconnector->dsc_settings.dsc_num_slices_h; in apply_dsc_policy_for_stream()
6875 if (stream->timing.flags.DSC && aconnector->dsc_settings.dsc_num_slices_v) in apply_dsc_policy_for_stream()
6876 stream->timing.dsc_cfg.num_slices_v = aconnector->dsc_settings.dsc_num_slices_v; in apply_dsc_policy_for_stream()
6878 if (stream->timing.flags.DSC && aconnector->dsc_settings.dsc_bits_per_pixel) in apply_dsc_policy_for_stream()
6879 stream->timing.dsc_cfg.bits_per_pixel = aconnector->dsc_settings.dsc_bits_per_pixel; in apply_dsc_policy_for_stream()
6891 struct amdgpu_dm_connector *aconnector = NULL; in create_stream_for_sink() local
6914 aconnector = NULL; in create_stream_for_sink()
6915 aconnector = to_amdgpu_dm_connector(connector); in create_stream_for_sink()
6916 link = aconnector->dc_link; in create_stream_for_sink()
6926 if (!aconnector || !aconnector->dc_sink) { in create_stream_for_sink()
6932 sink = aconnector->dc_sink; in create_stream_for_sink()
6944 stream->dm_stream_context = aconnector; in create_stream_for_sink()
6972 } else if (aconnector) { in create_stream_for_sink()
6974 is_freesync_video_mode(&mode, aconnector); in create_stream_for_sink()
6976 freesync_mode = get_highest_refresh_rate_mode(aconnector, false); in create_stream_for_sink()
7006 if (!aconnector) in create_stream_for_sink()
7009 if (aconnector->timing_changed) { in create_stream_for_sink()
7010 drm_dbg(aconnector->base.dev, in create_stream_for_sink()
7013 aconnector->timing_requested->display_color_depth); in create_stream_for_sink()
7014 stream->timing = *aconnector->timing_requested; in create_stream_for_sink()
7019 update_dsc_caps(aconnector, sink, stream, &dsc_caps); in create_stream_for_sink()
7020 …if (aconnector->dsc_settings.dsc_force_enable != DSC_CLK_FORCE_DISABLE && dsc_caps.is_dsc_supporte… in create_stream_for_sink()
7021 apply_dsc_policy_for_stream(aconnector, sink, stream, &dsc_caps); in create_stream_for_sink()
7042 if (aconnector->dc_sink) { in create_stream_for_sink()
7043 edid_caps = &aconnector->dc_sink->edid_caps; in create_stream_for_sink()
7058 aconnector->sr_skip_count = AMDGPU_DM_PSR_ENTRY_DELAY; in create_stream_for_sink()
7071 struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_connector_detect() local
7080 if (aconnector->base.force == DRM_FORCE_UNSPECIFIED && in amdgpu_dm_connector_detect()
7081 !aconnector->fake_enable) in amdgpu_dm_connector_detect()
7082 connected = (aconnector->dc_sink != NULL); in amdgpu_dm_connector_detect()
7084 connected = (aconnector->base.force == DRM_FORCE_ON || in amdgpu_dm_connector_detect()
7085 aconnector->base.force == DRM_FORCE_ON_DIGITAL); in amdgpu_dm_connector_detect()
7087 update_subconnector_property(aconnector); in amdgpu_dm_connector_detect()
7291 struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_connector_destroy() local
7299 if (aconnector->mst_mgr.dev) in amdgpu_dm_connector_destroy()
7300 drm_dp_mst_topology_mgr_destroy(&aconnector->mst_mgr); in amdgpu_dm_connector_destroy()
7302 if (aconnector->bl_idx != -1) { in amdgpu_dm_connector_destroy()
7303 backlight_device_unregister(dm->backlight_dev[aconnector->bl_idx]); in amdgpu_dm_connector_destroy()
7304 dm->backlight_dev[aconnector->bl_idx] = NULL; in amdgpu_dm_connector_destroy()
7307 if (aconnector->dc_em_sink) in amdgpu_dm_connector_destroy()
7308 dc_sink_release(aconnector->dc_em_sink); in amdgpu_dm_connector_destroy()
7309 aconnector->dc_em_sink = NULL; in amdgpu_dm_connector_destroy()
7310 if (aconnector->dc_sink) in amdgpu_dm_connector_destroy()
7311 dc_sink_release(aconnector->dc_sink); in amdgpu_dm_connector_destroy()
7312 aconnector->dc_sink = NULL; in amdgpu_dm_connector_destroy()
7314 drm_dp_cec_unregister_connector(&aconnector->dm_dp_aux.aux); in amdgpu_dm_connector_destroy()
7317 if (aconnector->i2c) { in amdgpu_dm_connector_destroy()
7318 i2c_del_adapter(&aconnector->i2c->base); in amdgpu_dm_connector_destroy()
7319 kfree(aconnector->i2c); in amdgpu_dm_connector_destroy()
7321 kfree(aconnector->dm_dp_aux.aux.name); in amdgpu_dm_connector_destroy()
7416 struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_connector_funcs_force() local
7417 struct dc_link *dc_link = aconnector->dc_link; in amdgpu_dm_connector_funcs_force()
7418 struct dc_sink *dc_em_sink = aconnector->dc_em_sink; in amdgpu_dm_connector_funcs_force()
7424 ddc = &aconnector->dm_dp_aux.aux.ddc; in amdgpu_dm_connector_funcs_force()
7426 ddc = &aconnector->i2c->base; in amdgpu_dm_connector_funcs_force()
7435 aconnector->drm_edid = drm_edid; in amdgpu_dm_connector_funcs_force()
7470 static void create_eml_sink(struct amdgpu_dm_connector *aconnector) in create_eml_sink() argument
7472 struct drm_connector *connector = &aconnector->base; in create_eml_sink()
7473 struct dc_link *dc_link = aconnector->dc_link; in create_eml_sink()
7475 .link = aconnector->dc_link, in create_eml_sink()
7483 ddc = &aconnector->dm_dp_aux.aux.ddc; in create_eml_sink()
7485 ddc = &aconnector->i2c->base; in create_eml_sink()
7497 aconnector->drm_edid = drm_edid; in create_eml_sink()
7500 aconnector->dc_em_sink = dc_link_add_remote_sink( in create_eml_sink()
7501 aconnector->dc_link, in create_eml_sink()
7506 if (aconnector->base.force == DRM_FORCE_ON) { in create_eml_sink()
7507 aconnector->dc_sink = aconnector->dc_link->local_sink ? in create_eml_sink()
7508 aconnector->dc_link->local_sink : in create_eml_sink()
7509 aconnector->dc_em_sink; in create_eml_sink()
7510 if (aconnector->dc_sink) in create_eml_sink()
7511 dc_sink_retain(aconnector->dc_sink); in create_eml_sink()
7515 static void handle_edid_mgmt(struct amdgpu_dm_connector *aconnector) in handle_edid_mgmt() argument
7517 struct dc_link *link = (struct dc_link *)aconnector->dc_link; in handle_edid_mgmt()
7528 create_eml_sink(aconnector); in handle_edid_mgmt()
7600 struct amdgpu_dm_connector *aconnector = NULL; in create_validate_stream_for_sink() local
7612 aconnector = to_amdgpu_dm_connector(connector); in create_validate_stream_for_sink()
7614 if (aconnector && in create_validate_stream_for_sink()
7615 (aconnector->dc_link->connector_signal == SIGNAL_TYPE_HDMI_TYPE_A || in create_validate_stream_for_sink()
7616 aconnector->dc_link->dpcd_caps.dongle_type == DISPLAY_DONGLE_DP_HDMI_CONVERTER)) in create_validate_stream_for_sink()
7630 if (!aconnector) /* writeback connector */ in create_validate_stream_for_sink()
7634 dc_result = dm_dp_mst_is_port_support_mode(aconnector, stream); in create_validate_stream_for_sink()
7657 !aconnector->force_yuv420_output) { in create_validate_stream_for_sink()
7661 aconnector->force_yuv420_output = true; in create_validate_stream_for_sink()
7664 aconnector->force_yuv420_output = false; in create_validate_stream_for_sink()
7681 struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_connector_mode_valid() local
7691 if (aconnector->base.force != DRM_FORCE_UNSPECIFIED && in amdgpu_dm_connector_mode_valid()
7692 !aconnector->dc_em_sink) in amdgpu_dm_connector_mode_valid()
7693 handle_edid_mgmt(aconnector); in amdgpu_dm_connector_mode_valid()
7697 if (dc_sink == NULL && aconnector->base.force != DRM_FORCE_ON_DIGITAL && in amdgpu_dm_connector_mode_valid()
7698 aconnector->base.force != DRM_FORCE_ON) { in amdgpu_dm_connector_mode_valid()
7897 struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); in dm_encoder_helper_atomic_check() local
7924 if (!aconnector->mst_output_port) in dm_encoder_helper_atomic_check()
7927 mst_port = aconnector->mst_output_port; in dm_encoder_helper_atomic_check()
7928 mst_mgr = &aconnector->mst_root->mst_mgr; in dm_encoder_helper_atomic_check()
7937 mst_state->pbn_div.full = dfixed_const(dm_mst_get_pbn_divider(aconnector->mst_root->dc_link)); in dm_encoder_helper_atomic_check()
7943 aconnector->force_yuv420_output; in dm_encoder_helper_atomic_check()
7974 struct amdgpu_dm_connector *aconnector; in dm_update_mst_vcpi_slots_for_dsc() local
7984 aconnector = to_amdgpu_dm_connector(connector); in dm_update_mst_vcpi_slots_for_dsc()
7986 if (!aconnector->mst_output_port) in dm_update_mst_vcpi_slots_for_dsc()
7999 if ((struct amdgpu_dm_connector *)stream->dm_stream_context == aconnector) in dm_update_mst_vcpi_slots_for_dsc()
8011 if (vars[j].aconnector == aconnector) { in dm_update_mst_vcpi_slots_for_dsc()
8026 ret = drm_dp_mst_atomic_enable_dsc(state, aconnector->mst_output_port, in dm_update_mst_vcpi_slots_for_dsc()
8034 vcpi = drm_dp_mst_atomic_enable_dsc(state, aconnector->mst_output_port, pbn, true); in dm_update_mst_vcpi_slots_for_dsc()
8258 static bool is_duplicate_mode(struct amdgpu_dm_connector *aconnector, in is_duplicate_mode() argument
8263 list_for_each_entry(m, &aconnector->base.probed_modes, head) { in is_duplicate_mode()
8271 static uint add_fs_modes(struct amdgpu_dm_connector *aconnector) in add_fs_modes() argument
8301 m = get_highest_refresh_rate_mode(aconnector, true); in add_fs_modes()
8312 if (common_rates[i] < aconnector->min_vfreq * 1000 || in add_fs_modes()
8313 common_rates[i] > aconnector->max_vfreq * 1000) in add_fs_modes()
8327 new_mode = drm_mode_duplicate(aconnector->base.dev, m); in add_fs_modes()
8337 if (!is_duplicate_mode(aconnector, new_mode)) { in add_fs_modes()
8338 drm_mode_probed_add(&aconnector->base, new_mode); in add_fs_modes()
8341 drm_mode_destroy(aconnector->base.dev, new_mode); in add_fs_modes()
8398 struct amdgpu_dm_connector *aconnector, in amdgpu_dm_connector_init_helper() argument
8409 if (aconnector->base.funcs->reset) in amdgpu_dm_connector_init_helper()
8410 aconnector->base.funcs->reset(&aconnector->base); in amdgpu_dm_connector_init_helper()
8412 aconnector->connector_id = link_index; in amdgpu_dm_connector_init_helper()
8413 aconnector->bl_idx = -1; in amdgpu_dm_connector_init_helper()
8414 aconnector->dc_link = link; in amdgpu_dm_connector_init_helper()
8415 aconnector->base.interlace_allowed = false; in amdgpu_dm_connector_init_helper()
8416 aconnector->base.doublescan_allowed = false; in amdgpu_dm_connector_init_helper()
8417 aconnector->base.stereo_allowed = false; in amdgpu_dm_connector_init_helper()
8418 aconnector->base.dpms = DRM_MODE_DPMS_OFF; in amdgpu_dm_connector_init_helper()
8419 aconnector->hpd.hpd = AMDGPU_HPD_NONE; /* not used */ in amdgpu_dm_connector_init_helper()
8420 aconnector->audio_inst = -1; in amdgpu_dm_connector_init_helper()
8421 aconnector->pack_sdp_v1_3 = false; in amdgpu_dm_connector_init_helper()
8422 aconnector->as_type = ADAPTIVE_SYNC_TYPE_NONE; in amdgpu_dm_connector_init_helper()
8423 memset(&aconnector->vsdb_info, 0, sizeof(aconnector->vsdb_info)); in amdgpu_dm_connector_init_helper()
8424 mutex_init(&aconnector->hpd_lock); in amdgpu_dm_connector_init_helper()
8425 mutex_init(&aconnector->handle_mst_msg_ready); in amdgpu_dm_connector_init_helper()
8433 aconnector->base.polled = DRM_CONNECTOR_POLL_HPD; in amdgpu_dm_connector_init_helper()
8434 aconnector->base.ycbcr_420_allowed = in amdgpu_dm_connector_init_helper()
8438 aconnector->base.polled = DRM_CONNECTOR_POLL_HPD; in amdgpu_dm_connector_init_helper()
8442 aconnector->base.ycbcr_420_allowed = in amdgpu_dm_connector_init_helper()
8446 aconnector->base.polled = DRM_CONNECTOR_POLL_HPD; in amdgpu_dm_connector_init_helper()
8452 drm_object_attach_property(&aconnector->base.base, in amdgpu_dm_connector_init_helper()
8457 || (connector_type == DRM_MODE_CONNECTOR_DisplayPort && !aconnector->mst_root)) in amdgpu_dm_connector_init_helper()
8458 drm_connector_attach_broadcast_rgb_property(&aconnector->base); in amdgpu_dm_connector_init_helper()
8460 drm_object_attach_property(&aconnector->base.base, in amdgpu_dm_connector_init_helper()
8463 drm_object_attach_property(&aconnector->base.base, in amdgpu_dm_connector_init_helper()
8466 drm_object_attach_property(&aconnector->base.base, in amdgpu_dm_connector_init_helper()
8470 if (!aconnector->mst_root) in amdgpu_dm_connector_init_helper()
8471 drm_connector_attach_max_bpc_property(&aconnector->base, 8, 16); in amdgpu_dm_connector_init_helper()
8473 aconnector->base.state->max_bpc = 16; in amdgpu_dm_connector_init_helper()
8474 aconnector->base.state->max_requested_bpc = aconnector->base.state->max_bpc; in amdgpu_dm_connector_init_helper()
8478 drm_connector_attach_content_type_property(&aconnector->base); in amdgpu_dm_connector_init_helper()
8482 if (!drm_mode_create_hdmi_colorspace_property(&aconnector->base, supported_colorspaces)) in amdgpu_dm_connector_init_helper()
8483 drm_connector_attach_colorspace_property(&aconnector->base); in amdgpu_dm_connector_init_helper()
8484 } else if ((connector_type == DRM_MODE_CONNECTOR_DisplayPort && !aconnector->mst_root) || in amdgpu_dm_connector_init_helper()
8486 if (!drm_mode_create_dp_colorspace_property(&aconnector->base, supported_colorspaces)) in amdgpu_dm_connector_init_helper()
8487 drm_connector_attach_colorspace_property(&aconnector->base); in amdgpu_dm_connector_init_helper()
8493 drm_connector_attach_hdr_output_metadata_property(&aconnector->base); in amdgpu_dm_connector_init_helper()
8495 if (!aconnector->mst_root) in amdgpu_dm_connector_init_helper()
8496 drm_connector_attach_vrr_capable_property(&aconnector->base); in amdgpu_dm_connector_init_helper()
8499 drm_connector_attach_content_protection_property(&aconnector->base, true); in amdgpu_dm_connector_init_helper()
8582 int amdgpu_dm_initialize_hdmi_connector(struct amdgpu_dm_connector *aconnector) in amdgpu_dm_initialize_hdmi_connector() argument
8585 struct drm_device *ddev = aconnector->base.dev; in amdgpu_dm_initialize_hdmi_connector()
8593 cec_fill_conn_info_from_drm(&conn_info, &aconnector->base); in amdgpu_dm_initialize_hdmi_connector()
8594 aconnector->notifier = in amdgpu_dm_initialize_hdmi_connector()
8596 if (!aconnector->notifier) { in amdgpu_dm_initialize_hdmi_connector()
8609 struct amdgpu_dm_connector *aconnector, in amdgpu_dm_connector_init() argument
8620 link->priv = aconnector; in amdgpu_dm_connector_init()
8629 aconnector->i2c = i2c; in amdgpu_dm_connector_init()
8641 &aconnector->base, in amdgpu_dm_connector_init()
8648 aconnector->connector_id = -1; in amdgpu_dm_connector_init()
8653 &aconnector->base, in amdgpu_dm_connector_init()
8658 aconnector, in amdgpu_dm_connector_init()
8664 &aconnector->base, &aencoder->base); in amdgpu_dm_connector_init()
8668 amdgpu_dm_initialize_hdmi_connector(aconnector); in amdgpu_dm_connector_init()
8672 amdgpu_dm_initialize_dp_connector(dm, aconnector, link->link_index); in amdgpu_dm_connector_init()
8677 aconnector->i2c = NULL; in amdgpu_dm_connector_init()
8824 struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); in is_content_protection_different() local
8904 connector->dpms == DRM_MODE_DPMS_ON && aconnector->dc_sink != NULL) { in is_content_protection_different()
9692 struct amdgpu_dm_connector *aconnector; in amdgpu_dm_commit_audio() local
9723 aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_commit_audio()
9726 inst = aconnector->audio_inst; in amdgpu_dm_commit_audio()
9727 aconnector->audio_inst = -1; in amdgpu_dm_commit_audio()
9758 aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_commit_audio()
9762 aconnector->audio_inst = inst; in amdgpu_dm_commit_audio()
10128 struct amdgpu_dm_connector *aconnector; in amdgpu_dm_atomic_commit_tail() local
10133 aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_atomic_commit_tail()
10148 if (aconnector->dc_sink) { in amdgpu_dm_atomic_commit_tail()
10149 if (aconnector->dc_sink->sink_signal != SIGNAL_TYPE_VIRTUAL && in amdgpu_dm_atomic_commit_tail()
10150 aconnector->dc_sink->sink_signal != SIGNAL_TYPE_NONE) { in amdgpu_dm_atomic_commit_tail()
10152 aconnector->dc_sink->edid_caps.display_name); in amdgpu_dm_atomic_commit_tail()
10184 struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_atomic_commit_tail() local
10201 hdcp_reset_display(adev->dm.hdcp_workqueue, aconnector->dc_link->link_index); in amdgpu_dm_atomic_commit_tail()
10223 if (aconnector->dc_link && aconnector->dc_sink && in amdgpu_dm_atomic_commit_tail()
10224 aconnector->dc_link->type == dc_connection_mst_branch) { in amdgpu_dm_atomic_commit_tail()
10227 &hdcp_work[aconnector->dc_link->link_index]; in amdgpu_dm_atomic_commit_tail()
10241 if (aconnector->dc_link) in amdgpu_dm_atomic_commit_tail()
10243 adev->dm.hdcp_workqueue, aconnector->dc_link->link_index, aconnector, in amdgpu_dm_atomic_commit_tail()
10585 struct amdgpu_dm_connector *aconnector; in dm_restore_drm_connector_state() local
10592 aconnector = to_amdgpu_dm_connector(connector); in dm_restore_drm_connector_state()
10594 if (!aconnector->dc_sink || !connector->state || !connector->encoder) in dm_restore_drm_connector_state()
10610 if (acrtc_state->stream->sink != aconnector->dc_sink) in dm_restore_drm_connector_state()
10611 dm_force_atomic_commit(&aconnector->base); in dm_restore_drm_connector_state()
10670 struct amdgpu_dm_connector *aconnector; in get_freesync_config_for_crtc() local
10678 aconnector = to_amdgpu_dm_connector(new_con_state->base.connector); in get_freesync_config_for_crtc()
10681 vrefresh >= aconnector->min_vfreq && in get_freesync_config_for_crtc()
10682 vrefresh <= aconnector->max_vfreq; in get_freesync_config_for_crtc()
10688 config.min_refresh_in_uhz = aconnector->min_vfreq * 1000000; in get_freesync_config_for_crtc()
10689 config.max_refresh_in_uhz = aconnector->max_vfreq * 1000000; in get_freesync_config_for_crtc()
10781 struct amdgpu_dm_connector *aconnector = NULL; in dm_update_crtc_state() local
10792 aconnector = to_amdgpu_dm_connector(connector); in dm_update_crtc_state()
10909 } else if (amdgpu_freesync_vid_mode && aconnector && in dm_update_crtc_state()
10911 aconnector)) { in dm_update_crtc_state()
10914 high_mode = get_highest_refresh_rate_mode(aconnector, false); in dm_update_crtc_state()
11575 struct amdgpu_dm_connector *aconnector = NULL; in add_affected_mst_dsc_crtcs() local
11588 aconnector = to_amdgpu_dm_connector(connector); in add_affected_mst_dsc_crtcs()
11589 if (!aconnector->mst_output_port || !aconnector->mst_root) in add_affected_mst_dsc_crtcs()
11590 aconnector = NULL; in add_affected_mst_dsc_crtcs()
11595 if (!aconnector) in add_affected_mst_dsc_crtcs()
11598 return drm_dp_mst_add_affected_dsc_crtcs(state, &aconnector->mst_root->mst_mgr); in add_affected_mst_dsc_crtcs()
12150 struct amdgpu_dm_connector *aconnector; in amdgpu_dm_atomic_check() local
12158 aconnector = to_amdgpu_dm_connector(connector); in amdgpu_dm_atomic_check()
12159 link_coding_cap = dc_link_dp_mst_decide_link_encoding_format(aconnector->dc_link); in amdgpu_dm_atomic_check()
12429 static bool parse_edid_cea(struct amdgpu_dm_connector *aconnector, in parse_edid_cea() argument
12433 struct amdgpu_device *adev = drm_to_adev(aconnector->base.dev); in parse_edid_cea()
12488 static int parse_amd_vsdb(struct amdgpu_dm_connector *aconnector, in parse_amd_vsdb() argument
12523 static int parse_hdmi_amd_vsdb(struct amdgpu_dm_connector *aconnector, in parse_hdmi_amd_vsdb() argument
12550 valid_vsdb_found = parse_edid_cea(aconnector, edid_ext, EDID_LENGTH, vsdb_info); in parse_hdmi_amd_vsdb()