diff options
author | Jett Rink <jettrink@chromium.org> | 2019-10-07 11:09:01 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-10-08 17:14:48 +0000 |
commit | dd1dbd8fee7eedef8dad4fe8a8bbec14a0ea5b2e (patch) | |
tree | 1f7ac17718be363bdeb727a397c404c46f9ba041 | |
parent | 84ffa0bd38cba5e5daba8527c6ed09e91ca43edd (diff) | |
download | chrome-ec-dd1dbd8fee7eedef8dad4fe8a8bbec14a0ea5b2e.tar.gz |
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 <jettrink@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1845811
Reviewed-by: Edward Hill <ecgh@chromium.org>
-rw-r--r-- | common/usb_common.c | 2 | ||||
-rw-r--r-- | include/usb_common.h | 1 | ||||
-rw-r--r-- | test/build.mk | 2 | ||||
-rw-r--r-- | test/test_config.h | 9 | ||||
-rw-r--r-- | test/usb_common.tasklist | 10 | ||||
-rw-r--r-- | test/usb_common_test.c | 74 |
6 files changed, 97 insertions, 1 deletions
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(); +} |