summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWai-Hong Tam <waihong@google.com>2019-06-28 14:59:26 -0700
committerCommit Bot <commit-bot@chromium.org>2019-07-23 17:47:40 +0000
commit95e5dace9113ab9021fc426aa56bf55e362e369c (patch)
tree2c681ea2ead263d296d3cd586c6775ca4888a39d
parentfac1786d57d7309537e16bd9f96020ad7f420708 (diff)
downloadchrome-ec-95e5dace9113ab9021fc426aa56bf55e362e369c.tar.gz
servo_v4: Support sink roles with PD comm enabled
For the normal lab use, emulating a sink has no PD comm, like a passive hub. For the PD FAFT use, we need to validate some PD behavior, should support sink roles with PD comm enabled. Two new roles "pdsnk" and "pdsnkdts" are introduced. BRANCH=servo BUG=b:134700685 TEST=Typed "cc pdsnk" or "cc pdsnkdts" can transit the DUT port to the PD state "SNK_READY", instead "SNK_DISCOVERY". Change-Id: If6a7c39cd296986b8b28de1c1fbe66ee8438c709 Signed-off-by: Wai-Hong Tam <waihong@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1682920 Reviewed-by: Aseda Aboagye <aaboagye@chromium.org> (cherry picked from commit 7d29ac01ea9c3a6ac3aba2dcace88ca43e2d8201) Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1686280
-rw-r--r--board/servo_v4/usb_pd_config.h1
-rw-r--r--board/servo_v4/usb_pd_policy.c26
2 files changed, 25 insertions, 2 deletions
diff --git a/board/servo_v4/usb_pd_config.h b/board/servo_v4/usb_pd_config.h
index 057cb22e56..0a67583ff1 100644
--- a/board/servo_v4/usb_pd_config.h
+++ b/board/servo_v4/usb_pd_config.h
@@ -60,6 +60,7 @@
#define CC_DISABLE_DTS (1 << 1) /* Apply resistors to single or both CC? */
#define CC_ALLOW_SRC (1 << 2) /* Allow charge through by policy? */
#define CC_ENABLE_DRP (1 << 3) /* Enable dual-role port */
+#define CC_SNK_WITH_PD (1 << 4) /* Force enabling PD comm for sink role */
/* TX uses SPI1 on PB3-4 for CHG port, SPI2 on PB 13-14 for DUT port */
#define SPI_REGS(p) ((p) ? STM32_SPI2_REGS : STM32_SPI1_REGS)
diff --git a/board/servo_v4/usb_pd_policy.c b/board/servo_v4/usb_pd_policy.c
index ec127c734f..b4746628f9 100644
--- a/board/servo_v4/usb_pd_policy.c
+++ b/board/servo_v4/usb_pd_policy.c
@@ -39,6 +39,9 @@
CC_ENABLE_DRP)
#define CONFIG_SNK(c) CONFIG_SET_CLEAR(c, \
CC_DISABLE_DTS, \
+ CC_ALLOW_SRC | CC_ENABLE_DRP | CC_SNK_WITH_PD)
+#define CONFIG_PDSNK(c) CONFIG_SET_CLEAR(c, \
+ CC_DISABLE_DTS | CC_SNK_WITH_PD, \
CC_ALLOW_SRC | CC_ENABLE_DRP)
#define CONFIG_DRP(c) CONFIG_SET_CLEAR(c, \
CC_DISABLE_DTS | CC_ALLOW_SRC | CC_ENABLE_DRP, \
@@ -48,6 +51,10 @@
CC_ENABLE_DRP | CC_DISABLE_DTS)
#define CONFIG_SNKDTS(c) CONFIG_SET_CLEAR(c, \
0, \
+ CC_ALLOW_SRC | CC_ENABLE_DRP | \
+ CC_DISABLE_DTS | CC_SNK_WITH_PD)
+#define CONFIG_PDSNKDTS(c) CONFIG_SET_CLEAR(c, \
+ CC_SNK_WITH_PD, \
CC_ALLOW_SRC | CC_ENABLE_DRP | CC_DISABLE_DTS)
#define CONFIG_DRPDTS(c) CONFIG_SET_CLEAR(c, \
CC_ALLOW_SRC | CC_ENABLE_DRP, \
@@ -794,7 +801,17 @@ static void do_cc(int cc_config_new)
*/
if (dualrole != PD_DRP_TOGGLE_ON)
pd_set_host_mode(DUT, chargeable);
- pd_comm_enable(DUT, chargeable);
+
+ /*
+ * For the normal lab use, emulating a sink has no PD
+ * comm, like a passive hub. For the PD FAFT use, we
+ * need to validate some PD behavior, so a flag
+ * CC_SNK_WITH_PD to force enabling PD comm.
+ */
+ if (cc_config & CC_SNK_WITH_PD)
+ pd_comm_enable(DUT, 1);
+ else
+ pd_comm_enable(DUT, chargeable);
}
}
}
@@ -818,12 +835,16 @@ static int command_cc(int argc, char **argv)
cc_config_new = CONFIG_SRC(cc_config_new);
else if (!strcasecmp(argv[1], "snk"))
cc_config_new = CONFIG_SNK(cc_config_new);
+ else if (!strcasecmp(argv[1], "pdsnk"))
+ cc_config_new = CONFIG_PDSNK(cc_config_new);
else if (!strcasecmp(argv[1], "drp"))
cc_config_new = CONFIG_DRP(cc_config_new);
else if (!strcasecmp(argv[1], "srcdts"))
cc_config_new = CONFIG_SRCDTS(cc_config_new);
else if (!strcasecmp(argv[1], "snkdts"))
cc_config_new = CONFIG_SNKDTS(cc_config_new);
+ else if (!strcasecmp(argv[1], "pdsnkdts"))
+ cc_config_new = CONFIG_PDSNKDTS(cc_config_new);
else if (!strcasecmp(argv[1], "drpdts"))
cc_config_new = CONFIG_DRPDTS(cc_config_new);
else
@@ -836,7 +857,8 @@ static int command_cc(int argc, char **argv)
return EC_SUCCESS;
}
DECLARE_CONSOLE_COMMAND(cc, command_cc,
- "[off|on|src|snk|drp|srcdts|snkdts|drpdts]",
+ "[off|on|src|snk|pdsnk|drp|srcdts|snkdts|pdsnkdts|"
+ "drpdts]",
"Servo_v4 DTS and CHG mode");
static void fake_disconnect_end(void)