lkml.org 
[lkml]   [2022]   [Jul]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH v15 07/11] drm/mediatek: Add retry to prevent misjudgment for sink devices
Date
For some DP dungles, we need to train more than onece to confirm that we
don't misjudge the status of sink device.

Signed-off-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
---
drivers/gpu/drm/mediatek/mtk_dp.c | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_dp.c b/drivers/gpu/drm/mediatek/mtk_dp.c
index ce817cb59445..80d7d6488105 100644
--- a/drivers/gpu/drm/mediatek/mtk_dp.c
+++ b/drivers/gpu/drm/mediatek/mtk_dp.c
@@ -42,6 +42,7 @@
#define MTK_DP_CHECK_SINK_CAP_TIMEOUT_COUNT 3
#define MTK_DP_TBC_BUF_READ_START_ADDR 0x08
#define MTK_DP_TRAIN_DOWNSCALE_RETRY 8
+#define MTK_DP_TRAIN_CLEAR_RETRY 50

struct mtk_dp_train_info {
bool tps3;
@@ -1431,11 +1432,25 @@ static int mtk_dp_video_config(struct mtk_dp *mtk_dp)

static int mtk_dp_training(struct mtk_dp *mtk_dp)
{
+ short max_retry = MTK_DP_TRAIN_CLEAR_RETRY;
int ret;

- ret = mtk_dp_train_start(mtk_dp);
- if (ret)
- return ret;
+ /*
+ * We do retry to confirm that we don't misjudge the sink status.
+ * If it is still failed, we can confirm there are some issues for the
+ * sink device.
+ */
+ do {
+ ret = mtk_dp_train_start(mtk_dp);
+ if (!ret)
+ break;
+ } while (--max_retry);
+
+ dev_info(mtk_dp->dev, "dp training clear retry times: %d\n",
+ MTK_DP_TRAIN_CLEAR_RETRY - max_retry);
+
+ if (!max_retry)
+ return -ETIMEDOUT;

ret = mtk_dp_video_config(mtk_dp);
if (ret)
--
2.18.0
\
 
 \ /
  Last update: 2022-07-27 06:51    [W:1.099 / U:0.004 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site