On Fri, Apr 11, 2014 at 01:23:43PM +0000, Sharma, Shashank wrote:
> Thanks for the comments, 
> Actually, we are not using live_status at all. 
> 
> The check for < gen6 is only for EDID caching. So if the HW is >= gen6 
> cache_edid.  
> Else do not cache EDID, so that we will not block any of the old HW, which 
> might not be HPD capable.

Oh, I've thought that this is incremental on top of something you already
have.
> 
> Does it sound ok now :) ?  

No. HPD is _NOT_ I repeat _NOT_ reliably. Not even on gen6+. live status
simply reflects the hpd pin, if either doesn't work, then neither does the
other one.

Nacked-with-prejudice-by: Daniel Vetter <daniel.vet...@ffwll.ch>

Cheers, Daniel

> 
> Regards
> Shashank 
> -----Original Message-----
> From: daniel.vet...@ffwll.ch [mailto:daniel.vet...@ffwll.ch] On Behalf Of 
> Daniel Vetter
> Sent: Friday, April 11, 2014 6:28 PM
> To: Sharma, Shashank
> Cc: C, Ramalingam; Wang, Quanxian; intel-gfx
> Subject: Re: [Intel-gfx] [PATCH 0/2] Optimization on intel HDMI detect and 
> get_modes
> 
> Please don't drop the mailing list when discussing patches.
> 
> And nope, conditioning this on gen6+ won't help at all, since I have a
> gen6 and gen7 machine here which don't have reliable hdmi live status.
> Afaik that is _really_ broken across the board and going with the fancy 
> invalidation scheme and delayed work items is the way forward.
> 
> Cheers, Daniel
> 
> On Fri, Apr 11, 2014 at 2:51 PM, Sharma, Shashank <shashank.sha...@intel.com> 
> wrote:
> > Hi Daniel,
> >
> > First of all, sorry for the delay in coming up with the new patch set. I 
> > got stuck with some commercial projects :) .
> >
> > There were few review comments what you gave for the previous optimization 
> > patch, those were:
> > 1.  This might break the old HWs. Few of them might not even be HPD 
> > capable, so its required to handle them.
> > 2.  Do not rely on the live_status check, as that HW is not yet proven.
> > And you recommended to have a WQ, which will invalidate the cached HDMI 
> > EDID after a timeout.
> >
> > I have written another patch, which is addressing both of the above 
> > comments, but doesn't use a WQ.
> >
> > Before sending this to ML, I wanted to have an opinion from you, if this 
> > qualifies the design you were expecting.
> > I will be really glad, if you can spare some time, and just have a top 
> > level view on the patch, and give your opinion.
> >
> > If you think that this is still not the way, and making a WQ is a better 
> > approach, I would gladly create a patch which applies that.
> > Or if you will prefer to have this reviewed in the mailing list only, 
> > please accept my apologies for direct contact, and just let me know so. I 
> > will publish this in ML.
> >
> > The patch is (It's also attached):
> >
> > From e7ec4e4827615c0ff3a4ddb020df35fdf1b0b82f Mon Sep 17 00:00:00 2001
> > From: Shashank Sharma <shashank.sha...@intel.com>
> > Date: Fri, 11 Apr 2014 18:02:50 +0530
> > Subject: [PATCH] drm/i915: Cache HDMI EDID for future reference
> >
> > This patch contains following changes:
> > 1.Cache HDMI EDID and optimize detect() calls, which are
> >   frequently called from userspace, causing un-necessary
> >   EDID reads.
> > 2.This cached EDID will be used for detection of the status of
> >   HDMI connector, for Non HPD detect() calls. HPD calls will update
> >   cached EDID.
> > 3.This optimization is kept for new HW's (Gen6 and +), so that It
> >   will not break old HWs who may not be even HPD capable.
> >
> > Signed-off-by: Shashank Sharma <shashank.sha...@intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_drv.h  |    1 +
> >  drivers/gpu/drm/i915/intel_hdmi.c |   28 ++++++++++++++++++++++++++--
> >  2 files changed, 27 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_drv.h 
> > b/drivers/gpu/drm/i915/intel_drv.h
> > index 42762b7..b7911df 100644
> > --- a/drivers/gpu/drm/i915/intel_drv.h
> > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > @@ -478,6 +478,7 @@ struct intel_hdmi {
> >                                 const void *frame, ssize_t len);
> >         void (*set_infoframes)(struct drm_encoder *encoder,
> >                                struct drm_display_mode 
> > *adjusted_mode);
> > +       struct edid *edid;
> >  };
> >
> >  #define DP_MAX_DOWNSTREAM_PORTS                0x10
> > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c 
> > b/drivers/gpu/drm/i915/intel_hdmi.c
> > index b0413e1..33550ca 100644
> > --- a/drivers/gpu/drm/i915/intel_hdmi.c
> > +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> > @@ -938,7 +938,7 @@ intel_hdmi_detect(struct drm_connector *connector, bool 
> > force)
> >                 hdmi_to_dig_port(intel_hdmi);
> >         struct intel_encoder *intel_encoder = &intel_dig_port->base;
> >         struct drm_i915_private *dev_priv = dev->dev_private;
> > -       struct edid *edid;
> > +       struct edid *edid = NULL;
> >         enum intel_display_power_domain power_domain;
> >         enum drm_connector_status status = 
> > connector_status_disconnected;
> >
> > @@ -948,6 +948,21 @@ intel_hdmi_detect(struct drm_connector *connector, 
> > bool force)
> >         power_domain = intel_display_port_power_domain(intel_encoder);
> >         intel_display_power_get(dev_priv, power_domain);
> >
> > +       /*
> > +       * Support EDID caching only for new architectures
> > +       * Let old architectures probe and force read EDID
> > +       */
> > +       if (INTEL_INFO(dev)->gen >= 6) {
> > +               if (force && intel_hdmi->edid &&
> > +                       (connector->status != connector_status_unknown)) {
> > +                       /* Optimize userspace query, read EDID only
> > +                       in case of a real hot plug */
> > +                       DRM_DEBUG_KMS("HDMI %s", intel_hdmi->edid ?
> > +                               "Connected" : "Disconnected");
> > +                       return connector->status;
> > +               }
> > +       }
> > +
> >         intel_hdmi->has_hdmi_sink = false;
> >         intel_hdmi->has_audio = false;
> >         intel_hdmi->rgb_quant_range_selectable = false; @@ -964,10 
> > +979,19 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
> >                         intel_hdmi->has_audio = 
> > drm_detect_monitor_audio(edid);
> >                         intel_hdmi->rgb_quant_range_selectable =
> >                                 drm_rgb_quant_range_selectable(edid);
> > +                       DRM_DEBUG_KMS("HDMI Connected\n");
> >                 }
> > -               kfree(edid);
> > +       } else {
> > +               /*
> > +               * Connector disconnected, free cached EDID
> > +               * kfree is NULL protected, so will work for < gen 6 also */
> > +               kfree(intel_hdmi->edid);
> > +               DRM_DEBUG_KMS("HDMI Disconnected\n");
> >         }
> >
> > +       /* Save latest EDID for further queries */
> > +       intel_hdmi->edid = edid;
> > +
> >         if (status == connector_status_connected) {
> >                 if (intel_hdmi->force_audio != HDMI_AUDIO_AUTO)
> >                         intel_hdmi->has_audio =
> > --
> > 1.7.10.4
> >
> >
> > -----Original Message-----
> > From: Wang, Quanxian
> > Sent: Thursday, April 10, 2014 4:12 PM
> > To: Sharma, Shashank; Daniel Vetter
> > Cc: intel-gfx@lists.freedesktop.org
> > Subject: RE: [Intel-gfx] [PATCH 0/2] Optimization on intel HDMI detect 
> > and get_modes
> >
> > Tizen-IVI has one feature will require hdmi edid cache. It will be happy to 
> > find your patch pushed into upstream tree.
> >
> > Regards
> >
> > Thanks
> >
> > Quanxian Wang
> >
> > -----Original Message-----
> > From: Intel-gfx [mailto:intel-gfx-boun...@lists.freedesktop.org] On 
> > Behalf Of Sharma, Shashank
> > Sent: Wednesday, April 09, 2014 12:20 PM
> > To: Wang, Quanxian; Daniel Vetter
> > Cc: intel-gfx@lists.freedesktop.org
> > Subject: Re: [Intel-gfx] [PATCH 0/2] Optimization on intel HDMI detect 
> > and get_modes
> >
> > Hello Quanxian Wang
> >
> > This patch is available and working on all MCG tree's (Main, R42B and R44B) 
> > We were trying to opensource this patch, but due to the dependency on 
> > live_status reg, we had to change the design.
> >
> > I was working on that, but couldn't finish the activity yet, Thanks 
> > for reminding me I will update soon. :)
> >
> > Regards
> > Shashank
> > -----Original Message-----
> > From: Wang, Quanxian
> > Sent: Wednesday, April 09, 2014 11:49 AM
> > To: Sharma, Shashank; Daniel Vetter
> > Cc: intel-gfx@lists.freedesktop.org
> > Subject: RE: [Intel-gfx] [PATCH 0/2] Optimization on intel HDMI detect 
> > and get_modes
> >
> > Hi, Sharma, Shashank
> >
> > Is there any following patches to make it happen?
> >
> > Thanks
> >
> > Regards
> >
> > Quanxian Wang
> >
> >>-----Original Message-----
> >>From: intel-gfx-boun...@lists.freedesktop.org
> >>[mailto:intel-gfx-boun...@lists.freedesktop.org] On Behalf Of Sharma, 
> >>Shashank
> >>Sent: Tuesday, January 14, 2014 1:20 AM
> >>To: Daniel Vetter
> >>Cc: intel-gfx@lists.freedesktop.org
> >>Subject: Re: [Intel-gfx] [PATCH 0/2] Optimization on intel HDMI detect 
> >>and get_modes
> >>
> >>Thanks again for this explanation Daniel.
> >>We will work on your suggestions and come up with a new patch.
> >>
> >>Regards
> >>Shashank  / Ramalingam
> >>-----Original Message-----
> >>From: daniel.vet...@ffwll.ch [mailto:daniel.vet...@ffwll.ch] On Behalf 
> >>Of Daniel Vetter
> >>Sent: Monday, January 13, 2014 6:57 PM
> >>To: Sharma, Shashank
> >>Cc: C, Ramalingam; intel-gfx@lists.freedesktop.org
> >>Subject: Re: [Intel-gfx] [PATCH 0/2] Optimization on intel HDMI detect 
> >>and get_modes
> >>
> >>On Mon, Jan 13, 2014 at 10:39 AM, Sharma, Shashank 
> >><shashank.sha...@intel.com> wrote:
> >>> Thanks a lot for your time, for reviewing the changes, and giving us 
> >>> some
> >>pointers.
> >>> Both me and Ramalingam are designing this together, and we discussed 
> >>> about
> >>these changes and your suggestions.
> >>> There are few things we would like to discuss about. Please correct 
> >>> us if some of
> >>our understanding is not proper.
> >>
> >>First something I've forgotten in the original mail: Overall your 
> >>patches look really nice and the commit messages and cover letter have been 
> >>excellent.
> >>Unfortunately you've run into one of the nastier cases of "reality 
> >>just wont agree with the spec" :(
> >>
> >>> Those two patches provide two solution.
> >>> 1. Support for soft HPD, and slow removal of HDMI (when the DDC 
> >>> channel can
> >>still get the EDID).
> >>> 2. Try to reduce the EDID reads over DDC channel for get connector 
> >>> and fill mode
> >>calls, by caching EDID, and using it until next HPD comes.
> >>>
> >>> Patch 2: Reduce the EDID read over DDC channel We are caching the 
> >>> EDID at every HPD up, on HDMI detect calls, and we are freeing it on 
> >>> subsequent
> >>HDMI disconnect calls.
> >>>
> >>> The design philosophy here is, to maintain a state machine of HDMI 
> >>> connector
> >>status, and differentiate between IOCTL detect calls and HPD detect calls.
> >>> If there is a detect() or get_modes() call due to any of the IOCTL, 
> >>> which makes
> >>sure that input variable force=1, we just use the cached EDID, to serve 
> >>this calls.
> >>> But if the detect call is coming from HPD work function, due to a 
> >>> HPD plug-out,
> >>we remove/invalidate the old cached EDID, and cache the new EDID, on 
> >>subsequent HDMI plug-in.
> >>> From here, the same state machine follows.
> >>>
> >>> Can you please let us know, why do you think that we should 
> >>> invalidate the
> >>cached EDID after 1-2 seconds ?
> >>
> >>Because there are machines out there where hpd never happens. So if 
> >>you keep onto the cached value forever userspace will never notice a 
> >>change in output configuration. Of course hotplug handling won't work, 
> >>but at least users can still manually probe outputs. By 
> >>unconditionally using the cached edid from ioctls you break this use 
> >>case. Yes, such machines are broken, but we need to keep them working 
> >>anyway.
> >>
> >>Also in my experience all machines are affected, we have examples 
> >>covering gm45, ilk, snb & ivb. We haven't seen a case for hsw/byt yet 
> >>since we don't rely on the hpd bits any more (and so won't see bug reports 
> >>any more).
> >>
> >>Generally if you use the hpd stuff your code must be designed under 
> >>the assumption that hpd is completely unreliably. We've seen anything 
> >>from random noise, flat-out not-working at all, stuck bits and 
> >>unstable hpd values that occasionally flip-flop. So you can't rely on it at 
> >>all.
> >>
> >>> Note: In this same patch, there is additional optimization, which 
> >>> you pointed out,
> >>where we check if the connector->status is same as live status.
> >>> This can be removed independently, as you suggested.
> >>
> >>Hm, where have I pointed this out? Some other mail on internal discussions?
> >>
> >>> About patch 1:
> >>> We have done some local experiments and we came to know that for VLV 
> >>> and
> >>HSW boards, we can rely on the live status, if we give it some time to 
> >>settle (~300ms).
> >>> Probably, we need to modify this patch, as you suggested, until it 
> >>> becomes
> >>handy to be used reliably. We are on it, and will send another patch soon.
> >>>
> >>> But if somehow we are able to get some consistent results from live 
> >>> status, do
> >>you think it would be worth accepting this change, so that it can 
> >>handle soft HPDs and automation testing.
> >>> Because I believe we will face this problem whenever we are trying 
> >>> to test
> >>something from automation, where the physical device is not removed, 
> >>and DDC channel is up always.
> >>
> >>It's very well possible that all the platforms you have, but 
> >>experience says that some OEM will horrible screw this up. At least 
> >>they've consistently botched this in the past on occasional machines.
> >>
> >>Now the ghost hdmi detection on slow removal is obviously not great, 
> >>but we can't use the hpd bits to fix this. One approach would be.
> >>1. Upon hpd interrupt do an immediate probe of the connector. This way 
> >>we'll have good userspace experience if the unplug happens quickly and the 
> >>hw works.
> >>2. Re-probe with a 1s delay to catch slow-uplugs. The current output 
> >>probing helpers are clever enough already that if a state-change 
> >>happens to be detected a uevent will be generate, irrespective of the 
> >>source of the detect call (i.e. hpd, kernel poll or ioctl/sysfs).
> >>
> >>Note that we already track the hpd interrupts on a per-source basis, 
> >>so doing the re-poll shouldn't be costly. Maybe do the re-poll as part 
> >>of the EDID invalidation to avoid stalling userspace.
> >>
> >>But you can't rely upon the hpd pins unfortunately :(
> >>
> >>This way we should be able to implement the 2 features you want, even 
> >>on unreliable hw.
> >>
> >>Cheers, Daniel
> >>--
> >>Daniel Vetter
> >>Software Engineer, Intel Corporation
> >>+41 (0) 79 365 57 48 - http://blog.ffwll.ch
> >>_______________________________________________
> >>Intel-gfx mailing list
> >>Intel-gfx@lists.freedesktop.org
> >>http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> 
> 
> 
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> +41 (0) 79 365 57 48 - http://blog.ffwll.ch

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to