[Intel-gfx] [PATCH 03/25] drm/edid: add struct drm_edid container
Nautiyal, Ankit K
ankit.k.nautiyal at intel.com
Tue May 10 06:10:36 UTC 2022
LGTM.
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
On 5/6/2022 3:40 PM, Jani Nikula wrote:
> Introduce new opaque type struct drm_edid to encapsulate the EDID data
> and the size allocated for it. The contents will be private to
> drm_edid.c.
>
> There are a number of reasons for adding a container around struct edid:
>
> * struct edid is a raw blob pointer to data that usually originates
> outside of the kernel. Its size is contained within the structure.
>
> * There's no way to attach meta information (such as allocated memory
> size) to struct edid.
>
> * Validation of the EDID blob and its size become crucial, and it's
> spread all over the subsystem, with varying levels of accuracy.
>
> * HDMI Forum has introduced an HF-EEODB extension that defines an
> override EDID size within an EDID extension. The size allocated for an
> EDID depends on whether the allocator understands the HF-EEODB
> extension. Given a struct edid *, it's impossible to know how much
> memory was actually allocated for it.
>
> There are also some reasons for making the container type struct
> drm_edid opaque and private to drm_edid.c:
>
> * Have only one place for creating and parsing the EDID, to avoid
> duplicating bugs.
>
> * Prepare for reading a pure DisplayID 2.0 from its own DDC address, and
> adding it within the same struct drm_edid container, transparently,
> and for all drivers.
>
> * With the idea that the drm_edid objects are immutable during their
> lifetimes, it will be possible to refcount them and reduce EDID
> copying everywhere (this is left for future work).
>
> Initially, just add the type. In follow-up, we'll start converting the
> guts of drm_edid.c to use it, and finally add interfaces around it.
>
> Signed-off-by: Jani Nikula <jani.nikula at intel.com>
> ---
> drivers/gpu/drm/drm_edid.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index dcef92c8887a..480fd9fbe412 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -1567,6 +1567,15 @@ static const struct drm_display_mode edid_4k_modes[] = {
>
> /*** DDC fetch and block validation ***/
>
> +/*
> + * The opaque EDID type, internal to drm_edid.c.
> + */
> +struct drm_edid {
> + /* Size allocated for edid */
> + size_t size;
> + const struct edid *edid;
> +};
> +
> static int edid_extension_block_count(const struct edid *edid)
> {
> return edid->extensions;
More information about the Intel-gfx
mailing list