On Mon, Oct 27, 2025 at 01:56:28PM -0700, Khaled Almahallawy wrote: > Expose key Type-C port data in i915_display_info to make it easier to > understand the port configuration and active mode, especially whether > the link is in DP-Alt or TBT-Alt, without having to scan kernel logs. > > Tested in DP-Alt, TBT-Alt, SST, and MST. > > Expected output: > > [CONNECTOR:290:DP-2]: status: connected > TC Port: E/TC#2 mode: tbt-alt pin assignment: - max lanes: 4 > physical dimensions: 600x340mm > ... > [CONNECTOR:263:DP-5]: status: connected > TC Port: G/TC#4 mode: dp-alt pin assignment: C max lanes: 4 > physical dimensions: 610x350mm > > v2: Use drm_printer (Ville) > Lock/Unlock around the printf (Imre) > v3: Forward Declaration drm_printer struct (Jani) > v4: Handle MST connector with no active encoder (Imre) > Add a delimiter between fields and ":" after the port name (Imre) > v5: Init dig_port and use it in intel_encorder_is_tc and tc_info (Imre) > Move tc->port_name to a newline (Imre) > > Cc: Ville Syrjälä <[email protected]> > Cc: Imre Deak <[email protected]> > Cc: Jani Nikula <[email protected]> > Signed-off-by: Khaled Almahallawy <[email protected]> > --- > .../gpu/drm/i915/display/intel_display_debugfs.c | 8 ++++++++ > drivers/gpu/drm/i915/display/intel_tc.c | 13 +++++++++++++ > drivers/gpu/drm/i915/display/intel_tc.h | 3 +++ > 3 files changed, 24 insertions(+) > > diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c > b/drivers/gpu/drm/i915/display/intel_display_debugfs.c > index 10dddec3796f..7014331108aa 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c > +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c > @@ -47,6 +47,7 @@ > #include "intel_psr_regs.h" > #include "intel_vdsc.h" > #include "intel_wm.h" > +#include "intel_tc.h" > > static struct intel_display *node_to_intel_display(struct drm_info_node > *node) > { > @@ -246,6 +247,8 @@ static void intel_connector_info(struct seq_file *m, > { > struct intel_connector *intel_connector = to_intel_connector(connector); > const struct drm_display_mode *mode; > + struct drm_printer p = drm_seq_file_printer(m); > + struct intel_digital_port *dig_port = NULL; > > seq_printf(m, "[CONNECTOR:%d:%s]: status: %s\n", > connector->base.id, connector->name, > @@ -268,14 +271,19 @@ static void intel_connector_info(struct seq_file *m, > intel_dp_mst_info(m, intel_connector); > else > intel_dp_info(m, intel_connector); > + dig_port = dp_to_dig_port(intel_attached_dp(intel_connector)); > break; > case DRM_MODE_CONNECTOR_HDMIA: > intel_hdmi_info(m, intel_connector); > + dig_port = > hdmi_to_dig_port(intel_attached_hdmi(intel_connector)); > break; > default: > break; > } > > + if (dig_port != NULL && intel_encoder_is_tc(&dig_port->base)) > + intel_tc_info(&p, dig_port); > + > intel_hdcp_info(m, intel_connector); > > seq_printf(m, "\tmax bpc: %u\n", connector->display_info.bpc); > diff --git a/drivers/gpu/drm/i915/display/intel_tc.c > b/drivers/gpu/drm/i915/display/intel_tc.c > index c4a5601c5107..addc876f455b 100644 > --- a/drivers/gpu/drm/i915/display/intel_tc.c > +++ b/drivers/gpu/drm/i915/display/intel_tc.c > @@ -1703,6 +1703,19 @@ void intel_tc_port_sanitize_mode(struct > intel_digital_port *dig_port, > mutex_unlock(&tc->lock); > } > > +void intel_tc_info(struct drm_printer *p, struct intel_digital_port > *dig_port) > +{ > + struct intel_tc_port *tc = to_tc_port(dig_port); > + > + mutex_lock(&tc->lock);
Missed this in my earlier review, sorry for that: This happens to work only by chance: tc->mode reflects the mode the port was connected in only if the port's PHY is also connected, otherwise tc->mode will be set to disconnected. So this function will print the expected connnected mode only if the PHY happens to be connected at the point the function is called. To fix that could you instead of the mutex_lock/unlock do: intel_tc_port_lock(); drm_printf(); intel_tc_port_unlock(); ? > + drm_printf(p, "\tTC Port %s: mode: %s, pin assignment: %c, max lanes: > %d\n", > + tc->port_name, > + tc_port_mode_name(tc->mode), > + pin_assignment_name(tc->pin_assignment), > + tc->max_lane_count); > + mutex_unlock(&tc->lock); > +} > + > /* > * The type-C ports are different because even when they are connected, they > may > * not be available/usable by the graphics driver: see the comment on > diff --git a/drivers/gpu/drm/i915/display/intel_tc.h > b/drivers/gpu/drm/i915/display/intel_tc.h > index fff8b96e4972..6719aea5bd58 100644 > --- a/drivers/gpu/drm/i915/display/intel_tc.h > +++ b/drivers/gpu/drm/i915/display/intel_tc.h > @@ -8,6 +8,7 @@ > > #include <linux/types.h> > > +struct drm_printer; > struct intel_crtc_state; > struct intel_digital_port; > struct intel_encoder; > @@ -113,4 +114,6 @@ void intel_tc_port_cleanup(struct intel_digital_port > *dig_port); > > bool intel_tc_cold_requires_aux_pw(struct intel_digital_port *dig_port); > > +void intel_tc_info(struct drm_printer *p, struct intel_digital_port > *dig_port); > + > #endif /* __INTEL_TC_H__ */ > -- > 2.43.0 >
