diff options
author | Ting Shen <phoenixshen@google.com> | 2022-04-28 18:17:23 +0800 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-04-29 07:42:21 +0000 |
commit | 98770c9327a95f2a13425eb6e3bb65ea19292992 (patch) | |
tree | 1617edeca4e33cd06573e4f43e63d278bb0b01a3 | |
parent | 7c7da59e13e244ccb00916a7b07148b58e1248a6 (diff) | |
download | chrome-ec-98770c9327a95f2a13425eb6e3bb65ea19292992.tar.gz |
tcpm/it8xxx2: determine retry count by protocol version
Replace the hard-coded retry count by dynamically checking protocol
version. This is required to pass PD2.0 related tests.
BUG=b:229700747
TEST=pass compliance test TEST.PD.PROT.ALL.01
BRANCH=none
Signed-off-by: Ting Shen <phoenixshen@google.com>
Change-Id: I749649e6d6360295824179dfdc939a0aa2d6ea38
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3613161
Tested-by: Ting Shen <phoenixshen@chromium.org>
Reviewed-by: Eric Yilun Lin <yllin@google.com>
Commit-Queue: Ting Shen <phoenixshen@chromium.org>
Reviewed-by: Ruibin Chang <Ruibin.Chang@ite.com.tw>
-rw-r--r-- | driver/tcpm/it8xxx2.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/driver/tcpm/it8xxx2.c b/driver/tcpm/it8xxx2.c index 7bed654132..e1d4ad5d5c 100644 --- a/driver/tcpm/it8xxx2.c +++ b/driver/tcpm/it8xxx2.c @@ -204,6 +204,7 @@ static enum tcpc_transmit_complete it8xxx2_tx_data(enum usbpd_port port, int r; uint32_t evt; uint8_t length = PD_HEADER_CNT(header); + uint8_t retry_count = pd_get_retry_count(port, type); /* Set message header */ IT83XX_USBPD_MHSR0(port) = (uint8_t)header; @@ -216,6 +217,10 @@ static enum tcpc_transmit_complete it8xxx2_tx_data(enum usbpd_port port, IT83XX_USBPD_MTSR0(port) = (IT83XX_USBPD_MTSR0(port) & ~0x7) | (type & 0x7); + /* According PD version set HW auto retry count */ + IT83XX_USBPD_PDCSR0(port) = (IT83XX_USBPD_PDCSR0(port) & ~0xC0) | + (retry_count << 6); + /* Limited by PD_HEADER_CNT() */ ASSERT(length <= 0x7); @@ -223,7 +228,7 @@ static enum tcpc_transmit_complete it8xxx2_tx_data(enum usbpd_port port, /* Set data */ memcpy((uint32_t *)&IT83XX_USBPD_TDO(port), buf, length * 4); - for (r = 0; r <= CONFIG_PD_RETRY_COUNT; r++) { + for (r = 0; r <= retry_count; r++) { /* Start Tx */ USBPD_KICK_TX_START(port); evt = task_wait_event_mask(TASK_EVENT_PHY_TX_DONE, @@ -266,7 +271,7 @@ static enum tcpc_transmit_complete it8xxx2_tx_data(enum usbpd_port port, break; } - if (r > CONFIG_PD_RETRY_COUNT) + if (r > retry_count) return TCPC_TX_COMPLETE_DISCARDED; return TCPC_TX_COMPLETE_SUCCESS; @@ -765,9 +770,6 @@ static void it8xxx2_init(enum usbpd_port port, int role) /* Reset and disable HW auto generate message header */ IT83XX_USBPD_PDMSR(port) &= ~USBPD_REG_MASK_DISABLE_AUTO_GEN_TX_HEADER; USBPD_SW_RESET(port); - /* According PD version set HW auto retry count */ - IT83XX_USBPD_PDCSR0(port) = (IT83XX_USBPD_PDCSR0(port) & ~0xC0) | - (CONFIG_PD_RETRY_COUNT << 6); /* Disable Rx decode */ it8xxx2_tcpm_set_rx_enable(port, 0); if (IS_ENABLED(CONFIG_USB_PD_TCPMV1)) { |