* [PATCH 1/4] drm: add edid_overridden flag to drm_connector
[not found] <20260315223307.45807-1-johanneswueller@gmail.com>
@ 2026-03-15 22:33 ` Johannes Wüller
2026-03-15 22:33 ` [PATCH 2/4] drm/amd: fix HDMI signal type for EDID overrides Johannes Wüller
` (2 subsequent siblings)
3 siblings, 0 replies; 4+ messages in thread
From: Johannes Wüller @ 2026-03-15 22:33 UTC (permalink / raw)
To: amd-gfx, dri-devel
Cc: Johannes Wüller, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, open list
When an EDID override is in effect, the physical connector may not
match reported capabilities. Adds a drm_connector flag that allows
drivers to detect such mismatches.
Signed-off-by: Johannes Wüller <johanneswueller@gmail.com>
---
drivers/gpu/drm/drm_edid.c | 2 ++
include/drm/drm_connector.h | 8 ++++++++
2 files changed, 10 insertions(+)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 26bb7710a462..9b0f410ea2de 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -2373,6 +2373,7 @@ static struct edid *_drm_do_get_edid(struct drm_connector *connector,
struct edid *edid, *new;
size_t alloc_size = EDID_LENGTH;
+ connector->edid_overridden = false;
override = drm_edid_override_get(connector);
if (override) {
alloc_size = override->size;
@@ -2380,6 +2381,7 @@ static struct edid *_drm_do_get_edid(struct drm_connector *connector,
drm_edid_free(override);
if (!edid)
return NULL;
+ connector->edid_overridden = true;
goto ok;
}
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index c18be8c19de0..43d7ac31deba 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -2261,6 +2261,14 @@ struct drm_connector {
/** @bad_edid_counter: track sinks that give us an EDID with invalid checksum */
unsigned bad_edid_counter;
+ /**
+ * @edid_overridden: Indicates whether the last read EDID was an
+ * override (e.g. via debugfs edid_override or drm.edid_firmware kernel
+ * parameter), which can cause the physical connector to differ from
+ * the advertised capabilities.
+ */
+ bool edid_overridden;
+
/**
* @edid_corrupt: Indicates whether the last read EDID was corrupt. Used
* in Displayport compliance testing - Displayport Link CTS Core 1.2
--
2.53.0
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH 2/4] drm/amd: fix HDMI signal type for EDID overrides
[not found] <20260315223307.45807-1-johanneswueller@gmail.com>
2026-03-15 22:33 ` [PATCH 1/4] drm: add edid_overridden flag to drm_connector Johannes Wüller
@ 2026-03-15 22:33 ` Johannes Wüller
2026-03-15 22:33 ` [PATCH 3/4] drm/amd: treat max_tmds_clock==0 as unconstrained Johannes Wüller
2026-03-15 22:33 ` [PATCH 4/4] drm/amd: fix force_yuv420/422_output being ignored Johannes Wüller
3 siblings, 0 replies; 4+ messages in thread
From: Johannes Wüller @ 2026-03-15 22:33 UTC (permalink / raw)
To: amd-gfx, dri-devel
Cc: Johannes Wüller, Harry Wentland, Leo Li, Rodrigo Siqueira,
Alex Deucher, Christian König, David Airlie, Simona Vetter,
open list
If an EDID override is in effect (e.g. via debugfs edid_override or
drm.edid_firmware kernel parameter), the overriding EDID may not
advertise capabilities matching the physical connector being used.
In that case, trust the physical connector type over the EDID in
create_eml_sink() and dm_helpers_parse_edid_caps().
Signed-off-by: Johannes Wüller <johanneswueller@gmail.com>
---
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 9 ++++++++-
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 9 ++++++++-
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index ff09a5371cb2..bc853f7555a9 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -7911,7 +7911,14 @@ static void create_eml_sink(struct amdgpu_dm_connector *aconnector)
return;
}
- if (connector->display_info.is_hdmi)
+ /*
+ * If an EDID override is active, it may not advertise HDMI capability
+ * even though the physical connector is HDMI. Trust the connector type.
+ */
+ if (connector->display_info.is_hdmi ||
+ (connector->edid_overridden &&
+ (connector->connector_type == DRM_MODE_CONNECTOR_HDMIA ||
+ connector->connector_type == DRM_MODE_CONNECTOR_HDMIB)))
init_params.sink_signal = SIGNAL_TYPE_HDMI_TYPE_A;
aconnector->drm_edid = drm_edid;
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 d7b0b84b3865..36b6e37f1517 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
@@ -137,7 +137,14 @@ enum dc_edid_status dm_helpers_parse_edid_caps(
edid_caps->display_name,
AUDIO_INFO_DISPLAY_NAME_SIZE_IN_CHARS);
- edid_caps->edid_hdmi = connector->display_info.is_hdmi;
+ /*
+ * If an EDID override is active, it may not advertise HDMI capability
+ * even though the physical connector is HDMI. Trust the connector type.
+ */
+ edid_caps->edid_hdmi = connector->display_info.is_hdmi ||
+ (connector->edid_overridden &&
+ (connector->connector_type == DRM_MODE_CONNECTOR_HDMIA ||
+ connector->connector_type == DRM_MODE_CONNECTOR_HDMIB));
if (edid_caps->edid_hdmi)
populate_hdmi_info_from_connector(&connector->display_info.hdmi, edid_caps);
--
2.53.0
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH 3/4] drm/amd: treat max_tmds_clock==0 as unconstrained
[not found] <20260315223307.45807-1-johanneswueller@gmail.com>
2026-03-15 22:33 ` [PATCH 1/4] drm: add edid_overridden flag to drm_connector Johannes Wüller
2026-03-15 22:33 ` [PATCH 2/4] drm/amd: fix HDMI signal type for EDID overrides Johannes Wüller
@ 2026-03-15 22:33 ` Johannes Wüller
2026-03-15 22:33 ` [PATCH 4/4] drm/amd: fix force_yuv420/422_output being ignored Johannes Wüller
3 siblings, 0 replies; 4+ messages in thread
From: Johannes Wüller @ 2026-03-15 22:33 UTC (permalink / raw)
To: amd-gfx, dri-devel
Cc: Johannes Wüller, Harry Wentland, Leo Li, Rodrigo Siqueira,
Alex Deucher, Christian König, David Airlie, Simona Vetter,
open list
If max_tmds_clock is not specified by the EDID, it should be treated
as unconstrained rather than as a zero MHz limit, since it would cause
adjust_colour_depth_from_display_info() to reject all color depths
unconditionally.
Signed-off-by: Johannes Wüller <johanneswueller@gmail.com>
---
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index bc853f7555a9..82c8dc8dd39f 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -6612,7 +6612,8 @@ static bool adjust_colour_depth_from_display_info(
/* The above depths are the only ones valid for HDMI. */
return false;
}
- if (normalized_clk <= info->max_tmds_clock) {
+ if (info->max_tmds_clock == 0 ||
+ normalized_clk <= info->max_tmds_clock) {
timing_out->display_color_depth = depth;
return true;
}
--
2.53.0
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH 4/4] drm/amd: fix force_yuv420/422_output being ignored
[not found] <20260315223307.45807-1-johanneswueller@gmail.com>
` (2 preceding siblings ...)
2026-03-15 22:33 ` [PATCH 3/4] drm/amd: treat max_tmds_clock==0 as unconstrained Johannes Wüller
@ 2026-03-15 22:33 ` Johannes Wüller
3 siblings, 0 replies; 4+ messages in thread
From: Johannes Wüller @ 2026-03-15 22:33 UTC (permalink / raw)
To: amd-gfx, dri-devel
Cc: Johannes Wüller, Harry Wentland, Leo Li, Rodrigo Siqueira,
Alex Deucher, Christian König, David Airlie, Simona Vetter,
open list
force_yuv420_output and force_yuv422_output are intended to force a
specific pixel encoding. However, if the display doesn't advertise this
capability, the flag becomes ineffective.
Fix the flag to actually enforce the encoding, regardless of advertised
capabilities.
Signed-off-by: Johannes Wüller <johanneswueller@gmail.com>
---
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index 82c8dc8dd39f..9b298879de53 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -6650,13 +6650,9 @@ static void fill_stream_properties_from_drm_display_mode(
if (drm_mode_is_420_only(info, mode_in)
&& stream->signal == SIGNAL_TYPE_HDMI_TYPE_A)
timing_out->pixel_encoding = PIXEL_ENCODING_YCBCR420;
- else if (drm_mode_is_420_also(info, mode_in)
- && aconnector
- && aconnector->force_yuv420_output)
+ else if (aconnector && aconnector->force_yuv420_output)
timing_out->pixel_encoding = PIXEL_ENCODING_YCBCR420;
- else if ((connector->display_info.color_formats & DRM_COLOR_FORMAT_YCBCR422)
- && aconnector
- && aconnector->force_yuv422_output)
+ else if (aconnector && aconnector->force_yuv422_output)
timing_out->pixel_encoding = PIXEL_ENCODING_YCBCR422;
else if ((connector->display_info.color_formats & DRM_COLOR_FORMAT_YCBCR444)
&& stream->signal == SIGNAL_TYPE_HDMI_TYPE_A)
--
2.53.0
^ permalink raw reply [flat|nested] 4+ messages in thread