[Intel-gfx] [PATCH] drm/i915: Fix the HDMI hot plug disconnection failure (v2)
Guang Bai
guang.bai at intel.com
Wed Oct 10 17:52:43 UTC 2018
On Mon, 8 Oct 2018 08:56:20 -0700
Guang Bai <guang.bai at intel.com> wrote:
> On Mon, 8 Oct 2018 22:35:34 +0800
> Chris Chiu <chiu at endlessm.com> wrote:
>
> > Thanks! I have no problem with this patch.
>
> There are Fi.CI.BAT failures with the v2 (only with formatting fix
> added) while the previous patch had passing results.
> Now trying to identify why the failures happened with trybot
> Thanks,
> Guang
The tribot run my patch twice and passes the tests without any error
however I'm recommended to chase down root causes of Patchwork Fi.CI.BAT
test errors still - WIP on that.
Thanks,
Guang
>
> >
> > On Thu, Oct 4, 2018 at 2:08 AM Guang Bai <guang.bai at intel.com>
> > wrote:
> > > On some platforms, slowly unplugging (wiggling) the HDMI cable
> > > makes the kernel to believe the HDMI display still connected.
> > > This is because the HDMI DDC lines are disconnected sometimes
> > > later after the hot-plug interrupt triggered. Use the hot plug
> > > live states to honor HDMI hot plug status in addtion to access
> > > the DDC channels.
> > >
> > > v2: Fix the formatting issue
> > >
> > > Cc: Jani Nikula <jani.nikula at intel.com>
> > > Cc: Chris Chiu <chiu at endlessm.com>
> > > Signed-off-by: Guang Bai <guang.bai at intel.com>
> > > ---
> > > drivers/gpu/drm/i915/intel_hotplug.c | 32
> > > +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+),
> > > 3 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/intel_hotplug.c
> > > b/drivers/gpu/drm/i915/intel_hotplug.c
> > > index 648a13c..98ab1ab 100644
> > > --- a/drivers/gpu/drm/i915/intel_hotplug.c
> > > +++ b/drivers/gpu/drm/i915/intel_hotplug.c
> > > @@ -246,17 +246,43 @@ static void
> > > intel_hpd_irq_storm_reenable_work(struct work_struct *work)
> > > intel_runtime_pm_put(dev_priv);
> > > }
> > >
> > > +#define MAX_SHORT_PULSE_MS 100
> > > +#define PORT_CHECK_LOOP_COUNT 3
> > > +
> > > bool intel_encoder_hotplug(struct intel_encoder *encoder,
> > > struct intel_connector *connector)
> > > {
> > > struct drm_device *dev = connector->base.dev;
> > > - enum drm_connector_status old_status;
> > > + enum drm_connector_status old_status, new_status;
> > > + enum hpd_pin pin = encoder->hpd_pin;
> > > + struct drm_i915_private *dev_priv =
> > > to_i915(encoder->base.dev);
> > > + u32 count = 0;
> > >
> > > WARN_ON(!mutex_is_locked(&dev->mode_config.mutex));
> > > old_status = connector->base.status;
> > >
> > > - connector->base.status =
> > > - drm_helper_probe_detect(&connector->base, NULL,
> > > false);
> > > + /*
> > > + * Set HDMI connection status based on hot-plug live
> > > states and
> > > + * display probe results.
> > > + */
> > > + if ((encoder->type == INTEL_OUTPUT_HDMI ||
> > > + encoder->type == INTEL_OUTPUT_DDI) &&
> > > + dev_priv->hotplug.stats[pin].state == HPD_ENABLED) {
> > > + do {
> > > + new_status =
> > > connector_status_disconnected;
> > > + msleep(MAX_SHORT_PULSE_MS);
> > > +
> > > + if (intel_digital_port_connected(encoder))
> > > + new_status =
> > > drm_helper_probe_detect(&connector->base,
> > > +
> > > NULL, false);
> > > + if (new_status ==
> > > connector_status_connected)
> > > + break;
> > > + } while (++count <= PORT_CHECK_LOOP_COUNT);
> > > + connector->base.status = new_status;
> > > + } else {
> > > + connector->base.status =
> > > + drm_helper_probe_detect(&connector->base,
> > > NULL, false);
> > > + }
> > >
> > > if (old_status == connector->base.status)
> > > return false;
> > > --
> > > 2.7.4
> > >
> > >
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
More information about the Intel-gfx
mailing list