Re: [igt-dev] [PATCH i-g-t 3/5] lib/igt_edid: add support for native DTDs in CEA extension blocks

Ville Syrjälä
2019-07-02T15:38:56Z

On Tue, Jul 02, 2019 at 03:50:36PM +0300, Simon Ser wrote:
> Native Detailed Timing Descriptors follow the Data Block Collection in the CEA
> extension.
>
> Signed-off-by: Simon Ser <simon.ser@intel.com>
> ---
> lib/igt_edid.c | 6 ++++--
> lib/igt_edid.h | 2 +-
> lib/igt_kms.c | 3 +--
> 3 files changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/lib/igt_edid.c b/lib/igt_edid.c
> index c93d8fa8bca0..93202c138161 100644
> --- a/lib/igt_edid.c
> +++ b/lib/igt_edid.c
> @@ -408,15 +408,17 @@ size_t edid_cea_data_block_set_speaker_alloc(struct edid_cea_data_block *block,
> }
>
> void edid_ext_set_cea(struct edid_ext *ext, size_t data_blocks_size,
> - uint8_t flags)
> + size_t native_dtds_len, uint8_t flags)

size_t is a an odd choice for something that is not a size.
I would have also called it num_native_dtds or something.

> {
> struct edid_cea *cea = &ext->data.cea;
>
> ext->tag = EDID_EXT_CEA;
>
> + assert(native_dtds_len <= 0x0F);

The CEA extension can contain up to six DTDs and the base block
can have up to four. So we could make this assert even tighter:

assert(num_native_dtds <= (127 - 4 - data_block_size) / 18 + 4);

or something. But since that wouldn't check against the actual
number of dtds present maybe a bit pointless to do that.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

> + assert((flags & 0x0F) == 0);
> cea->revision = 3;
> cea->dtd_start = 4 + data_blocks_size;
> - cea->misc = flags; /* just flags, no DTD */
> + cea->misc = flags | native_dtds_len;
> }
>
> void edid_ext_update_cea_checksum(struct edid_ext *ext)
> diff --git a/lib/igt_edid.h b/lib/igt_edid.h
> index 0ac851c0d74a..702c14c54b5e 100644
> --- a/lib/igt_edid.h
> +++ b/lib/igt_edid.h
> @@ -359,6 +359,6 @@ size_t edid_cea_data_block_set_hdmi_vsd(struct edid_cea_data_block *block,
> size_t edid_cea_data_block_set_speaker_alloc(struct edid_cea_data_block *block,
> const struct cea_speaker_alloc *speakers);
> void edid_ext_set_cea(struct edid_ext *ext, size_t data_blocks_size,
> - uint8_t flags);
> + size_t native_dtds_len, uint8_t flags);
>
> #endif
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index f8185edf6e8b..45c79a380daf 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -226,8 +226,7 @@ generate_audio_edid(unsigned char raw_edid[static AUDIO_EDID_LENGTH],
>
> assert(cea_data_size <= sizeof(edid_cea->data));
>
> - edid_ext_set_cea(edid_ext, cea_data_size,
> - EDID_CEA_BASIC_AUDIO);
> + edid_ext_set_cea(edid_ext, cea_data_size, 0, EDID_CEA_BASIC_AUDIO);
>
> edid_update_checksum(edid);
> edid_ext_update_cea_checksum(edid_ext);
> --
> 2.22.0
>
> _______________________________________________
> igt-dev mailing list
> igt-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev

--
Ville Syrjälä
Intel