From nobody Mon May 12 16:45:58 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6EB521E47CA for <linux-kernel@vger.kernel.org>; Tue, 1 Apr 2025 07:54:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743494050; cv=none; b=AIyJdcKUlW2RywoXzxKO2hILkS2E1dRo526LUEccSydzHMTS2MpKD2XrHwBcsBlAGkRZ9FRn8guRKJQgmFodfLddoF9EpACBVZdMdgTDfPtRif6A+ct3fz87G0tRGFnjjiiP8UnIU1nvb9mhQnmLnQnEZ3q8NIRBD4YiFJ/oFSY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743494050; c=relaxed/simple; bh=zEgF7zl+qaVDn5TiUTBaHD0fanWnAVJNnO4sgNc2+7E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ch+A4mC3VwZ3godavoGOn+VV90S6qffcCmagGyNJs65c1/S/V41L8NdVyiKVjA814UiXHpt6L6spKxRJCljvcG1WMkfizIqrq5rd8e+HXHp1INlW9ArnDrYagWmszMslxpI2p1BGoEfAEDCixq/VXocxnMEjS2QQMpSTFWZNSBo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qau5xGl6; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qau5xGl6" Received: by smtp.kernel.org (Postfix) with ESMTPS id EFDF2C4CEE5; Tue, 1 Apr 2025 07:54:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1743494050; bh=zEgF7zl+qaVDn5TiUTBaHD0fanWnAVJNnO4sgNc2+7E=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=qau5xGl6OB9AKddGdNpG6XVR0zwA2OQz5l+Em49VJjJE/vWVaRhN7lEuzRsMVzzYE qd6J2jvsDJkYapT6lTchrye3wCthU6ZoGYZ+NVDfUNFgeoHJh+P5XHgw2pzfBlNV3y WceeH/C5l5R0GKUxyQ/eFlx1xurPhz5e29OW/OHOJxTYTDHnRFlv5IYZKUwDTLC47y +bvXhm/oQF/046pwtBhhGH7n8484EECLT6Hpa0H5wvHu3YftNsRRl5qLbbLmVqI+By dIPIrehjBxBLqLY4GJupIf+UsrSBjRg6tP0tillx0NHZctm8rp0HNO0S8TvRKRowq4 5+G6IVfxTZfIQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id DB778C36018; Tue, 1 Apr 2025 07:54:09 +0000 (UTC) From: Hermes Wu via B4 Relay <devnull+Hermes.wu.ite.com.tw@kernel.org> Date: Tue, 01 Apr 2025 15:54:55 +0800 Subject: [PATCH v3 1/5] drm/bridge: it6505: fix link training state HW register reset Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: <linux-kernel.vger.kernel.org> List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org> List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250401-fix-link-training-v3-1-7f60f2ab7b8c@ite.com.tw> References: <20250401-fix-link-training-v3-0-7f60f2ab7b8c@ite.com.tw> In-Reply-To: <20250401-fix-link-training-v3-0-7f60f2ab7b8c@ite.com.tw> To: Andrzej Hajda <andrzej.hajda@intel.com>, Neil Armstrong <neil.armstrong@linaro.org>, Robert Foss <rfoss@kernel.org>, Laurent Pinchart <Laurent.pinchart@ideasonboard.com>, Jonas Karlman <jonas@kwiboo.se>, Jernej Skrabec <jernej.skrabec@gmail.com>, Maarten Lankhorst <maarten.lankhorst@linux.intel.com>, Maxime Ripard <mripard@kernel.org>, Thomas Zimmermann <tzimmermann@suse.de>, David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch> Cc: Pet.Weng@ite.com.tw, Kenneth.Hung@ite.com.tw, treapking@chromium.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Hermes Wu <Hermes.wu@ite.com.tw> X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1743494115; l=1768; i=Hermes.wu@ite.com.tw; s=20241230; h=from:subject:message-id; bh=L0iJ7cK8igir/+LkaX0VG1u/Z4JkZspdyQ1kUW040to=; b=3ZeAjApBbdwUWtMUrKLUV1ulA0WRkCQpNpD6DDC5ha8kUO1G867Jt6ap/VMWoIpEtk31xTf/J WBUmO6lxMOKDf05sT8nNeku+/xueuidinyq4rQh19OeBkCUDIIx09Px X-Developer-Key: i=Hermes.wu@ite.com.tw; a=ed25519; pk=qho5Dawp2WWj9CGyjtJ6/Y10xH8odjRdS6SXDaDAerU= X-Endpoint-Received: by B4 Relay for Hermes.wu@ite.com.tw/20241230 with auth_id=310 X-Original-From: Hermes Wu <Hermes.wu@ite.com.tw> Reply-To: Hermes.wu@ite.com.tw From: Hermes Wu <Hermes.wu@ite.com.tw> When connect to a DP-to-HDMI device which does not connect to HDMI sink, it will report DPCD 00200h with SINK_COUNT =3D "0", and issue HPD_IRQ when SINK_COUNT change to "1". IT6505 can not recive HPD_IRQ before training done and driver will force HW enter training done state when connect to such devices. When HW is force to training done state and restart link training, bits FORCE_RETRAIN and MANUAL_TRAIN at REG_TRAIN_CTRL1 must be set at the same time to reset HW state. Signed-off-by: Hermes Wu <Hermes.wu@ite.com.tw> --- drivers/gpu/drm/bridge/ite-it6505.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/i= te-it6505.c index 88ef76a37fe6accacdd343839ff2569b31b18ceb..b47042dc06bb1e1dfd92bc0dc6d= 69dc918a140ba 100644 --- a/drivers/gpu/drm/bridge/ite-it6505.c +++ b/drivers/gpu/drm/bridge/ite-it6505.c @@ -1806,7 +1806,9 @@ static bool it6505_link_start_auto_train(struct it650= 5 *it6505) mutex_lock(&it6505->aux_lock); it6505_set_bits(it6505, REG_TRAIN_CTRL0, FORCE_CR_DONE | FORCE_EQ_DONE, 0x00); - it6505_write(it6505, REG_TRAIN_CTRL1, FORCE_RETRAIN); + /* reset link state machine and re start training*/ + it6505_write(it6505, REG_TRAIN_CTRL1, + FORCE_RETRAIN | MANUAL_TRAIN); it6505_write(it6505, REG_TRAIN_CTRL1, AUTO_TRAIN); =20 while (timeout > 0) { @@ -2377,7 +2379,7 @@ static void it6505_stop_link_train(struct it6505 *it6= 505) { it6505->link_state =3D LINK_IDLE; cancel_work_sync(&it6505->link_works); - it6505_write(it6505, REG_TRAIN_CTRL1, FORCE_RETRAIN); + it6505_write(it6505, REG_TRAIN_CTRL1, FORCE_RETRAIN | MANUAL_TRAIN); } =20 static void it6505_link_train_ok(struct it6505 *it6505) --=20 2.34.1 From nobody Mon May 12 16:45:58 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6EAA678F4F for <linux-kernel@vger.kernel.org>; Tue, 1 Apr 2025 07:54:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743494050; cv=none; b=PQvThrfBkk0x88IQ0ZwG1Rqhl06yrpDDcMTX6uQPALvEDM3yamgP3L4x9JOzCBn2msXR0YTULNS67+TJzS9xeCTzBaoEg8Mnu5LZsif8IAuFrhr1z73T0KhG1EowD/B9lA6okxjO6Sk2Z2UBX2RoHPxIAiWol5oZqh/G63i9PPE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743494050; c=relaxed/simple; bh=Sv32eWrLlAonnSTDakaOBa/sXD+tsT+ZOUml/oxxLoo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qtfi1hCYAkzTg0rWtasqTU7k5yILTYtXzIv8lL+ZGVvVg7vCA0J4vz0TC4UVE4qT3/woaFnbcObYObDcgQBClntGt0afA+p46oz9OnrO0PagQCflMud88p1+BwThAHQirLFykIL0zJMPgRSG8GzpV6Ycf1m7zUB3erN3ZXiJHXg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=q2kU+knL; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="q2kU+knL" Received: by smtp.kernel.org (Postfix) with ESMTPS id 0AA6AC4CEE8; Tue, 1 Apr 2025 07:54:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1743494050; bh=Sv32eWrLlAonnSTDakaOBa/sXD+tsT+ZOUml/oxxLoo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=q2kU+knL8EKAB49dKjL+m0Zirqd9SEg7hPQZTosOI+F2kvzmG+Oi5b95MJgJDsuXZ xJQTNpLVAXN3ATzfayT0xmf+4HB7iksbBXH76vsD39jPjxFWuwTYLCATKEnRilD7s2 EyZ5u4a6RipKntXNhTpriOgg/+LkECH9dhPY0wAjJ0gkuD77S1g6f6l8Uj4D/Cj13U cmtesQn9Gft6K58X5Q/SgujXJcvBN+8Oj06v6gdXv60cbJ2V1ZuvrCOCIxWwWLosOp pZwpw993rNZMl2SYDbhKIwjHa6HmMOMy1k1gkTqy+2PVJx7RNXY8N3u2EUo8XnKjUM W344kX3DWU6zg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id EDEF7C3601B; Tue, 1 Apr 2025 07:54:09 +0000 (UTC) From: Hermes Wu via B4 Relay <devnull+Hermes.wu.ite.com.tw@kernel.org> Date: Tue, 01 Apr 2025 15:54:56 +0800 Subject: [PATCH v3 2/5] drm/bridge: it6505: check INT_LINK_TRAIN_FAIL while link auto training Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: <linux-kernel.vger.kernel.org> List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org> List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250401-fix-link-training-v3-2-7f60f2ab7b8c@ite.com.tw> References: <20250401-fix-link-training-v3-0-7f60f2ab7b8c@ite.com.tw> In-Reply-To: <20250401-fix-link-training-v3-0-7f60f2ab7b8c@ite.com.tw> To: Andrzej Hajda <andrzej.hajda@intel.com>, Neil Armstrong <neil.armstrong@linaro.org>, Robert Foss <rfoss@kernel.org>, Laurent Pinchart <Laurent.pinchart@ideasonboard.com>, Jonas Karlman <jonas@kwiboo.se>, Jernej Skrabec <jernej.skrabec@gmail.com>, Maarten Lankhorst <maarten.lankhorst@linux.intel.com>, Maxime Ripard <mripard@kernel.org>, Thomas Zimmermann <tzimmermann@suse.de>, David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch> Cc: Pet.Weng@ite.com.tw, Kenneth.Hung@ite.com.tw, treapking@chromium.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Hermes Wu <Hermes.wu@ite.com.tw> X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1743494115; l=2919; i=Hermes.wu@ite.com.tw; s=20241230; h=from:subject:message-id; bh=jMRBMAfZXvgPInoi2ZG2fBNx0MmsnJGVHvslLR/IkmI=; b=FuXxX/ovmPDCHKbUAFA7caxlmx80XxMxkp+RAqdCKlrQlUi6GXG2gdBppNvdFspOciGhZ+IiP m3mlyq/H4mSCy6vMYoybAaIxroG2zNlf+DK3NPPHHDHZCweQ5NN9QAC X-Developer-Key: i=Hermes.wu@ite.com.tw; a=ed25519; pk=qho5Dawp2WWj9CGyjtJ6/Y10xH8odjRdS6SXDaDAerU= X-Endpoint-Received: by B4 Relay for Hermes.wu@ite.com.tw/20241230 with auth_id=310 X-Original-From: Hermes Wu <Hermes.wu@ite.com.tw> Reply-To: Hermes.wu@ite.com.tw From: Hermes Wu <Hermes.wu@ite.com.tw> When start link training, interrupt status INT_LINK_TRAIN_FAIL can use to check link training fail and no need to wait until timeout. it6505_irq_link_train_fail() remove from interrupt and no longer used. Signed-off-by: Hermes Wu <Hermes.wu@ite.com.tw> --- drivers/gpu/drm/bridge/ite-it6505.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/i= te-it6505.c index b47042dc06bb1e1dfd92bc0dc6d69dc918a140ba..7f6227c278a51358c70a3de9345= 4aafeef64f2bb 100644 --- a/drivers/gpu/drm/bridge/ite-it6505.c +++ b/drivers/gpu/drm/bridge/ite-it6505.c @@ -821,8 +821,8 @@ static void it6505_int_mask_enable(struct it6505 *it650= 5) it6505_write(it6505, INT_MASK_02, BIT(INT_AUX_CMD_FAIL) | BIT(INT_HDCP_KSV_CHECK) | BIT(INT_AUDIO_FIFO_ERROR)); =20 - it6505_write(it6505, INT_MASK_03, BIT(INT_LINK_TRAIN_FAIL) | - BIT(INT_VID_FIFO_ERROR) | BIT(INT_IO_LATCH_FIFO_OVERFLOW)); + it6505_write(it6505, INT_MASK_03, BIT(INT_VID_FIFO_ERROR) | + BIT(INT_IO_LATCH_FIFO_OVERFLOW)); } =20 static void it6505_int_mask_disable(struct it6505 *it6505) @@ -1802,6 +1802,8 @@ static bool it6505_link_start_auto_train(struct it650= 5 *it6505) { int timeout =3D 500, link_training_state; bool state =3D false; + int int03; + struct device *dev =3D it6505->dev; =20 mutex_lock(&it6505->aux_lock); it6505_set_bits(it6505, REG_TRAIN_CTRL0, @@ -1814,6 +1816,17 @@ static bool it6505_link_start_auto_train(struct it65= 05 *it6505) while (timeout > 0) { usleep_range(1000, 2000); link_training_state =3D it6505_read(it6505, REG_LINK_TRAIN_STS); + int03 =3D it6505_read(it6505, INT_STATUS_03); + if (int03 & BIT(INT_LINK_TRAIN_FAIL)) { + it6505_write(it6505, INT_STATUS_03, + BIT(INT_LINK_TRAIN_FAIL)); + + DRM_DEV_DEBUG_DRIVER(dev, + "INT_LINK_TRAIN_FAIL(%x)!", + int03); + + break; + } =20 if (link_training_state > 0 && (link_training_state & LINK_STATE_NORP)) { @@ -2693,14 +2706,6 @@ static void it6505_irq_audio_fifo_error(struct it650= 5 *it6505) it6505_enable_audio(it6505); } =20 -static void it6505_irq_link_train_fail(struct it6505 *it6505) -{ - struct device *dev =3D it6505->dev; - - DRM_DEV_DEBUG_DRIVER(dev, "link training fail interrupt"); - schedule_work(&it6505->link_works); -} - static bool it6505_test_bit(unsigned int bit, const unsigned int *addr) { return 1 & (addr[bit / BITS_PER_BYTE] >> (bit % BITS_PER_BYTE)); @@ -2765,7 +2770,6 @@ static irqreturn_t it6505_int_threaded_handler(int un= used, void *data) { BIT_INT_AUX_CMD_FAIL, it6505_irq_aux_cmd_fail }, { BIT_INT_HDCP_KSV_CHECK, it6505_irq_hdcp_ksv_check }, { BIT_INT_AUDIO_FIFO_ERROR, it6505_irq_audio_fifo_error }, - { BIT_INT_LINK_TRAIN_FAIL, it6505_irq_link_train_fail }, }; int int_status[3], i; =20 --=20 2.34.1 From nobody Mon May 12 16:45:58 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 79B771E5B6A for <linux-kernel@vger.kernel.org>; Tue, 1 Apr 2025 07:54:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743494050; cv=none; b=WKOIQZIMIiQhXYByR1b5zPKEZ96a1/i30UYEmGaCimhwQsy0KH1T0J6x/5px4RtIQLp4N8vW7u+xRymTGZL3ot1ZbkNo6+wXY3uNMf69O5NcewxxRwDStB2cVdEW9NoKYEcJ0IiVjEFEPUsIKUPasyCuMiVA0kaAPoO/Z44axUc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743494050; c=relaxed/simple; bh=y9xM5x/9mDBXXIijOs8N9ZcgaLGefpK4A6S03ho3yEw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UAOZLlIUkgSsjBNZeJqkOUvFbaPx2gYUYnVAc6m5pw1VoGlt/pzSzElzTnapUzgNsh8dldMRmRbrBaJjoSF+APkt6xVwKWeemb/swZwBDgzB/UATkRJUT30xZw5mD7U51AyG3xaH6vI4TAYqKclkrJvpdBNkACVPtSt6rh5qPhk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=tXZak33d; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="tXZak33d" Received: by smtp.kernel.org (Postfix) with ESMTPS id 1C035C4CEE9; Tue, 1 Apr 2025 07:54:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1743494050; bh=y9xM5x/9mDBXXIijOs8N9ZcgaLGefpK4A6S03ho3yEw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=tXZak33dv2XlvqQjHjZNNfZqHCkygoFPVfCPH/d9+FfWqRP0eoglC0P7ivfWIQHiz /y7Jd1Agckv9+cpOuskmGrA+m7hL7kOHFCHbziGv6tTqwE+6Fkf0Ce0G4wxzD1ECUc p+gNQeurt9iX1zRI8CmZJUvfmUorYxEMIjjDSs01iDvzu906vqOcJEP7eo5IcL1mhb E3DNtxEz7eGJpe1jucfufz1iZzF1grGLTd43zjJUQEohdFT2BVLx4OSliAggBnchGl eOoZSGX1CcrGeJCS5eqBVLwJcKdKtNHwQ9cHqUl1vFAQrhsjcHz974hrtvcKMxkC5g EfdKWqADPk++g== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0C2E5C36014; Tue, 1 Apr 2025 07:54:10 +0000 (UTC) From: Hermes Wu via B4 Relay <devnull+Hermes.wu.ite.com.tw@kernel.org> Date: Tue, 01 Apr 2025 15:54:57 +0800 Subject: [PATCH v3 3/5] drm/bridge: it6505: modify DP link auto training Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: <linux-kernel.vger.kernel.org> List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org> List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250401-fix-link-training-v3-3-7f60f2ab7b8c@ite.com.tw> References: <20250401-fix-link-training-v3-0-7f60f2ab7b8c@ite.com.tw> In-Reply-To: <20250401-fix-link-training-v3-0-7f60f2ab7b8c@ite.com.tw> To: Andrzej Hajda <andrzej.hajda@intel.com>, Neil Armstrong <neil.armstrong@linaro.org>, Robert Foss <rfoss@kernel.org>, Laurent Pinchart <Laurent.pinchart@ideasonboard.com>, Jonas Karlman <jonas@kwiboo.se>, Jernej Skrabec <jernej.skrabec@gmail.com>, Maarten Lankhorst <maarten.lankhorst@linux.intel.com>, Maxime Ripard <mripard@kernel.org>, Thomas Zimmermann <tzimmermann@suse.de>, David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch> Cc: Pet.Weng@ite.com.tw, Kenneth.Hung@ite.com.tw, treapking@chromium.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Hermes Wu <Hermes.wu@ite.com.tw> X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1743494115; l=2426; i=Hermes.wu@ite.com.tw; s=20241230; h=from:subject:message-id; bh=w0mjd1b/vD9l754Z7HEk7/mi9+TqCrQ9as279Ea9bf8=; b=+cLnmpKZvWnSs9nFSmMV3fSWd/NXpkMJSeeIgIE2+UcyeS8EhXzDTIWjwJTPJGmOt2XHyMZDw v4qlN1oPJnmCT5mrLTlbPUFcXYrkbweSP3VPKSWzUCfHJuxnaidBVMj X-Developer-Key: i=Hermes.wu@ite.com.tw; a=ed25519; pk=qho5Dawp2WWj9CGyjtJ6/Y10xH8odjRdS6SXDaDAerU= X-Endpoint-Received: by B4 Relay for Hermes.wu@ite.com.tw/20241230 with auth_id=310 X-Original-From: Hermes Wu <Hermes.wu@ite.com.tw> Reply-To: Hermes.wu@ite.com.tw From: Hermes Wu <Hermes.wu@ite.com.tw> IT6505 supports HW link training which will write DPCD and check training status automatically. In the case that driver set link rate at 2.7G and HW fail to training, it will change link configuration and try 1.65G. And this will cause INT_VID_FIFO_ERROR triggered when link clock is changed. When video error occurs, video logic is reset and link training restart, this will cause endless auto link training. Modify link auto training with disable INT_VID_FIFO_ERROR to avoid loop and check INT_LINK_TRAIN_FAIL event to abort wait training done. Signed-off-by: Hermes Wu <Hermes.wu@ite.com.tw> --- drivers/gpu/drm/bridge/ite-it6505.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/i= te-it6505.c index 7f6227c278a51358c70a3de93454aafeef64f2bb..f9b99c70789eea6beb3c6513155= c9a4ca103d219 100644 --- a/drivers/gpu/drm/bridge/ite-it6505.c +++ b/drivers/gpu/drm/bridge/ite-it6505.c @@ -1806,6 +1806,13 @@ static bool it6505_link_start_auto_train(struct it65= 05 *it6505) struct device *dev =3D it6505->dev; =20 mutex_lock(&it6505->aux_lock); + + /* Disable FIFO error interrupt trigger */ + /* to prevent training fail loop issue */ + it6505_set_bits(it6505, INT_MASK_03, BIT(INT_VID_FIFO_ERROR), 0); + + it6505_write(it6505, INT_STATUS_03, + BIT(INT_LINK_TRAIN_FAIL) | BIT(INT_VID_FIFO_ERROR)); it6505_set_bits(it6505, REG_TRAIN_CTRL0, FORCE_CR_DONE | FORCE_EQ_DONE, 0x00); /* reset link state machine and re start training*/ @@ -1818,8 +1825,10 @@ static bool it6505_link_start_auto_train(struct it65= 05 *it6505) link_training_state =3D it6505_read(it6505, REG_LINK_TRAIN_STS); int03 =3D it6505_read(it6505, INT_STATUS_03); if (int03 & BIT(INT_LINK_TRAIN_FAIL)) { + /* Ignore INT_VID_FIFO_ERROR when auto training fail*/ it6505_write(it6505, INT_STATUS_03, - BIT(INT_LINK_TRAIN_FAIL)); + BIT(INT_LINK_TRAIN_FAIL) | + BIT(INT_VID_FIFO_ERROR)); =20 DRM_DEV_DEBUG_DRIVER(dev, "INT_LINK_TRAIN_FAIL(%x)!", @@ -1837,6 +1846,9 @@ static bool it6505_link_start_auto_train(struct it650= 5 *it6505) timeout--; } unlock: + /* recover interrupt trigger*/ + it6505_set_bits(it6505, INT_MASK_03, + BIT(INT_VID_FIFO_ERROR), BIT(INT_VID_FIFO_ERROR)); mutex_unlock(&it6505->aux_lock); =20 return state; --=20 2.34.1 From nobody Mon May 12 16:45:58 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 79BCF1E5B78 for <linux-kernel@vger.kernel.org>; Tue, 1 Apr 2025 07:54:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743494050; cv=none; b=bP5VZ1SbV9uvUS9c+ozgrBpu62WY01Scso+ebzRkaJwwqKl1SM0wYdveDlvSt4xMPQLEMiNq3h01w8BYiyH9l8ahi6JdOSGOsoL+TEj6/3fFKQWRcYZpFMXl5BOmwR83C7dsHH71oIrfAMLmptHemWzMLrS8rP+7C6Cl257K35o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743494050; c=relaxed/simple; bh=U307vnMWojAerVe285TOQokdoRu/COAOi7wfwD1JzQ4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FV4LqAJuQJWixieZo0DlrzAg9KMi39vA+PLAFLMPKcysJWgKMe/TfEyB+txpza63Q8xtorwQSftCkeCXCaY6F6RaNMKLn7/b3La+x9kE1+8xxu/3WmC4p0rlB0736y1BxOKIWS/U3cnpOZxRsGEleXiXNmvBFbuj0812xgQkjUk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nnHuMPEc; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="nnHuMPEc" Received: by smtp.kernel.org (Postfix) with ESMTPS id 271E8C4CEF0; Tue, 1 Apr 2025 07:54:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1743494050; bh=U307vnMWojAerVe285TOQokdoRu/COAOi7wfwD1JzQ4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=nnHuMPEcAZehNrD/j4F2BihKeMfv5rmTcD4OgIDlBD4jGFoQORD/pL0o0ykzIkwew KPPmFv+WKGQzDEL9e4+T4Xl+nlvEU+vD//uoHKf4pQRU+RgUtgn0deo1lthOBjrqZN QWpeORcSjoG7VNKPTX6mIAiA2NE+nYDMzFun6qSgKZbtsn9or+UGPvG4G+hdytEgOm Cl4SFaw+y8j/rFlake3yNk6PgrSMplTjT2TMhRC/d4NUkbnwaihhP7wyH5CqlRukbY fyBlh8sVCGAG8TiBidP366i3KZA07fCRZj7wahhUyDMRZKFJUfk1VwOcmFK1rODHnO 889q5h7wXCfxg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1E90DC36018; Tue, 1 Apr 2025 07:54:10 +0000 (UTC) From: Hermes Wu via B4 Relay <devnull+Hermes.wu.ite.com.tw@kernel.org> Date: Tue, 01 Apr 2025 15:54:58 +0800 Subject: [PATCH v3 4/5] drm/bridge: it6505: modify DP link training work Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: <linux-kernel.vger.kernel.org> List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org> List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250401-fix-link-training-v3-4-7f60f2ab7b8c@ite.com.tw> References: <20250401-fix-link-training-v3-0-7f60f2ab7b8c@ite.com.tw> In-Reply-To: <20250401-fix-link-training-v3-0-7f60f2ab7b8c@ite.com.tw> To: Andrzej Hajda <andrzej.hajda@intel.com>, Neil Armstrong <neil.armstrong@linaro.org>, Robert Foss <rfoss@kernel.org>, Laurent Pinchart <Laurent.pinchart@ideasonboard.com>, Jonas Karlman <jonas@kwiboo.se>, Jernej Skrabec <jernej.skrabec@gmail.com>, Maarten Lankhorst <maarten.lankhorst@linux.intel.com>, Maxime Ripard <mripard@kernel.org>, Thomas Zimmermann <tzimmermann@suse.de>, David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch> Cc: Pet.Weng@ite.com.tw, Kenneth.Hung@ite.com.tw, treapking@chromium.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Hermes Wu <Hermes.wu@ite.com.tw> X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1743494115; l=4425; i=Hermes.wu@ite.com.tw; s=20241230; h=from:subject:message-id; bh=TrGpepzaBAnnyoq5JGYSZoDhoJy0fLdUbAxvQi7h/Xg=; b=xSk3qax4pdGychVFzoPq65dp8PvXmSxYUHHJ7w/NUYZ8MzTb72ynGduLtdrcSnR1H68sUUx77 LC5kYI38C3lAtgjibTfU8WRbGAIL+YX5Ynga2IlrbY9BaMpLLACf1Ms X-Developer-Key: i=Hermes.wu@ite.com.tw; a=ed25519; pk=qho5Dawp2WWj9CGyjtJ6/Y10xH8odjRdS6SXDaDAerU= X-Endpoint-Received: by B4 Relay for Hermes.wu@ite.com.tw/20241230 with auth_id=310 X-Original-From: Hermes Wu <Hermes.wu@ite.com.tw> Reply-To: Hermes.wu@ite.com.tw From: Hermes Wu <Hermes.wu@ite.com.tw> The DP link training work include auto training and after auto training failed "AUTO_TRAIN_RETRY" times, it switch to step training mode. It will more efficiency that finish link auto training, include retry, and step training in a work, rather than re-schedule train work when each training fail. Drop auto_train_retry from it6505 structure, and it6505_dump() is remove from link trainig work, it takes too much time to read all register area, and is not necessary. Signed-off-by: Hermes Wu <Hermes.wu@ite.com.tw> --- drivers/gpu/drm/bridge/ite-it6505.c | 40 ++++++++++++++-------------------= ---- 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/i= te-it6505.c index f9b99c70789eea6beb3c6513155c9a4ca103d219..bff5f18fb5ae7192242308f034b= 60af9807c192c 100644 --- a/drivers/gpu/drm/bridge/ite-it6505.c +++ b/drivers/gpu/drm/bridge/ite-it6505.c @@ -467,7 +467,6 @@ struct it6505 { struct delayed_work hdcp_work; struct work_struct hdcp_wait_ksv_list; struct completion extcon_completion; - u8 auto_train_retry; bool hdcp_desired; bool is_repeater; u8 hdcp_down_stream_count; @@ -666,7 +665,7 @@ static int it6505_get_dpcd(struct it6505 *it6505, int o= ffset, u8 *dpcd, int num) return 0; } =20 -static void it6505_dump(struct it6505 *it6505) +static void __maybe_unused it6505_dump(struct it6505 *it6505) { unsigned int i, j; u8 regs[16]; @@ -1399,7 +1398,6 @@ static void it6505_variable_config(struct it6505 *it6= 505) it6505->lane_count =3D MAX_LANE_COUNT; it6505->link_state =3D LINK_IDLE; it6505->hdcp_desired =3D HDCP_DESIRED; - it6505->auto_train_retry =3D AUTO_TRAIN_RETRY; it6505->audio.select =3D AUDIO_SELECT; it6505->audio.sample_rate =3D AUDIO_SAMPLE_RATE; it6505->audio.channel_count =3D AUDIO_CHANNEL_COUNT; @@ -2467,7 +2465,7 @@ static void it6505_link_training_work(struct work_str= uct *work) { struct it6505 *it6505 =3D container_of(work, struct it6505, link_works); struct device *dev =3D it6505->dev; - int ret; + int ret, retry; =20 DRM_DEV_DEBUG_DRIVER(dev, "it6505->sink_count: %d", it6505->sink_count); @@ -2475,27 +2473,22 @@ static void it6505_link_training_work(struct work_s= truct *work) if (!it6505_get_sink_hpd_status(it6505)) return; =20 - it6505_link_training_setup(it6505); - it6505_reset_hdcp(it6505); - it6505_aux_reset(it6505); - - if (it6505->auto_train_retry < 1) { - it6505_link_step_train_process(it6505); - return; - } - - ret =3D it6505_link_start_auto_train(it6505); - DRM_DEV_DEBUG_DRIVER(dev, "auto train %s, auto_train_retry: %d", - ret ? "pass" : "failed", it6505->auto_train_retry); + for (retry =3D AUTO_TRAIN_RETRY; retry > 0; retry--) { + it6505_link_training_setup(it6505); + it6505_reset_hdcp(it6505); + it6505_aux_reset(it6505); =20 - if (ret) { - it6505->auto_train_retry =3D AUTO_TRAIN_RETRY; - it6505_link_train_ok(it6505); - } else { - it6505->auto_train_retry--; - it6505_dump(it6505); + ret =3D it6505_link_start_auto_train(it6505); + DRM_DEV_DEBUG_DRIVER(dev, "auto train %s,", + ret ? "pass" : "failed"); + if (ret) { + it6505_link_train_ok(it6505); + return; + } } =20 + /*After HW auto training fail, try link training step by step*/ + it6505_link_step_train_process(it6505); } =20 static void it6505_plugged_status_to_codec(struct it6505 *it6505) @@ -2576,7 +2569,6 @@ static int it6505_process_hpd_irq(struct it6505 *it65= 05) (int)ARRAY_SIZE(link_status), link_status); =20 if (!drm_dp_channel_eq_ok(link_status, it6505->lane_count)) { - it6505->auto_train_retry =3D AUTO_TRAIN_RETRY; it6505_video_reset(it6505); } =20 @@ -2602,7 +2594,6 @@ static void it6505_irq_hpd(struct it6505 *it6505) it6505_variable_config(it6505); it6505_parse_link_capabilities(it6505); } - it6505->auto_train_retry =3D AUTO_TRAIN_RETRY; =20 it6505_drm_dp_link_set_power(&it6505->aux, &it6505->link, DP_SET_POWER_D0); @@ -2739,7 +2730,6 @@ static void it6505_irq_video_handler(struct it6505 *i= t6505, const int *int_statu (unsigned int *)int_status)) || (it6505_test_bit(BIT_INT_VID_FIFO_ERROR, (unsigned int *)int_status))) { - it6505->auto_train_retry =3D AUTO_TRAIN_RETRY; flush_work(&it6505->link_works); it6505_stop_hdcp(it6505); it6505_video_reset(it6505); --=20 2.34.1 From nobody Mon May 12 16:45:58 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B31071E9919 for <linux-kernel@vger.kernel.org>; Tue, 1 Apr 2025 07:54:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743494050; cv=none; b=IjucR82XXQddLuvsCwtCC1IfuLghz7iBxfJnVtLJH/0phFU0KjwuWdktpwgIq4ejocYPJ3MH8M3dr/tQZjS6I5WoG1Mh/1QwXv0YrQKPEpZCEhUO2O+e5UrJO3zM+BITRNQHma6+vtx0aMmfOCXqhBsyTwZxx+RIGyTilJMrxn4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743494050; c=relaxed/simple; bh=vT4jRgNOKJGO9pduYqW5rUZpbUZTqMnVAbx3caTHA90=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iz2XxWFDiM0ZpL7u5XRHFPqb9rjvMs+ZamwBcVOhiIauEOuWEJlciIl5mwzFJytk0FhmCJ+cEz66EIcTeDmY8e7yvOa3cVi3BBI3RffmgU7XtOJ16/2J8iBJV05qZ/robgHixXyP9rTtzUERkbo45rZ1DWy1HrVRlJl/CtB1z70= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QqLjUpJv; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QqLjUpJv" Received: by smtp.kernel.org (Postfix) with ESMTPS id 39BBCC4CEF2; Tue, 1 Apr 2025 07:54:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1743494050; bh=vT4jRgNOKJGO9pduYqW5rUZpbUZTqMnVAbx3caTHA90=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=QqLjUpJvE5s0SFwg8TJvnHqnkS7TQczHFNxaHuehfPryP9P6J2XuwKHanHvPCCGFU ti1r2ELWxvDM8ZFzsIkIN5uRro5U3Sg7e11/EeBtjmrvmDzj0fPPm2k+4HYL9pMwwb 5bYruitnqBCGpm9eNUxRd++17hFKF+LCVydvHCxvxOY8lZVN/ALc//rtnriEhSN8NX aTPyoDdD41I7Mb6IxIcKuJul7mBIPSsJ8KWjPBTzFWOFi5nXl0LjTz1b1SubS7cm9u 3tn4yZvtXvhpolDAWjcidm47AsfFKFU70APDEeJnY2l4IK9b3vwWr+1NE+akov2Qfi SNGkxp9KuY+iA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2FAE7C3601B; Tue, 1 Apr 2025 07:54:10 +0000 (UTC) From: Hermes Wu via B4 Relay <devnull+Hermes.wu.ite.com.tw@kernel.org> Date: Tue, 01 Apr 2025 15:54:59 +0800 Subject: [PATCH v3 5/5] drm/bridge: it6505: skip auto training when previous try fail Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: <linux-kernel.vger.kernel.org> List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org> List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250401-fix-link-training-v3-5-7f60f2ab7b8c@ite.com.tw> References: <20250401-fix-link-training-v3-0-7f60f2ab7b8c@ite.com.tw> In-Reply-To: <20250401-fix-link-training-v3-0-7f60f2ab7b8c@ite.com.tw> To: Andrzej Hajda <andrzej.hajda@intel.com>, Neil Armstrong <neil.armstrong@linaro.org>, Robert Foss <rfoss@kernel.org>, Laurent Pinchart <Laurent.pinchart@ideasonboard.com>, Jonas Karlman <jonas@kwiboo.se>, Jernej Skrabec <jernej.skrabec@gmail.com>, Maarten Lankhorst <maarten.lankhorst@linux.intel.com>, Maxime Ripard <mripard@kernel.org>, Thomas Zimmermann <tzimmermann@suse.de>, David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch> Cc: Pet.Weng@ite.com.tw, Kenneth.Hung@ite.com.tw, treapking@chromium.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Hermes Wu <Hermes.wu@ite.com.tw> X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1743494115; l=2181; i=Hermes.wu@ite.com.tw; s=20241230; h=from:subject:message-id; bh=pLytI76dbGjTNwcbsSYeds6mdd5OwXNWVjluMga6s9U=; b=/X99IPetbCEwIR1q+Ajr1KcC/09HBieAhusGSzoYAK31L/t1UfHriUum+ulkhUf7gl8LScrJK duXPmvUbbQ5B5WfUxot92UU4RgJYr0UhgNFn6YIUffkey4oNQ7261NM X-Developer-Key: i=Hermes.wu@ite.com.tw; a=ed25519; pk=qho5Dawp2WWj9CGyjtJ6/Y10xH8odjRdS6SXDaDAerU= X-Endpoint-Received: by B4 Relay for Hermes.wu@ite.com.tw/20241230 with auth_id=310 X-Original-From: Hermes Wu <Hermes.wu@ite.com.tw> Reply-To: Hermes.wu@ite.com.tw From: Hermes Wu <Hermes.wu@ite.com.tw> When connect to device which can only training done by step training, skip auto training when link training restart, usually happen when display resolution is changed. Signed-off-by: Hermes Wu <Hermes.wu@ite.com.tw> --- drivers/gpu/drm/bridge/ite-it6505.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/i= te-it6505.c index bff5f18fb5ae7192242308f034b60af9807c192c..20eae23cb46a4cb3fc18dd2ed3b= 764f2265262ca 100644 --- a/drivers/gpu/drm/bridge/ite-it6505.c +++ b/drivers/gpu/drm/bridge/ite-it6505.c @@ -467,6 +467,7 @@ struct it6505 { struct delayed_work hdcp_work; struct work_struct hdcp_wait_ksv_list; struct completion extcon_completion; + u8 step_train_only; bool hdcp_desired; bool is_repeater; u8 hdcp_down_stream_count; @@ -2452,11 +2453,13 @@ static void it6505_link_step_train_process(struct i= t6505 *it6505) ret ? "pass" : "failed", i + 1); if (ret) { it6505_link_train_ok(it6505); + it6505->step_train_only =3D true; return; } } =20 DRM_DEV_DEBUG_DRIVER(dev, "training fail"); + it6505->step_train_only =3D false; it6505->link_state =3D LINK_IDLE; it6505_video_reset(it6505); } @@ -2473,14 +2476,14 @@ static void it6505_link_training_work(struct work_s= truct *work) if (!it6505_get_sink_hpd_status(it6505)) return; =20 - for (retry =3D AUTO_TRAIN_RETRY; retry > 0; retry--) { + for (retry =3D AUTO_TRAIN_RETRY; retry > 0 && !it6505->step_train_only; r= etry--) { it6505_link_training_setup(it6505); it6505_reset_hdcp(it6505); it6505_aux_reset(it6505); =20 ret =3D it6505_link_start_auto_train(it6505); DRM_DEV_DEBUG_DRIVER(dev, "auto train %s,", - ret ? "pass" : "failed"); + ret ? "pass" : "failed"); if (ret) { it6505_link_train_ok(it6505); return; @@ -2594,6 +2597,7 @@ static void it6505_irq_hpd(struct it6505 *it6505) it6505_variable_config(it6505); it6505_parse_link_capabilities(it6505); } + it6505->step_train_only =3D false; =20 it6505_drm_dp_link_set_power(&it6505->aux, &it6505->link, DP_SET_POWER_D0); --=20 2.34.1