Re: [Intel-gfx] [PATCH v4] drm/i915: Retry HDCP bksv read

2018-02-05 Thread Ramalingam C



On Monday 05 February 2018 10:54 PM, Sean Paul wrote:

On Mon, Feb 05, 2018 at 10:44:41PM +0530, Ramalingam C wrote:

HDCP specification says that when bksv is identified as invalid
(not with 20 1s), bksv should be re-read and verified.

This patch adds the above mentioned re-read for bksv.

v2:
   Rephrased the commit msg [Seanpaul]

v3:
   do-while to for-loop [Seanpaul]

v4:
   retry only if bksv is invalid and no error msg on each attempt
   [Seanpaul]

Signed-off-by: Ramalingam C 
---
  drivers/gpu/drm/i915/intel_hdcp.c | 18 +-
  1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_hdcp.c 
b/drivers/gpu/drm/i915/intel_hdcp.c
index cfd13ee8c534..df0dabab97e1 100644
--- a/drivers/gpu/drm/i915/intel_hdcp.c
+++ b/drivers/gpu/drm/i915/intel_hdcp.c
@@ -397,7 +397,7 @@ static int intel_hdcp_auth(struct intel_digital_port 
*intel_dig_port,
struct drm_i915_private *dev_priv;
enum port port;
unsigned long r0_prime_gen_start;
-   int ret, i;
+   int ret, i, tries = 2;
union {
u32 reg[2];
u8 shim[DRM_HDCP_AN_LEN];
@@ -438,11 +438,19 @@ static int intel_hdcp_auth(struct intel_digital_port 
*intel_dig_port,
r0_prime_gen_start = jiffies;
  
  	memset(&bksv, 0, sizeof(bksv));

-   ret = shim->read_bksv(intel_dig_port, bksv.shim);
-   if (ret)
+
+   /* HDCP spec states that we must retry the bksv if it is invalid */
+   for (i = 0; i < tries; i++) {
+   ret = shim->read_bksv(intel_dig_port, bksv.shim);
+   if (ret)
+   return ret;
+   if (intel_hdcp_is_ksv_valid(bksv.shim))
+   break;
+   }
+   if (i == tries) {
+   DRM_ERROR("HDCP failed, Bksv is invalid\n");
return ret;

This will return 0.

oops :-(. Sleepy head it is...

-Ram



-   else if (!intel_hdcp_is_ksv_valid(bksv.shim))
-   return -ENODEV;
+   }
  
  	I915_WRITE(PORT_HDCP_BKSVLO(port), bksv.reg[0]);

I915_WRITE(PORT_HDCP_BKSVHI(port), bksv.reg[1]);
--
2.7.4



___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH v4] drm/i915: Retry HDCP bksv read

2018-02-05 Thread Sean Paul
On Mon, Feb 05, 2018 at 10:44:41PM +0530, Ramalingam C wrote:
> HDCP specification says that when bksv is identified as invalid
> (not with 20 1s), bksv should be re-read and verified.
> 
> This patch adds the above mentioned re-read for bksv.
> 
> v2:
>   Rephrased the commit msg [Seanpaul]
> 
> v3:
>   do-while to for-loop [Seanpaul]
> 
> v4:
>   retry only if bksv is invalid and no error msg on each attempt
>   [Seanpaul]
> 
> Signed-off-by: Ramalingam C 
> ---
>  drivers/gpu/drm/i915/intel_hdcp.c | 18 +-
>  1 file changed, 13 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_hdcp.c 
> b/drivers/gpu/drm/i915/intel_hdcp.c
> index cfd13ee8c534..df0dabab97e1 100644
> --- a/drivers/gpu/drm/i915/intel_hdcp.c
> +++ b/drivers/gpu/drm/i915/intel_hdcp.c
> @@ -397,7 +397,7 @@ static int intel_hdcp_auth(struct intel_digital_port 
> *intel_dig_port,
>   struct drm_i915_private *dev_priv;
>   enum port port;
>   unsigned long r0_prime_gen_start;
> - int ret, i;
> + int ret, i, tries = 2;
>   union {
>   u32 reg[2];
>   u8 shim[DRM_HDCP_AN_LEN];
> @@ -438,11 +438,19 @@ static int intel_hdcp_auth(struct intel_digital_port 
> *intel_dig_port,
>   r0_prime_gen_start = jiffies;
>  
>   memset(&bksv, 0, sizeof(bksv));
> - ret = shim->read_bksv(intel_dig_port, bksv.shim);
> - if (ret)
> +
> + /* HDCP spec states that we must retry the bksv if it is invalid */
> + for (i = 0; i < tries; i++) {
> + ret = shim->read_bksv(intel_dig_port, bksv.shim);
> + if (ret)
> + return ret;
> + if (intel_hdcp_is_ksv_valid(bksv.shim))
> + break;
> + }
> + if (i == tries) {
> + DRM_ERROR("HDCP failed, Bksv is invalid\n");
>   return ret;

This will return 0.

> - else if (!intel_hdcp_is_ksv_valid(bksv.shim))
> - return -ENODEV;
> + }
>  
>   I915_WRITE(PORT_HDCP_BKSVLO(port), bksv.reg[0]);
>   I915_WRITE(PORT_HDCP_BKSVHI(port), bksv.reg[1]);
> -- 
> 2.7.4
> 

-- 
Sean Paul, Software Engineer, Google / Chromium OS
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] [PATCH v4] drm/i915: Retry HDCP bksv read

2018-02-05 Thread Ramalingam C
HDCP specification says that when bksv is identified as invalid
(not with 20 1s), bksv should be re-read and verified.

This patch adds the above mentioned re-read for bksv.

v2:
  Rephrased the commit msg [Seanpaul]

v3:
  do-while to for-loop [Seanpaul]

v4:
  retry only if bksv is invalid and no error msg on each attempt
  [Seanpaul]

Signed-off-by: Ramalingam C 
---
 drivers/gpu/drm/i915/intel_hdcp.c | 18 +-
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_hdcp.c 
b/drivers/gpu/drm/i915/intel_hdcp.c
index cfd13ee8c534..df0dabab97e1 100644
--- a/drivers/gpu/drm/i915/intel_hdcp.c
+++ b/drivers/gpu/drm/i915/intel_hdcp.c
@@ -397,7 +397,7 @@ static int intel_hdcp_auth(struct intel_digital_port 
*intel_dig_port,
struct drm_i915_private *dev_priv;
enum port port;
unsigned long r0_prime_gen_start;
-   int ret, i;
+   int ret, i, tries = 2;
union {
u32 reg[2];
u8 shim[DRM_HDCP_AN_LEN];
@@ -438,11 +438,19 @@ static int intel_hdcp_auth(struct intel_digital_port 
*intel_dig_port,
r0_prime_gen_start = jiffies;
 
memset(&bksv, 0, sizeof(bksv));
-   ret = shim->read_bksv(intel_dig_port, bksv.shim);
-   if (ret)
+
+   /* HDCP spec states that we must retry the bksv if it is invalid */
+   for (i = 0; i < tries; i++) {
+   ret = shim->read_bksv(intel_dig_port, bksv.shim);
+   if (ret)
+   return ret;
+   if (intel_hdcp_is_ksv_valid(bksv.shim))
+   break;
+   }
+   if (i == tries) {
+   DRM_ERROR("HDCP failed, Bksv is invalid\n");
return ret;
-   else if (!intel_hdcp_is_ksv_valid(bksv.shim))
-   return -ENODEV;
+   }
 
I915_WRITE(PORT_HDCP_BKSVLO(port), bksv.reg[0]);
I915_WRITE(PORT_HDCP_BKSVHI(port), bksv.reg[1]);
-- 
2.7.4

___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx