[PATCH v4 10/14] drm/amd/display: add a mid-layer file to handle EDID in DC

Melissa Wen mwen at igalia.com
Mon Jun 16 19:27:56 UTC 2025



On 13/06/2025 15:48, Mario Limonciello wrote:
> On 6/13/2025 9:58 AM, Melissa Wen wrote:
>> From: Rodrigo Siqueira <siqueira at igalia.com>
>>
>> Since DC is a shared code, this commit introduces a new file to work as
>> a mid-layer in DC for the edid manipulation.
>>
>> v3:
>> - rebase on top of asdn
> Can you put changelog below cutlist (---)?
ack
>>
>> Signed-off-by: Rodrigo Siqueira <siqueira at igalia.com>
>> Co-developed-by: Melissa Wen <mwen at igalia.com>
>> Signed-off-by: Melissa Wen <mwen at igalia.com>
>> ---
>>   .../gpu/drm/amd/display/amdgpu_dm/Makefile    |  1 +
>>   .../gpu/drm/amd/display/amdgpu_dm/dc_edid.c   | 19 +++++++++++++++++++
>>   .../gpu/drm/amd/display/amdgpu_dm/dc_edid.h   | 11 +++++++++++
>>   .../drm/amd/display/dc/link/link_detection.c  | 17 +++--------------
>>   4 files changed, 34 insertions(+), 14 deletions(-)
>>   create mode 100644 drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.c
>>   create mode 100644 drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.h
>>
>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/Makefile 
>> b/drivers/gpu/drm/amd/display/amdgpu_dm/Makefile
>> index 7329b8cc2576..09cb94d8e0e4 100644
>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/Makefile
>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/Makefile
>> @@ -39,6 +39,7 @@ AMDGPUDM = \
>>       amdgpu_dm_psr.o \
>>       amdgpu_dm_replay.o \
>>       amdgpu_dm_quirks.o \
>> +    dc_edid.o \
>>       amdgpu_dm_wb.o
>>     ifdef CONFIG_DRM_AMD_DC_FP
>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.c 
>> b/drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.c
>> new file mode 100644
>> index 000000000000..fab873b091f5
>> --- /dev/null
>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.c
>> @@ -0,0 +1,19 @@
>> +// SPDX-License-Identifier: MIT
>> +#include "amdgpu_dm/dc_edid.h"
>> +#include "dc.h"
>> +
>> +bool dc_edid_is_same_edid(struct dc_sink *prev_sink,
>> +              struct dc_sink *current_sink)
>> +{
>> +    struct dc_edid *old_edid = &prev_sink->dc_edid;
>> +    struct dc_edid *new_edid = &current_sink->dc_edid;
>> +
>> +       if (old_edid->length != new_edid->length)
>> +               return false;
>> +
>> +       if (new_edid->length == 0)
>> +               return false;
>> +
>> +       return (memcmp(old_edid->raw_edid,
>> +                      new_edid->raw_edid, new_edid->length) == 0);
>> +}
>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.h 
>> b/drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.h
>> new file mode 100644
>> index 000000000000..7e3b1177bc8a
>> --- /dev/null
>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/dc_edid.h
>> @@ -0,0 +1,11 @@
>> +/* SPDX-License-Identifier: MIT */
>> +
>> +#ifndef __DC_EDID_H__
>> +#define __DC_EDID_H__
>> +
>> +#include "dc.h"
>> +
>> +bool dc_edid_is_same_edid(struct dc_sink *prev_sink,
>> +              struct dc_sink *current_sink);
>> +
>> +#endif /* __DC_EDID_H__ */
>> diff --git a/drivers/gpu/drm/amd/display/dc/link/link_detection.c 
>> b/drivers/gpu/drm/amd/display/dc/link/link_detection.c
>> index 863c24fe1117..344356e26f8b 100644
>> --- a/drivers/gpu/drm/amd/display/dc/link/link_detection.c
>> +++ b/drivers/gpu/drm/amd/display/dc/link/link_detection.c
>> @@ -48,6 +48,8 @@
>>   #include "dm_helpers.h"
>>   #include "clk_mgr.h"
>>   +#include "dc_edid.h"
>
> There's a problem with the header location.  If you're naming it 
> dc_edid.h but putting the header in amdgpu_dm/ directory then it's 
> only going to compile for amdgpu.
>
> I think dc_edid.h needs to go into dc/ directory.
>
>> +
>>    // Offset DPCD 050Eh == 0x5A
>>   #define MST_HUB_ID_0x5A  0x5A
>>   @@ -617,18 +619,6 @@ static bool detect_dp(struct dc_link *link,
>>       return true;
>>   }
>>   -static bool is_same_edid(struct dc_edid *old_edid, struct dc_edid 
>> *new_edid)
>> -{
>> -    if (old_edid->length != new_edid->length)
>> -        return false;
>> -
>> -    if (new_edid->length == 0)
>> -        return false;
>> -
>> -    return (memcmp(old_edid->raw_edid,
>> -               new_edid->raw_edid, new_edid->length) == 0);
>> -}
>> -
>>   static bool wait_for_entering_dp_alt_mode(struct dc_link *link)
>>   {
>>   @@ -1105,8 +1095,7 @@ static bool detect_link_and_local_sink(struct 
>> dc_link *link,
>>           // Check if edid is the same
>>           if ((prev_sink) &&
>>               (edid_status == EDID_THE_SAME || edid_status == EDID_OK))
>> -            same_edid = is_same_edid(&prev_sink->dc_edid,
>> -                         &sink->dc_edid);
>> +            same_edid = dc_edid_is_same_edid(prev_sink, sink);
>>             if (sink->edid_caps.panel_patch.skip_scdc_overwrite)
>>               link->ctx->dc->debug.hdmi20_disable = true;
>



More information about the dri-devel mailing list