On Fri, Feb 02, 2018 at 04:15:13PM +0530, Ramalingam C wrote:
> We enable the HDCP encryption as a part of first stage authentication.
> So when second stage authentication fails, we need to disable the HDCP
> encryption and signalling.
> 
> This patch handles above requirement.
> 
> For reusing the _intel_hdcp_disable from generic authentication flow,
> this patch retain the reference to connector till the generic hdcp flow.
> This will be handy to provide the connector details in HDCP enable
> debug info.
> 
> Signed-off-by: Ramalingam C <ramalinga...@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_hdcp.c | 41 
> +++++++++++++++++++++++----------------
>  1 file changed, 24 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_hdcp.c 
> b/drivers/gpu/drm/i915/intel_hdcp.c
> index b97184eccd9c..0021511ae4d7 100644
> --- a/drivers/gpu/drm/i915/intel_hdcp.c
> +++ b/drivers/gpu/drm/i915/intel_hdcp.c
> @@ -16,6 +16,8 @@
>  
>  #define KEY_LOAD_TRIES       5
>  
> +static int _intel_hdcp_disable(struct intel_connector *connector);
> +
>  static int intel_hdcp_poll_ksv_fifo(struct intel_digital_port 
> *intel_dig_port,
>                                   const struct intel_hdcp_shim *shim)
>  {
> @@ -138,17 +140,24 @@ bool intel_hdcp_is_ksv_valid(u8 *ksv)
>       return true;
>  }
>  
> +static
> +struct intel_digital_port *conn_to_dig_port(struct intel_connector 
> *connector)
> +{
> +     return enc_to_dig_port(&connector->encoder->base);
> +}
> +
>  /* Implements Part 2 of the HDCP authorization procedure */
>  static
> -int intel_hdcp_auth_downstream(struct intel_digital_port *intel_dig_port,
> -                            const struct intel_hdcp_shim *shim)
> +int intel_hdcp_auth_downstream(struct intel_connector *connector)
>  {
>       struct drm_i915_private *dev_priv;
>       u32 vprime, sha_text, sha_leftovers, rep_ctl;
>       u8 bstatus[2], num_downstream, *ksv_fifo;
>       int ret, i, j, sha_idx;
> +     const struct intel_hdcp_shim *shim = connector->hdcp_shim;
> +     struct intel_digital_port *intel_dig_port = conn_to_dig_port(connector);
>  
> -     dev_priv = intel_dig_port->base.base.dev->dev_private;
> +     dev_priv = to_i915(connector->base.dev);
>  
>       ret = intel_hdcp_poll_ksv_fifo(intel_dig_port, shim);
>       if (ret) {
> @@ -385,8 +394,7 @@ int intel_hdcp_auth_downstream(struct intel_digital_port 
> *intel_dig_port,
>  }
>  
>  /* Implements Part 1 of the HDCP authorization procedure */
> -static int intel_hdcp_auth(struct intel_digital_port *intel_dig_port,
> -                        const struct intel_hdcp_shim *shim)
> +static int intel_hdcp_auth(struct intel_connector *connector)
>  {
>       struct drm_i915_private *dev_priv;
>       enum port port;
> @@ -405,9 +413,10 @@ static int intel_hdcp_auth(struct intel_digital_port 
> *intel_dig_port,
>               u8 shim[DRM_HDCP_RI_LEN];
>       } ri;
>       bool repeater_present;
> +     const struct intel_hdcp_shim *shim = connector->hdcp_shim;
> +     struct intel_digital_port *intel_dig_port = conn_to_dig_port(connector);
>  
> -     dev_priv = intel_dig_port->base.base.dev->dev_private;
> -
> +     dev_priv = to_i915(connector->base.dev);
>       port = intel_dig_port->base.port;
>  
>       /* Initialize An with 2 random values and acquire it */
> @@ -498,19 +507,18 @@ static int intel_hdcp_auth(struct intel_digital_port 
> *intel_dig_port,
>        * on those as well.
>        */
>  
> -     if (repeater_present)
> -             return intel_hdcp_auth_downstream(intel_dig_port, shim);
> +     if (repeater_present) {
> +             ret = intel_hdcp_auth_downstream(connector);
> +             if (ret) {
> +                     _intel_hdcp_disable(connector);

If you just call this from _intel_hdcp_enable when intel_hdcp_auth() fails, you
can avoid all of this code, it'd just be one line.


> +                     return ret;
> +             }
> +     }
>  
>       DRM_DEBUG_KMS("HDCP is enabled (no repeater present)\n");
>       return 0;
>  }
>  
> -static
> -struct intel_digital_port *conn_to_dig_port(struct intel_connector 
> *connector)
> -{
> -     return enc_to_dig_port(&intel_attached_encoder(&connector->base)->base);
> -}
> -
>  static int _intel_hdcp_disable(struct intel_connector *connector)
>  {
>       struct drm_i915_private *dev_priv = connector->base.dev->dev_private;
> @@ -558,8 +566,7 @@ static int _intel_hdcp_enable(struct intel_connector 
> *connector)
>               return ret;
>       }
>  
> -     ret = intel_hdcp_auth(conn_to_dig_port(connector),
> -                           connector->hdcp_shim);
> +     ret = intel_hdcp_auth(connector);
>       if (ret) {
>               DRM_ERROR("Failed to authenticate HDCP (%d)\n", ret);
>               return ret;
> -- 
> 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

Reply via email to