summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorli feng <li1.feng@intel.com>2020-09-08 15:57:30 -0700
committerCommit Bot <commit-bot@chromium.org>2020-09-18 23:39:17 +0000
commitf6b2316d9a42d6b11cbb1a1c449cc0a6d649fa24 (patch)
tree23ea9be59441268c308c5870603c3df43323e48d
parent6ed9b65ae38977118f0d5f02d6f5c61da23c5f24 (diff)
downloadchrome-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.c7
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;
}