From patchwork Wed Mar 26 05:34:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hermes Wu X-Patchwork-Id: 14029731 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A55ADC3600E for ; Wed, 26 Mar 2025 05:33:57 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2233F10E653; Wed, 26 Mar 2025 05:33:51 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="Fd7mJaRk"; dkim-atps=neutral Received: from sea.source.kernel.org (sea.source.kernel.org [172.234.252.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1EF7210E2AD for ; Wed, 26 Mar 2025 05:33:44 +0000 (UTC) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sea.source.kernel.org (Postfix) with ESMTP id 2F5CF43B6A; Wed, 26 Mar 2025 05:33:40 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPS id 3F5EAC4CEED; Wed, 26 Mar 2025 05:33:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742967220; bh=ZtkHl+byYB3jXFUMZpEX6J8Zkg1NiuvJsQL2tkaY504=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=Fd7mJaRkk+1OuJkqrXeCV8v8YC2vIleN2nHIAUodmuF3EPgDiYAVrjsavRPz7hVwx roEpIc8ZKIO3d6SczFhMjQneab5s3zJJ1yq/TIB2EOlbJHPWQxLbMW3ue9k0QaN/iF G2a4KY1h/UPsVf2pG+4sCW/g1zlsIcDxtFoJp/9OHYx5ozyK8j1RXh0+N3ZOV1yDe9 KImsVTClKDQIhA0uaBdUKpp8+Q1U7N7qpQhOiGNqFZ+Z81KOthkUJg3w0qvI5kPe/y oTXyWpchBxEnuApHWrzWsdKYICqiwIRM8nRfgSlIZZZ9V44mg108Q2Lm0ZUCH1IdJc mJ4ALY99MIutg== 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 1D7F4C3600D; Wed, 26 Mar 2025 05:33:40 +0000 (UTC) Date: Wed, 26 Mar 2025 13:34:13 +0800 Subject: [PATCH v2 1/5] drm/bridge: it6505: fix link training state HW register reset MIME-Version: 1.0 Message-Id: <20250326-fix-link-training-v2-1-756c8306f500@ite.com.tw> References: <20250326-fix-link-training-v2-0-756c8306f500@ite.com.tw> In-Reply-To: <20250326-fix-link-training-v2-0-756c8306f500@ite.com.tw> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter 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 X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1742967277; l=1417; i=Hermes.wu@ite.com.tw; s=20241230; h=from:subject:message-id; bh=OPKp1zu9zQb8F0T0g3XsULli11ufIoTr8/+5pxJA4Ms=; b=fVQ4Yl7k7aszXn5kMllRwvUFeiv9cHjn5Uzo5eB3T6/HhKUoNRAwLaVs//fgI4xMDMhaNBCfR RlM35DmSu5jCqZnXvFVhjZadhD9oHlKaFrv/FwMKzNm5OLQNjpgLZtM 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 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Hermes.wu@ite.com.tw Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Hermes Wu From: Hermes Wu In order to reset HW link auto training state, bits FORCE_RETRAIN and MANUAL_TRAIN at REG_TRAIN_CTRL1 must be set at the same time. Signed-off-by: Hermes Wu --- 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/ite-it6505.c index 88ef76a37fe6accacdd343839ff2569b31b18ceb..b47042dc06bb1e1dfd92bc0dc6d69dc918a140ba 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 it6505 *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); while (timeout > 0) { @@ -2377,7 +2379,7 @@ static void it6505_stop_link_train(struct it6505 *it6505) { it6505->link_state = 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); } static void it6505_link_train_ok(struct it6505 *it6505) From patchwork Wed Mar 26 05:34:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hermes Wu X-Patchwork-Id: 14029729 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1A1E5C3600E for ; Wed, 26 Mar 2025 05:33:55 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 252C010E55A; Wed, 26 Mar 2025 05:33:50 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="Bybl7ptB"; dkim-atps=neutral Received: from sea.source.kernel.org (sea.source.kernel.org [172.234.252.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1F49D10E551 for ; Wed, 26 Mar 2025 05:33:44 +0000 (UTC) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sea.source.kernel.org (Postfix) with ESMTP id 552E443CEF; Wed, 26 Mar 2025 05:33:40 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPS id 46DEDC4CEEE; Wed, 26 Mar 2025 05:33:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742967220; bh=sUob8TE3AZvxoppbUr3lPKkTR/fURo/z6DjXh4Wzylw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=Bybl7ptBO/fdCwEsx7DrX92xHHIM5goOhcD6JpP3zmRFLu9fWjxXVIeSKS1ulJqLP fm8ubpmXLbTjawcZW8w4g1evEGc1tQv8YwNjwXsw7Cqp5dJLeIydL4/9ZqVebJrCue DrJFfY11ENVAPEQol4rvu/kz9ruRxqjLxUsFUbK5tGClt3sxyvnYhcuxrErL1nB9Z0 QsQ/TQ2Jw+otNoRyBfdZhPEV8P27W1xgJXio72PYdCRM70bBwNLSdUA7RvlYrWRfNf ezV3RvRIaz8YqTEXP82M6DRD0Ffv2oQv4p00/lgvrkwaKqdhy5Oxjcl1lKY0GKJLSQ rIIL+Xa1AG7+w== 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 343F9C3600E; Wed, 26 Mar 2025 05:33:40 +0000 (UTC) Date: Wed, 26 Mar 2025 13:34:14 +0800 Subject: [PATCH v2 2/5] drm/bridge: it6505: check INT_LINK_TRAIN_FAIL while link auto training MIME-Version: 1.0 Message-Id: <20250326-fix-link-training-v2-2-756c8306f500@ite.com.tw> References: <20250326-fix-link-training-v2-0-756c8306f500@ite.com.tw> In-Reply-To: <20250326-fix-link-training-v2-0-756c8306f500@ite.com.tw> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter 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 X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1742967277; l=2881; i=Hermes.wu@ite.com.tw; s=20241230; h=from:subject:message-id; bh=q10oGVkoPBCuc3Dgp3JFILnyXIg3fT8rbmgboMHjtM8=; b=Z0D55US/qKGcCj5J/n1Wzl77WYp5AoC5Nh/RLZB5lzxxM10S9MrHbjMWUxK0IAVghH9dbBTwy KrEJbB/bwmzCMjtv4Kz+woyOPspNrfLV0rKg3905nKrZzEIQyeHrmx0 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 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Hermes.wu@ite.com.tw Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Hermes Wu From: Hermes Wu 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 Reviewed-by: Dmitry Baryshkov --- drivers/gpu/drm/bridge/ite-it6505.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/ite-it6505.c index b47042dc06bb1e1dfd92bc0dc6d69dc918a140ba..0607f99446b37c82b41a376c2f4e10c7565d1b61 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 *it6505) it6505_write(it6505, INT_MASK_02, BIT(INT_AUX_CMD_FAIL) | BIT(INT_HDCP_KSV_CHECK) | BIT(INT_AUDIO_FIFO_ERROR)); - 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)); } static void it6505_int_mask_disable(struct it6505 *it6505) @@ -1802,6 +1802,7 @@ static bool it6505_link_start_auto_train(struct it6505 *it6505) { int timeout = 500, link_training_state; bool state = false; + int int03; mutex_lock(&it6505->aux_lock); it6505_set_bits(it6505, REG_TRAIN_CTRL0, @@ -1814,6 +1815,17 @@ static bool it6505_link_start_auto_train(struct it6505 *it6505) while (timeout > 0) { usleep_range(1000, 2000); link_training_state = it6505_read(it6505, REG_LINK_TRAIN_STS); + int03 = 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; + } if (link_training_state > 0 && (link_training_state & LINK_STATE_NORP)) { @@ -2693,14 +2705,6 @@ static void it6505_irq_audio_fifo_error(struct it6505 *it6505) it6505_enable_audio(it6505); } -static void it6505_irq_link_train_fail(struct it6505 *it6505) -{ - struct device *dev = 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 +2769,6 @@ static irqreturn_t it6505_int_threaded_handler(int unused, 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; From patchwork Wed Mar 26 05:34:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hermes Wu X-Patchwork-Id: 14029732 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 48871C36008 for ; Wed, 26 Mar 2025 05:34:04 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B0A9F10E651; Wed, 26 Mar 2025 05:34:03 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="XXTLWbQB"; dkim-atps=neutral Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8B2E410E652 for ; Wed, 26 Mar 2025 05:33:45 +0000 (UTC) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 23CDD5C55A7; Wed, 26 Mar 2025 05:31:24 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPS id 51A25C4CEE8; Wed, 26 Mar 2025 05:33:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742967220; bh=lyxU3J3tgj+XOoWNtnnGcdmy7uN8MZQxyZoClXZLkIo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=XXTLWbQBdOmD7Gil9jwx9qPNXzk1V7yQU2r9CMzTtyFyg1eX7npfZtscwUalXplp9 iQ3eMxqTtfdcEDqSoS/1IOgRy9szyhEG35JmArzw9uQkySZKmjbxBXhB3NH1g+7HsE P0qJ+zNEz8vS4Pbeq0TluHs+pzv/mLVmkAvTcncSykMm5RPlKdIKuqH/BrYa4qcgen r+fsJvSoWTIuE9CquiHMIQMhDuD/u6HS4hSbAI3vf5O8ueZVubGnAyniNC52NfrGoJ BRO1fvHPU2OGZUqBqDYdFE6B4Nh4u71Eb++4fsZ3bCE6XNMHePE/nb/3O9/sQsn4JN ZXuK371TGRhGw== 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 46BB9C36008; Wed, 26 Mar 2025 05:33:40 +0000 (UTC) Date: Wed, 26 Mar 2025 13:34:15 +0800 Subject: [PATCH v2 3/5] drm/bridge: it6505: modify DP link auto training MIME-Version: 1.0 Message-Id: <20250326-fix-link-training-v2-3-756c8306f500@ite.com.tw> References: <20250326-fix-link-training-v2-0-756c8306f500@ite.com.tw> In-Reply-To: <20250326-fix-link-training-v2-0-756c8306f500@ite.com.tw> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter 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 X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1742967277; l=3243; i=Hermes.wu@ite.com.tw; s=20241230; h=from:subject:message-id; bh=7J6H/GfrtlSBRUa1Zq4Q3BBQ6RF81ypZS5T9zoXdwKE=; b=UfbQwxcyZy4hSilSen89RuLoTEI0B1PbBkTVqkpw4L5U70/C+uiM8M8DVI+r7KAjrs9IY1oKo 1lJ1gYcfrl9AWt+ukZN1cY0D8AiDDl7M97AWC67tt5AYteI2BGBhBIT 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 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Hermes.wu@ite.com.tw Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Hermes Wu From: Hermes Wu 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 --- drivers/gpu/drm/bridge/ite-it6505.c | 38 +++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/ite-it6505.c index 0607f99446b37c82b41a376c2f4e10c7565d1b61..e0e13e737763fb801fd1cd803734a0d6ae1dd812 100644 --- a/drivers/gpu/drm/bridge/ite-it6505.c +++ b/drivers/gpu/drm/bridge/ite-it6505.c @@ -1800,11 +1800,20 @@ static void it6505_link_training_setup(struct it6505 *it6505) static bool it6505_link_start_auto_train(struct it6505 *it6505) { - int timeout = 500, link_training_state; + int link_training_state; bool state = false; int int03; + struct device *dev = it6505->dev; + unsigned long timeout; + + guard(mutex)(&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)); - mutex_lock(&it6505->aux_lock); it6505_set_bits(it6505, REG_TRAIN_CTRL0, FORCE_CR_DONE | FORCE_EQ_DONE, 0x00); /* reset link state machine and re start training*/ @@ -1812,32 +1821,41 @@ static bool it6505_link_start_auto_train(struct it6505 *it6505) FORCE_RETRAIN | MANUAL_TRAIN); it6505_write(it6505, REG_TRAIN_CTRL1, AUTO_TRAIN); - while (timeout > 0) { + timeout = jiffies + msecs_to_jiffies(100) + 1; + for (;;) { usleep_range(1000, 2000); link_training_state = it6505_read(it6505, REG_LINK_TRAIN_STS); int03 = 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); + /* Ignore INT_VID_FIFO_ERROR when auto training fail*/ + it6505_write(it6505, INT_STATUS_03, + BIT(INT_LINK_TRAIN_FAIL) | + BIT(INT_VID_FIFO_ERROR)); + + if (int03 & BIT(INT_VID_FIFO_ERROR)) + DRM_DEV_DEBUG_DRIVER(dev, + "video fifo error when training fail"); + break; } if (link_training_state > 0 && (link_training_state & LINK_STATE_NORP)) { state = true; - goto unlock; + break; } - timeout--; + if (time_after(jiffies, timeout)) + break; } -unlock: - mutex_unlock(&it6505->aux_lock); + /* recover interrupt trigger*/ + it6505_set_bits(it6505, INT_MASK_03, + BIT(INT_VID_FIFO_ERROR), BIT(INT_VID_FIFO_ERROR)); return state; } From patchwork Wed Mar 26 05:34:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hermes Wu X-Patchwork-Id: 14029727 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EF9CAC36008 for ; Wed, 26 Mar 2025 05:33:50 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 22A2710E551; Wed, 26 Mar 2025 05:33:50 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="YxMwDDaB"; dkim-atps=neutral Received: from sea.source.kernel.org (sea.source.kernel.org [172.234.252.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1F64D10E55A for ; Wed, 26 Mar 2025 05:33:44 +0000 (UTC) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sea.source.kernel.org (Postfix) with ESMTP id 72A3943E9C; Wed, 26 Mar 2025 05:33:40 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPS id 68743C4CEF4; Wed, 26 Mar 2025 05:33:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742967220; bh=kHtdah/7J9+lICAdEY2QWLUviTDD9x2Pk07Ly2lVO0s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=YxMwDDaBa2uTUf0RGPlnM5r7kaIhnRLdN0qAtbTs8F/7J5IG89oZJEUAv7mLucsF3 83vCzmM7nD7C7xWN85jZ8e7ZQZkxBhSLRZd/4lw9eEDc4BK6yMkcSa+SSyySsFhlYq 8h6yQeyBzpNL/UKiILebz8Mdj9VYrI5LZHtPQOYp62xFdE1A0DApeWNzB6PC0X5Bgl SF8wrDOVGZTxIL2+6+lIgJGf43krypfkL3Q5n0/dI3uYp45hCpSAbdyrAfxHGOIiL9 /79iTYYJ+mRkl3vlGiAYRh3RTZoDsNL1a9KHDzR6UMrCe6NnujwLBLkD6ylHxgOUAv SL7h/Fd7N9ToQ== 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 59AB1C36011; Wed, 26 Mar 2025 05:33:40 +0000 (UTC) Date: Wed, 26 Mar 2025 13:34:16 +0800 Subject: [PATCH v2 4/5] drm/bridge: it6505: modify DP link training work MIME-Version: 1.0 Message-Id: <20250326-fix-link-training-v2-4-756c8306f500@ite.com.tw> References: <20250326-fix-link-training-v2-0-756c8306f500@ite.com.tw> In-Reply-To: <20250326-fix-link-training-v2-0-756c8306f500@ite.com.tw> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter 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 X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1742967277; l=4425; i=Hermes.wu@ite.com.tw; s=20241230; h=from:subject:message-id; bh=hBOJBY2XTkl+EvP8IZiH3XQVQvr/2YIKA/X+KvsSbUs=; b=NEFSW1BW80J6hUzk8TcL4jl7RHa78HiGxL9aafQiv5H6/4IqePGWxWSd+6Snj1mnjqFhGoAgT cSiuTvwgHUUASFGKotq47YHf6z/WzQCp9x6EQ9pwDlb4Op0w+sZvajX 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 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Hermes.wu@ite.com.tw Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Hermes Wu From: Hermes Wu 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 Reviewed-by: Dmitry Baryshkov --- 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/ite-it6505.c index e0e13e737763fb801fd1cd803734a0d6ae1dd812..2bbe787ccb1b57906f2a31a011dd92f327019b08 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 offset, u8 *dpcd, int num) return 0; } -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 *it6505) it6505->lane_count = MAX_LANE_COUNT; it6505->link_state = LINK_IDLE; it6505->hdcp_desired = HDCP_DESIRED; - it6505->auto_train_retry = AUTO_TRAIN_RETRY; it6505->audio.select = AUDIO_SELECT; it6505->audio.sample_rate = AUDIO_SAMPLE_RATE; it6505->audio.channel_count = AUDIO_CHANNEL_COUNT; @@ -2472,7 +2470,7 @@ static void it6505_link_training_work(struct work_struct *work) { struct it6505 *it6505 = container_of(work, struct it6505, link_works); struct device *dev = it6505->dev; - int ret; + int ret, retry; DRM_DEV_DEBUG_DRIVER(dev, "it6505->sink_count: %d", it6505->sink_count); @@ -2480,27 +2478,22 @@ static void it6505_link_training_work(struct work_struct *work) if (!it6505_get_sink_hpd_status(it6505)) return; - 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 = 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 = AUTO_TRAIN_RETRY; retry > 0; retry--) { + it6505_link_training_setup(it6505); + it6505_reset_hdcp(it6505); + it6505_aux_reset(it6505); - if (ret) { - it6505->auto_train_retry = AUTO_TRAIN_RETRY; - it6505_link_train_ok(it6505); - } else { - it6505->auto_train_retry--; - it6505_dump(it6505); + ret = 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; + } } + /*After HW auto training fail, try link training step by step*/ + it6505_link_step_train_process(it6505); } static void it6505_plugged_status_to_codec(struct it6505 *it6505) @@ -2581,7 +2574,6 @@ static int it6505_process_hpd_irq(struct it6505 *it6505) (int)ARRAY_SIZE(link_status), link_status); if (!drm_dp_channel_eq_ok(link_status, it6505->lane_count)) { - it6505->auto_train_retry = AUTO_TRAIN_RETRY; it6505_video_reset(it6505); } @@ -2607,7 +2599,6 @@ static void it6505_irq_hpd(struct it6505 *it6505) it6505_variable_config(it6505); it6505_parse_link_capabilities(it6505); } - it6505->auto_train_retry = AUTO_TRAIN_RETRY; it6505_drm_dp_link_set_power(&it6505->aux, &it6505->link, DP_SET_POWER_D0); @@ -2744,7 +2735,6 @@ static void it6505_irq_video_handler(struct it6505 *it6505, const int *int_statu (unsigned int *)int_status)) || (it6505_test_bit(BIT_INT_VID_FIFO_ERROR, (unsigned int *)int_status))) { - it6505->auto_train_retry = AUTO_TRAIN_RETRY; flush_work(&it6505->link_works); it6505_stop_hdcp(it6505); it6505_video_reset(it6505); From patchwork Wed Mar 26 05:34:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hermes Wu X-Patchwork-Id: 14029728 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 7E0B8C36008 for ; Wed, 26 Mar 2025 05:33:53 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2132610E2AD; Wed, 26 Mar 2025 05:33:50 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="X/AFtXU/"; dkim-atps=neutral Received: from tor.source.kernel.org (tor.source.kernel.org [172.105.4.254]) by gabe.freedesktop.org (Postfix) with ESMTPS id EC12D10E62F for ; Wed, 26 Mar 2025 05:33:44 +0000 (UTC) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id 7C26461141; Wed, 26 Mar 2025 05:33:36 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPS id 78D91C4CEF6; Wed, 26 Mar 2025 05:33:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742967220; bh=Wy7WE6LuZZ6xBpl3FIbcxjqEGw2E3rBrzulxGhYwh9Y=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=X/AFtXU/fEdwZ3SAz85QW5q5KbM4UKU13WwZJgjr2WcCzAtCBXB6eIBLoQwFjDPkb pF/jV/K5Phx++Rwmy+q5IrumHFP3UybFVO3OOgX6ropkKHppx16okhzm+4XnRu00Wh Vnyl3HG4QM+1KW+Q/yU6H/0z6wy/Rm+2gCs6B6LERqdCOipyEc2OQbooteQMBXty8Q ERFko5SdwX/XM6Rjj1AHv8rb/YIN6UqxbkgPhPCQ8hOMhmafZ9xBeWzC7enLbUKsU4 sWhrKQpaCNKV4vIs6hhda222V03B3bfnNkxBQvulwFoZ/6h0QfNt3UVODmK1RIAh83 OoQAKyRbRlxYA== 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 6D812C3600D; Wed, 26 Mar 2025 05:33:40 +0000 (UTC) Date: Wed, 26 Mar 2025 13:34:17 +0800 Subject: [PATCH v2 5/5] drm/bridge: it6505: skip auto training when previous try fail MIME-Version: 1.0 Message-Id: <20250326-fix-link-training-v2-5-756c8306f500@ite.com.tw> References: <20250326-fix-link-training-v2-0-756c8306f500@ite.com.tw> In-Reply-To: <20250326-fix-link-training-v2-0-756c8306f500@ite.com.tw> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter 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 X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1742967277; l=2513; i=Hermes.wu@ite.com.tw; s=20241230; h=from:subject:message-id; bh=tiJ4RlbfopmJYWvIu2IM5fgKRrXTP6oin1aKAqqcppQ=; b=lCmQZ7iuZxv2BHsc/G9uHxkeG4Ex0zbCFP4cowt8AFQz9da00JgtJQPZbg6UilJ4erYIjhDtM jw25gSKiTxGBWX+I+9Cx0pHXc/+7y2VimoE+KSEaZMjbE9K2oeZbwxj 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 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Hermes.wu@ite.com.tw Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Hermes Wu From: Hermes Wu 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 --- drivers/gpu/drm/bridge/ite-it6505.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/ite-it6505.c index 2bbe787ccb1b57906f2a31a011dd92f327019b08..47f8134df8b6f5c2172c6cfdbc91da8063993a05 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; @@ -2457,11 +2458,13 @@ static void it6505_link_step_train_process(struct it6505 *it6505) ret ? "pass" : "failed", i + 1); if (ret) { it6505_link_train_ok(it6505); + it6505->step_train_only = true; return; } } DRM_DEV_DEBUG_DRIVER(dev, "training fail"); + it6505->step_train_only = false; it6505->link_state = LINK_IDLE; it6505_video_reset(it6505); } @@ -2477,18 +2480,19 @@ static void it6505_link_training_work(struct work_struct *work) if (!it6505_get_sink_hpd_status(it6505)) return; - - for (retry = AUTO_TRAIN_RETRY; retry > 0; retry--) { - it6505_link_training_setup(it6505); - it6505_reset_hdcp(it6505); - it6505_aux_reset(it6505); - - ret = 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; + if (!it6505->step_train_only) { + for (retry = AUTO_TRAIN_RETRY; retry > 0; retry--) { + it6505_link_training_setup(it6505); + it6505_reset_hdcp(it6505); + it6505_aux_reset(it6505); + + ret = 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; + } } } @@ -2599,6 +2603,7 @@ static void it6505_irq_hpd(struct it6505 *it6505) it6505_variable_config(it6505); it6505_parse_link_capabilities(it6505); } + it6505->step_train_only = false; it6505_drm_dp_link_set_power(&it6505->aux, &it6505->link, DP_SET_POWER_D0);