Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amd/display: Have Payload Properly Created After Resume

At drm suspend sequence, MST dc_sink is removed. When commit cached
MST stream back in drm resume sequence, the MST stream payload is not
properly created and added into the payload table. After resume, topology
change is reprobed by removing existing streams first. That leads to
no payload is found in the existing payload table as below error
"[drm] ERROR No payload for [MST PORT:] found in mst state"

1. In encoder .atomic_check routine, remove check existance of dc_sink
2. Bypass MST by checking existence of MST root port. dc_link_type cannot
differentiate MST port before topology is rediscovered.

Reviewed-by: Wayne Lin <wayne.lin@amd.com>
Acked-by: Tom Chung <chiahsuan.chung@amd.com>
Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org

authored by

Fangzhi Zuo and committed by
Alex Deucher
482e6ad9 137f9cee

+2 -2
+2 -2
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
··· 2857 2857 * this is the case when traversing through already created 2858 2858 * MST connectors, should be skipped 2859 2859 */ 2860 - if (aconnector->dc_link->type == dc_connection_mst_branch) 2860 + if (aconnector && aconnector->mst_root) 2861 2861 continue; 2862 2862 2863 2863 mutex_lock(&aconnector->hpd_lock); ··· 6742 6742 int clock, bpp = 0; 6743 6743 bool is_y420 = false; 6744 6744 6745 - if (!aconnector->mst_output_port || !aconnector->dc_sink) 6745 + if (!aconnector->mst_output_port) 6746 6746 return 0; 6747 6747 6748 6748 mst_port = aconnector->mst_output_port;