Message ID | 20191204180549.1267-2-ville.syrjala@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/i915: Cleanups around intel_attached_encoder() & co. | expand |
On 2019-12-04 at 20:05:41 +0200, Ville Syrjala wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > 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@intel.com> > Cc: Jani Nikula <jani.nikula@intel.com> > Cc: Uma Shankar <uma.shankar@intel.com> > Fixes: 39e2df090c3c ("drm/i915/hdcp: update current transcoder into intel_hdcp") > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Ramalingam C <ramalingam.c@intel.com> > --- > 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 >
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; }