From 4c3b024809702c348491c49bec4318a679a6ecad Mon Sep 17 00:00:00 2001 From: Edward Hill Date: Wed, 5 Aug 2020 19:50:07 -0600 Subject: test: Soft_Reset sent regardless of Rp value Add test for TD.PD.SRC3.E26.Soft_Reset sent regardless of Rp value. BUG=b:161835483 BRANCH=none TEST=make -j run-usb_tcpmv2_tcpci Signed-off-by: Edward Hill Change-Id: I972bffcb1c7a330aef4ebdff98fcd33af9a667be Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2340486 Reviewed-by: Denis Brockus Reviewed-by: Jett Rink Commit-Queue: Denis Brockus --- common/mock/tcpci_i2c_mock.c | 78 ++++++++++++++++++++++++-------------------- common/usbc/usb_pe_drp_sm.c | 6 ++-- 2 files changed, 45 insertions(+), 39 deletions(-) (limited to 'common') diff --git a/common/mock/tcpci_i2c_mock.c b/common/mock/tcpci_i2c_mock.c index 09864cc2d2..fa7268ddf4 100644 --- a/common/mock/tcpci_i2c_mock.c +++ b/common/mock/tcpci_i2c_mock.c @@ -10,7 +10,7 @@ #include "timer.h" #define BUFFER_SIZE 100 -#define MOCK_WAIT_TIMEOUT (5 * SECOND) +#define VERIFY_TIMEOUT (5 * SECOND) struct tcpci_reg { uint8_t offset; @@ -138,31 +138,37 @@ static void print_header(const char *prefix, uint16_t header) id, cnt, ext); } -int verify_tcpci_transmit(enum tcpm_transmit_type tx_type, - enum pd_ctrl_msg_type ctrl_msg, - enum pd_data_msg_type data_msg) +static int verify_transmit(enum tcpm_transmit_type want_tx_type, + int want_tx_retry, + enum pd_ctrl_msg_type want_ctrl_msg, + enum pd_data_msg_type want_data_msg, + int timeout) { - uint64_t timeout = get_time().val + MOCK_WAIT_TIMEOUT; + uint64_t end_time = get_time().val + timeout; TEST_EQ(tcpci_regs[TCPC_REG_TRANSMIT].value, 0, "%d"); - while (get_time().val < timeout) { + while (get_time().val < end_time) { if (tcpci_regs[TCPC_REG_TRANSMIT].value != 0) { + int tx_type = TCPC_REG_TRANSMIT_TYPE( + tcpci_regs[TCPC_REG_TRANSMIT].value); + int tx_retry = TCPC_REG_TRANSMIT_RETRY( + tcpci_regs[TCPC_REG_TRANSMIT].value); uint16_t header = UINT16_FROM_BYTE_ARRAY_LE( tx_buffer, 1); - int type = PD_HEADER_TYPE(header); - int cnt = PD_HEADER_CNT(header); - const uint16_t want_tx_reg = tx_type; - const uint16_t tx_wo_retry = - tcpci_regs[TCPC_REG_TRANSMIT].value & ~0x0030; - - /* Don't validate the retry portion of reg */ - TEST_EQ(tx_wo_retry, want_tx_reg, "0x%x"); - if (ctrl_msg != 0) { - TEST_EQ(ctrl_msg, type, "0x%x"); - TEST_EQ(cnt, 0, "%d"); - } else { - TEST_EQ(data_msg, type, "0x%x"); - TEST_GE(cnt, 1, "%d"); + int pd_type = PD_HEADER_TYPE(header); + int pd_cnt = PD_HEADER_CNT(header); + + TEST_EQ(tx_type, want_tx_type, "%d"); + if (want_tx_retry >= 0) + TEST_EQ(tx_retry, want_tx_retry, "%d"); + + if (want_ctrl_msg != 0) { + TEST_EQ(pd_type, want_ctrl_msg, "0x%x"); + TEST_EQ(pd_cnt, 0, "%d"); + } + if (want_data_msg != 0) { + TEST_EQ(pd_type, want_data_msg, "0x%x"); + TEST_GE(pd_cnt, 1, "%d"); } tcpci_regs[TCPC_REG_TRANSMIT].value = 0; return EC_SUCCESS; @@ -173,25 +179,25 @@ int verify_tcpci_transmit(enum tcpm_transmit_type tx_type, return EC_ERROR_UNKNOWN; } -int verify_tcpci_tx_retry_count(const uint8_t retry_count) +int verify_tcpci_transmit(enum tcpm_transmit_type tx_type, + enum pd_ctrl_msg_type ctrl_msg, + enum pd_data_msg_type data_msg) { - uint64_t timeout = get_time().val + MOCK_WAIT_TIMEOUT; - - TEST_EQ(tcpci_regs[TCPC_REG_TRANSMIT].value, 0, "%d"); - while (get_time().val < timeout) { - if (tcpci_regs[TCPC_REG_TRANSMIT].value != 0) { - const uint16_t tx_retry = TCPC_REG_TRANSMIT_RETRY( - tcpci_regs[TCPC_REG_TRANSMIT].value); + return verify_transmit(tx_type, -1, ctrl_msg, data_msg, VERIFY_TIMEOUT); +} - TEST_EQ(tx_retry, retry_count, "%d"); +int verify_tcpci_tx_timeout(enum tcpm_transmit_type tx_type, + enum pd_ctrl_msg_type ctrl_msg, + enum pd_data_msg_type data_msg, + int timeout) +{ + return verify_transmit(tx_type, -1, ctrl_msg, data_msg, timeout); +} - tcpci_regs[TCPC_REG_TRANSMIT].value = 0; - return EC_SUCCESS; - } - task_wait_event(5 * MSEC); - } - TEST_ASSERT(0); - return EC_ERROR_UNKNOWN; +int verify_tcpci_tx_retry_count(enum tcpm_transmit_type tx_type, + int retry_count) +{ + return verify_transmit(tx_type, retry_count, 0, 0, VERIFY_TIMEOUT); } void mock_tcpci_receive(enum pd_msg_type sop, uint16_t header, diff --git a/common/usbc/usb_pe_drp_sm.c b/common/usbc/usb_pe_drp_sm.c index 34d597f162..5de59c56c2 100644 --- a/common/usbc/usb_pe_drp_sm.c +++ b/common/usbc/usb_pe_drp_sm.c @@ -736,7 +736,6 @@ static inline void send_ctrl_msg(int port, enum tcpm_transmit_type type, #define prl_send_ext_data_msg DO_NOT_USE #define prl_send_ctrl_msg DO_NOT_USE - static void pe_init(int port) { pe[port].flags = 0; @@ -5583,7 +5582,7 @@ uint8_t pd_get_src_cap_cnt(int port) void pd_dfp_discovery_init(int port) { - memset(&pe[port].discovery, 0, sizeof(pe[port].discovery)); + memset(pe[port].discovery, 0, sizeof(pe[port].discovery)); memset(pe[port].partner_amodes, 0, sizeof(pe[port].partner_amodes)); /* Reset the DPM and DP modules to enable alternate mode entry. */ @@ -5600,13 +5599,14 @@ void pd_dfp_discovery_init(int port) #ifdef CONFIG_USB_PD_ALT_MODE_DFP struct pd_discovery *pd_get_am_discovery(int port, enum tcpm_transmit_type type) { + ASSERT(type < DISCOVERY_TYPE_COUNT); return &pe[port].discovery[type]; } struct partner_active_modes *pd_get_partner_active_modes(int port, enum tcpm_transmit_type type) { - assert(type < AMODE_TYPE_COUNT); + ASSERT(type < AMODE_TYPE_COUNT); return &pe[port].partner_amodes[type]; } -- cgit v1.2.1