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()
v7: - put new edid-related helpers in dm_helpers (Harry) Signed-off-by: Melissa Wen <[email protected]> --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 5 +++++ drivers/gpu/drm/amd/display/dc/core/dc_sink.c | 2 ++ drivers/gpu/drm/amd/display/dc/dc.h | 1 + drivers/gpu/drm/amd/display/dc/dm_helpers.h | 1 + 4 files changed, 9 insertions(+) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c index a7ad93c2eb5f..419852dfc237 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c @@ -1007,6 +1007,11 @@ void dm_helpers_copy_edid_to_dc(struct dc_sink *dc_sink, dc_sink->dc_edid.length = len; } +void dm_helpers_sink_edid_free(struct dc_sink *sink) +{ + drm_edid_free(sink->drm_edid); +} + enum dc_edid_status dm_helpers_read_local_edid( struct dc_context *ctx, struct dc_link *link, 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..a5b9081879e3 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_sink.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_sink.c @@ -65,6 +65,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); + + dm_helpers_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 2efb9add13ff..3cf7507d11fa 100644 --- a/drivers/gpu/drm/amd/display/dc/dc.h +++ b/drivers/gpu/drm/amd/display/dc/dc.h @@ -2576,6 +2576,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 */ struct dc_edid_caps edid_caps; /* parse display caps */ struct dc_container_id *dc_container_id; uint32_t dongle_max_pix_clk; diff --git a/drivers/gpu/drm/amd/display/dc/dm_helpers.h b/drivers/gpu/drm/amd/display/dc/dm_helpers.h index 0415cb50fe32..e23204fdd3f5 100644 --- a/drivers/gpu/drm/amd/display/dc/dm_helpers.h +++ b/drivers/gpu/drm/amd/display/dc/dm_helpers.h @@ -68,6 +68,7 @@ bool dm_helpers_is_same_edid(struct dc_sink *prev_sink, void dm_helpers_copy_edid_to_dc(struct dc_sink *dc_sink, const void *edid, int len); +void dm_helpers_sink_edid_free(struct dc_sink *sink); /* * Update DP branch info -- 2.51.0
