[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20220727045035.32225-8-rex-bc.chen@mediatek.com>
Date: Wed, 27 Jul 2022 12:50:31 +0800
From: Bo-Chen Chen <rex-bc.chen@...iatek.com>
To: <chunkuang.hu@...nel.org>, <p.zabel@...gutronix.de>,
<daniel@...ll.ch>, <robh+dt@...nel.org>,
<krzysztof.kozlowski+dt@...aro.org>, <mripard@...nel.org>,
<tzimmermann@...e.de>, <matthias.bgg@...il.com>, <deller@....de>,
<airlied@...ux.ie>
CC: <msp@...libre.com>, <granquet@...libre.com>,
<jitao.shi@...iatek.com>, <wenst@...omium.org>,
<angelogioacchino.delregno@...labora.com>, <ck.hu@...iatek.com>,
<liangxu.xu@...iatek.com>, <dri-devel@...ts.freedesktop.org>,
<linux-mediatek@...ts.infradead.org>, <devicetree@...r.kernel.org>,
<linux-kernel@...r.kernel.org>,
<linux-arm-kernel@...ts.infradead.org>,
<linux-fbdev@...r.kernel.org>,
<Project_Global_Chrome_Upstream_Group@...iatek.com>,
Bo-Chen Chen <rex-bc.chen@...iatek.com>
Subject: [PATCH v15 07/11] drm/mediatek: Add retry to prevent misjudgment for sink devices
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@...iatek.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
Powered by blists - more mailing lists