[REBASE 5/7] drm/edid: avoid drm_edid_find_extension() internally

Thomas Zimmermann tzimmermann at suse.de
Tue Apr 16 12:19:05 UTC 2024


Hi

Am 16.04.24 um 11:19 schrieb Jani Nikula:
> Prefer the EDID iterators over drm_edid_find_extension() in
> drm_edid_has_cta_extension(), even if this leads to more code. The key
> is to use the same patterns as much as possible.

Should this patch go before patch 4? That would limit the impact of the 
latter.

Why is this instance different than the one in 
drm_find_displayid_extension()? Best regards Thomas
>
> Signed-off-by: Jani Nikula <jani.nikula at intel.com>
> ---
>   drivers/gpu/drm/drm_edid.c | 14 ++++++++++++--
>   1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index c29f31dcc818..4b3ad42a8f95 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -4230,11 +4230,21 @@ static bool drm_edid_has_cta_extension(const struct drm_edid *drm_edid)
>   {
>   	const struct displayid_block *block;
>   	struct displayid_iter iter;
> -	int ext_index = 0;
> +	struct drm_edid_iter edid_iter;
> +	const u8 *ext;
>   	bool found = false;
>   
>   	/* Look for a top level CEA extension block */
> -	if (drm_edid_find_extension(drm_edid, CEA_EXT, &ext_index))
> +	drm_edid_iter_begin(drm_edid, &edid_iter);
> +	drm_edid_iter_for_each(ext, &edid_iter) {
> +		if (ext[0] == CEA_EXT) {
> +			found = true;
> +			break;
> +		}
> +	}
> +	drm_edid_iter_end(&edid_iter);
> +
> +	if (found)
>   		return true;
>   
>   	/* CEA blocks can also be found embedded in a DisplayID block */

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)



More information about the dri-devel mailing list