From dd1dbd8fee7eedef8dad4fe8a8bbec14a0ea5b2e Mon Sep 17 00:00:00 2001 From: Jett Rink Date: Mon, 7 Oct 2019 11:09:01 -0600 Subject: usbc: fix cc interpretation error Ensure that two Rp values are interpreted as a debug accessory. Added unit test for meaningful combinations. BRANCH=none BUG=none TEST=passes unit test. Change-Id: Ia454382f20f9377edc944dc01be133e062c218b0 Signed-off-by: Jett Rink Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1845811 Reviewed-by: Edward Hill --- common/usb_common.c | 2 +- include/usb_common.h | 1 + test/build.mk | 2 ++ test/test_config.h | 9 ++++++ test/usb_common.tasklist | 10 +++++++ test/usb_common_test.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 test/usb_common.tasklist create mode 100644 test/usb_common_test.c diff --git a/common/usb_common.c b/common/usb_common.c index 62fbe7f940..85e81b8042 100644 --- a/common/usb_common.c +++ b/common/usb_common.c @@ -97,7 +97,7 @@ enum pd_cc_states pd_get_cc_state( /* Port partner is a SRC */ if (cc_is_rp(cc1) && cc_is_rp(cc2)) - return PD_CC_DFP_ATTACHED; + return PD_CC_DFP_DEBUG_ACC; if (cc_is_rp(cc1) || cc_is_rp(cc2)) return PD_CC_DFP_ATTACHED; diff --git a/include/usb_common.h b/include/usb_common.h index 6fa7bb650f..85260d539d 100644 --- a/include/usb_common.h +++ b/include/usb_common.h @@ -8,6 +8,7 @@ /* Functions that are shared between old and new PD stacks */ #include "usb_pd.h" #include "usb_pd_tcpm.h" +#include "task_id.h" /* Returns the battery percentage [0-100] of the system. */ int usb_get_battery_soc(void); diff --git a/test/build.mk b/test/build.mk index 65a28fc3f6..e9a7f53648 100644 --- a/test/build.mk +++ b/test/build.mk @@ -67,6 +67,7 @@ test-list-host += system test-list-host += thermal test-list-host += timer_dos test-list-host += uptime +test-list-host += usb_common test-list-host += usb_pd test-list-host += usb_pd_giveback test-list-host += usb_pd_rev30 @@ -143,6 +144,7 @@ thermal-y=thermal.o timer_calib-y=timer_calib.o timer_dos-y=timer_dos.o uptime-y=uptime.o +usb_common-y=usb_common_test.o usb_pd-y=usb_pd.o usb_pd_giveback-y=usb_pd.o usb_pd_rev30-y=usb_pd.o diff --git a/test/test_config.h b/test/test_config.h index c422143112..b6dfbb29b8 100644 --- a/test/test_config.h +++ b/test/test_config.h @@ -230,6 +230,15 @@ int ncp15wb_calculate_temp(uint16_t adc); #define CONFIG_ALS_LIGHTBAR_DIMMING 0 #endif +#ifdef TEST_USB_COMMON +#define CONFIG_USB_POWER_DELIVERY +#define CONFIG_USB_PD_PORT_COUNT 1 +#define CONFIG_USB_PD_TCPC +#define CONFIG_USB_PD_TCPM_STUB +#define CONFIG_SHA256 +#define CONFIG_SW_CRC +#endif + #if defined(TEST_USB_SM_FRAMEWORK_H3) #define CONFIG_USB_PD_PORT_COUNT 1 #undef CONFIG_USB_PRL_SM diff --git a/test/usb_common.tasklist b/test/usb_common.tasklist new file mode 100644 index 0000000000..9bf1c80c20 --- /dev/null +++ b/test/usb_common.tasklist @@ -0,0 +1,10 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/** + * See CONFIG_TASK_LIST in config.h for details. + */ +#define CONFIG_TEST_TASK_LIST + diff --git a/test/usb_common_test.c b/test/usb_common_test.c new file mode 100644 index 0000000000..d054f4ead2 --- /dev/null +++ b/test/usb_common_test.c @@ -0,0 +1,74 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Test USB common module. + */ +#include "test_util.h" +#include "usb_common.h" + +int test_pd_get_cc_state(void) +{ + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RP_3_0, TYPEC_CC_VOLT_RP_3_0), + PD_CC_DFP_DEBUG_ACC, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RP_3_0, TYPEC_CC_VOLT_RP_1_5), + PD_CC_DFP_DEBUG_ACC, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RP_3_0, TYPEC_CC_VOLT_RP_DEF), + PD_CC_DFP_DEBUG_ACC, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RP_1_5, TYPEC_CC_VOLT_RP_3_0), + PD_CC_DFP_DEBUG_ACC, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RP_1_5, TYPEC_CC_VOLT_RP_1_5), + PD_CC_DFP_DEBUG_ACC, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RP_1_5, TYPEC_CC_VOLT_RP_DEF), + PD_CC_DFP_DEBUG_ACC, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RP_DEF, TYPEC_CC_VOLT_RP_3_0), + PD_CC_DFP_DEBUG_ACC, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RP_DEF, TYPEC_CC_VOLT_RP_1_5), + PD_CC_DFP_DEBUG_ACC, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RP_DEF, TYPEC_CC_VOLT_RP_DEF), + PD_CC_DFP_DEBUG_ACC, "%d"); + + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RP_3_0, TYPEC_CC_VOLT_OPEN), + PD_CC_DFP_ATTACHED, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RP_1_5, TYPEC_CC_VOLT_OPEN), + PD_CC_DFP_ATTACHED, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RP_DEF, TYPEC_CC_VOLT_OPEN), + PD_CC_DFP_ATTACHED, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_OPEN, TYPEC_CC_VOLT_RP_3_0), + PD_CC_DFP_ATTACHED, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_OPEN, TYPEC_CC_VOLT_RP_1_5), + PD_CC_DFP_ATTACHED, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_OPEN, TYPEC_CC_VOLT_RP_DEF), + PD_CC_DFP_ATTACHED, "%d"); + + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RD, TYPEC_CC_VOLT_RD), + PD_CC_UFP_DEBUG_ACC, "%d"); + + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RD, TYPEC_CC_VOLT_RA), + PD_CC_UFP_ATTACHED, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RD, TYPEC_CC_VOLT_OPEN), + PD_CC_UFP_ATTACHED, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RA, TYPEC_CC_VOLT_RD), + PD_CC_UFP_ATTACHED, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_OPEN, TYPEC_CC_VOLT_RD), + PD_CC_UFP_ATTACHED, "%d"); + + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RA, TYPEC_CC_VOLT_RA), + PD_CC_UFP_AUDIO_ACC, "%d"); + + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_OPEN, TYPEC_CC_VOLT_OPEN), + PD_CC_NONE, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_OPEN, TYPEC_CC_VOLT_RA), + PD_CC_NONE, "%d"); + TEST_EQ(pd_get_cc_state(TYPEC_CC_VOLT_RA, TYPEC_CC_VOLT_OPEN), + PD_CC_NONE, "%d"); + + return EC_SUCCESS; +} + +void run_test(void) +{ + RUN_TEST(test_pd_get_cc_state); + + test_print_result(); +} -- cgit v1.2.1