On 2026-09-17 09:59, Mario Limonciello wrote:
> Display Core determines whether a digital sink is physically connected
> from HPD before dm_helpers_read_local_edid() attempts to acquire its EDID.
>
> The helper currently calls drm_edid_read_ddc(). For an unforced connector,
> that function probes DDC before consulting a debugfs or firmware override.
> If a present sink stops responding over DDC, the probe returns early. The
> configured override is ignored, and AMDGPU creates a 640x480 fallback mode.
> That also prevents DRM's later override fallback from running.
>
> Read an explicit override before trying ACPI, VBIOS, or DDC sources. Since
> DC has already established physical presence, this does not make the EDID
> override force a disconnected connector on. The existing successful-read
> path updates the DRM connector and copies and parses the EDID into dc_sink,
> keeping DRM and Display Core state synchronized.
>
> Fixes: 7c7f5b15be65 ("drm/amd/display: Refactor edid read.")
> Closes: https://gitlab.freedesktop.org/drm/amd/-/work_items/5779
> Cc: [email protected]
> Signed-off-by: Mario Limonciello <[email protected]>
Reviewed-by: Harry Wentland <[email protected]>
Harry
> ---
> .../drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 14 +++++++++-----
> 1 file changed, 9 insertions(+), 5 deletions(-)
>
> 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 d451082552e83..b8f02c854667e 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
> @@ -1244,12 +1244,16 @@ enum dc_edid_status dm_helpers_read_local_edid(
> * do check sum and retry to make sure read correct edid.
> */
> do {
> - drm_edid = dm_helpers_read_acpi_edid(aconnector);
> - if (drm_edid)
> - drm_info(connector->dev, "Using ACPI provided EDID for
> %s\n", connector->name);
> - else if (!ddc)
> + drm_edid = drm_edid_read_override(connector);
> + if (!drm_edid) {
> + drm_edid = dm_helpers_read_acpi_edid(aconnector);
> + if (drm_edid)
> + drm_info(connector->dev, "Using ACPI provided
> EDID for %s\n",
> + connector->name);
> + }
> + if (!drm_edid && !ddc)
> drm_edid = dm_helpers_read_vbios_hardcoded_edid(link,
> aconnector);
> - else
> + else if (!drm_edid)
> drm_edid = drm_edid_read_ddc(connector, ddc);
> drm_edid_connector_update(connector, drm_edid);
>