Message ID | 1441373176-22302-7-git-send-email-sonika.jindal@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Nak: I don't believe we need this... Actually I believe we need the opposite... we need to enable HPD on port A for eDP errors handling... On Fri, Sep 4, 2015 at 6:38 AM Sonika Jindal <sonika.jindal@intel.com> wrote: > From: Durgadoss R <durgadoss.r@intel.com> > > Currently, HDMI hotplug with eDP as local panel is failing > because the HDMI hpd is detected as a long hpd for eDP; and is > thus rightfully ignored. But, it should really be handled as > an interrupt on port B for HDMI (due to BXT A1 platform having > HPD pins A and B swapped). This patch sets the irq_port[PORT_A] > to NULL in case eDP is on port A so that irq handler does not > treat it as a 'dig_port' interrupt. > > Signed-off-by: Durgadoss R <durgadoss.r@intel.com> > --- > drivers/gpu/drm/i915/intel_ddi.c | 15 ++++++++++----- > 1 file changed, 10 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_ddi.c > b/drivers/gpu/drm/i915/intel_ddi.c > index 4823184..fec51df 100644 > --- a/drivers/gpu/drm/i915/intel_ddi.c > +++ b/drivers/gpu/drm/i915/intel_ddi.c > @@ -3218,15 +3218,20 @@ void intel_ddi_init(struct drm_device *dev, enum > port port) > goto err; > > intel_dig_port->hpd_pulse = intel_dp_hpd_pulse; > + dev_priv->hotplug.irq_port[port] = intel_dig_port; > /* > * On BXT A0/A1, sw needs to activate DDIA HPD logic and > * interrupts to check the external panel connection. > + * If eDP is connected on port A, set irq_port to NULL > + * so that we do not assume an interrupt here as a > + * 'dig_port' interrupt. > */ > - if (IS_BROXTON(dev_priv) && (INTEL_REVID(dev) < > BXT_REVID_B0) > - && port == PORT_B) > - dev_priv->hotplug.irq_port[PORT_A] = > intel_dig_port; > - else > - dev_priv->hotplug.irq_port[port] = intel_dig_port; > + if (IS_BROXTON(dev) && (INTEL_REVID(dev) < BXT_REVID_B0)) { > + if (port == PORT_B) > + dev_priv->hotplug.irq_port[PORT_A] = > intel_dig_port; > + else if (intel_encoder->type == INTEL_OUTPUT_EDP) > + dev_priv->hotplug.irq_port[port] = NULL; > + } > } > > /* In theory we don't need the encoder->type check, but leave it > just in > -- > 1.7.10.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx >
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c index 4823184..fec51df 100644 --- a/drivers/gpu/drm/i915/intel_ddi.c +++ b/drivers/gpu/drm/i915/intel_ddi.c @@ -3218,15 +3218,20 @@ void intel_ddi_init(struct drm_device *dev, enum port port) goto err; intel_dig_port->hpd_pulse = intel_dp_hpd_pulse; + dev_priv->hotplug.irq_port[port] = intel_dig_port; /* * On BXT A0/A1, sw needs to activate DDIA HPD logic and * interrupts to check the external panel connection. + * If eDP is connected on port A, set irq_port to NULL + * so that we do not assume an interrupt here as a + * 'dig_port' interrupt. */ - if (IS_BROXTON(dev_priv) && (INTEL_REVID(dev) < BXT_REVID_B0) - && port == PORT_B) - dev_priv->hotplug.irq_port[PORT_A] = intel_dig_port; - else - dev_priv->hotplug.irq_port[port] = intel_dig_port; + if (IS_BROXTON(dev) && (INTEL_REVID(dev) < BXT_REVID_B0)) { + if (port == PORT_B) + dev_priv->hotplug.irq_port[PORT_A] = intel_dig_port; + else if (intel_encoder->type == INTEL_OUTPUT_EDP) + dev_priv->hotplug.irq_port[port] = NULL; + } } /* In theory we don't need the encoder->type check, but leave it just in