This series fixes several issues that prevent amdgpu from driving an HDMI display at its native resolution when a non-HDMI EDID is injected via drm.edid_firmware or debugfs edid_override.
The motivating case is a Dell U3011 (2560x1600) connected via HDMI, whose native HDMI EDID only advertises CEA modes up to 1920x1080. By injecting the monitor's DisplayPort EDID (which contains the native 2560x1600 mode), the correct resolution becomes available. However, amdgpu then fails to drive the output because the injected EDID lacks an HDMI VSDB, causing the driver to treat the physical HDMI connector as a passive HDMI-DVI dongle, and rejecting the required pixel clock. Patch 1 adds an edid_overridden flag to drm_connector, set by the existing EDID override mechanisms in _drm_do_get_edid(), so that drivers can detect when an override is in effect and adjust their behavior accordingly, without duplicating the override mechanism. Patches 2-4 fix the amdgpu-specific issues: - incorrect signal type selection when an override is active - unconditional rejection of all colour depths when max_tmds_clock is zero - force_yuv420/422_output flags being silently ignored when the display doesn't advertise the requested format. Tested on AMD Ryzen 9 7950X (RDNA3 iGPU, DCN 3.1.5) with a Dell U3011 connected via HDMI at 2560x1600@60Hz RGB 8bpc, and another Dell U3011 connected via DisplayPort in the same mode. This is my first code contribution to the kernel, so I would appreciate feedback on whether I've gotten recipients and other procedural details right! :) Johannes Wüller (4): drm: add edid_overridden flag to drm_connector drm/amd: fix HDMI signal type for EDID overrides drm/amd: treat max_tmds_clock==0 as unconstrained drm/amd: fix force_yuv420/422_output being ignored .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 20 +++++++++++-------- .../amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 9 ++++++++- drivers/gpu/drm/drm_edid.c | 2 ++ include/drm/drm_connector.h | 8 ++++++++ 4 files changed, 30 insertions(+), 9 deletions(-) -- 2.53.0
