summaryrefslogtreecommitdiff
path: root/common/usbc
diff options
context:
space:
mode:
authorli feng <li1.feng@intel.com>2020-09-30 22:41:33 -0700
committerCommit Bot <commit-bot@chromium.org>2020-10-14 16:13:24 +0000
commit63f70fa5bf21392b28c80d6190c4d8bb964ca703 (patch)
treed6acb9a7ad0902c852ecb8b895c2fd368ebf9c91 /common/usbc
parent4e64f97581b0931d3c8aeebc5b259efe10cc8c2a (diff)
downloadchrome-ec-63f70fa5bf21392b28c80d6190c4d8bb964ca703.tar.gz
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 <li1.feng@intel.com> Change-Id: I10e16bff89175fe8425a6c7afc31141a6a5d573f Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2441962 Reviewed-by: Abe Levkoy <alevkoy@chromium.org> Signed-off-by: Keith Short <keithshort@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2471624
Diffstat (limited to 'common/usbc')
-rw-r--r--common/usbc/tbt_alt_mode.c21
1 files 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,