[Intel-gfx] [PATCH v9 01/39] drm/i915: Gathering the HDCP1.4 routines together

C, Ramalingam ramalingam.c at intel.com
Thu Dec 13 11:21:19 UTC 2018


On 12/13/2018 1:47 PM, Winkler, Tomas wrote:
>
>> All HDCP1.4 routines are gathered together, followed by the generic functions
>> those can be extended for HDCP2.2 too.
>>
>> Signed-off-by: Ramalingam C <ramalingam.c at intel.com>
>> ---
>>   drivers/gpu/drm/i915/intel_hdcp.c | 118 +++++++++++++++++++------------------
>> -
>>   1 file changed, 59 insertions(+), 59 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_hdcp.c
>> b/drivers/gpu/drm/i915/intel_hdcp.c
>> index e000e54ad569..506b4cc6f46b 100644
>> --- a/drivers/gpu/drm/i915/intel_hdcp.c
>> +++ b/drivers/gpu/drm/i915/intel_hdcp.c
>> @@ -731,6 +731,65 @@ struct intel_connector
>> *intel_hdcp_to_connector(struct intel_hdcp *hdcp)
>>   	return container_of(hdcp, struct intel_connector, hdcp);  }
>>
>> +/* Implements Part 3 of the HDCP authorization procedure */ int
>> +intel_hdcp_check_link(struct intel_connector *connector) {
>
> Should be static

At this point in time, invoked from intel_dp.c. But at later part of
this series this function can be defined as static. Will do it then.

-Ram

>
>> +	struct intel_hdcp *hdcp = &connector->hdcp;
>> +	struct drm_i915_private *dev_priv = connector->base.dev-
>>> dev_private;
>> +	struct intel_digital_port *intel_dig_port =
>> conn_to_dig_port(connector);
>> +	enum port port = intel_dig_port->base.port;
>> +	int ret = 0;
>> +
>> +	if (!hdcp->shim)
>> +		return -ENOENT;
>> +
>> +	mutex_lock(&hdcp->mutex);
>> +
>> +	if (hdcp->value == DRM_MODE_CONTENT_PROTECTION_UNDESIRED)
>> +		goto out;
>> +
>> +	if (!(I915_READ(PORT_HDCP_STATUS(port)) & HDCP_STATUS_ENC)) {
>> +		DRM_ERROR("%s:%d HDCP check failed: link is not
>> encrypted,%x\n",
>> +			  connector->base.name, connector->base.base.id,
>> +			  I915_READ(PORT_HDCP_STATUS(port)));
>> +		ret = -ENXIO;
>> +		hdcp->value = DRM_MODE_CONTENT_PROTECTION_DESIRED;
>> +		schedule_work(&hdcp->prop_work);
>> +		goto out;
>> +	}
>> +
>> +	if (hdcp->shim->check_link(intel_dig_port)) {
>> +		if (hdcp->value !=
>> DRM_MODE_CONTENT_PROTECTION_UNDESIRED) {
>> +			hdcp->value =
>> DRM_MODE_CONTENT_PROTECTION_ENABLED;
>> +			schedule_work(&hdcp->prop_work);
>> +		}
>> +		goto out;
>> +	}
>> +
>> +	DRM_DEBUG_KMS("[%s:%d] HDCP link failed, retrying
>> authentication\n",
>> +		      connector->base.name, connector->base.base.id);
>> +
>> +	ret = _intel_hdcp_disable(connector);
>> +	if (ret) {
>> +		DRM_ERROR("Failed to disable hdcp (%d)\n", ret);
>> +		hdcp->value = DRM_MODE_CONTENT_PROTECTION_DESIRED;
>> +		schedule_work(&hdcp->prop_work);
>> +		goto out;
>> +	}
>> +
>> +	ret = _intel_hdcp_enable(connector);
>> +	if (ret) {
>> +		DRM_ERROR("Failed to enable hdcp (%d)\n", ret);
>> +		hdcp->value = DRM_MODE_CONTENT_PROTECTION_DESIRED;
>> +		schedule_work(&hdcp->prop_work);
>> +		goto out;
>> +	}
>> +
>> +out:
>> +	mutex_unlock(&hdcp->mutex);
>> +	return ret;
>> +}
>> +
>>   static void intel_hdcp_check_work(struct work_struct *work)  {
>>   	struct intel_hdcp *hdcp = container_of(to_delayed_work(work),
>> @@ -867,62 +926,3 @@ void intel_hdcp_atomic_check(struct drm_connector
>> *connector,
>>   						   new_state->crtc);
>>   	crtc_state->mode_changed = true;
>>   }
>> -
>> -/* Implements Part 3 of the HDCP authorization procedure */ -int
>> intel_hdcp_check_link(struct intel_connector *connector) -{
>> -	struct intel_hdcp *hdcp = &connector->hdcp;
>> -	struct drm_i915_private *dev_priv = connector->base.dev-
>>> dev_private;
>> -	struct intel_digital_port *intel_dig_port =
>> conn_to_dig_port(connector);
>> -	enum port port = intel_dig_port->base.port;
>> -	int ret = 0;
>> -
>> -	if (!hdcp->shim)
>> -		return -ENOENT;
>> -
>> -	mutex_lock(&hdcp->mutex);
>> -
>> -	if (hdcp->value == DRM_MODE_CONTENT_PROTECTION_UNDESIRED)
>> -		goto out;
>> -
>> -	if (!(I915_READ(PORT_HDCP_STATUS(port)) & HDCP_STATUS_ENC)) {
>> -		DRM_ERROR("%s:%d HDCP check failed: link is not
>> encrypted,%x\n",
>> -			  connector->base.name, connector->base.base.id,
>> -			  I915_READ(PORT_HDCP_STATUS(port)));
>> -		ret = -ENXIO;
>> -		hdcp->value = DRM_MODE_CONTENT_PROTECTION_DESIRED;
>> -		schedule_work(&hdcp->prop_work);
>> -		goto out;
>> -	}
>> -
>> -	if (hdcp->shim->check_link(intel_dig_port)) {
>> -		if (hdcp->value !=
>> DRM_MODE_CONTENT_PROTECTION_UNDESIRED) {
>> -			hdcp->value =
>> DRM_MODE_CONTENT_PROTECTION_ENABLED;
>> -			schedule_work(&hdcp->prop_work);
>> -		}
>> -		goto out;
>> -	}
>> -
>> -	DRM_DEBUG_KMS("[%s:%d] HDCP link failed, retrying
>> authentication\n",
>> -		      connector->base.name, connector->base.base.id);
>> -
>> -	ret = _intel_hdcp_disable(connector);
>> -	if (ret) {
>> -		DRM_ERROR("Failed to disable hdcp (%d)\n", ret);
>> -		hdcp->value = DRM_MODE_CONTENT_PROTECTION_DESIRED;
>> -		schedule_work(&hdcp->prop_work);
>> -		goto out;
>> -	}
>> -
>> -	ret = _intel_hdcp_enable(connector);
>> -	if (ret) {
>> -		DRM_DEBUG_KMS("Failed to enable hdcp (%d)\n", ret);
>> -		hdcp->value = DRM_MODE_CONTENT_PROTECTION_DESIRED;
>> -		schedule_work(&hdcp->prop_work);
>> -		goto out;
>> -	}
>> -
>> -out:
>> -	mutex_unlock(&hdcp->mutex);
>> -	return ret;
>> -}
>> --
>> 2.7.4
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/intel-gfx/attachments/20181213/7590e3a5/attachment.html>


More information about the Intel-gfx mailing list