From 3d07d8f54721123693624ce35235f1afc8b75b54 Mon Sep 17 00:00:00 2001 From: Edward Hill Date: Sun, 2 Aug 2020 18:08:48 -0600 Subject: test: Add PD TX and RX to usb_tcpmv2_tcpci BUG=b:162369240 BRANCH=none TEST=make -j run-usb_tcpmv2_tcpci Signed-off-by: Edward Hill Change-Id: I61a9f99a10c3432135a91699ac04ff65690388e7 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2335455 Commit-Queue: Jett Rink Reviewed-by: Denis Brockus Reviewed-by: Jett Rink --- test/test_config.h | 3 ++ test/usb_tcpmv2_tcpci.c | 101 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 102 insertions(+), 2 deletions(-) (limited to 'test') diff --git a/test/test_config.h b/test/test_config.h index 00cf881e4c..5f52e45952 100644 --- a/test/test_config.h +++ b/test/test_config.h @@ -425,6 +425,7 @@ int ncp15wb_calculate_temp(uint16_t adc); #define CONFIG_USB_DRP_ACC_TRYSRC #define CONFIG_USB_PD_DUAL_ROLE #define CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE +#define CONFIG_USB_PD_REV30 #define CONFIG_USB_PD_TCPC_LOW_POWER #define CONFIG_USB_PD_TRY_SRC #define CONFIG_USB_PD_TCPMV2 @@ -442,6 +443,8 @@ int ncp15wb_calculate_temp(uint16_t adc); #define CONFIG_I2C #define CONFIG_I2C_MASTER #define I2C_PORT_HOST_TCPC 0 +#define CONFIG_USB_PD_DEBUG_LEVEL 3 +#define CONFIG_USB_PD_EXTENDED_MESSAGES #endif #ifdef TEST_USB_PD_INT diff --git a/test/usb_tcpmv2_tcpci.c b/test/usb_tcpmv2_tcpci.c index cc8bf3026a..84bedd3e66 100644 --- a/test/usb_tcpmv2_tcpci.c +++ b/test/usb_tcpmv2_tcpci.c @@ -68,6 +68,11 @@ const struct svdm_response svdm_rsp = { .modes = NULL, }; +bool vboot_allow_usb_pd(void) +{ + return 1; +} + int pd_check_vconn_swap(int port) { return 1; @@ -93,7 +98,7 @@ const struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = { } }; -__maybe_unused static int test_connect_as_sink(void) +__maybe_unused static int test_connect_as_nonpd_sink(void) { task_wait_event(10 * SECOND); @@ -136,6 +141,97 @@ __maybe_unused static int test_startup_and_resume(void) return EC_SUCCESS; } + +__maybe_unused static int test_connect_as_pd3_source(void) +{ + int rx_id = 0; + uint32_t rdo = RDO_FIXED(1, 500, 500, 0); + + /* DRP auto-toggling with AP in S0, source enabled. */ + TEST_EQ(test_startup_and_resume(), EC_SUCCESS, "%d"); + + /* + * PROC.PD.E1. Bring-up procedure for DFP(Source) UUT: + * a) The test starts in a disconnected state. + */ + mock_tcpci_set_reg(TCPC_REG_EXT_STATUS, TCPC_REG_EXT_STATUS_SAFE0V); + mock_set_alert(TCPC_REG_ALERT_EXT_STATUS); + task_wait_event(10 * SECOND); + + /* + * b) The Tester applies Rd and waits for Vbus for tNoResponse max. + */ + mock_set_cc(MOCK_CC_WE_ARE_SRC, MOCK_CC_SRC_OPEN, MOCK_CC_SRC_RD); + mock_set_alert(TCPC_REG_ALERT_CC_STATUS); + + /* + * c) The Tester waits for Source_Capabilities for tNoResponse max. + */ + TEST_EQ(mock_tcpci_wait_for_transmit( + TCPC_TX_SOP, 0, PD_DATA_SOURCE_CAP), EC_SUCCESS, "%d"); + /* + * d) The Tester replies GoodCrc on reception of the + * Source_Capabilities. + */ + mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS); + task_wait_event(10 * MSEC); + /* + * e) The Tester requests 5V 0.5A. + */ + mock_tcpci_receive(PD_MSG_SOP, + PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, + PD_ROLE_UFP, rx_id, + 1, PD_REV30, 0), + &rdo); + mock_set_alert(TCPC_REG_ALERT_RX_STATUS); + TEST_EQ(mock_tcpci_wait_for_transmit( + TCPC_TX_SOP, PD_CTRL_ACCEPT, 0), EC_SUCCESS, "%d"); + mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS); + /* + * f) The Tester waits for PS_RDY for tPSSourceOn max. + */ + TEST_EQ(mock_tcpci_wait_for_transmit( + TCPC_TX_SOP, PD_CTRL_PS_RDY, 0), EC_SUCCESS, "%d"); + mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS); + + /* + * PROC.PD.E3. Wait to Start AMS for DFP(Source) UUT: + * a) The Tester keeps monitoring the Rp value and if the UUT doesn't + * set the value to SinkTXOK if it doesn't have anything to send in 1s, + * the test fails. During this period, the Tester replies any message + * sent from the UUT with a proper response. + */ + TEST_EQ(mock_tcpci_wait_for_transmit( + TCPC_TX_SOP_PRIME, 0, PD_DATA_VENDOR_DEF), EC_SUCCESS, "%d"); + mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS); + task_wait_event(10 * MSEC); + mock_tcpci_receive(PD_MSG_SOP_PRIME, + PD_HEADER(PD_CTRL_NOT_SUPPORTED, PD_PLUG_FROM_CABLE, + PD_ROLE_UFP, 1, + 0, PD_REV30, 0), + NULL); + mock_set_alert(TCPC_REG_ALERT_RX_STATUS); + + TEST_EQ(mock_tcpci_wait_for_transmit( + TCPC_TX_SOP, 0, PD_DATA_VENDOR_DEF), EC_SUCCESS, "%d"); + mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS); + task_wait_event(10 * MSEC); + mock_tcpci_receive(PD_MSG_SOP, + PD_HEADER(PD_CTRL_NOT_SUPPORTED, PD_ROLE_SINK, + PD_ROLE_UFP, 2, + 0, PD_REV30, 0), + NULL); + mock_set_alert(TCPC_REG_ALERT_RX_STATUS); + + task_wait_event(1 * SECOND); + TEST_EQ(tc_is_attached_src(PORT0), true, "%d"); + TEST_EQ(TCPC_REG_ROLE_CTRL_RP(mock_tcpci_get_reg(TCPC_REG_ROLE_CTRL)), + SINK_TX_OK, "%d"); + + task_wait_event(10 * SECOND); + return EC_SUCCESS; +} + void before_test(void) { mock_usb_mux_reset(); @@ -150,8 +246,9 @@ void run_test(int argc, char **argv) { test_reset(); - RUN_TEST(test_connect_as_sink); + RUN_TEST(test_connect_as_nonpd_sink); RUN_TEST(test_startup_and_resume); + RUN_TEST(test_connect_as_pd3_source); test_print_result(); } -- cgit v1.2.1