From 061d6259110a0b8d913015d9579dcb50f5de5800 Mon Sep 17 00:00:00 2001 From: li feng Date: Wed, 30 Sep 2020 22:41:33 -0700 Subject: TCPMv2: check active cable SVID support According to TBT4 PD flow, SOP' discovery SVID should support USB_VID_INTEL to enable Thunderbolt Alt mode. BUG=none BRANCH=master TEST=1. Volteer EVT connects to TBT dock with TBT passive cable, EC can enter TBT mode 2. Volteer EVT connects to TBT dock with TBT active cable which supports SVID USB_VID_INTEL, EC can enter TBT mode. Signed-off-by: li feng Change-Id: I10e16bff89175fe8425a6c7afc31141a6a5d573f Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2441962 Reviewed-by: Abe Levkoy --- common/usbc/tbt_alt_mode.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/common/usbc/tbt_alt_mode.c b/common/usbc/tbt_alt_mode.c index 4b79f26efb..619d8a5b2e 100644 --- a/common/usbc/tbt_alt_mode.c +++ b/common/usbc/tbt_alt_mode.c @@ -316,9 +316,24 @@ static bool tbt_mode_is_supported(int port, int vdo_count) const struct pd_discovery *disc = pd_get_am_discovery(port, TCPC_TX_SOP); - return disc->identity.idh.modal_support && - is_tbt_cable_superspeed(port) && - get_tbt_cable_speed(port) >= TBT_SS_U31_GEN1; + if (!disc->identity.idh.modal_support) + return false; + + if (!(is_tbt_cable_superspeed(port) && + get_tbt_cable_speed(port) >= TBT_SS_U31_GEN1)) + return false; + + /* + * TBT4 PD Discovery Flow Application Notes Revision 0.9: + * Figure 2: for active cable, SOP' should support + * SVID USB_VID_INTEL to enter Thunderbolt alt mode + */ + if (get_usb_pd_cable_type(port) == IDH_PTYPE_ACABLE && + !pd_is_mode_discovered_for_svid( + port, TCPC_TX_SOP_PRIME, USB_VID_INTEL)) + return false; + + return true; } int tbt_setup_next_vdm(int port, int vdo_count, uint32_t *vdm, -- cgit v1.2.1