summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSuraj Kandpal <suraj.kandpal@intel.com>2026-05-05 12:40:22 +0300
committerSuraj Kandpal <suraj.kandpal@intel.com>2026-05-11 06:58:48 +0300
commit0161e2c2016337a2f22ef79dff0aee43c0841bce (patch)
treeea6a297d9a677e7d48ec9cf70cccfa85c9c5e698
parent775fb670745015d679a65f948b3da0fbff3f100c (diff)
downloadlinux-0161e2c2016337a2f22ef79dff0aee43c0841bce.tar.xz
drm/i915/hdcp: Skip inactive MST connectors when building stream list
intel_hdcp_required_content_stream() walks every connector on the digital port to populate hdcp_port_data->streams[]. The only filter is connector_status_disconnected, which reflects physical presence on the MST topology, not whether the connector currently drives a stream. On a multi-sink MST setup where only a subset of sinks are modeset, the loop can pick a sibling MST connector that is connected but has no active CRTC / VC payload. intel_conn_to_vcpi() then logs "MST Payload not present" and returns 0, and the bogus StreamID=0 is written to the repeater in RepeaterAuth_Stream_Manage (DPCD 0x693F0). Authentication completes, but the repeater shortly raises LINK_INTEGRITY_FAILURE (RxStatus 0x69493 bit4) because the StreamID does not match any stream on its input. The HDCP check work then tears the link down, the Content Protection property drops back to DESIRED, and userspace observes a spurious HDCP enable failure. Filter the connector iteration to only those with a CRTC assigned in the new atomic state, so intel_conn_to_vcpi() is called for the connector actually being enabled and reads its real VCPI from the MST topology state. Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com> Reviewed-by: Santhosh Reddy Guddati <santhosh.reddy.guddati@intel.com> Link: https://patch.msgid.link/20260505094022.4064256-1-suraj.kandpal@intel.com
-rw-r--r--drivers/gpu/drm/i915/display/intel_hdcp.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c
index 982f698e9814..25aca99682fd 100644
--- a/drivers/gpu/drm/i915/display/intel_hdcp.c
+++ b/drivers/gpu/drm/i915/display/intel_hdcp.c
@@ -113,6 +113,7 @@ intel_hdcp_required_content_stream(struct intel_atomic_state *state,
{
struct intel_display *display = to_intel_display(state);
struct drm_connector_list_iter conn_iter;
+ struct drm_connector_state *new_conn_state;
struct intel_digital_port *conn_dig_port;
struct intel_connector *connector;
struct hdcp_port_data *data = &dig_port->hdcp.port_data;
@@ -139,6 +140,11 @@ intel_hdcp_required_content_stream(struct intel_atomic_state *state,
if (conn_dig_port != dig_port)
continue;
+ new_conn_state = drm_atomic_get_new_connector_state(&state->base,
+ &connector->base);
+ if (!new_conn_state || !new_conn_state->crtc)
+ continue;
+
data->streams[data->k].stream_id =
intel_conn_to_vcpi(state, connector);
data->k++;