diff mbox

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

Message ID 20180322154707.22103-1-ville.syrjala@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ville Syrjälä March 22, 2018, 3:47 p.m. UTC
From: Ville Syrjälä <ville.syrjala@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@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@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(-)

Comments

Sharma, Shashank March 22, 2018, 4:07 p.m. UTC | #1
On 3/22/2018 9:17 PM, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@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@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@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@intel.com>

Regards
Shashank
Ville Syrjälä March 23, 2018, 3:24 p.m. UTC | #2
On Thu, Mar 22, 2018 at 09:37:43PM +0530, Sharma, Shashank wrote:
> 
> On 3/22/2018 9:17 PM, Ville Syrjala wrote:
> > From: Ville Syrjälä <ville.syrjala@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@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@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@intel.com>

Thanks. Pushed to dinq.
diff mbox

Patch

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)