mirror of
https://github.com/torvalds/linux.git
synced 2026-04-22 16:53:59 -04:00
drm/dp_mst: Use Extended Base Receiver Capability DPCD space
[why] DP 1.4a spec mandates that if DP_EXTENDED_RECEIVER_CAP_FIELD_PRESENT is set, Extended Base Receiver Capability DPCD space must be used. Without doing that, the three DPCD values that differ will be wrong, leading to incorrect or limited functionality. MST link rate, for example, could have a lower value. Also, Synaptics quirk wouldn't work out well when Extended DPCD was not read, resulting in no DSC for such hubs. [how] Modify MST topology manager to use the values from Extended DPCD where applicable. To prevent regression on the sources that have a lower maximum link rate capability than MAX_LINK_RATE from Extended DPCD, have the drivers supply maximum lane count and rate at initialization time. This also reverts commit2dcab875e7("Revert drm/dp_mst: Retrieve extended DPCD caps for topology manager"), brining the change back to the original commitad44c03208("drm/dp_mst: Retrieve extended DPCD caps for topology manager"). Signed-off-by: Nikola Cornij <nikola.cornij@amd.com> Reviewed-by: Lyude Paul <lyude@redhat.com> Signed-off-by: Lyude Paul <lyude@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210429221151.22020-2-nikola.cornij@amd.com
This commit is contained in:
committed by
Lyude Paul
parent
310e506c06
commit
98025a62cb
@@ -429,6 +429,8 @@ void amdgpu_dm_initialize_dp_connector(struct amdgpu_display_manager *dm,
|
||||
struct amdgpu_dm_connector *aconnector,
|
||||
int link_index)
|
||||
{
|
||||
struct dc_link_settings max_link_enc_cap = {0};
|
||||
|
||||
aconnector->dm_dp_aux.aux.name =
|
||||
kasprintf(GFP_KERNEL, "AMDGPU DM aux hw bus %d",
|
||||
link_index);
|
||||
@@ -443,6 +445,7 @@ void amdgpu_dm_initialize_dp_connector(struct amdgpu_display_manager *dm,
|
||||
if (aconnector->base.connector_type == DRM_MODE_CONNECTOR_eDP)
|
||||
return;
|
||||
|
||||
dc_link_dp_get_max_link_enc_cap(aconnector->dc_link, &max_link_enc_cap);
|
||||
aconnector->mst_mgr.cbs = &dm_mst_cbs;
|
||||
drm_dp_mst_topology_mgr_init(
|
||||
&aconnector->mst_mgr,
|
||||
@@ -450,6 +453,8 @@ void amdgpu_dm_initialize_dp_connector(struct amdgpu_display_manager *dm,
|
||||
&aconnector->dm_dp_aux.aux,
|
||||
16,
|
||||
4,
|
||||
(u8)max_link_enc_cap.lane_count,
|
||||
(u8)max_link_enc_cap.link_rate,
|
||||
aconnector->connector_id);
|
||||
|
||||
drm_connector_attach_dp_subconnector_property(&aconnector->base);
|
||||
|
||||
Reference in New Issue
Block a user