drm/amd/display: Skip SST ACT polling when sink_count is 0
authorGeorge Shen <george.shen@amd.com>
Tue, 19 Mar 2024 00:31:26 +0000 (20:31 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 30 Apr 2024 13:46:23 +0000 (09:46 -0400)
[Why]
Upon disconnecting a UHBR SST display, the disconnection and the
SetTimings to disable the display can occur such that link_set_dpms_off
occurs after the disconnection has already processed
(link->type is dc_connection_none). Thus, the AUX related
operations should be skipped when clearing the payload allocation table.

Reviewed-by: Wenjing Liu <wenjing.liu@amd.com>
Acked-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: George Shen <george.shen@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/link_dpms.c

index b53ad18dbfbcad8867cdc5f12c8cd4bd65f64e28..d5b4549a87157f711d660a623b38d8b63c2fe2c0 100644 (file)
@@ -1158,12 +1158,13 @@ static bool poll_for_allocation_change_trigger(struct dc_link *link)
        int i;
        const int act_retries = 30;
        enum act_return_status result = ACT_FAILED;
+       enum dc_connection_type display_connected = (link->type != dc_connection_none);
        union payload_table_update_status update_status = {0};
        union lane_status dpcd_lane_status[LANE_COUNT_DP_MAX];
        union lane_align_status_updated lane_status_updated;
        DC_LOGGER_INIT(link->ctx->logger);
 
-       if (link->aux_access_disabled)
+       if (!display_connected || link->aux_access_disabled)
                return true;
        for (i = 0; i < act_retries; i++) {
                get_lane_status(link, link->cur_link_settings.lane_count, dpcd_lane_status, &lane_status_updated);
@@ -1512,6 +1513,7 @@ static bool write_128b_132b_sst_payload_allocation_table(
        union payload_table_update_status update_status = { 0 };
        const uint32_t max_retries = 30;
        uint32_t retries = 0;
+       enum dc_connection_type display_connected = (link->type != dc_connection_none);
        DC_LOGGER_INIT(link->ctx->logger);
 
        if (allocate)   {
@@ -1529,7 +1531,7 @@ static bool write_128b_132b_sst_payload_allocation_table(
        proposed_table->stream_allocations[0].slot_count = req_slot_count;
        proposed_table->stream_allocations[0].vcp_id = vc_id;
 
-       if (link->aux_access_disabled)
+       if (!display_connected || link->aux_access_disabled)
                return true;
 
        /// Write DPCD 2C0 = 1 to start updating