drm/i915: Start repeater auth on READY/CP_IRQ
authorRamalingam C <ramalingam.c@intel.com>
Thu, 18 Jan 2018 05:48:07 +0000 (11:18 +0530)
committerSean Paul <seanpaul@chromium.org>
Thu, 18 Jan 2018 22:55:26 +0000 (17:55 -0500)
Second stage of HDCP authentication starts at CP_IRQ or at the
assertion of READY bit from Repeater.

Till then repeater will be authenticating with its downstream devices.
So authenticated device count, depth and ksv_list readable from
repeaters are valid only after assertion of READY/CP_IRQ.

This patch makes sure that READY is polled before reading any
topology information.

Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Link: https://patchwork.freedesktop.org/patch/msgid/1516254488-4971-4-git-send-email-ramalingam.c@intel.com
drivers/gpu/drm/i915/intel_hdcp.c

index c8e611af408e46b79ee23201a009ff3a6a440e8b..b50c03a3bfe64d073754af5fcb87ee4f91b62ce5 100644 (file)
@@ -150,6 +150,12 @@ int intel_hdcp_auth_downstream(struct intel_digital_port *intel_dig_port,
 
        dev_priv = intel_dig_port->base.base.dev->dev_private;
 
+       ret = intel_hdcp_poll_ksv_fifo(intel_dig_port, shim);
+       if (ret) {
+               DRM_ERROR("KSV list failed to become ready (%d)\n", ret);
+               return ret;
+       }
+
        ret = shim->read_bstatus(intel_dig_port, bstatus);
        if (ret)
                return ret;
@@ -161,12 +167,6 @@ int intel_hdcp_auth_downstream(struct intel_digital_port *intel_dig_port,
                return 0;
        }
 
-       ret = intel_hdcp_poll_ksv_fifo(intel_dig_port, shim);
-       if (ret) {
-               DRM_ERROR("KSV list failed to become ready (%d)\n", ret);
-               return ret;
-       }
-
        ksv_fifo = kzalloc(num_downstream * DRM_HDCP_KSV_LEN, GFP_KERNEL);
        if (!ksv_fifo)
                return -ENOMEM;