]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amd/display: Fix eDP receiver ready status check in T7 sequence
authorSung-huai Wang <Danny.Wang@amd.com>
Tue, 21 Apr 2026 04:53:56 +0000 (12:53 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 18 May 2026 22:21:48 +0000 (18:21 -0400)
[Why]
Some eDP panels return sinkstatus as 0x5, causing the original sinkstatus == 1
check to never match and resulting in unnecessary polling delay. The
equality check is too restrictive and doesn't properly validate the
specific status bit that indicates receiver readiness.

[How]
Replace direct value comparison with proper bitmask check using
DP_RECEIVE_PORT_0_STATUS constant.

Reviewed-by: Wenjing Liu <wenjing.liu@amd.com>
Signed-off-by: Sung-huai Wang <Danny.Wang@amd.com>
Signed-off-by: Ivan Lipski <ivan.lipski@amd.com>
Tested-by: Dan Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c

index 72b5921227d2333a27f44b4ae48ce8a625c0a282..e06a9ac652860e365674f4b06d3d442531385c10 100644 (file)
@@ -462,7 +462,7 @@ bool edp_receiver_ready_T9(struct dc_link *link)
                do {
                        sinkstatus = 1;
                        result = core_link_read_dpcd(link, DP_SINK_STATUS, &sinkstatus, sizeof(sinkstatus));
-                       if (sinkstatus == 0)
+                       if (!(sinkstatus & DP_RECEIVE_PORT_0_STATUS))
                                break;
                        if (result != DC_OK)
                                break;
@@ -492,7 +492,7 @@ bool edp_receiver_ready_T7(struct dc_link *link)
                do {
                        sinkstatus = 0;
                        result = core_link_read_dpcd(link, DP_SINK_STATUS, &sinkstatus, sizeof(sinkstatus));
-                       if (sinkstatus == 1)
+                       if (sinkstatus & DP_RECEIVE_PORT_0_STATUS)
                                break;
                        if (result != DC_OK)
                                break;