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]

Signed-off-by: Ramalingam C <ramalinga...@intel.com>
---
 drivers/gpu/drm/i915/intel_hdcp.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_hdcp.c 
b/drivers/gpu/drm/i915/intel_hdcp.c
index cfd13ee8c534..40d0c5e73cc6 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, retry = 1;
        union {
                u32 reg[2];
                u8 shim[DRM_HDCP_AN_LEN];
@@ -438,11 +438,16 @@ 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);
+
+       do {
+               ret = shim->read_bksv(intel_dig_port, bksv.shim);
+               if (!ret)
+                       if (!intel_hdcp_is_ksv_valid(bksv.shim))
+                               ret = -ENODEV;
+       } while (ret && retry--);
+
        if (ret)
                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

Reply via email to