mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] drm/dp: Keep base enhanced framing cap from extended DPCD caps
@ 2026-10-28 16:29 Dmytro Malovanyi
  2026-10-28 17:24 ` Jani Nikula
  0 siblings, 1 reply; 4+ messages in thread
From: Dmytro Malovanyi @ 2026-10-28 16:29 UTC (permalink / raw)
  To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, dri-devel
  Cc: David Airlie, Simona Vetter, Jani Nikula, Ville Syrjälä,
	intel-gfx, linux-kernel, Dmytro Malovanyi

Some sinks set DP_EXTENDED_RECEIVER_CAP_FIELD_PRESENT and advertise
DP_ENHANCED_FRAME_CAP in the base receiver caps, but clear it in the
extended receiver caps at 0x2200. drm_dp_read_extended_dpcd_caps()
replaces the base caps with the extended ones, so the link is trained
without enhanced framing.

The Xiaomi Monitor A24i (P24FBA-RAGL) is one such sink:

  base:     12 0a c4 01 01 00 01 80 02 00 06 00 00 00 81
  extended: 14 0a 44 00 01 00 01 80 02 02 06 00 00 00 81

Without enhanced framing all lanes train (0x202-0x204: 77 77 81), but
the sink never syncs to the stream (SINK_STATUS 0x205: 00) and shows
"No signal" until it is power cycled. The same monitor works on macOS.

DP 1.4 section 2.9.3.1, as quoted in the commit that added extended
caps support, says the extended caps match the base caps except for
DPCD_REV, MAX_LINK_RATE and DOWN_STREAM_PORT_PRESENT. Keep the base
value of DP_ENHANCED_FRAME_CAP.

With this change the link uses enhanced framing (0x101: 84) and the
sink syncs (0x205: 03).

Tested on i915 (Arrow Lake-U) through a USB4 dock.

Fixes: a1d926527b79 ("drm/i915: implement EXTENDED_RECEIVER_CAPABILITY_FIELD_PRESENT")
Cc: stable@vger.kernel.org
Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/17719
Signed-off-by: Dmytro Malovanyi <dmitrymalovanyy@gmail.com>
---
 drivers/gpu/drm/display/drm_dp_helper.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/gpu/drm/display/drm_dp_helper.c b/drivers/gpu/drm/display/drm_dp_helper.c
index e623ccb4c..205b6cc89 100644
--- a/drivers/gpu/drm/display/drm_dp_helper.c
+++ b/drivers/gpu/drm/display/drm_dp_helper.c
@@ -1219,6 +1219,9 @@ static int drm_dp_read_extended_dpcd_caps(struct drm_dp_aux *aux,
 
 	drm_dbg_kms(aux->drm_dev, "%s: Base DPCD: %*ph\n", aux->name, DP_RECEIVER_CAP_SIZE, dpcd);
 
+	/* Keep the base enhanced framing cap if the extended caps drop it */
+	dpcd_ext[DP_MAX_LANE_COUNT] |= dpcd[DP_MAX_LANE_COUNT] & DP_ENHANCED_FRAME_CAP;
+
 	memcpy(dpcd, dpcd_ext, sizeof(dpcd_ext));
 
 	return 0;

base-commit: feaa32dc98090b2f45f7b6f179711a6640169c1a
-- 
2.50.1 (Apple Git-155)


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-10-29  9:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-28 16:29 [PATCH] drm/dp: Keep base enhanced framing cap from extended DPCD caps Dmytro Malovanyi
2026-10-28 17:24 ` Jani Nikula
2026-10-29  9:10   ` Dmitry Malovanyy
2026-10-29  9:21     ` Jani Nikula

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®