On Mon, Dec 05, 2016 at 08:57:43AM +0100, Thierry Reding wrote:
> On Sat, Dec 03, 2016 at 04:35:24AM +0000, Sharma, Shashank wrote:
> > Hi Thierry, 
> > 
> > If you can please have a look on this patch, I had written one to parse 
> > HF-VSDB, which was covering SCDC detection too. 
> > https://patchwork.kernel.org/patch/9452259/ 
> 
> I think there had been pushback before about caching capabilities from
> EDID, so from that point of view my patch is more inline with existing
> EDID parsing API.

Hm, where was that pushback? We do have a bit a mess between explicitly
parsing stuff (e.g. eld) and stuffing parsed data into drm_display_info.
I think long-term stuffing it into drm_display_info is probably better,
since then we only have 1 interaction point between the probe code and the
atomic_check code. That should be useful for eventually fixing the lack of
locking between the two, if I ever get around to that ;-)

> Other than that the patches are mostly equivalent, except yours parses
> more information than just the SCDC bits.

So merge patch 1 from your series + Shashank's parsing patch? Everyone
agrees and can you pls cross-r-b stamp so I can apply it all?

Thanks, Daniel

> 
> Thierry
> 
> > -----Original Message-----
> > From: Thierry Reding [mailto:thierry.reding at gmail.com] 
> > Sent: Saturday, December 3, 2016 12:54 AM
> > To: dri-devel at lists.freedesktop.org
> > Cc: Jani Nikula <jani.nikula at linux.intel.com>; Sharma, Shashank 
> > <shashank.sharma at intel.com>; Ville Syrjälä <ville.syrjala at 
> > linux.intel.com>; Jose Abreu <joabreu at synopsys.com>
> > Subject: [PATCH v2 2/3] drm/edid: Implement SCDC support detection
> > 
> > From: Thierry Reding <treding at nvidia.com>
> > 
> > Sinks compliant with the HDMI 2.0 specification may support SCDC, a 
> > mechanism for the source and the sink to communicate. Sinks advertise 
> > support for this feature in the HDMI Forum Vendor Specific Data Block as 
> > defined in the HDMI 2.0 specification, section 10.4 "Status and Control 
> > Data Channel". Implement a small helper that find the HF-VSDB and parses it 
> > to check if the sink supports SCDC.
> > 
> > Signed-off-by: Thierry Reding <treding at nvidia.com>
> > ---
> > Changes in v2:
> > - rename internal function to cea_db_is_hdmi_forum_vsdb() for more
> >   clarity (Ville Syrjälä)
> > 
> >  drivers/gpu/drm/drm_edid.c | 49 
> > ++++++++++++++++++++++++++++++++++++++++++++++
> >  include/drm/drm_edid.h     |  1 +
> >  include/linux/hdmi.h       |  1 +
> >  3 files changed, 51 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 
> > 336be31ff3de..369961597ee5 100644
> > --- a/drivers/gpu/drm/drm_edid.c
> > +++ b/drivers/gpu/drm/drm_edid.c
> > @@ -3238,6 +3238,21 @@ static bool cea_db_is_hdmi_vsdb(const u8 *db)
> >     return hdmi_id == HDMI_IEEE_OUI;
> >  }
> >  
> > +static bool cea_db_is_hdmi_forum_vsdb(const u8 *db) {
> > +   unsigned int oui;
> > +
> > +   if (cea_db_tag(db) != VENDOR_BLOCK)
> > +           return false;
> > +
> > +   if (cea_db_payload_len(db) < 7)
> > +           return false;
> > +
> > +   oui = db[3] << 16 | db[2] << 8 | db[1];
> > +
> > +   return oui == HDMI_FORUM_IEEE_OUI;
> > +}
> > +
> >  #define for_each_cea_db(cea, i, start, end) \
> >     for ((i) = (start); (i) < (end) && (i) + 
> > cea_db_payload_len(&(cea)[(i)]) < (end); (i) += 
> > cea_db_payload_len(&(cea)[(i)]) + 1)
> >  
> > @@ -3687,6 +3702,40 @@ bool drm_detect_hdmi_monitor(struct edid *edid)  
> > EXPORT_SYMBOL(drm_detect_hdmi_monitor);
> >  
> >  /**
> > + * drm_detect_hdmi_scdc - detect whether an HDMI sink supports SCDC
> > + * @edid: sink EDID information
> > + *
> > + * Parse the CEA extension according to CEA-861-B to find an HF-VSDB as
> > + * defined in HDMI 2.0, section 10.3.2 "HDMI Forum Vendor Specific Data
> > + * Block" and checks if the SCDC_Present bit (bit 7 of byte 6) is set.
> > + *
> > + * Returns:
> > + * True if the sink supports SCDC, false otherwise.
> > + */
> > +bool drm_detect_hdmi_scdc(struct edid *edid) {
> > +   unsigned int start, end, i;
> > +   const u8 *cea;
> > +
> > +   cea = drm_find_cea_extension(edid);
> > +   if (!cea)
> > +           return false;
> > +
> > +   if (cea_db_offsets(cea, &start, &end))
> > +           return false;
> > +
> > +   for_each_cea_db(cea, i, start, end) {
> > +           if (cea_db_is_hdmi_forum_vsdb(&cea[i])) {
> > +                   if (cea[i + 6] & 0x80)
> > +                           return true;
> > +           }
> > +   }
> > +
> > +   return false;
> > +}
> > +EXPORT_SYMBOL(drm_detect_hdmi_scdc);
> > +
> > +/**
> >   * drm_detect_monitor_audio - check monitor audio capability
> >   * @edid: EDID block to scan
> >   *
> > diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h index 
> > 38eabf65f19d..7ea7e90846d8 100644
> > --- a/include/drm/drm_edid.h
> > +++ b/include/drm/drm_edid.h
> > @@ -440,6 +440,7 @@ int drm_add_edid_modes(struct drm_connector *connector, 
> > struct edid *edid);
> >  u8 drm_match_cea_mode(const struct drm_display_mode *to_match);  enum 
> > hdmi_picture_aspect drm_get_cea_aspect_ratio(const u8 video_code);  bool 
> > drm_detect_hdmi_monitor(struct edid *edid);
> > +bool drm_detect_hdmi_scdc(struct edid *edid);
> >  bool drm_detect_monitor_audio(struct edid *edid);  bool 
> > drm_rgb_quant_range_selectable(struct edid *edid);  int 
> > drm_add_modes_noedid(struct drm_connector *connector, diff --git 
> > a/include/linux/hdmi.h b/include/linux/hdmi.h index 
> > edbb4fc674ed..d271ff23984f 100644
> > --- a/include/linux/hdmi.h
> > +++ b/include/linux/hdmi.h
> > @@ -35,6 +35,7 @@ enum hdmi_infoframe_type {  };
> >  
> >  #define HDMI_IEEE_OUI 0x000c03
> > +#define HDMI_FORUM_IEEE_OUI 0xc45dd8
> >  #define HDMI_INFOFRAME_HEADER_SIZE  4
> >  #define HDMI_AVI_INFOFRAME_SIZE    13
> >  #define HDMI_SPD_INFOFRAME_SIZE    25
> > --
> > 2.10.2
> > 



> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel


-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

Reply via email to