diff options
author | Zhuohao Lee <zhuohao@chromium.org> | 2022-08-16 15:48:14 +0800 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-08-16 18:55:11 +0000 |
commit | 863474ebc60e9e19f621fb4fdd8158a80c3f0588 (patch) | |
tree | abc33adab532fe1bdec485602bbe86e436da909b | |
parent | e6096667e75006de0a0a74b1a923d51131998b75 (diff) | |
download | chrome-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.c | 21 |
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 */ |