> On Jan 19, 2026, at 8:39 AM, Jani Nikula <[email protected]> wrote:
> 
> On Sat, 17 Jan 2026, Joshua Peisach <[email protected] 
> <mailto:[email protected]>> wrote:
>> drm_parse_hdmi_vsdb_video is one of the parsers that still do not use the
>> cea_db struct, and currently passes a u8 pointer.
>> 
>> Set the correct struct type and update references to the data accordingly.
>> This also makes the same change to drm_parse_hdmi_deep_color_info as
>> necessary.
>> 
>> Signed-off-by: Joshua Peisach <[email protected]>
>> ---
>> drivers/gpu/drm/drm_edid.c | 26 +++++++++++++-------------
>> 1 file changed, 13 insertions(+), 13 deletions(-)
>> 
>> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
>> index 26bb7710a..15bd99e65 100644
>> --- a/drivers/gpu/drm/drm_edid.c
>> +++ b/drivers/gpu/drm/drm_edid.c
>> @@ -6290,7 +6290,7 @@ static void drm_parse_hdmi_forum_scds(struct 
>> drm_connector *connector,
>> }
>> 
>> static void drm_parse_hdmi_deep_color_info(struct drm_connector *connector,
>> -                                       const u8 *hdmi)
>> +                                       const struct cea_db *db)
>> {
>>      struct drm_display_info *info = &connector->display_info;
>>      unsigned int dc_bpc = 0;
>> @@ -6298,24 +6298,24 @@ static void drm_parse_hdmi_deep_color_info(struct 
>> drm_connector *connector,
>>      /* HDMI supports at least 8 bpc */
>>      info->bpc = 8;
>> 
>> -    if (cea_db_payload_len(hdmi) < 6)
>> +    if (cea_db_payload_len(db) < 6)
>>              return;
>> 
>> -    if (hdmi[6] & DRM_EDID_HDMI_DC_30) {
>> +    if (db->data[6] & DRM_EDID_HDMI_DC_30) {
> 
> That's not the same thing, but off-by-one now. Ditto everywhere that
> changes from u8* to db->data[].
> 
> The main problem with the change (even with fixed offsets) is that the
> *specs* typically use indexing from the beginning of the data block, not
> from the beginning of payload data.
> 
> We've discussed this before with Ville (Cc'd) but I'm not sure if we
> reached a conclusion.
> 

Okay, I'll thought the pointer was to the literal same information.

Keep me posted about the indexing of the specs, I will probably submit a v2.

Thanks,
-Josh

> BR,
> Jani.
> 
> 
>>              dc_bpc = 10;
>>              info->edid_hdmi_rgb444_dc_modes |= DRM_EDID_HDMI_DC_30;
>>              drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] HDMI sink does 
>> deep color 30.\n",
>>                          connector->base.id, connector->name);
>>      }
>> 
>> -    if (hdmi[6] & DRM_EDID_HDMI_DC_36) {
>> +    if (db->data[6] & DRM_EDID_HDMI_DC_36) {
>>              dc_bpc = 12;
>>              info->edid_hdmi_rgb444_dc_modes |= DRM_EDID_HDMI_DC_36;
>>              drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] HDMI sink does 
>> deep color 36.\n",
>>                          connector->base.id, connector->name);
>>      }
>> 
>> -    if (hdmi[6] & DRM_EDID_HDMI_DC_48) {
>> +    if (db->data[6] & DRM_EDID_HDMI_DC_48) {
>>              dc_bpc = 16;
>>              info->edid_hdmi_rgb444_dc_modes |= DRM_EDID_HDMI_DC_48;
>>              drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] HDMI sink does 
>> deep color 48.\n",
>> @@ -6333,7 +6333,7 @@ static void drm_parse_hdmi_deep_color_info(struct 
>> drm_connector *connector,
>>      info->bpc = dc_bpc;
>> 
>>      /* YCRCB444 is optional according to spec. */
>> -    if (hdmi[6] & DRM_EDID_HDMI_DC_Y444) {
>> +    if (db->data[6] & DRM_EDID_HDMI_DC_Y444) {
>>              info->edid_hdmi_ycbcr444_dc_modes = 
>> info->edid_hdmi_rgb444_dc_modes;
>>              drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] HDMI sink does 
>> YCRCB444 in deep color.\n",
>>                          connector->base.id, connector->name);
>> @@ -6343,7 +6343,7 @@ static void drm_parse_hdmi_deep_color_info(struct 
>> drm_connector *connector,
>>       * Spec says that if any deep color mode is supported at all,
>>       * then deep color 36 bit must be supported.
>>       */
>> -    if (!(hdmi[6] & DRM_EDID_HDMI_DC_36)) {
>> +    if (!(db->data[6] & DRM_EDID_HDMI_DC_36)) {
>>              drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] HDMI sink should 
>> do DC_36, but does not!\n",
>>                          connector->base.id, connector->name);
>>      }
>> @@ -6351,19 +6351,19 @@ static void drm_parse_hdmi_deep_color_info(struct 
>> drm_connector *connector,
>> 
>> /* HDMI Vendor-Specific Data Block (HDMI VSDB, H14b-VSDB) */
>> static void
>> -drm_parse_hdmi_vsdb_video(struct drm_connector *connector, const u8 *db)
>> +drm_parse_hdmi_vsdb_video(struct drm_connector *connector, const struct 
>> cea_db *db)
>> {
>>      struct drm_display_info *info = &connector->display_info;
>>      u8 len = cea_db_payload_len(db);
>> 
>>      info->is_hdmi = true;
>> 
>> -    info->source_physical_address = (db[4] << 8) | db[5];
>> +    info->source_physical_address = (db->data[4] << 8) | db->data[5];
>> 
>>      if (len >= 6)
>> -            info->dvi_dual = db[6] & 1;
>> +            info->dvi_dual = db->data[6] & 1;
>>      if (len >= 7)
>> -            info->max_tmds_clock = db[7] * 5000;
>> +            info->max_tmds_clock = db->data[7] * 5000;
>> 
>>      /*
>>       * Try to infer whether the sink supports HDMI infoframes.
>> @@ -6371,7 +6371,7 @@ drm_parse_hdmi_vsdb_video(struct drm_connector 
>> *connector, const u8 *db)
>>       * HDMI infoframe support was first added in HDMI 1.4. Assume the sink
>>       * supports infoframes if HDMI_Video_present is set.
>>       */
>> -    if (len >= 8 && db[8] & BIT(5))
>> +    if (len >= 8 && db->data[8] & BIT(5))
>>              info->has_hdmi_infoframe = true;
>> 
>>      drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] HDMI: DVI dual %d, max 
>> TMDS clock %d kHz\n",
>> @@ -6443,7 +6443,7 @@ static void drm_parse_cea_ext(struct drm_connector 
>> *connector,
>>              const u8 *data = (const u8 *)db;
>> 
>>              if (cea_db_is_hdmi_vsdb(db))
>> -                    drm_parse_hdmi_vsdb_video(connector, data);
>> +                    drm_parse_hdmi_vsdb_video(connector, db);
>>              else if (cea_db_is_hdmi_forum_vsdb(db) ||
>>                       cea_db_is_hdmi_forum_scdb(db))
>>                      drm_parse_hdmi_forum_scds(connector, data);
> 
> -- 
> Jani Nikula, Intel

Reply via email to