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);
>  

Reply via email to