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

Reply via email to