summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJett Rink <jettrink@chromium.org>2019-10-07 11:09:01 -0600
committerCommit Bot <commit-bot@chromium.org>2019-10-08 17:14:48 +0000
commitdd1dbd8fee7eedef8dad4fe8a8bbec14a0ea5b2e (patch)
tree1f7ac17718be363bdeb727a397c404c46f9ba041
parent84ffa0bd38cba5e5daba8527c6ed09e91ca43edd (diff)
downloadchrome-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.c2
-rw-r--r--include/usb_common.h1
-rw-r--r--test/build.mk2
-rw-r--r--test/test_config.h9
-rw-r--r--test/usb_common.tasklist10
-rw-r--r--test/usb_common_test.c74
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();
+}