diff mbox series

drm/msm/dp: Restore aux retry tuning logic

Message ID 20210226210821.682107-1-swboyd@chromium.org (mailing list archive)
State Accepted
Commit 413b7a320e238d1a79dfca24c35ce4e1a0e7a8d6
Headers show
Series drm/msm/dp: Restore aux retry tuning logic | expand

Commit Message

Stephen Boyd Feb. 26, 2021, 9:08 p.m. UTC
In commit 9fc418430c65 ("drm/msm/dp: unplug interrupt missed after
irq_hpd handler") we dropped a reset of the aux phy during aux transfers
because resetting the phy during active communication caused us to miss
an hpd irq in some cases. Unfortunately, we also dropped the part of the
code that changes the aux phy tuning when an aux transfer fails due to a
timeout. That part of the code was calling into the phy driver to
reconfigure the aux TX swing controls, working around poor channel
quality. Let's restore this phy setting code so that aux channel
communication is more reliable.

Cc: Kuogee Hsieh <khsieh@codeaurora.org>
Fixes: 9fc418430c65 ("drm/msm/dp: unplug interrupt missed after irq_hpd handler")
Signed-off-by: Stephen Boyd <swboyd@chromium.org>
---

Noticed by code inspection and based on bug reports where the aux channel
stops working once the commit this is fixing is applied.

 drivers/gpu/drm/msm/dp/dp_aux.c | 7 +++++++
 1 file changed, 7 insertions(+)


base-commit: 8b83369ddcb3fb9cab5c1088987ce477565bb630

Comments

patchwork-bot+linux-arm-msm@kernel.org May 26, 2021, 7:03 p.m. UTC | #1
Hello:

This patch was applied to qcom/linux.git (refs/heads/for-next):

On Fri, 26 Feb 2021 13:08:21 -0800 you wrote:
> In commit 9fc418430c65 ("drm/msm/dp: unplug interrupt missed after
> irq_hpd handler") we dropped a reset of the aux phy during aux transfers
> because resetting the phy during active communication caused us to miss
> an hpd irq in some cases. Unfortunately, we also dropped the part of the
> code that changes the aux phy tuning when an aux transfer fails due to a
> timeout. That part of the code was calling into the phy driver to
> reconfigure the aux TX swing controls, working around poor channel
> quality. Let's restore this phy setting code so that aux channel
> communication is more reliable.
> 
> [...]

Here is the summary with links:
  - drm/msm/dp: Restore aux retry tuning logic
    https://git.kernel.org/qcom/c/413b7a320e23

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
diff mbox series

Patch

diff --git a/drivers/gpu/drm/msm/dp/dp_aux.c b/drivers/gpu/drm/msm/dp/dp_aux.c
index 1c6e1d2b947c..7c22bfe0fc7d 100644
--- a/drivers/gpu/drm/msm/dp/dp_aux.c
+++ b/drivers/gpu/drm/msm/dp/dp_aux.c
@@ -32,6 +32,8 @@  struct dp_aux_private {
 	struct drm_dp_aux dp_aux;
 };
 
+#define MAX_AUX_RETRIES			5
+
 static const char *dp_aux_get_error(u32 aux_error)
 {
 	switch (aux_error) {
@@ -377,6 +379,11 @@  static ssize_t dp_aux_transfer(struct drm_dp_aux *dp_aux,
 	ret = dp_aux_cmd_fifo_tx(aux, msg);
 
 	if (ret < 0) {
+		if (aux->native) {
+			aux->retry_cnt++;
+			if (!(aux->retry_cnt % MAX_AUX_RETRIES))
+				dp_catalog_aux_update_cfg(aux->catalog);
+		}
 		usleep_range(400, 500); /* at least 400us to next try */
 		goto unlock_exit;
 	}