On Wed, 2018-10-10 at 20:15 +0300, Ville Syrjälä wrote: > On Wed, Oct 10, 2018 at 12:55:07AM +0000, Souza, Jose wrote: > > On Tue, 2018-10-02 at 23:35 +0300, Ville Syrjälä wrote: > > > On Tue, Oct 02, 2018 at 10:50:50AM -0700, José Roberto de Souza > > > wrote: > > > > Before enter in power saving states or before unload the driver > > > > spec states that display driver is required to to mark TC ports > > > > as > > > > safe so hardware can do the disconnection flow without wait for > > > > display driver handshake. > > > > When driver is resumed or loaded again, if the TC live state is > > > > still set as connected driver will mark again TC port as not > > > > safe > > > > as > > > > required by spec. > > > > > > > > BSpec: 2175 > > > > > > > > Cc: Paulo Zanoni <paulo.r.zanoni@xxxxxxxxx> > > > > Signed-off-by: José Roberto de Souza <jose.souza@xxxxxxxxx> > > > > --- > > > > drivers/gpu/drm/i915/i915_irq.c | 10 ++++++++++ > > > > 1 file changed, 10 insertions(+) > > > > > > > > diff --git a/drivers/gpu/drm/i915/i915_irq.c > > > > b/drivers/gpu/drm/i915/i915_irq.c > > > > index 2e242270e270..58616690f45f 100644 > > > > --- a/drivers/gpu/drm/i915/i915_irq.c > > > > +++ b/drivers/gpu/drm/i915/i915_irq.c > > > > @@ -3640,6 +3640,7 @@ static void gen11_irq_reset(struct > > > > drm_device > > > > *dev) > > > > { > > > > struct drm_i915_private *dev_priv = dev->dev_private; > > > > int pipe; > > > > + u32 val; > > > > > > > > I915_WRITE(GEN11_GFX_MSTR_IRQ, 0); > > > > POSTING_READ(GEN11_GFX_MSTR_IRQ); > > > > @@ -3661,6 +3662,15 @@ static void gen11_irq_reset(struct > > > > drm_device *dev) > > > > > > > > if (HAS_PCH_ICP(dev_priv)) > > > > GEN3_IRQ_RESET(SDE); > > > > + > > > > + /* > > > > + * Mark TC ports as safe so hardware can do the > > > > disconnect flow > > > > without > > > > + * wait for driver to do the handshake > > > > + */ > > > > + val = I915_READ(PORT_TX_DFLEXDPCSSS); > > > > + for (pipe = 0; pipe < 4; pipe++) > > > > + val &= ~(DP_PHY_MODE_STATUS_NOT_SAFE(pipe)); > > > > + I915_WRITE(PORT_TX_DFLEXDPCSSS, val); > > > > > > Why would we have to do this here? The driver should relinquish > > > control > > > if and when it has shut down the pipes etc. Sounds like a bug if > > > we're > > > hanging on when we have no need for the port. > > > > Right now we take control and only release it when port is > > disconnected. > > Disconnection is totally asynchronous. Someone could be using the > port/aux for anything when the disconnect irq happens. Presumably > bad things will happen if we just go and yank the control away > when someone is doing stuff. I believe even the spec tells us > to properly shut things down during the disconnect flow and make > sure eg. the aux power wells have been fully shut down before > relinquishing control. In my understanding at the point of the gen11_irq_reset() call all DDI DDI ports and aux channels are already off. > _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx