Commit 413b7a32 authored by Stephen Boyd's avatar Stephen Boyd Committed by Rob Clark

drm/msm/dp: Restore aux retry tuning logic

In commit 9fc41843 ("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: 9fc41843 ("drm/msm/dp: unplug interrupt missed after irq_hpd handler")
Signed-off-by: default avatarStephen Boyd <swboyd@chromium.org>
Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
parent 9daaf313
...@@ -32,6 +32,8 @@ struct dp_aux_private { ...@@ -32,6 +32,8 @@ struct dp_aux_private {
struct drm_dp_aux dp_aux; struct drm_dp_aux dp_aux;
}; };
#define MAX_AUX_RETRIES 5
static const char *dp_aux_get_error(u32 aux_error) static const char *dp_aux_get_error(u32 aux_error)
{ {
switch (aux_error) { switch (aux_error) {
...@@ -377,6 +379,11 @@ static ssize_t dp_aux_transfer(struct drm_dp_aux *dp_aux, ...@@ -377,6 +379,11 @@ static ssize_t dp_aux_transfer(struct drm_dp_aux *dp_aux,
ret = dp_aux_cmd_fifo_tx(aux, msg); ret = dp_aux_cmd_fifo_tx(aux, msg);
if (ret < 0) { 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 */ usleep_range(400, 500); /* at least 400us to next try */
goto unlock_exit; goto unlock_exit;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment