Linux ARM-MSM sub-architecture
 help / color / mirror / Atom feed
From: Sean Paul <seanpaul@chromium.org>
To: Archit Taneja <architt@codeaurora.org>
Cc: linux-arm-msm <linux-arm-msm@vger.kernel.org>,
	dri-devel <dri-devel@lists.freedesktop.org>,
	Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Subject: Re: [PATCH] drm/bridge: adv7511: Reset registers on hotplug
Date: Mon, 9 Jul 2018 12:40:50 -0400	[thread overview]
Message-ID: <20180709164050.GB20359@art_vandelay> (raw)
In-Reply-To: <07f5b6f4-097d-c2e7-ad2d-d0a46e5e2771@codeaurora.org>

On Wed, Jul 04, 2018 at 06:53:02PM +0530, Archit Taneja wrote:
> 
> 
> On Wednesday 04 July 2018 12:28 AM, Rob Clark wrote:
> > On Tue, Jul 3, 2018 at 12:56 PM, Sean Paul <seanpaul@chromium.org> wrote:
> > > The bridge loses its hw state when the cable is unplugged. If we detect
> > > this case in the hpd handler, reset its state.
> > > 
> > > Reported-by: Rob Clark <robdclark@gmail.com>
> > > Signed-off-by: Sean Paul <seanpaul@chromium.org>
> > 
> > Tested-by: Rob Clark <robdclark@gmail.com>
> > 
> > > ---
> > > This is the follow-up to "drm/msm: Disable mdp5 crtc when there are no
> > > active planes". I incorrectly assumed the modeset was required from the
> > > msm side, but Rob pointed out that he thought it might be a bridge
> > > issue.
> > 
> > To elaborate, this is an atomic userspace (weston), when it sees the
> > display disconnected, it removes the planes from the CRTC but does not
> > disable the CRTC.  So drm/msm sets up the LM to scanout a solid color,
> > and leaves the encoder and dsi cranking along happily.  When
> > replugging the display, the atomic helpers see the CRTC is still
> > active and (correctly) doesn't do a full modeset.  So the bridge is
> > not re-configured/re-enabled.
> 
> The adv7511 connector's detect() op should have re-configured the
> registers. I'm assuming it was never called after the cable is
> plugged in again in the wetson usecase?

Right. detect() isn't guaranteed to be called on connection (it just usually
is).

> 
> With this patch, in the case of fb emulation/X, I'm wondering if
> we will end up trying to re-enable ADV7511 twice. First, in the new code
> in adv7511_hpd_work(), and later in adv7511_detect() (i.e, the
> connector's detect op).
> 
> I'm guessing the 'hpd' variable in the check in adv7511_detect() below
> should ideally be false, and avoid us trying to configure the registers
> again, but I'm not entirely sure.

It's entirely possible to call detect() multiple times per connection
(ie, run modetest a bunch), so that hpd check is pretty critical for even
non-hotplug cases.

> 
> if (status == connector_status_connected && hpd && adv7511->powered) {
> 	regcache_mark_dirty(adv7511->regmap);
> 	...
> 
> In any case:
> 
> Reviewed-by: Archit Taneja <architt@codeaurora.org>

Thanks for your review, I'll apply to -misc-fixes.

Sean

> 
> > 
> > Arguably this perhaps isn't what weston *wanted* to do, but in the end
> > the bug is in the bridge.
> > 
> > We could possibly set the connector link_status to BAD as an
> > alternative.  But at least the build of weston I'm using atm doesn't
> > handle the link_status propery, this approach requires each atomic
> > userspace to handle this case.  Compared to Sean's approach which is
> > transparent to userspace, which seems attractive.
> > 
> > BR,
> > -R
> > 
> > > 
> > >   drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 12 ++++++++++++
> > >   1 file changed, 12 insertions(+)
> > > 
> > > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > index 73021b388e12..dd3ff2f2cdce 100644
> > > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > @@ -429,6 +429,18 @@ static void adv7511_hpd_work(struct work_struct *work)
> > >          else
> > >                  status = connector_status_disconnected;
> > > 
> > > +       /*
> > > +        * The bridge resets its registers on unplug. So when we get a plug
> > > +        * event and we're already supposed to be powered, cycle the bridge to
> > > +        * restore its state.
> > > +        */
> > > +       if (status == connector_status_connected &&
> > > +           adv7511->connector.status == connector_status_disconnected &&
> > > +           adv7511->powered) {
> > > +               regcache_mark_dirty(adv7511->regmap);
> > > +               adv7511_power_on(adv7511);
> > > +       }
> > > +
> > >          if (adv7511->connector.status != status) {
> > >                  adv7511->connector.status = status;
> > >                  if (status == connector_status_disconnected)
> > > --
> > > Sean Paul, Software Engineer, Google / Chromium OS
> > > 
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > 

-- 
Sean Paul, Software Engineer, Google / Chromium OS
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

      parent reply	other threads:[~2018-07-09 16:40 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-03 16:56 [PATCH] drm/bridge: adv7511: Reset registers on hotplug Sean Paul
2018-07-03 18:58 ` Rob Clark
2018-07-03 19:03   ` Sean Paul
2018-07-04 13:23   ` Archit Taneja
2018-07-04 14:06     ` Rob Clark
2018-07-04 14:15       ` Daniel Vetter
2018-07-04 14:53         ` Rob Clark
2018-07-09 16:40     ` Sean Paul [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180709164050.GB20359@art_vandelay \
    --to=seanpaul@chromium.org \
    --cc=Laurent.pinchart@ideasonboard.com \
    --cc=architt@codeaurora.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=linux-arm-msm@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox