diff options
author | Diana Z <dzigterman@chromium.org> | 2022-01-22 13:47:35 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2022-02-09 01:23:58 +0000 |
commit | 6ebb212a166d1a53a32770815e77439ec0ecc2af (patch) | |
tree | b63e2fae07c78ea84d93077b4bff8035651294af /baseboard/brya | |
parent | a6d42dced51b81293ed28085e1b618ca7b736999 (diff) | |
download | chrome-ec-6ebb212a166d1a53a32770815e77439ec0ecc2af.tar.gz |
Brya: Add TBT UFP board policy
Add policy tracking to the brya baseboard for whether TBT UFP mode
entry has been enabled.
BRANCH=None
BUG=b:213024508
TEST=on brya, confirm we NAK UFP mode entry until explicitly allowed
by the AP, and then NAK again when disallowed
Signed-off-by: Diana Z <dzigterman@chromium.org>
Change-Id: I9816e815e2138a406fa5484d83bc22ed21192506
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3411536
Reviewed-by: Abe Levkoy <alevkoy@chromium.org>
Diffstat (limited to 'baseboard/brya')
-rw-r--r-- | baseboard/brya/usb_pd_policy.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/baseboard/brya/usb_pd_policy.c b/baseboard/brya/usb_pd_policy.c index df291bd9c9..f2ee86a6b4 100644 --- a/baseboard/brya/usb_pd_policy.c +++ b/baseboard/brya/usb_pd_policy.c @@ -163,6 +163,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) { @@ -172,6 +189,10 @@ static int svdm_tbt_compat_response_enter_mode( 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 */ |