Commit bfd4e192 authored by Jani Nikula's avatar Jani Nikula
Browse files

drm/edid: use the new displayid iterator for tile info



Neatly reduce displayid boilerplate in code. Remove excessive debug
logging while at it, no other functional changes.

The old displayid iterator becomes unused; remove it as well as make
drm_find_displayid_extension() static.

Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/fa4b5c790b5bdd82063545a6f209f8e9d78a63a7.1617024940.git.jani.nikula@intel.com
parent 1ba63caf
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -33,7 +33,7 @@ static int validate_displayid(const u8 *displayid, int length, int idx)
	return 0;
	return 0;
}
}


const u8 *drm_find_displayid_extension(const struct edid *edid,
static const u8 *drm_find_displayid_extension(const struct edid *edid,
					      int *length, int *idx,
					      int *length, int *idx,
					      int *ext_index)
					      int *ext_index)
{
{
+7 −30
Original line number Original line Diff line number Diff line
@@ -5969,43 +5969,20 @@ static void drm_parse_tiled_block(struct drm_connector *connector,
	}
	}
}
}


static void drm_displayid_parse_tiled(struct drm_connector *connector,
				      const u8 *displayid, int length, int idx)
{
	const struct displayid_block *block;

	idx += sizeof(struct displayid_hdr);
	for_each_displayid_db(displayid, block, idx, length) {
		DRM_DEBUG_KMS("block id 0x%x, rev %d, len %d\n",
			      block->tag, block->rev, block->num_bytes);

		switch (block->tag) {
		case DATA_BLOCK_TILED_DISPLAY:
			drm_parse_tiled_block(connector, block);
			break;
		default:
			DRM_DEBUG_KMS("found DisplayID tag 0x%x, unhandled\n", block->tag);
			break;
		}
	}
}

void drm_update_tile_info(struct drm_connector *connector,
void drm_update_tile_info(struct drm_connector *connector,
			  const struct edid *edid)
			  const struct edid *edid)
{
{
	const void *displayid = NULL;
	const struct displayid_block *block;
	int ext_index = 0;
	struct displayid_iter iter;
	int length, idx;


	connector->has_tile = false;
	connector->has_tile = false;
	for (;;) {
		displayid = drm_find_displayid_extension(edid, &length, &idx,
							 &ext_index);
		if (!displayid)
			break;


		drm_displayid_parse_tiled(connector, displayid, length, idx);
	displayid_iter_edid_begin(edid, &iter);
	displayid_iter_for_each(block, &iter) {
		if (block->tag == DATA_BLOCK_TILED_DISPLAY)
			drm_parse_tiled_block(connector, block);
	}
	}
	displayid_iter_end(&iter);


	if (!connector->has_tile && connector->tile_group) {
	if (!connector->has_tile && connector->tile_group) {
		drm_mode_put_tile_group(connector->dev, connector->tile_group);
		drm_mode_put_tile_group(connector->dev, connector->tile_group);
+0 −12
Original line number Original line Diff line number Diff line
@@ -96,18 +96,6 @@ struct displayid_detailed_timing_block {
	struct displayid_detailed_timings_1 timings[];
	struct displayid_detailed_timings_1 timings[];
};
};


#define for_each_displayid_db(displayid, block, idx, length) \
	for ((block) = (const struct displayid_block *)&(displayid)[idx]; \
	     (idx) + sizeof(struct displayid_block) <= (length) && \
	     (idx) + sizeof(struct displayid_block) + (block)->num_bytes <= (length) && \
	     (block)->num_bytes > 0; \
	     (idx) += sizeof(struct displayid_block) + (block)->num_bytes, \
	     (block) = (const struct displayid_block *)&(displayid)[idx])

const u8 *drm_find_displayid_extension(const struct edid *edid,
				       int *length, int *idx,
				       int *ext_index);

/* DisplayID iteration */
/* DisplayID iteration */
struct displayid_iter {
struct displayid_iter {
	const struct edid *edid;
	const struct edid *edid;