From: Daniel Vetter <daniel@ffwll.ch>
To: Shashank Sharma <contactshashanksharma@gmail.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 3/3] drm/i915: Read HDMI EDID only when required
Date: Wed, 1 Jul 2015 14:56:34 +0200 [thread overview]
Message-ID: <20150701125634.GE23343@phenom.ffwll.local> (raw)
In-Reply-To: <CAFfO74siSDSG8hMsrXPNRQU5TCHVQqZ2KkzVKtaTPR5x8FQJxw@mail.gmail.com>
On Tue, Jun 30, 2015 at 09:49:57PM +0530, Shashank Sharma wrote:
> > Userspace always sets force. Are you sure this actually improves anything?
> Yes we do. We have had this code for commercial projects, and that's really
> important to have proper interrupt handling as well as to avoid race
> condition between multiple HDMI detects from interrupt handler and
> userspace detect calls. This is a must for HDMI compliance also.
There's no race, we have locks for this. And we already have a little bit
of edid caching, and you're code won't add more caching for the force =
true case. Which is why I wondered whether you've really seen improvements
with this on latest upstream, and not just an older android tree.
> Actually the plan is to use this force for GEN < 6 HW only, where the
> hotplug doesn't work reliably (I remember our last conversation on some old
> HW which doesn't support HPD properly). For vlv+, we can (will) use only
> the cached EDID.
Ok, once more: HDMI hpd is unreliable everywhere. I have a gen7 here which
is half-busted it seems, and we've found examples for every single
platform that supports hdmi out there. The problem isn't necessarily spec
compliant HDMI sinks, but all the other crap ppl like to plug in.
Yes this means we'll not be spec compliant, but if we have reality vs.
spec, reality wins. At least in upstream.
> > Also the goal should be to keep things cache for a few calls from
> > userspace (since often it pokes a few times in a row unfortuantely), for
> > which we need a proper timeout to clear the edid again.
>
> Can you please let us know why ? Why do we need to clear this EDID caching
> ? We should clear it only in the next hot-unplug, and maintain this cached
> EDID for all userspace detect operations. I believe as long as we have the
> state machine maintained, we need not to clear it.
hotplug is not reliable, at least not outside of labs and validation
testers. And your code here throws the cached edid away every time force =
true is set, which is pretty much always. At least on upstream.
The only place where we don't set force is in the poll worker, and that's
only run when we have a hpd storm.
-Daniel
>
> >-Daniel
>
> Regards
> Shashank
>
> On Tue, Jun 30, 2015 at 4:36 PM, Daniel Vetter <daniel@ffwll.ch> wrote:
>
> > On Tue, Jun 30, 2015 at 11:13:58AM +0530, Sonika Jindal wrote:
> > > From: Shashank Sharma <contactshashanksharma@gmail.com>
> > >
> > > This patch makes sure that the HDMI detect function
> > > reads EDID only when its forced to do it. All the other
> > > times, it uses the connector->detect_edid which was cached
> > > during hotplug handling in the hdmi_probe() function. As the
> > > probe function gets called before detect in the interrupt handler
> > > and handles the EDID cacheing part, its absolutely safe to assume
> > > that presence of EDID reflects monitor connected and viceversa.
> > >
> > > This will save us from many race conditions between hotplug/unplug
> > > detect call handler threads and userspace calls for the same.
> > > The previous patch in this patch series explains this in detail.
> > >
> > > Signed-off-by: Shashank Sharma <contactshashanksharma@gmail.com>
> > > ---
> > > drivers/gpu/drm/i915/intel_hdmi.c | 26 ++++++++++++++++++++------
> > > 1 file changed, 20 insertions(+), 6 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c
> > b/drivers/gpu/drm/i915/intel_hdmi.c
> > > index 064ddd8..1fb6919 100644
> > > --- a/drivers/gpu/drm/i915/intel_hdmi.c
> > > +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> > > @@ -1362,19 +1362,33 @@ static enum drm_connector_status
> > > intel_hdmi_detect(struct drm_connector *connector, bool force)
> > > {
> > > enum drm_connector_status status;
> > > + struct intel_connector *intel_connector =
> > > + to_intel_connector(connector);
> > >
> > > DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
> > > connector->base.id, connector->name);
> > > + /*
> > > + * There are many userspace calls which probe EDID from
> > > + * detect path. In case on multiple hotplug/unplug, these
> > > + * can cause race conditions while probing EDID. Also its
> > > + * waste of CPU cycles to read the EDID again and again
> > > + * unless there is a real hotplug.
> > > + * So until we are forced, check connector status
> > > + * based on availability of cached EDID. This will avoid many of
> > > + * these race conditions and timing problems.
> > > + */
> > > + if (force)
> >
> > Userspace always sets force. Are you sure this actually improves anything?
> > Also the goal should be to keep things cache for a few calls from
> > userspace (since often it pokes a few times in a row unfortuantely), for
> > which we need a proper timeout to clear the edid again.
> > -Daniel
> >
> > > + intel_hdmi_probe(intel_connector->encoder);
> > >
> > > - intel_hdmi_unset_edid(connector);
> > > -
> > > - if (intel_hdmi_set_edid(connector)) {
> > > + if (intel_connector->detect_edid) {
> > > struct intel_hdmi *intel_hdmi =
> > intel_attached_hdmi(connector);
> > > -
> > > - hdmi_to_dig_port(intel_hdmi)->base.type =
> > INTEL_OUTPUT_HDMI;
> > > status = connector_status_connected;
> > > - } else
> > > + hdmi_to_dig_port(intel_hdmi)->base.type =
> > INTEL_OUTPUT_HDMI;
> > > + DRM_DEBUG_DRIVER("hdmi status = connected\n");
> > > + } else {
> > > status = connector_status_disconnected;
> > > + DRM_DEBUG_DRIVER("hdmi status = disconnected\n");
> > > + }
> > >
> > > return status;
> > > }
> > > --
> > > 1.7.10.4
> > >
> > > _______________________________________________
> > > Intel-gfx mailing list
> > > Intel-gfx@lists.freedesktop.org
> > > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> >
> > --
> > Daniel Vetter
> > Software Engineer, Intel Corporation
> > http://blog.ffwll.ch
> >
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2015-07-01 12:53 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-30 5:43 [PATCH 1/3] drm/i915: add attached connector to hdmi container Sonika Jindal
2015-06-30 5:43 ` [PATCH 2/3] drm/i915: Add HDMI probe function Sonika Jindal
2015-06-30 5:43 ` [PATCH 3/3] drm/i915: Read HDMI EDID only when required Sonika Jindal
2015-06-30 11:06 ` Daniel Vetter
2015-06-30 16:19 ` Shashank Sharma
2015-07-01 12:56 ` Daniel Vetter [this message]
2015-07-02 2:54 ` Sharma, Shashank
2015-07-06 7:38 ` Daniel Vetter
2015-07-06 8:01 ` Jindal, Sonika
2015-07-01 13:28 ` shuang.he
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=20150701125634.GE23343@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=contactshashanksharma@gmail.com \
--cc=intel-gfx@lists.freedesktop.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