On Tue, Oct 28, 2025 at 12:07:53PM -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)
> v6: Use intel_tc_port_lock/Unlock (Imre)
> 
> Cc: Ville Syrjälä <[email protected]>
> Cc: Imre Deak <[email protected]>
> Cc: Jani Nikula <[email protected]>
> Signed-off-by: Khaled Almahallawy <[email protected]>

Reviewed-by: Imre Deak <[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..08e94004d3a7 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);
> +
> +     intel_tc_port_lock(dig_port);
> +     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);
> +     intel_tc_port_unlock(dig_port);
> +}
> +
>  /*
>   * 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
> 

Reply via email to