Skip to content

Commit 70e9fb0

Browse files
CertainLach1Naim
authored andcommitted
drm/edid: prepare for VESA vendor-specific data block extension
Current VESA vendor-specific block parsing expects real block size to be the same as the defined struct size, use real offsets in conditionals instead to add struct fields in future commits. Signed-off-by: Yaroslav Bolyukin <iam@lach.pw> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
1 parent bb44716 commit 70e9fb0

1 file changed

Lines changed: 14 additions & 16 deletions

File tree

drivers/gpu/drm/drm_edid.c

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6544,7 +6544,7 @@ static void drm_parse_vesa_specific_block(struct drm_connector *connector,
65446544
if (oui(vesa->oui[0], vesa->oui[1], vesa->oui[2]) != VESA_IEEE_OUI)
65456545
return;
65466546

6547-
if (sizeof(*vesa) != sizeof(*block) + block->num_bytes) {
6547+
if (block->num_bytes < 5) {
65486548
drm_dbg_kms(connector->dev,
65496549
"[CONNECTOR:%d:%s] Unexpected VESA vendor block size\n",
65506550
connector->base.id, connector->name);
@@ -6567,24 +6567,22 @@ static void drm_parse_vesa_specific_block(struct drm_connector *connector,
65676567
break;
65686568
}
65696569

6570-
if (!info->mso_stream_count) {
6571-
info->mso_pixel_overlap = 0;
6572-
return;
6573-
}
6574-
6575-
info->mso_pixel_overlap = FIELD_GET(DISPLAYID_VESA_MSO_OVERLAP, vesa->mso);
6576-
if (info->mso_pixel_overlap > 8) {
6570+
if (info->mso_stream_count) {
6571+
info->mso_pixel_overlap = FIELD_GET(DISPLAYID_VESA_MSO_OVERLAP, vesa->mso);
6572+
if (info->mso_pixel_overlap > 8) {
6573+
drm_dbg_kms(connector->dev,
6574+
"[CONNECTOR:%d:%s] Reserved MSO pixel overlap value %u\n",
6575+
connector->base.id, connector->name,
6576+
info->mso_pixel_overlap);
6577+
info->mso_pixel_overlap = 8;
6578+
}
65776579
drm_dbg_kms(connector->dev,
6578-
"[CONNECTOR:%d:%s] Reserved MSO pixel overlap value %u\n",
6580+
"[CONNECTOR:%d:%s] MSO stream count %u, pixel overlap %u\n",
65796581
connector->base.id, connector->name,
6580-
info->mso_pixel_overlap);
6581-
info->mso_pixel_overlap = 8;
6582+
info->mso_stream_count, info->mso_pixel_overlap);
6583+
} else {
6584+
info->mso_pixel_overlap = 0;
65826585
}
6583-
6584-
drm_dbg_kms(connector->dev,
6585-
"[CONNECTOR:%d:%s] MSO stream count %u, pixel overlap %u\n",
6586-
connector->base.id, connector->name,
6587-
info->mso_stream_count, info->mso_pixel_overlap);
65886586
}
65896587

65906588
static void drm_update_vesa_specific_block(struct drm_connector *connector,

0 commit comments

Comments
 (0)