diff options
author | li feng <li1.feng@intel.com> | 2020-09-08 15:57:30 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-09-18 23:39:17 +0000 |
commit | f6b2316d9a42d6b11cbb1a1c449cc0a6d649fa24 (patch) | |
tree | 23ea9be59441268c308c5870603c3df43323e48d | |
parent | 6ed9b65ae38977118f0d5f02d6f5c61da23c5f24 (diff) | |
download | chrome-ec-f6b2316d9a42d6b11cbb1a1c449cc0a6d649fa24.tar.gz |
TCPMv2: set object position in SVDM response header
Per PD 6.4.4 about Object Position,
on receiving Enter Mode request, the responder shall set the offset of
mode entered in Object Position field, and it shall be the same value
as that in request;
on receiving Exit Mode request, the responder shall set the offset of
the mode to be exited in Object Position field, and it shall be the same
value as that in request.
This field shall be set to zero in the request or response(REQ, ACK, NAK
or BUSY) when not required by specification of the individual command.
BUG=b:148528713,b:157163664
BRANCH=none
TEST=make buildall -j 4
Signed-off-by: li feng <li1.feng@intel.com>
Change-Id: Icf68d003abb9f1ab9f71fb0646c5e3fb1c5f644a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2399775
Reviewed-by: Abe Levkoy <alevkoy@chromium.org>
-rw-r--r-- | common/usbc/usb_pe_drp_sm.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/common/usbc/usb_pe_drp_sm.c b/common/usbc/usb_pe_drp_sm.c index 1b3b30801e..b1aaf72c20 100644 --- a/common/usbc/usb_pe_drp_sm.c +++ b/common/usbc/usb_pe_drp_sm.c @@ -5217,6 +5217,7 @@ static void pe_vdm_response_entry(int port) uint32_t *tx_payload; uint16_t vdo_vdm_svid; uint8_t vdo_cmd; + uint8_t vdo_opos = 0; int cmd_type; svdm_rsp_func func = NULL; @@ -5251,6 +5252,7 @@ static void pe_vdm_response_entry(int port) func = svdm_rsp.modes; break; case CMD_ENTER_MODE: + vdo_opos = PD_VDO_OPOS(rx_payload[0]); func = svdm_rsp.enter_mode; break; case CMD_DP_STATUS: @@ -5260,6 +5262,7 @@ static void pe_vdm_response_entry(int port) func = svdm_rsp.amode->config; break; case CMD_EXIT_MODE: + vdo_opos = PD_VDO_OPOS(rx_payload[0]); func = svdm_rsp.exit_mode; break; #ifdef CONFIG_USB_PD_ALT_MODE_DFP @@ -5301,6 +5304,7 @@ static void pe_vdm_response_entry(int port) 1, /* Structured VDM */ VDO_SVDM_VERS(pd_get_vdo_ver(port, TCPC_TX_SOP)) | VDO_CMDT(CMDT_RSP_ACK) | + VDO_OPOS(vdo_opos) | vdo_cmd); else if (response_size_bytes == 0) /* NAK */ @@ -5309,6 +5313,7 @@ static void pe_vdm_response_entry(int port) 1, /* Structured VDM */ VDO_SVDM_VERS(pd_get_vdo_ver(port, TCPC_TX_SOP)) | VDO_CMDT(CMDT_RSP_NAK) | + VDO_OPOS(vdo_opos) | vdo_cmd); else /* BUSY */ @@ -5317,6 +5322,7 @@ static void pe_vdm_response_entry(int port) 1, /* Structured VDM */ VDO_SVDM_VERS(pd_get_vdo_ver(port, TCPC_TX_SOP)) | VDO_CMDT(CMDT_RSP_BUSY) | + VDO_OPOS(vdo_opos) | vdo_cmd); if (response_size_bytes <= 0) @@ -5328,6 +5334,7 @@ static void pe_vdm_response_entry(int port) 1, /* Structured VDM */ VDO_SVDM_VERS(pd_get_vdo_ver(port, TCPC_TX_SOP)) | VDO_CMDT(CMDT_RSP_NAK) | + VDO_OPOS(vdo_opos) | vdo_cmd); response_size_bytes = 4; } |