disp: msm: dp: avoid duplicate read of link status
During link training, after the swing/preemphasis is updated, the driver is supposed to poll the link status on the sink and quit once the LINK_STATUS_UPDATED bit is set and also latch the next set of swing/preemphasis requested by the sink. But currently, the driver is exiting the loop only when the LINK_STATUS_UPDATED bit is cleared. So, it also latches the swing/emphasis request from the second read. Typically, the SW read is slow enough that the bit is set on the first read. The driver then reads the second time and exits the loop, since the bit would be cleared then. In most cases, this doesn't affect the training sequence, since the swing/preemphasis request for next attempt is retained on the second read. But, atleast in one specific case, it was observed that the swing/emphasis request gets reset along with LINK_STATUS_UPDATED and so the driver ends up missing the actual request and latches incorrect values instead. This causes link training to fail as it keep retrying with the same values that it starts with. This change fixes the exit condition check so the driver quits the loop as soon as the LINK_STATUS_UPDATED bit is set. Change-Id: I7f5d9c6b30d48e113aef628d2ab2c1bd972fe743 Signed-off-by: Rajkumar Subbiah <quic_rsubbia@quicinc.com>
Cette révision appartient à :

révisé par
Soutrik Mukhopadhyay

Parent
60c129a954
révision
812a36347b
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2021, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
@@ -278,7 +278,7 @@ static int dp_ctrl_read_link_status(struct dp_ctrl_private *ctrl,
|
||||
break;
|
||||
}
|
||||
|
||||
if (!(link_status[offset] & DP_LINK_STATUS_UPDATED))
|
||||
if (link_status[offset] & DP_LINK_STATUS_UPDATED)
|
||||
break;
|
||||
}
|
||||
|
||||
|
Référencer dans un nouveau ticket
Bloquer un utilisateur