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>
This commit is contained in:
Jett Rink 2019-10-07 11:09:01 -06:00 committed by Commit Bot
parent 84ffa0bd38
commit dd1dbd8fee
6 changed files with 97 additions and 1 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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

View File

@ -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

10
test/usb_common.tasklist Normal file
View File

@ -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

74
test/usb_common_test.c Normal file
View File

@ -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();
}