mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-06 11:26:22 -04:00
drm/i915/hdcp: Configure HDCP1.4 MST steram encryption status
Enable HDCP 1.4 DP MST stream encryption. Enable stream encryption once encryption is enabled on the DP transport driving the link for each stream which has requested encryption. Disable stream encryption for each stream that no longer requires encryption before disabling HDCP encryption on the link. v2: - Added debug print for stream encryption. - Disable the hdcp on port after disabling last stream encryption. v3: - Cosmetic change, removed the value less comment. [Uma] v4: - Split the Gen12 HDCP enablement patch. [Ram] - Add connector details in drm_err. v5: - uniformity for connector detail in DMESG. [Ram] - comments improvement. [Ram] Cc: Ramalingam C <ramalingam.c@intel.com> Reviewed-by: Uma Shankar <uma.shankar@intel.com> Reviewed-by: Ramalingam C <ramalingam.c@intel.com> Tested-by: Karthik B S <karthik.b.s@intel.com> Signed-off-by: Anshuman Gupta <anshuman.gupta@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210111081120.28417-9-anshuman.gupta@intel.com
This commit is contained in:
@@ -766,10 +766,17 @@ static int intel_hdcp_auth(struct intel_connector *connector)
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX: If we have MST-connected devices, we need to enable encryption
|
||||
* on those as well.
|
||||
*/
|
||||
/* DP MST Auth Part 1 Step 2.a and Step 2.b */
|
||||
if (shim->stream_encryption) {
|
||||
ret = shim->stream_encryption(connector, true);
|
||||
if (ret) {
|
||||
drm_err(&dev_priv->drm, "[%s:%d] Failed to enable HDCP 1.4 stream enc\n",
|
||||
connector->base.name, connector->base.base.id);
|
||||
return ret;
|
||||
}
|
||||
drm_dbg_kms(&dev_priv->drm, "HDCP 1.4 transcoder: %s stream encrypted\n",
|
||||
transcoder_name(hdcp->stream_transcoder));
|
||||
}
|
||||
|
||||
if (repeater_present)
|
||||
return intel_hdcp_auth_downstream(connector);
|
||||
@@ -791,19 +798,24 @@ static int _intel_hdcp_disable(struct intel_connector *connector)
|
||||
drm_dbg_kms(&dev_priv->drm, "[%s:%d] HDCP is being disabled...\n",
|
||||
connector->base.name, connector->base.base.id);
|
||||
|
||||
/*
|
||||
* If there are other connectors on this port using HDCP, don't disable
|
||||
* it. Instead, toggle the HDCP signalling off on that particular
|
||||
* connector/pipe and exit.
|
||||
*/
|
||||
if (dig_port->num_hdcp_streams > 0) {
|
||||
ret = hdcp->shim->toggle_signalling(dig_port,
|
||||
cpu_transcoder, false);
|
||||
if (ret)
|
||||
DRM_ERROR("Failed to disable HDCP signalling\n");
|
||||
return ret;
|
||||
if (hdcp->shim->stream_encryption) {
|
||||
ret = hdcp->shim->stream_encryption(connector, false);
|
||||
if (ret) {
|
||||
drm_err(&dev_priv->drm, "[%s:%d] Failed to disable HDCP 1.4 stream enc\n",
|
||||
connector->base.name, connector->base.base.id);
|
||||
return ret;
|
||||
}
|
||||
drm_dbg_kms(&dev_priv->drm, "HDCP 1.4 transcoder: %s stream encryption disabled\n",
|
||||
transcoder_name(hdcp->stream_transcoder));
|
||||
}
|
||||
|
||||
/*
|
||||
* If there are other connectors on this port using HDCP, don't disable it
|
||||
* until it disabled HDCP encryption for all connectors in MST topology.
|
||||
*/
|
||||
if (dig_port->num_hdcp_streams > 0)
|
||||
return ret;
|
||||
|
||||
hdcp->hdcp_encrypted = false;
|
||||
intel_de_write(dev_priv, HDCP_CONF(dev_priv, cpu_transcoder, port), 0);
|
||||
if (intel_de_wait_for_clear(dev_priv,
|
||||
|
||||
Reference in New Issue
Block a user