[Intel-gfx] [PATCH] drm/i915: Fix the HDMI hot plug disconnection failure (v2)

Chris Chiu chiu at endlessm.com
Tue Oct 23 09:14:34 UTC 2018


On Thu, Oct 11, 2018 at 2:04 AM Guang Bai <guang.bai at intel.com> wrote:

> 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
>

Gentle ping. Any good news on this?

Chris


> >
> > >
> > > 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/intel-gfx/attachments/20181023/b6638ee3/attachment.html>


More information about the Intel-gfx mailing list