[PATCH 10/12] drm/i915/hdcp: Don't enable HDCP directly from check_link

Nautiyal, Ankit K ankit.k.nautiyal at intel.com
Thu Feb 15 06:42:11 UTC 2024


On 2/15/2024 10:35 AM, Suraj Kandpal wrote:
> Whenever LIC fails instead of moving from ENABLED to DESIRED
> CP property we directly enable HDCP without informing the userspace
> of this failure in link integrity check.
> Now we will just update the value to DESIRED send the event to
> userspace and then continue with the normal flow of HDCP enablement.
>
> Signed-off-by: Suraj Kandpal <suraj.kandpal at intel.com>
> ---
>   drivers/gpu/drm/i915/display/intel_hdcp.c | 31 ++++-------------------
>   1 file changed, 5 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c
> index 16b2b180563f..b22dbc6494e0 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdcp.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c
> @@ -30,7 +30,7 @@
>   #define KEY_LOAD_TRIES	5
>   #define HDCP2_LC_RETRY_CNT			3
>   
> -static int intel_conn_to_vcpi(struct drm_atomic_state *state,
> +static int intel_conn_to_vcpi(struct intel_atomic_state *state,
>   			      struct intel_connector *connector)


This change does not belong to this patch. Perhaps should be moved to 
the next patch.


>   {
>   	struct drm_dp_mst_topology_mgr *mgr;
> @@ -43,7 +43,7 @@ static int intel_conn_to_vcpi(struct drm_atomic_state *state,
>   		return 0;
>   	mgr = connector->port->mgr;
>   
> -	drm_modeset_lock(&mgr->base.lock, state->acquire_ctx);
> +	drm_modeset_lock(&mgr->base.lock, state->base.acquire_ctx);

Same as above.


>   	mst_state = to_drm_dp_mst_topology_state(mgr->base.state);
>   	payload = drm_atomic_get_mst_payload_state(mst_state, connector->port);
>   	if (drm_WARN_ON(mgr->dev, !payload))
> @@ -2068,17 +2068,6 @@ static int intel_hdcp2_check_link(struct intel_connector *connector)
>   
>   		drm_dbg_kms(&i915->drm,
>   			    "HDCP2.2 Downstream topology change\n");
> -		ret = hdcp2_authenticate_repeater_topology(connector);
> -		if (!ret) {
> -			intel_hdcp_update_value(connector,
> -					DRM_MODE_CONTENT_PROTECTION_ENABLED,
> -					true);
> -			goto out;
> -		}

I think we still need these. If repeater topology is authenticated, we 
can go ahead with hdcp_update_value.

Otherwise we disable hdcp first.


Also, we need to make similar change for hdcp_check_link.


Regards,

Ankit



> -		drm_dbg_kms(&i915->drm,
> -			    "[CONNECTOR:%d:%s] Repeater topology auth failed.(%d)\n",
> -			    connector->base.base.id, connector->base.name,
> -			    ret);
>   	} else {
>   		drm_dbg_kms(&i915->drm,
>   			    "[CONNECTOR:%d:%s] HDCP2.2 link failed, retrying auth\n",
> @@ -2095,18 +2084,8 @@ static int intel_hdcp2_check_link(struct intel_connector *connector)
>   		goto out;
>   	}
>   
> -	ret = _intel_hdcp2_enable(connector);
> -	if (ret) {
> -		drm_dbg_kms(&i915->drm,
> -			    "[CONNECTOR:%d:%s] Failed to enable hdcp2.2 (%d)\n",
> -			    connector->base.base.id, connector->base.name,
> -			    ret);
> -		intel_hdcp_update_value(connector,
> -					DRM_MODE_CONTENT_PROTECTION_DESIRED,
> -					true);
> -		goto out;
> -	}
> -
> +	intel_hdcp_update_value(connector,
> +				DRM_MODE_CONTENT_PROTECTION_DESIRED, true);
>   out:
>   	mutex_unlock(&dig_port->hdcp_mutex);
>   	mutex_unlock(&hdcp->mutex);
> @@ -2345,7 +2324,7 @@ intel_hdcp_set_streams(struct intel_digital_port *dig_port,
>   			continue;
>   
>   		data->streams[data->k].stream_id =
> -			intel_conn_to_vcpi(&state->base, connector);
> +			intel_conn_to_vcpi(state, connector);
>   		data->k++;
>   
>   		/* if there is only one active stream */


More information about the Intel-gfx mailing list