DisplayPort link training negotiates the physical-layer parameters needed for a reliable connection: lane count, link rate, and optionally Display Stream Compression (DSC). Currently, each driver exposes this state in its own way, often through driver-specific debugfs entries, with no standard interface for userspace diagnostic and monitoring tools.
This series introduces generic, managed and unmanaged DisplayPort connector initialization helpers, for exposing DP link capabilities and state as standard sysfs entries, modeled after the existing HDMI helper drmm_connector_hdmi_init(). The aim of such development is to guide users to select the most suitable DisplayPort connector for their needs. For example, if you have a USB-C hub with lesser capabilities than your computer’s native DisplayPort connector (such as HBR2 versus HBR3 support), the system could recommend connecting high-resolution displays directly to the computer’s port instead of through the hub to ensure optimal performance. These new drmm_connector_dp_init() and drm_connector_dp_init_with_ddc() helpers initialize a DP connector and expose link training capabilities and state to userspace via sysfs attributes under dp_link. Additional helpers are provided to manage link capabilities and parameters at runtime. Two drivers are updated as reference implementations: i915 (direct connector path) and MediaTek (via the bridge connector framework using a new DRM_BRIDGE_OP_DP flag). The changes updating the i915 driver to use DRM managed resources have been removed due to cleanup path issues. The core problem is that some functions do not consistently propagate errors through their call paths (whether this is intentional or not) making it difficult to properly handle cleanup of DRM objects (planes, encoders, connectors). A potential solution would be to implement something similar to devres_group for each DRM object type, but this represents a substantial undertaking that falls outside the scope of this patch series. The MST case in i915 driver is not supported yet. Patch 1: Introduce the core drmm_connector_dp_init() framework Patch 2: Wire the i915 DP connector to use the new helpers Patch 3: Introduce DRM_BRIDGE_OP_DP and wire bridge connectors Patch 4: Wire the MediaTek DP bridge to the new helpers [untested] Signed-off-by: Kory Maincent <[email protected]> --- Changes in v2: - Removed work converting i915 to DRM managed resource - Remove voltage swing and pre-emphasis properties - Expose link training state via sysfs dp_link/ group instead of connector properties - Add comprehensive sysfs attributes for both source and sink capabilities - Add new helpers for managing sink capabilities and for current link parameters - Link to v1: https://lore.kernel.org/r/[email protected] --- Kory Maincent (4): drm: Introduce DisplayPort connector helpers with link training state drm/i915/display/dp: Adopt dp_connector helpers to expose link training state drm/bridge: Wire drmm_connector_dp_init() via new DRM_BRIDGE_OP_DP flag drm/mediatek: Use dp_connector helpers to report link training state drivers/gpu/drm/display/drm_bridge_connector.c | 24 ++++ drivers/gpu/drm/display/drm_dp_helper.c | 144 +++++++++++++++++++++ drivers/gpu/drm/drm_connector.c | 122 +++++++++++++++++ drivers/gpu/drm/drm_sysfs.c | 100 ++++++++++++++ drivers/gpu/drm/i915/display/intel_dp.c | 26 +++- .../gpu/drm/i915/display/intel_dp_link_training.c | 17 +++ drivers/gpu/drm/mediatek/mtk_dp.c | 23 ++++ include/drm/display/drm_dp_helper.h | 7 + include/drm/drm_bridge.h | 13 ++ include/drm/drm_connector.h | 105 +++++++++++++++ 10 files changed, 577 insertions(+), 4 deletions(-) --- base-commit: 4d75f8bd845c10f126e0e66bcdd264e1f9772bde change-id: 20260226-feat_link_cap-20cbb6f31d40 Best regards, -- Köry Maincent, Bootlin Embedded Linux and kernel engineering https://bootlin.com
