drm/amd/display: use preferred link settings for dp signal only
authorWenjing Liu <wenjing.liu@amd.com>
Wed, 29 May 2024 16:20:41 +0000 (12:20 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 14 Jun 2024 20:17:16 +0000 (16:17 -0400)
[why]
We set preferred link settings for virtual signal. However we don't support
virtual signal for UHBR link rate. If preferred is set to UHBR link rate, we
will allow virtual signal with UHBR link rate which causes system crashes.

Reviewed-by: Dillon Varone <dillon.varone@amd.com>
Acked-by: Zaeem Mohamed <zaeem.mohamed@amd.com>
Signed-off-by: Wenjing Liu <wenjing.liu@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c

index 41bdadc585b38d424cd6564c86e345699ac7af82..00974c50e11f87a7a247345bb36bc16a0fe89254 100644 (file)
@@ -930,21 +930,17 @@ bool link_decide_link_settings(struct dc_stream_state *stream,
 
        memset(link_setting, 0, sizeof(*link_setting));
 
-       /* if preferred is specified through AMDDP, use it, if it's enough
-        * to drive the mode
-        */
-       if (link->preferred_link_setting.lane_count !=
-                       LANE_COUNT_UNKNOWN &&
-                       link->preferred_link_setting.link_rate !=
-                                       LINK_RATE_UNKNOWN) {
+       if (dc_is_dp_signal(stream->signal)  &&
+                       link->preferred_link_setting.lane_count != LANE_COUNT_UNKNOWN &&
+                       link->preferred_link_setting.link_rate != LINK_RATE_UNKNOWN) {
+               /* if preferred is specified through AMDDP, use it, if it's enough
+                * to drive the mode
+                */
                *link_setting = link->preferred_link_setting;
-               return true;
-       }
-
-       /* MST doesn't perform link training for now
-        * TODO: add MST specific link training routine
-        */
-       if (stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST) {
+       } else if (stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST) {
+               /* MST doesn't perform link training for now
+                * TODO: add MST specific link training routine
+                */
                decide_mst_link_settings(link, link_setting);
        } else if (link->connector_signal == SIGNAL_TYPE_EDP) {
                /* enable edp link optimization for DSC eDP case */