From: Sung-huai Wang <[email protected]>

[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 <[email protected]>
Signed-off-by: Sung-huai Wang <[email protected]>
Signed-off-by: Ivan Lipski <[email protected]>
---
 .../amd/display/dc/link/protocols/link_edp_panel_control.c    | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git 
a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c 
b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
index 72b5921227d2..e06a9ac65286 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
@@ -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;
-- 
2.43.0

Reply via email to