[Intel-gfx] [PATCH v3] drm/i915: Don't spew errors when resetting HDMI scrambling/bit clock ratio fails

Sharma, Shashank shashank.sharma at intel.com
Thu Mar 22 16:07:43 UTC 2018


On 3/22/2018 9:17 PM, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> When we're disabling the HDMI link we try to reset the scrambling and
> TMDS bit clock ratio back to the default values. This will fail if the
> sink has already been disconnected. Thus we should not print an error
> message when resetting the scrambling/TMDS bit clock ratio fail during
> disable. During enable we do want the error, and during disable we may
> still want to know what happended for debug purposes so let's use
> DRM_DEBUG_KMS() there.
>
> v2: Remember them consts
> v3: Go back to just one function and print the errors/debugs
>      from callers (Shashank)
>
> Cc: Shashank Sharma <shashank.sharma at intel.com>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105644
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105655
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
>   drivers/gpu/drm/i915/intel_ddi.c  | 19 ++++++++++++-------
>   drivers/gpu/drm/i915/intel_drv.h  |  2 +-
>   drivers/gpu/drm/i915/intel_hdmi.c | 40 ++++++++++++++++-----------------------
>   3 files changed, 29 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index 8c2d778560f0..c449619427da 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -2424,12 +2424,14 @@ static void intel_enable_ddi_hdmi(struct intel_encoder *encoder,
>   {
>   	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
>   	struct intel_digital_port *dig_port = enc_to_dig_port(&encoder->base);
> +	struct drm_connector *connector = conn_state->connector;
>   	enum port port = encoder->port;
>   
> -	intel_hdmi_handle_sink_scrambling(encoder,
> -					  conn_state->connector,
> -					  crtc_state->hdmi_high_tmds_clock_ratio,
> -					  crtc_state->hdmi_scrambling);
> +	if (!intel_hdmi_handle_sink_scrambling(encoder, connector,
> +					       crtc_state->hdmi_high_tmds_clock_ratio,
> +					       crtc_state->hdmi_scrambling))
> +		DRM_ERROR("[CONNECTOR:%d:%s] Failed to configure sink scrambling/TMDS bit clock ratio\n",
> +			  connector->base.id, connector->name);
>   
>   	/* Display WA #1143: skl,kbl,cfl */
>   	if (IS_GEN9_BC(dev_priv)) {
> @@ -2520,13 +2522,16 @@ static void intel_disable_ddi_hdmi(struct intel_encoder *encoder,
>   				   const struct intel_crtc_state *old_crtc_state,
>   				   const struct drm_connector_state *old_conn_state)
>   {
> +	struct drm_connector *connector = old_conn_state->connector;
> +
>   	if (old_crtc_state->has_audio)
>   		intel_audio_codec_disable(encoder,
>   					  old_crtc_state, old_conn_state);
>   
> -	intel_hdmi_handle_sink_scrambling(encoder,
> -					  old_conn_state->connector,
> -					  false, false);
> +	if (!intel_hdmi_handle_sink_scrambling(encoder, connector,
> +					       false, false))
> +		DRM_DEBUG_KMS("[CONNECTOR:%d:%s] Failed to reset sink scrambling/TMDS bit clock ratio\n",
> +			      connector->base.id, connector->name);
>   }
>   
>   static void intel_disable_ddi(struct intel_encoder *encoder,
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index a215aa78b0be..6e5c0f77b036 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1783,7 +1783,7 @@ struct intel_hdmi *enc_to_intel_hdmi(struct drm_encoder *encoder);
>   bool intel_hdmi_compute_config(struct intel_encoder *encoder,
>   			       struct intel_crtc_state *pipe_config,
>   			       struct drm_connector_state *conn_state);
> -void intel_hdmi_handle_sink_scrambling(struct intel_encoder *intel_encoder,
> +bool intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder,
>   				       struct drm_connector *connector,
>   				       bool high_tmds_clock_ratio,
>   				       bool scrambling);
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index 1baef4ac7ecb..ee929f31f7db 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -2082,41 +2082,33 @@ intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *c
>    * it enables scrambling. This should be called before enabling the HDMI
>    * 2.0 port, as the sink can choose to disable the scrambling if it doesn't
>    * detect a scrambled clock within 100 ms.
> + *
> + * Returns:
> + * True on success, false on failure.
>    */
> -void intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder,
> +bool intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder,
>   				       struct drm_connector *connector,
>   				       bool high_tmds_clock_ratio,
>   				       bool scrambling)
>   {
> +	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
>   	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base);
> -	struct drm_i915_private *dev_priv = connector->dev->dev_private;
>   	struct drm_scrambling *sink_scrambling =
> -				&connector->display_info.hdmi.scdc.scrambling;
> -	struct i2c_adapter *adptr = intel_gmbus_get_adapter(dev_priv,
> -							   intel_hdmi->ddc_bus);
> -	bool ret;
> +		&connector->display_info.hdmi.scdc.scrambling;
> +	struct i2c_adapter *adapter =
> +		intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
>   
>   	if (!sink_scrambling->supported)
> -		return;
> -
> -	DRM_DEBUG_KMS("Setting sink scrambling for enc:%s connector:%s\n",
> -		      encoder->base.name, connector->name);
> +		return true;
>   
> -	/* Set TMDS bit clock ratio to 1/40 or 1/10 */
> -	ret = drm_scdc_set_high_tmds_clock_ratio(adptr, high_tmds_clock_ratio);
> -	if (!ret) {
> -		DRM_ERROR("Set TMDS ratio failed\n");
> -		return;
> -	}
> -
> -	/* Enable/disable sink scrambling */
> -	ret = drm_scdc_set_scrambling(adptr, scrambling);
> -	if (!ret) {
> -		DRM_ERROR("Set sink scrambling failed\n");
> -		return;
> -	}
> +	DRM_DEBUG_KMS("[CONNECTOR:%d:%s] scrambling=%s, TMDS bit clock ratio=1/%d\n",
> +		      connector->base.id, connector->name,
> +		      yesno(scrambling), high_tmds_clock_ratio ? 40 : 10);
>   
> -	DRM_DEBUG_KMS("sink scrambling handled\n");
> +	/* Set TMDS bit clock ratio to 1/40 or 1/10, and enable/disable scrambling */
> +	return drm_scdc_set_high_tmds_clock_ratio(adapter,
> +						  high_tmds_clock_ratio) &&
> +		drm_scdc_set_scrambling(adapter, scrambling);
>   }
>   
>   static u8 chv_port_to_ddc_pin(struct drm_i915_private *dev_priv, enum port port)

Looks good to me.

Reviewed-by: Shashank Sharma <shashank.sharma at intel.com>

Regards
Shashank



More information about the Intel-gfx mailing list