From: Ilya Bakoulin <[email protected]>

[Why]
We don't check 128b132b-specific bits in LANE_ALIGN_STATUS_UPDATED DPCD
registers when parsing link loss status, which can cause us to miss a
link loss notification from some sinks.

[How]
Add a 128b132b-specific status bit check.

Cc: [email protected] # 6.3+
Reviewed-by: Wenjing Liu <[email protected]>
Acked-by: Hamza Mahfooz <[email protected]>
Signed-off-by: Ilya Bakoulin <[email protected]>
---
 .../display/dc/link/protocols/link_dp_irq_handler.c   | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git 
a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_irq_handler.c 
b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_irq_handler.c
index ba95facc4ee8..b1b11eb0f9bb 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_irq_handler.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_irq_handler.c
@@ -82,8 +82,15 @@ bool dp_parse_link_loss_status(
        }
 
        /* Check interlane align.*/
-       if (sink_status_changed ||
-               
!hpd_irq_dpcd_data->bytes.lane_status_updated.bits.INTERLANE_ALIGN_DONE) {
+       if (link_dp_get_encoding_format(&link->cur_link_settings) == 
DP_128b_132b_ENCODING &&
+                       
(!hpd_irq_dpcd_data->bytes.lane_status_updated.bits.EQ_INTERLANE_ALIGN_DONE_128b_132b
 ||
+                        
!hpd_irq_dpcd_data->bytes.lane_status_updated.bits.CDS_INTERLANE_ALIGN_DONE_128b_132b))
 {
+               sink_status_changed = true;
+       } else if 
(!hpd_irq_dpcd_data->bytes.lane_status_updated.bits.INTERLANE_ALIGN_DONE) {
+               sink_status_changed = true;
+       }
+
+       if (sink_status_changed) {
 
                DC_LOG_HW_HPD_IRQ("%s: Link Status changed.\n", __func__);
 
-- 
2.40.1

Reply via email to