diff mbox series

[v4,10/11] drm/bridge: it6505: fix HDCP CTS ksv wait timer

Message ID 20240926075134.22394-1-Hermes.Wu@ite.com.tw (mailing list archive)
State New, archived
Headers show
Series fix HDCP CTS fail items and add MCCS support | expand

Commit Message

Hermes Wu Sept. 26, 2024, 7:51 a.m. UTC
From: Hermes Wu <Hermes.wu@ite.com.tw>

When running the HDCP CTS test on UNIGRAF DPR-100.
HDCP must disabled after waiting KSV for 5s.
Consider system ksv work schedules. The original timer has a chance to expire.

Fixes: b5c84a9edcd4 ("drm/bridge: add it6505 driver")
Signed-off-by: Hermes Wu <Hermes.wu@ite.com.tw>
---
 drivers/gpu/drm/bridge/ite-it6505.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Dmitry Baryshkov Sept. 26, 2024, 8:20 a.m. UTC | #1
On Thu, Sep 26, 2024 at 03:51:33PM GMT, Hermes Wu wrote:
> From: Hermes Wu <Hermes.wu@ite.com.tw>
> 
> When running the HDCP CTS test on UNIGRAF DPR-100.
> HDCP must disabled after waiting KSV for 5s.
> Consider system ksv work schedules. The original timer has a chance to expire.

I can't understand two last sentences, excuse me.

Nit: KSV, not ksv

> 
> Fixes: b5c84a9edcd4 ("drm/bridge: add it6505 driver")
> Signed-off-by: Hermes Wu <Hermes.wu@ite.com.tw>
> ---
>  drivers/gpu/drm/bridge/ite-it6505.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/ite-it6505.c
> index e75bc1575aa8..22d9bec3faea 100644
> --- a/drivers/gpu/drm/bridge/ite-it6505.c
> +++ b/drivers/gpu/drm/bridge/ite-it6505.c
> @@ -2093,7 +2093,8 @@ static void it6505_hdcp_wait_ksv_list(struct work_struct *work)
>  	struct it6505 *it6505 = container_of(work, struct it6505,
>  					     hdcp_wait_ksv_list);
>  	struct device *dev = it6505->dev;
> -	unsigned int timeout = 5000;
> +	/* 1B-04 fail, wait to long to Stop encription(5s->3s). */

encryption, most likely it's also "too long".

> +	unsigned int timeout = 3000;

What is the timeout per the standard?

>  	u8 bstatus = 0;
>  	bool ksv_list_check;
>  
> -- 
> 2.34.1
>
Hermes Wu Sept. 26, 2024, 8:39 a.m. UTC | #2
>On Thu, Sep 26, 2024 at 03:51:33PM GMT, Hermes Wu wrote:
>> From: Hermes Wu <Hermes.wu@ite.com.tw>
>> 
>> When running the HDCP CTS test on UNIGRAF DPR-100.
>> HDCP must disabled after waiting KSV for 5s.
>> Consider system ksv work schedules. The original timer has a chance to expire.
>
>I can't understand two last sentences, excuse me.
>
>Nit: KSV, not ksv

Form HDCP CTS, DUT should wait downstream KSV list at least 5s.
And driver use a while loop with a 20ms sleep to reach the scope.
The true wait timer will reach 10s which is much longer then it supposed to.

It should better use other APIs to implement this waiting, rather than just reduce the counter.

	timeout /= 20;
	while (timeout > 0) {
		if (!it6505_get_sink_hpd_status(it6505))
			return;

		bstatus = it6505_dpcd_read(it6505, DP_AUX_HDCP_BSTATUS);

		if (bstatus & DP_BSTATUS_READY)
			break;

		msleep(20);
		timeout--;
	}

>> 
>> Fixes: b5c84a9edcd4 ("drm/bridge: add it6505 driver")
>> Signed-off-by: Hermes Wu <Hermes.wu@ite.com.tw>
>> ---
>>  drivers/gpu/drm/bridge/ite-it6505.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>> 
>> diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/ite-it6505.c
>> index e75bc1575aa8..22d9bec3faea 100644
>> --- a/drivers/gpu/drm/bridge/ite-it6505.c
>> +++ b/drivers/gpu/drm/bridge/ite-it6505.c
>> @@ -2093,7 +2093,8 @@ static void it6505_hdcp_wait_ksv_list(struct work_struct *work)
>>  	struct it6505 *it6505 = container_of(work, struct it6505,
>>  					     hdcp_wait_ksv_list);
>>  	struct device *dev = it6505->dev;
>> -	unsigned int timeout = 5000;
>> +	/* 1B-04 fail, wait to long to Stop encription(5s->3s). */
>
>encryption, most likely it's also "too long".
>
>> +	unsigned int timeout = 3000;
>
>What is the timeout per the standard?
>
>>  	u8 bstatus = 0;
>>  	bool ksv_list_check;
>>  
>> -- 
>> 2.34.1
>> 
>
>-- 
>With best wishes
>Dmitry
>
Dmitry Baryshkov Sept. 26, 2024, 9:22 a.m. UTC | #3
On Thu, 26 Sept 2024 at 10:39, <Hermes.Wu@ite.com.tw> wrote:
>
> >On Thu, Sep 26, 2024 at 03:51:33PM GMT, Hermes Wu wrote:
> >> From: Hermes Wu <Hermes.wu@ite.com.tw>
> >>
> >> When running the HDCP CTS test on UNIGRAF DPR-100.
> >> HDCP must disabled after waiting KSV for 5s.
> >> Consider system ksv work schedules. The original timer has a chance to expire.
> >
> >I can't understand two last sentences, excuse me.
> >
> >Nit: KSV, not ksv
>
> Form HDCP CTS, DUT should wait downstream KSV list at least 5s.
> And driver use a while loop with a 20ms sleep to reach the scope.
> The true wait timer will reach 10s which is much longer then it supposed to.
>
> It should better use other APIs to implement this waiting, rather than just reduce the counter.

See all the macros in <linux/iopoll.h>, maybe that helps. Consider
adding a version of read_poll_timeout with the in-loop break
condition.

>
>         timeout /= 20;
>         while (timeout > 0) {
>                 if (!it6505_get_sink_hpd_status(it6505))
>                         return;
>
>                 bstatus = it6505_dpcd_read(it6505, DP_AUX_HDCP_BSTATUS);
>
>                 if (bstatus & DP_BSTATUS_READY)
>                         break;
>
>                 msleep(20);
>                 timeout--;
>         }
>
> >>
> >> Fixes: b5c84a9edcd4 ("drm/bridge: add it6505 driver")
> >> Signed-off-by: Hermes Wu <Hermes.wu@ite.com.tw>
> >> ---
> >>  drivers/gpu/drm/bridge/ite-it6505.c | 3 ++-
> >>  1 file changed, 2 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/ite-it6505.c
> >> index e75bc1575aa8..22d9bec3faea 100644
> >> --- a/drivers/gpu/drm/bridge/ite-it6505.c
> >> +++ b/drivers/gpu/drm/bridge/ite-it6505.c
> >> @@ -2093,7 +2093,8 @@ static void it6505_hdcp_wait_ksv_list(struct work_struct *work)
> >>      struct it6505 *it6505 = container_of(work, struct it6505,
> >>                                           hdcp_wait_ksv_list);
> >>      struct device *dev = it6505->dev;
> >> -    unsigned int timeout = 5000;
> >> +    /* 1B-04 fail, wait to long to Stop encription(5s->3s). */
> >
> >encryption, most likely it's also "too long".
> >
> >> +    unsigned int timeout = 3000;
> >
> >What is the timeout per the standard?
> >
> >>      u8 bstatus = 0;
> >>      bool ksv_list_check;
> >>
> >> --
> >> 2.34.1
> >>
> >
> >--
> >With best wishes
> >Dmitry
> >
diff mbox series

Patch

diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/ite-it6505.c
index e75bc1575aa8..22d9bec3faea 100644
--- a/drivers/gpu/drm/bridge/ite-it6505.c
+++ b/drivers/gpu/drm/bridge/ite-it6505.c
@@ -2093,7 +2093,8 @@  static void it6505_hdcp_wait_ksv_list(struct work_struct *work)
 	struct it6505 *it6505 = container_of(work, struct it6505,
 					     hdcp_wait_ksv_list);
 	struct device *dev = it6505->dev;
-	unsigned int timeout = 5000;
+	/* 1B-04 fail, wait to long to Stop encription(5s->3s). */
+	unsigned int timeout = 3000;
 	u8 bstatus = 0;
 	bool ksv_list_check;