Message ID | cdaf9e32cc4880c46e120933438c37b4d87be12e.1735568047.git.jani.nikula@intel.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | drm/i915/display: handle hdmi connector init failures, and no HDMI/DP cases | expand |
On 12/30/2024 7:44 PM, Jani Nikula wrote: > Propagate errors from intel_hdmi_init_connector() to be able to handle > them at callers. This is similar to intel_dp_init_connector(). > > Cc: Sergey Senozhatsky <senozhatsky@chromium.org> > Cc: Ville Syrjala <ville.syrjala@linux.intel.com> > Reported-and-tested-by: Sergey Senozhatsky <senozhatsky@chromium.org> > Closes: https://lore.kernel.org/r/20241031105145.2140590-1-senozhatsky@chromium.org > Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org> > Signed-off-by: Jani Nikula <jani.nikula@intel.com> > --- > drivers/gpu/drm/i915/display/intel_hdmi.c | 10 ++++++---- > drivers/gpu/drm/i915/display/intel_hdmi.h | 2 +- > 2 files changed, 7 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c > index f7b1768b279c..ed29dd0ccef0 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdmi.c > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c > @@ -3039,7 +3039,7 @@ void intel_infoframe_init(struct intel_digital_port *dig_port) > } > } > > -void intel_hdmi_init_connector(struct intel_digital_port *dig_port, > +bool intel_hdmi_init_connector(struct intel_digital_port *dig_port, > struct intel_connector *intel_connector) > { > struct intel_display *display = to_intel_display(dig_port); > @@ -3056,17 +3056,17 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port, > intel_encoder->base.base.id, intel_encoder->base.name); > > if (DISPLAY_VER(display) < 12 && drm_WARN_ON(dev, port == PORT_A)) > - return; > + return false; > > if (drm_WARN(dev, dig_port->max_lanes < 4, > "Not enough lanes (%d) for HDMI on [ENCODER:%d:%s]\n", > dig_port->max_lanes, intel_encoder->base.base.id, > intel_encoder->base.name)) > - return; > + return false; > > ddc_pin = intel_hdmi_ddc_pin(intel_encoder); > if (!ddc_pin) > - return; > + return false; > > drm_connector_init_with_ddc(dev, connector, > &intel_hdmi_connector_funcs, drm_connector_init_with_ddc() function has return values, these should also be handled here. > @@ -3111,6 +3111,8 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port, > &conn_info); > if (!intel_hdmi->cec_notifier) > drm_dbg_kms(display->drm, "CEC notifier get failed\n"); > + > + return true; > } > > /* > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.h b/drivers/gpu/drm/i915/display/intel_hdmi.h > index 466f48df8a74..38deaeb302a2 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdmi.h > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.h > @@ -22,7 +22,7 @@ struct intel_encoder; > struct intel_hdmi; > union hdmi_infoframe; > > -void intel_hdmi_init_connector(struct intel_digital_port *dig_port, > +bool intel_hdmi_init_connector(struct intel_digital_port *dig_port, > struct intel_connector *intel_connector); > bool intel_hdmi_compute_has_hdmi_sink(struct intel_encoder *encoder, > const struct intel_crtc_state *crtc_state,
On Tue, 31 Dec 2024, "Vodapalli, Ravi Kumar" <ravi.kumar.vodapalli@intel.com> wrote: > On 12/30/2024 7:44 PM, Jani Nikula wrote: >> Propagate errors from intel_hdmi_init_connector() to be able to handle >> them at callers. This is similar to intel_dp_init_connector(). >> >> Cc: Sergey Senozhatsky <senozhatsky@chromium.org> >> Cc: Ville Syrjala <ville.syrjala@linux.intel.com> >> Reported-and-tested-by: Sergey Senozhatsky <senozhatsky@chromium.org> >> Closes: https://lore.kernel.org/r/20241031105145.2140590-1-senozhatsky@chromium.org >> Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org> >> Signed-off-by: Jani Nikula <jani.nikula@intel.com> >> --- >> drivers/gpu/drm/i915/display/intel_hdmi.c | 10 ++++++---- >> drivers/gpu/drm/i915/display/intel_hdmi.h | 2 +- >> 2 files changed, 7 insertions(+), 5 deletions(-) >> >> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c >> index f7b1768b279c..ed29dd0ccef0 100644 >> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c >> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c >> @@ -3039,7 +3039,7 @@ void intel_infoframe_init(struct intel_digital_port *dig_port) >> } >> } >> >> -void intel_hdmi_init_connector(struct intel_digital_port *dig_port, >> +bool intel_hdmi_init_connector(struct intel_digital_port *dig_port, >> struct intel_connector *intel_connector) >> { >> struct intel_display *display = to_intel_display(dig_port); >> @@ -3056,17 +3056,17 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port, >> intel_encoder->base.base.id, intel_encoder->base.name); >> >> if (DISPLAY_VER(display) < 12 && drm_WARN_ON(dev, port == PORT_A)) >> - return; >> + return false; >> >> if (drm_WARN(dev, dig_port->max_lanes < 4, >> "Not enough lanes (%d) for HDMI on [ENCODER:%d:%s]\n", >> dig_port->max_lanes, intel_encoder->base.base.id, >> intel_encoder->base.name)) >> - return; >> + return false; >> >> ddc_pin = intel_hdmi_ddc_pin(intel_encoder); >> if (!ddc_pin) >> - return; >> + return false; >> >> drm_connector_init_with_ddc(dev, connector, >> &intel_hdmi_connector_funcs, > > drm_connector_init_with_ddc() function has return values, these should > also be handled here. It's going to need to be a separate patch. BR, Jani. > >> @@ -3111,6 +3111,8 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port, >> &conn_info); >> if (!intel_hdmi->cec_notifier) >> drm_dbg_kms(display->drm, "CEC notifier get failed\n"); >> + >> + return true; >> } >> >> /* >> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.h b/drivers/gpu/drm/i915/display/intel_hdmi.h >> index 466f48df8a74..38deaeb302a2 100644 >> --- a/drivers/gpu/drm/i915/display/intel_hdmi.h >> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.h >> @@ -22,7 +22,7 @@ struct intel_encoder; >> struct intel_hdmi; >> union hdmi_infoframe; >> >> -void intel_hdmi_init_connector(struct intel_digital_port *dig_port, >> +bool intel_hdmi_init_connector(struct intel_digital_port *dig_port, >> struct intel_connector *intel_connector); >> bool intel_hdmi_compute_has_hdmi_sink(struct intel_encoder *encoder, >> const struct intel_crtc_state *crtc_state, >
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c index f7b1768b279c..ed29dd0ccef0 100644 --- a/drivers/gpu/drm/i915/display/intel_hdmi.c +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c @@ -3039,7 +3039,7 @@ void intel_infoframe_init(struct intel_digital_port *dig_port) } } -void intel_hdmi_init_connector(struct intel_digital_port *dig_port, +bool intel_hdmi_init_connector(struct intel_digital_port *dig_port, struct intel_connector *intel_connector) { struct intel_display *display = to_intel_display(dig_port); @@ -3056,17 +3056,17 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port, intel_encoder->base.base.id, intel_encoder->base.name); if (DISPLAY_VER(display) < 12 && drm_WARN_ON(dev, port == PORT_A)) - return; + return false; if (drm_WARN(dev, dig_port->max_lanes < 4, "Not enough lanes (%d) for HDMI on [ENCODER:%d:%s]\n", dig_port->max_lanes, intel_encoder->base.base.id, intel_encoder->base.name)) - return; + return false; ddc_pin = intel_hdmi_ddc_pin(intel_encoder); if (!ddc_pin) - return; + return false; drm_connector_init_with_ddc(dev, connector, &intel_hdmi_connector_funcs, @@ -3111,6 +3111,8 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port, &conn_info); if (!intel_hdmi->cec_notifier) drm_dbg_kms(display->drm, "CEC notifier get failed\n"); + + return true; } /* diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.h b/drivers/gpu/drm/i915/display/intel_hdmi.h index 466f48df8a74..38deaeb302a2 100644 --- a/drivers/gpu/drm/i915/display/intel_hdmi.h +++ b/drivers/gpu/drm/i915/display/intel_hdmi.h @@ -22,7 +22,7 @@ struct intel_encoder; struct intel_hdmi; union hdmi_infoframe; -void intel_hdmi_init_connector(struct intel_digital_port *dig_port, +bool intel_hdmi_init_connector(struct intel_digital_port *dig_port, struct intel_connector *intel_connector); bool intel_hdmi_compute_has_hdmi_sink(struct intel_encoder *encoder, const struct intel_crtc_state *crtc_state,