On 2019-12-04 at 20:05:41 +0200, Ville Syrjala wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > intel_hdcp_transcoder_config() is clobbering some globally visible > state in .compute_config(). That is a big no no as .compute_config() > is supposed to have no visible side effects when either the commit > fails or it's just a TEST_ONLY commit. > > Inline this stuff into intel_hdcp_enable() so that the state only > gets modified when we actually commit the state to the hardware. > > Cc: Ramalingam C <ramalingam.c@xxxxxxxxx> > Cc: Jani Nikula <jani.nikula@xxxxxxxxx> > Cc: Uma Shankar <uma.shankar@xxxxxxxxx> > Fixes: 39e2df090c3c ("drm/i915/hdcp: update current transcoder into intel_hdcp") > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> Reviewed-by: Ramalingam C <ramalingam.c@xxxxxxxxx> > --- > drivers/gpu/drm/i915/display/intel_ddi.c | 5 ++++- > drivers/gpu/drm/i915/display/intel_dp.c | 3 --- > drivers/gpu/drm/i915/display/intel_hdcp.c | 26 +++++++---------------- > drivers/gpu/drm/i915/display/intel_hdcp.h | 5 ++--- > drivers/gpu/drm/i915/display/intel_hdmi.c | 3 --- > 5 files changed, 14 insertions(+), 28 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c > index ebcc7302706b..e692c0b28559 100644 > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > @@ -4026,6 +4026,7 @@ static void intel_enable_ddi(struct intel_encoder *encoder, > if (conn_state->content_protection == > DRM_MODE_CONTENT_PROTECTION_DESIRED) > intel_hdcp_enable(to_intel_connector(conn_state->connector), > + crtc_state->cpu_transcoder, > (u8)conn_state->hdcp_content_type); > } > > @@ -4129,7 +4130,9 @@ static void intel_ddi_update_pipe(struct intel_encoder *encoder, > if (conn_state->content_protection == > DRM_MODE_CONTENT_PROTECTION_DESIRED || > content_protection_type_changed) > - intel_hdcp_enable(connector, (u8)conn_state->hdcp_content_type); > + intel_hdcp_enable(connector, > + crtc_state->cpu_transcoder, > + (u8)conn_state->hdcp_content_type); > } > > static void > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c > index 5c406a0fd045..0f496115c345 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp.c > +++ b/drivers/gpu/drm/i915/display/intel_dp.c > @@ -2425,9 +2425,6 @@ intel_dp_compute_config(struct intel_encoder *encoder, > > intel_psr_compute_config(intel_dp, pipe_config); > > - intel_hdcp_transcoder_config(intel_connector, > - pipe_config->cpu_transcoder); > - > return 0; > } > > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c > index 001ce27d7029..0fdbd39f6641 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdcp.c > +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c > @@ -1821,23 +1821,6 @@ enum mei_fw_tc intel_get_mei_fw_tc(enum transcoder cpu_transcoder) > } > } > > -void intel_hdcp_transcoder_config(struct intel_connector *connector, > - enum transcoder cpu_transcoder) > -{ > - struct drm_i915_private *dev_priv = to_i915(connector->base.dev); > - struct intel_hdcp *hdcp = &connector->hdcp; > - > - if (!hdcp->shim) > - return; > - > - if (INTEL_GEN(dev_priv) >= 12) { > - mutex_lock(&hdcp->mutex); > - hdcp->cpu_transcoder = cpu_transcoder; > - hdcp->port_data.fw_tc = intel_get_mei_fw_tc(cpu_transcoder); > - mutex_unlock(&hdcp->mutex); > - } > -} > - > static inline int initialize_hdcp_port_data(struct intel_connector *connector, > const struct intel_hdcp_shim *shim) > { > @@ -1959,8 +1942,10 @@ int intel_hdcp_init(struct intel_connector *connector, > return 0; > } > > -int intel_hdcp_enable(struct intel_connector *connector, u8 content_type) > +int intel_hdcp_enable(struct intel_connector *connector, > + enum transcoder cpu_transcoder, u8 content_type) > { > + struct drm_i915_private *dev_priv = to_i915(connector->base.dev); > struct intel_hdcp *hdcp = &connector->hdcp; > unsigned long check_link_interval = DRM_HDCP_CHECK_PERIOD_MS; > int ret = -EINVAL; > @@ -1972,6 +1957,11 @@ int intel_hdcp_enable(struct intel_connector *connector, u8 content_type) > WARN_ON(hdcp->value == DRM_MODE_CONTENT_PROTECTION_ENABLED); > hdcp->content_type = content_type; > > + if (INTEL_GEN(dev_priv) >= 12) { > + hdcp->cpu_transcoder = cpu_transcoder; > + hdcp->port_data.fw_tc = intel_get_mei_fw_tc(cpu_transcoder); > + } > + > /* > * Considering that HDCP2.2 is more secure than HDCP1.4, If the setup > * is capable of HDCP2.2, it is preferred to use HDCP2.2. > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.h b/drivers/gpu/drm/i915/display/intel_hdcp.h > index 41c1053d9e38..f3c3272e712a 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdcp.h > +++ b/drivers/gpu/drm/i915/display/intel_hdcp.h > @@ -21,11 +21,10 @@ enum transcoder; > void intel_hdcp_atomic_check(struct drm_connector *connector, > struct drm_connector_state *old_state, > struct drm_connector_state *new_state); > -void intel_hdcp_transcoder_config(struct intel_connector *connector, > - enum transcoder cpu_transcoder); > int intel_hdcp_init(struct intel_connector *connector, > const struct intel_hdcp_shim *hdcp_shim); > -int intel_hdcp_enable(struct intel_connector *connector, u8 content_type); > +int intel_hdcp_enable(struct intel_connector *connector, > + enum transcoder cpu_transcoder, u8 content_type); > int intel_hdcp_disable(struct intel_connector *connector); > bool is_hdcp_supported(struct drm_i915_private *dev_priv, enum port port); > bool intel_hdcp_capable(struct intel_connector *connector); > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c > index 29a174af5314..a89a09b25260 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdmi.c > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c > @@ -2490,9 +2490,6 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder, > return -EINVAL; > } > > - intel_hdcp_transcoder_config(intel_hdmi->attached_connector, > - pipe_config->cpu_transcoder); > - > return 0; > } > > -- > 2.23.0 > _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx