Message ID | e6f582986722bf3187ddceb8e31dfd9fa5fd1d66.1734099220.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 |
> -----Original Message----- > From: Nikula, Jani <jani.nikula@intel.com> > Sent: Friday, December 13, 2024 7:46 PM > To: intel-gfx@lists.freedesktop.org; intel-xe@lists.freedesktop.org > Cc: Nikula, Jani <jani.nikula@intel.com>; Sergey Senozhatsky > <senozhatsky@chromium.org>; Ville Syrjala <ville.syrjala@linux.intel.com>; > Kandpal, Suraj <suraj.kandpal@intel.com> > Subject: [PATCH v3 4/6] drm/i915/ddi: gracefully handle errors from > intel_ddi_init_hdmi_connector() > > Errors from intel_ddi_init_hdmi_connector() can just mean "there's no HDMI" > while we'll still want to continue with DP only. Handle the errors gracefully, > but don't propagate. Clear the hdmi_reg which is used as a proxy to indicate > the HDMI is initialized. > > v2: Gracefully handle but do not propagate > > 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> # v1 > Signed-off-by: Jani Nikula <jani.nikula@intel.com> LGTM, Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com> > --- > drivers/gpu/drm/i915/display/intel_ddi.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c > b/drivers/gpu/drm/i915/display/intel_ddi.c > index 21277cf8afef..2c4308506435 100644 > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > @@ -4757,7 +4757,16 @@ static int intel_ddi_init_hdmi_connector(struct > intel_digital_port *dig_port) > return -ENOMEM; > > dig_port->hdmi.hdmi_reg = DDI_BUF_CTL(port); > - intel_hdmi_init_connector(dig_port, connector); > + > + if (!intel_hdmi_init_connector(dig_port, connector)) { > + /* > + * HDMI connector init failures may just mean conflicting DDC > + * pins or not having enough lanes. Handle them gracefully, > but > + * don't fail the entire DDI init. > + */ > + dig_port->hdmi.hdmi_reg = INVALID_MMIO_REG; > + kfree(connector); > + } > > return 0; > } > -- > 2.39.5
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c index 21277cf8afef..2c4308506435 100644 --- a/drivers/gpu/drm/i915/display/intel_ddi.c +++ b/drivers/gpu/drm/i915/display/intel_ddi.c @@ -4757,7 +4757,16 @@ static int intel_ddi_init_hdmi_connector(struct intel_digital_port *dig_port) return -ENOMEM; dig_port->hdmi.hdmi_reg = DDI_BUF_CTL(port); - intel_hdmi_init_connector(dig_port, connector); + + if (!intel_hdmi_init_connector(dig_port, connector)) { + /* + * HDMI connector init failures may just mean conflicting DDC + * pins or not having enough lanes. Handle them gracefully, but + * don't fail the entire DDI init. + */ + dig_port->hdmi.hdmi_reg = INVALID_MMIO_REG; + kfree(connector); + } return 0; }