From mboxrd@z Thu Jan 1 00:00:00 1970 From: "C, Ramalingam" Subject: Re: [PATCH v9 01/39] drm/i915: Gathering the HDCP1.4 routines together Date: Thu, 13 Dec 2018 16:51:19 +0530 Message-ID: <660cb4b7-36e6-89db-1c73-1f8ead910674@intel.com> References: <1544673701-6353-1-git-send-email-ramalingam.c@intel.com> <1544673701-6353-2-git-send-email-ramalingam.c@intel.com> <5B8DA87D05A7694D9FA63FD143655C1B9DA51DBC@hasmsx108.ger.corp.intel.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1030169869==" Return-path: In-Reply-To: <5B8DA87D05A7694D9FA63FD143655C1B9DA51DBC@hasmsx108.ger.corp.intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: "Winkler, Tomas" , "intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , "seanpaul@chromium.org" , "daniel.vetter@ffwll.ch" , "Shankar, Uma" List-Id: dri-devel@lists.freedesktop.org This is a multi-part message in MIME format. --===============1030169869== Content-Type: multipart/alternative; boundary="------------C1902B8DDDE7A963D9C221BF" Content-Language: en-US This is a multi-part message in MIME format. --------------C1902B8DDDE7A963D9C221BF Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit 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 >> --- >> 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 --------------C1902B8DDDE7A963D9C221BF Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: 7bit


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@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

    
--------------C1902B8DDDE7A963D9C221BF-- --===============1030169869== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVs IG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== --===============1030169869==--