On 2025-07-25 20:33, Melissa Wen wrote:
> Add Linux opaque object to dc_sink for storing EDID data cross driver,
> drm_edid. Also include the Linux call to free this object, the
> drm_edid_free()
> 
> Signed-off-by: Melissa Wen <m...@igalia.com>
> ---
>  drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.c | 6 ++++++
>  drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.h | 1 +
>  drivers/gpu/drm/amd/display/dc/core/dc_sink.c   | 3 +++
>  drivers/gpu/drm/amd/display/dc/dc.h             | 1 +
>  4 files changed, 11 insertions(+)
> 
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.c 
> b/drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.c
> index b4ccc111fa08..493815829aa5 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.c
> @@ -1,6 +1,7 @@
>  // SPDX-License-Identifier: MIT
>  #include "dc.h"
>  #include "dc_edid.h"
> +#include <drm/drm_edid.h>
>  
>  bool dc_edid_is_same_edid(struct dc_sink *prev_sink,
>                         struct dc_sink *current_sink)
> @@ -25,3 +26,8 @@ void dc_edid_copy_edid_to_dc(struct dc_sink *dc_sink,
>       memmove(dc_sink->dc_edid.raw_edid, edid, len);
>       dc_sink->dc_edid.length = len;
>  }
> +
> +void dc_edid_sink_edid_free(struct dc_sink *sink)
> +{
> +     drm_edid_free(sink->drm_edid);
> +}
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.h 
> b/drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.h
> index f42cd5bbc730..2c76768be459 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.h
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.h
> @@ -9,5 +9,6 @@ bool dc_edid_is_same_edid(struct dc_sink *prev_sink,
>                         struct dc_sink *current_sink);
>  void dc_edid_copy_edid_to_dc(struct dc_sink *dc_sink,
>                            const void *edid, int len);
> +void dc_edid_sink_edid_free(struct dc_sink *sink);
>  
>  #endif /* __DC_EDID_H__ */
> diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_sink.c 
> b/drivers/gpu/drm/amd/display/dc/core/dc_sink.c
> index 455fa5dd1420..3774a3245506 100644
> --- a/drivers/gpu/drm/amd/display/dc/core/dc_sink.c
> +++ b/drivers/gpu/drm/amd/display/dc/core/dc_sink.c
> @@ -26,6 +26,7 @@
>  #include "dm_services.h"
>  #include "dm_helpers.h"
>  #include "core_types.h"
> +#include "dc_edid.h"
>  
>  
> /*******************************************************************************
>   * Private functions
> @@ -65,6 +66,8 @@ void dc_sink_retain(struct dc_sink *sink)
>  static void dc_sink_free(struct kref *kref)
>  {
>       struct dc_sink *sink = container_of(kref, struct dc_sink, refcount);
> +
> +     dc_edid_sink_edid_free(sink);
>       kfree(sink->dc_container_id);
>       kfree(sink);
>  }
> diff --git a/drivers/gpu/drm/amd/display/dc/dc.h 
> b/drivers/gpu/drm/amd/display/dc/dc.h
> index 233d73f9f19f..215d3901480a 100644
> --- a/drivers/gpu/drm/amd/display/dc/dc.h
> +++ b/drivers/gpu/drm/amd/display/dc/dc.h
> @@ -2493,6 +2493,7 @@ struct scdc_caps {
>  struct dc_sink {
>       enum signal_type sink_signal;
>       struct dc_edid dc_edid; /* raw edid */
> +     const struct drm_edid *drm_edid; /* Linux DRM EDID */

DC is OS agnostic code and shouldn't deal with DRM
structs. amdgpu_dm is the one to deal with that.

Harry

>       struct dc_edid_caps edid_caps; /* parse display caps */
>       struct dc_container_id *dc_container_id;
>       uint32_t dongle_max_pix_clk;

Reply via email to