Message ID | 20210304085608.21372-3-anshuman.gupta@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | HDCP 2.2 MST fixes | expand |
Looks good to me. Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com> On 3/4/2021 2:26 PM, Anshuman Gupta wrote: > When stream encryption enabling fails due to Link encryption status > has stopped, prepare HDCP2 for recovery by disabling port authentication > and encryption such that it can re-attempt port authentication > and encryption. > > Cc: Ramalingam C <ramalingam.c@intel.com> > Signed-off-by: Anshuman Gupta <anshuman.gupta@intel.com> > --- > drivers/gpu/drm/i915/display/intel_hdcp.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c > index 08dd6b46749d..9a70c164c377 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdcp.c > +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c > @@ -1706,6 +1706,7 @@ static int hdcp2_enable_stream_encryption(struct intel_connector *connector) > { > struct intel_digital_port *dig_port = intel_attached_dig_port(connector); > struct drm_i915_private *dev_priv = to_i915(connector->base.dev); > + struct hdcp_port_data *data = &dig_port->hdcp_port_data; > struct intel_hdcp *hdcp = &connector->hdcp; > enum transcoder cpu_transcoder = hdcp->cpu_transcoder; > enum port port = dig_port->base.port; > @@ -1715,7 +1716,8 @@ static int hdcp2_enable_stream_encryption(struct intel_connector *connector) > LINK_ENCRYPTION_STATUS)) { > drm_err(&dev_priv->drm, "[%s:%d] HDCP 2.2 Link is not encrypted\n", > connector->base.name, connector->base.base.id); > - return -EPERM; > + ret = -EPERM; > + goto link_recover; > } > > if (hdcp->shim->stream_2_2_encryption) { > @@ -1729,6 +1731,15 @@ static int hdcp2_enable_stream_encryption(struct intel_connector *connector) > transcoder_name(hdcp->stream_transcoder)); > } > > + return 0; > + > +link_recover: > + if (hdcp2_deauthenticate_port(connector) < 0) > + drm_dbg_kms(&dev_priv->drm, "Port deauth failed.\n"); > + > + dig_port->hdcp_auth_status = false; > + data->k = 0; > + > return ret; > } >
diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c index 08dd6b46749d..9a70c164c377 100644 --- a/drivers/gpu/drm/i915/display/intel_hdcp.c +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c @@ -1706,6 +1706,7 @@ static int hdcp2_enable_stream_encryption(struct intel_connector *connector) { struct intel_digital_port *dig_port = intel_attached_dig_port(connector); struct drm_i915_private *dev_priv = to_i915(connector->base.dev); + struct hdcp_port_data *data = &dig_port->hdcp_port_data; struct intel_hdcp *hdcp = &connector->hdcp; enum transcoder cpu_transcoder = hdcp->cpu_transcoder; enum port port = dig_port->base.port; @@ -1715,7 +1716,8 @@ static int hdcp2_enable_stream_encryption(struct intel_connector *connector) LINK_ENCRYPTION_STATUS)) { drm_err(&dev_priv->drm, "[%s:%d] HDCP 2.2 Link is not encrypted\n", connector->base.name, connector->base.base.id); - return -EPERM; + ret = -EPERM; + goto link_recover; } if (hdcp->shim->stream_2_2_encryption) { @@ -1729,6 +1731,15 @@ static int hdcp2_enable_stream_encryption(struct intel_connector *connector) transcoder_name(hdcp->stream_transcoder)); } + return 0; + +link_recover: + if (hdcp2_deauthenticate_port(connector) < 0) + drm_dbg_kms(&dev_priv->drm, "Port deauth failed.\n"); + + dig_port->hdcp_auth_status = false; + data->k = 0; + return ret; }
When stream encryption enabling fails due to Link encryption status has stopped, prepare HDCP2 for recovery by disabling port authentication and encryption such that it can re-attempt port authentication and encryption. Cc: Ramalingam C <ramalingam.c@intel.com> Signed-off-by: Anshuman Gupta <anshuman.gupta@intel.com> --- drivers/gpu/drm/i915/display/intel_hdcp.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)