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

Guang Bai guang.bai at intel.com
Mon Oct 29 17:12:46 UTC 2018


On Tue, 23 Oct 2018 17:14:34 +0800
Chris Chiu <chiu at endlessm.com> wrote:

> 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
> 
Sorry...was distracted by other dev taks...will get update ASAP.
-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