summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhuohao Lee <zhuohao@chromium.org>2022-08-16 15:48:14 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-08-16 18:55:11 +0000
commit863474ebc60e9e19f621fb4fdd8158a80c3f0588 (patch)
treeabc33adab532fe1bdec485602bbe86e436da909b
parente6096667e75006de0a0a74b1a923d51131998b75 (diff)
downloadchrome-ec-863474ebc60e9e19f621fb4fdd8158a80c3f0588.tar.gz
Brask: Add TBT UFP board policy
Add policy tracking to the brask baseboard for whether TBT UFP mode entry has been enabled. This patch is synced from the brya patch: http://crrev/c/3411536 BRANCH=None BUG=b:213024508 TEST=build pass Change-Id: I707fca499dc1ae894ab55d9cc49cebc138045cf6 Signed-off-by: Zhuohao Lee <zhuohao@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3833262 Reviewed-by: Abe Levkoy <alevkoy@chromium.org> Commit-Queue: Abe Levkoy <alevkoy@chromium.org>
-rw-r--r--baseboard/brask/usb_pd_policy.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/baseboard/brask/usb_pd_policy.c b/baseboard/brask/usb_pd_policy.c
index d76af26397..da39d2004f 100644
--- a/baseboard/brask/usb_pd_policy.c
+++ b/baseboard/brask/usb_pd_policy.c
@@ -155,6 +155,23 @@ static int svdm_tbt_compat_response_modes(int port, uint32_t *payload)
}
}
+/* Track whether we've been enabled to ACK TBT EnterModes requests */
+static bool tbt_ufp_ack_allowed[CONFIG_USB_PD_PORT_MAX_COUNT];
+
+__override enum ec_status
+board_set_tbt_ufp_reply(int port, enum typec_tbt_ufp_reply reply)
+{
+ /* Note: Host command has already bounds-checked port */
+ if (reply == TYPEC_TBT_UFP_REPLY_ACK)
+ tbt_ufp_ack_allowed[port] = true;
+ else if (reply == TYPEC_TBT_UFP_REPLY_NAK)
+ tbt_ufp_ack_allowed[port] = false;
+ else
+ return EC_RES_INVALID_PARAM;
+
+ return EC_RES_SUCCESS;
+}
+
static int svdm_tbt_compat_response_enter_mode(int port, uint32_t *payload)
{
mux_state_t mux_state = 0;
@@ -163,6 +180,10 @@ static int svdm_tbt_compat_response_enter_mode(int port, uint32_t *payload)
if (chipset_in_or_transitioning_to_state(CHIPSET_STATE_ANY_OFF))
return 0; /* NAK */
+ /* Do not enter mode while policy disallows it */
+ if (!tbt_ufp_ack_allowed[port])
+ return 0; /* NAK */
+
if ((PD_VDO_VID(payload[0]) != USB_VID_INTEL) ||
(PD_VDO_OPOS(payload[0]) != OPOS_TBT))
return 0; /* NAK */