From: Fangzhi Zuo <[email protected]>

[Why]
hdmi_frl_status_polling_work() skipped any link whose connector_signal
was not SIGNAL_TYPE_HDMI_FRL. connector_signal is not reliably set to
SIGNAL_TYPE_HDMI_FRL while a link is actually running FRL, so links that
were operating in FRL mode were skipped and their status flags never got
polled, missing link-retrain events.

[How]
Use frl_link_settings.frl_link_rate to decide whether a link is running
FRL. A non-zero rate means FRL is active, so only links with a zero rate
are skipped. This ensures every link actually operating in FRL mode is
polled for status changes.

Reviewed-by: Harry Wentland <[email protected]>
Signed-off-by: Fangzhi Zuo <[email protected]>
Signed-off-by: Roman Li <[email protected]>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
index a8f089d4fb72..e637db2723c1 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
@@ -3009,7 +3009,7 @@ static void hdmi_frl_status_polling_work(struct 
work_struct *work)
                if (!dc_is_hdmi_signal(dc_link->connector_signal))
                        continue;
 
-               if (dc_link->connector_signal != SIGNAL_TYPE_HDMI_FRL)
+               if (dc_link->frl_link_settings.frl_link_rate == 0)
                        continue;
 
                link_update = dc_link_frl_poll_status_flag(dc_link);
-- 
2.34.1

Reply via email to