From nobody Sat Oct 4 00:32:13 2025 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 222B13126D9 for ; Thu, 21 Aug 2025 20:38:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755808685; cv=none; b=rDFgzTa4n3uQ5w05wpwPyhs/eajyoEHLdCIb7gyPgAWSugwgRe8Ql3Q0qXwp1LDv8jZbrzG3m3NNd1kWGvUpNYHRfSUIRoM/dFMTL4xh01/fA3kYfnbF+GbSXlHOKtcCmLfYB3SmI3EuFucUebPwoHHzQDRXmbn91JQragteb68= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755808685; c=relaxed/simple; bh=LK0ffmxwoRRSpUy6ETRxfmp+bDaVlq/xpqFIqDqFAm8=; h=Date:Mime-Version:Message-ID:Subject:From:Cc:Content-Type; b=UlezftvJioD8Jyqiir+B3MMZYLztYQg6hzaFRyCM+QcOFFAkG+F8TV55TvQ5XOkGarpxR3/0PZEtFcY00OK9B57oSfYZSzucQBEFB0KAsPa+t8Gn7FEIOQoOt/+9wSDje4cf2rrv3D1rB8jcKPNCrbpPfvjxfxiE8iny+jEs5x4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--rdbabiera.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=VOGQNs4A; arc=none smtp.client-ip=209.85.210.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--rdbabiera.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="VOGQNs4A" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-76e2eac5c63so1317977b3a.2 for ; Thu, 21 Aug 2025 13:38:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755808683; x=1756413483; darn=vger.kernel.org; h=cc:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=A6J8iPdaSliSAg1NNjehK3dJ+H9DoeAFsFqVWkQlMvg=; b=VOGQNs4ABqDUuaqcQ4TmXvtFzHHs9sQSpHmYGGr40OMri48cncpSPqoxD1DPWhlZWo UOZYoYBSHobvt/Mey5Ll4SpozKqsCtWl8Ws+OM7uFOS98PGOEZ1HzLM6Q7oOEj8p3KqD Wxq0zj/IPPu1KgLzHkwTaZBuPZ56sqFEKiqtJgvxNCVpFuiVuLH8UGoKpjkuL/OqUTgQ NnqviiCRMG2PXzNznS/JdoA7VHNEqiZVdWVruyhgLz0f6ftBGf4z59/MKrRV3ACC65ln x9EQV5lLNnp725mKHcW3JpuwQPvrL+yDjPLCpsfv5Td/0Yw455AtB2Tj351JNNJIirgX qiBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755808683; x=1756413483; h=cc:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=A6J8iPdaSliSAg1NNjehK3dJ+H9DoeAFsFqVWkQlMvg=; b=Lc0S80ncCj+1gfTtgqggd01BI9QeR6Tn2ruJOf4Zx3HEKwjKxFaGnfvAGmRuk4a1oe 5K+uLQ8j0F6sd0THZ0xKLD+uZ3TGZ7Ps08Rx54xAPWwd7t+5ejD1GbBYeCSHxbnBVH3R 5XxRhE37hXjZtwT4I6nOtn9hcSgNQ5xGM4Gonny4wEsy8jRbUCpfMc97mh/mjfqrTwzm NjYDgrmdHV33d5tW3VRPZSn1BeLKxhe8XFL1eWv4HTp8LGnQMZhbY4VBMt8KCxp2cyn7 NxBAlcYC6JkJ8sfzjys97pkHV3cBwrj24CMwOYj7gOyH+GDIqSEEdJIG1BdSLbAIosq1 8MZA== X-Forwarded-Encrypted: i=1; AJvYcCVqm+NWBTTttPN3R04OydQ4xZ8fFEQgfHtcZ2QTWegfktjXxs8ERLaoSB1KahRw3qmt7auqEA/aMyJKyu4=@vger.kernel.org X-Gm-Message-State: AOJu0YzZJspdwgnW6NL/U8DCZrr/FKVTW8CB5a6FtRy++124RDjUkAdL p3TLL7lqOj24hk4+2QpEk4Mdi63fuL9K/uB4MA4nMUBO3RtXWD7x801xh21hfl8ghdZpEqJlMWm oG2jrm9eyW0Pk8MmLaw== X-Google-Smtp-Source: AGHT+IHTNg2XpUsrE+YHf5HG9pSwBMBRFWraLKsoDyvJj3fw3Vtl+2W4kClcaiFGfxlTTGUbBZuUq4sbjFR1Bu0= X-Received: from pjj13.prod.google.com ([2002:a17:90b:554d:b0:31f:b2f:aeed]) (user=rdbabiera job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:3ca1:b0:23f:f99d:465e with SMTP id adf61e73a8af0-24340c434a3mr587468637.16.1755808683509; Thu, 21 Aug 2025 13:38:03 -0700 (PDT) Date: Thu, 21 Aug 2025 20:37:57 +0000 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Developer-Key: i=rdbabiera@google.com; a=openpgp; fpr=639A331F1A21D691815CE090416E17CA2BBBD5C8 X-Developer-Signature: v=1; a=openpgp-sha256; l=2145; i=rdbabiera@google.com; h=from:subject; bh=LK0ffmxwoRRSpUy6ETRxfmp+bDaVlq/xpqFIqDqFAm8=; b=owGbwMvMwCVW0bfok0KS4TbG02pJDBnLm5fPWCW6yPpk7Yd00bRfWw8tvsKwLnl22AaFJn2/C yLegTr9HaUsDGJcDLJiiiy6/nkGN66kbpnDWWMMM4eVCWQIAxenAEwk+Twjw9V1LKLTm8XazJwe iRgL2W58tI35h9M/x0kr5M5PWJjBysTIcMdyob1ltEs2r451FfNiYbPO/R5cbwNWKWm+WD755FE vTgA= X-Mailer: git-send-email 2.51.0.261.g7ce5a0a67e-goog Message-ID: <20250821203759.1720841-2-rdbabiera@google.com> Subject: [PATCH v1] usb: typec: tcpm: properly deliver cable vdms to altmode drivers From: RD Babiera Cc: heikki.krogerus@linux.intel.com, gregkh@linuxfoundation.org, badhri@google.com, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, RD Babiera , stable@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" tcpm_handle_vdm_request delivers messages to the partner altmode or the cable altmode depending on the SVDM response type, which is incorrect. The partner or cable should be chosen based on the received message type instead. Also add this filter to ADEV_NOTIFY_USB_AND_QUEUE_VDM, which is used when the Enter Mode command is responded to by a NAK on SOP or SOP' and when the Exit Mode command is responded to by an ACK on SOP. Fixes: 7e7877c55eb1 ("usb: typec: tcpm: add alt mode enter/exit/vdm support= for sop'") Cc: stable@vger.kernel.org Signed-off-by: RD Babiera Reviewed-by: Badhri Jagan Sridharan Reviewed-by: Heikki Krogerus --- drivers/usb/typec/tcpm/tcpm.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index 1f6fdfaa34bf..b2a568a5bc9b 100644 --- a/drivers/usb/typec/tcpm/tcpm.c +++ b/drivers/usb/typec/tcpm/tcpm.c @@ -2426,17 +2426,21 @@ static void tcpm_handle_vdm_request(struct tcpm_por= t *port, case ADEV_NONE: break; case ADEV_NOTIFY_USB_AND_QUEUE_VDM: - WARN_ON(typec_altmode_notify(adev, TYPEC_STATE_USB, NULL)); - typec_altmode_vdm(adev, p[0], &p[1], cnt); + if (rx_sop_type =3D=3D TCPC_TX_SOP_PRIME) { + typec_cable_altmode_vdm(adev, TYPEC_PLUG_SOP_P, p[0], &p[1], cnt); + } else { + WARN_ON(typec_altmode_notify(adev, TYPEC_STATE_USB, NULL)); + typec_altmode_vdm(adev, p[0], &p[1], cnt); + } break; case ADEV_QUEUE_VDM: - if (response_tx_sop_type =3D=3D TCPC_TX_SOP_PRIME) + if (rx_sop_type =3D=3D TCPC_TX_SOP_PRIME) typec_cable_altmode_vdm(adev, TYPEC_PLUG_SOP_P, p[0], &p[1], cnt); else typec_altmode_vdm(adev, p[0], &p[1], cnt); break; case ADEV_QUEUE_VDM_SEND_EXIT_MODE_ON_FAIL: - if (response_tx_sop_type =3D=3D TCPC_TX_SOP_PRIME) { + if (rx_sop_type =3D=3D TCPC_TX_SOP_PRIME) { if (typec_cable_altmode_vdm(adev, TYPEC_PLUG_SOP_P, p[0], &p[1], cnt)) { int svdm_version =3D typec_get_cable_svdm_version( base-commit: 956606bafb5fc6e5968aadcda86fc0037e1d7548 --=20 2.51.0.261.g7ce5a0a67e-goog