]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/display: Extend i915_display_info with Type-C port details
authorKhaled Almahallawy <khaled.almahallawy@intel.com>
Tue, 28 Oct 2025 19:07:53 +0000 (12:07 -0700)
committerImre Deak <imre.deak@intel.com>
Tue, 4 Nov 2025 12:27:43 +0000 (14:27 +0200)
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ä <ville.syrjala@linux.intel.com>
Cc: Imre Deak <imre.deak@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Khaled Almahallawy <khaled.almahallawy@intel.com>
Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Link: https://patch.msgid.link/20251028190753.3089937-1-khaled.almahallawy@intel.com
drivers/gpu/drm/i915/display/intel_display_debugfs.c
drivers/gpu/drm/i915/display/intel_tc.c
drivers/gpu/drm/i915/display/intel_tc.h

index 10dddec3796f7cae4cf4def9988dbd7e87323972..7014331108aa47a90e389473683770e090e780ed 100644 (file)
@@ -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);
index f1ed50be3247052bd2f3c2e11cce71faf233ab27..7e17ca0187484d5e6486c473f09d73f5af42c4e5 100644 (file)
@@ -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
index fff8b96e49727b1d82d95231bcecb3edc6172262..6719aea5bd5824b40b7114d301224ecec485bc0e 100644 (file)
@@ -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__ */