>
>
>-----Original Message-----
>From: Dmitry Baryshkov <dmitry.barysh...@oss.qualcomm.com> 
>Sent: Wednesday, September 17, 2025 9:47 PM
>To: Hermes Wu (吳佳宏) <hermes...@ite.com.tw>
>Cc: andrzej.ha...@intel.com; neil.armstr...@linaro.org; rf...@kernel.org; 
>laurent.pinch...@ideasonboard.com; jo...@kwiboo.se; jernej.skra...@gmail.com; 
>maarten.lankho...@linux.intel.com; mrip...@kernel.org; tzimmerm...@suse.de; 
>airl...@gmail.com; sim...@ffwll.ch; Pet Weng (翁玉芬) <pet.w...@ite.com.tw>; 
>Kenneth Hung (洪家倫) <kenneth.h...@ite.com.tw>; treapk...@chromium.org; 
>dri-devel@lists.freedesktop.org; linux-ker...@vger.kernel.org
>Subject: Re: [PATCH RESEND v3 3/5] drm/bridge: it6505: modify DP link auto 
>training
>
>On Wed, Sep 17, 2025 at 08:37:10AM +0000, hermes...@ite.com.tw wrote:
>> 
>> >-----Original Message-----
>> >From: Dmitry Baryshkov <dmitry.barysh...@oss.qualcomm.com> 
>> >Sent: Tuesday, September 16, 2025 6:49 PM
>> >To: Hermes Wu (吳佳宏) <hermes...@ite.com.tw>
>> >Cc: Andrzej Hajda <andrzej.ha...@intel.com>; Neil Armstrong 
>> ><neil.armstr...@linaro.org>; Robert Foss <rf...@kernel.org>; Laurent 
>> >Pinchart <laurent.pinch...@ideasonboard.com>; Jonas Karlman 
>> ><jo...@kwiboo.se>; Jernej Skrabec <jernej.skra...@gmail.com>; Maarten 
>> >Lankhorst <maarten.lankho...@linux.intel.com>; Maxime Ripard 
>> ><mrip...@kernel.org>; Thomas Zimmermann <tzimmerm...@suse.de>; David Airlie 
>> ><airl...@gmail.com>; Simona Vetter <sim...@ffwll.ch>; Pet Weng (翁玉芬) 
>> ><pet.w...@ite.com.tw>; Kenneth Hung (洪家倫) <kenneth.h...@ite.com.tw>; 
>> >treapk...@chromium.org; dri-devel@lists.freedesktop.org; 
>> >linux-ker...@vger.kernel.org
>> >Subject: Re: [PATCH RESEND v3 3/5] drm/bridge: it6505: modify DP link auto 
>> >training
>> >
>> >On Tue, Sep 16, 2025 at 12:47:43PM +0800, Hermes Wu via B4 Relay wrote:
>> >> From: Hermes Wu <hermes...@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...@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/ite-it6505.c
>> >> index 
>> >> 7f6227c278a51358c70a3de93454aafeef64f2bb..f9b99c70789eea6beb3c6513155c9a4ca103d219
>> >>  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 
>> >> it6505 *it6505)
>> >>   struct device *dev = it6505->dev;
>> >>  
>> >>   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 
>> >> it6505 *it6505)
>> >>           link_training_state = it6505_read(it6505, REG_LINK_TRAIN_STS);
>> >>           int03 = 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));
>> >
>> >I'm really unusure about this change. Judging by the description of the
>> >problem, it's fix for the issue, but the issue gets introduced in the
>> >previous patch.
>> In this patch serious?
>> 
>> This patch serious fix this FIFO error issue, it change link training 
>> algorithm first then fix wrong FIFO error status.
>> 
>> The link training process start after video status is stable, and when video 
>> FIFO error occurs,
>> video stable status will also lost, link training will reset to idle and 
>> wait until video stable again.
>> 
>> IT6505 HW auto training will process link training automatically, which 
>> include CR/EQ DPCD setting, link status check,
>> and try lower link rate is the 2.7G cannot pass training.
>> 
>> In some case, DP connect to a DP sink device which cannot pass IT6505 HW 
>> auto training. 
>> when link auto training fail on 2.7G and IT6505 HW change link rate to 1.65G 
>> and retry training automatically,
>> at this time video FIFO error will occur because of the link rate 
>> change(chip issue), the video signal from SOC is not lost actually.
>
>We seems to be misunderstanding each other. I pointed out that your are
>fixing the code that was introduced in the previous patch. Would it make
>more sense to reoder or to squash the patches?

this patch can squash to previous one. they are part of auto link training fail 
check.

I will update in next patch serious

>> 
>> >>  
>> >>                   DRM_DEV_DEBUG_DRIVER(dev,
>> >>                                        "INT_LINK_TRAIN_FAIL(%x)!",
>> >> @@ -1837,6 +1846,9 @@ static bool it6505_link_start_auto_train(struct 
>> >> it6505 *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);
>> >>  
>> >>   return state;
>> >> 
>> >> -- 
>> >> 2.34.1
>> >> 
>> >> 
>> >
>> >-- 
>> >With best wishes
>> >Dmitry
>> >
>> BR.
>> Hermes Wu
>
>-- 
>With best wishes
>Dmitry
>

Reply via email to