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 eventually 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. Use the connector DDC probe callback to report the connection type already established by Display Core. This lets DRM core reach its unified override and firmware EDID handling without making an override force a disconnected connector on. Reported-by: Curtis Vogt <[email protected]> Closes: https://gitlab.freedesktop.org/drm/amd/-/work_items/5779 Signed-off-by: Mario Limonciello <[email protected]> --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c index 25f168a8ea311..a3ab26b68a889 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c @@ -2071,7 +2071,15 @@ STATIC_IFN_KUNIT void amdgpu_dm_connector_funcs_force(struct drm_connector *conn } EXPORT_IF_KUNIT(amdgpu_dm_connector_funcs_force); +static bool amdgpu_dm_connector_probe_ddc(struct drm_connector *connector) +{ + struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); + + return aconnector->dc_link->type != dc_connection_none; +} + static const struct drm_connector_funcs amdgpu_dm_connector_funcs = { + .probe_ddc = amdgpu_dm_connector_probe_ddc, .reset = amdgpu_dm_connector_funcs_reset, .detect = amdgpu_dm_connector_detect, .fill_modes = drm_helper_probe_single_connector_modes, -- 2.43.0
