summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Massey <aaronmassey@google.com>2022-05-02 16:43:12 -0600
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-05-03 17:46:12 +0000
commitfb79aa74aee541250c5bd295264106601758f1a0 (patch)
tree12804007258944b092614b5d9bb2047228ae69c2
parentf112c4b06340a832f7bf90961618dea2e7c0d04d (diff)
downloadchrome-ec-fb79aa74aee541250c5bd295264106601758f1a0.tar.gz
test: Abstract PD power role init with DRP emul
During initialization, the DRP tcpci emulator requires setting the power role and data role as source and DFP, respectively. To reduce cognitive load on USB integration test writers abstract drp tcpci emulator initialization with respect to a particular role. BRANCH=none BUG=b:230656752 TEST=zmake test test-drivers Signed-off-by: Aaron Massey <aaronmassey@google.com> Change-Id: Ia063de355d8279aa3d2c21e7dfcf963530566977 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3621796 Reviewed-by: Jeremy Bettis <jbettis@chromium.org>
-rw-r--r--zephyr/emul/tcpc/emul_tcpci_partner_drp.c18
-rw-r--r--zephyr/include/emul/tcpc/emul_tcpci_partner_drp.h18
-rw-r--r--zephyr/test/drivers/src/integration/usbc/usb_pd_ctrl_msg.c14
3 files changed, 35 insertions, 15 deletions
diff --git a/zephyr/emul/tcpc/emul_tcpci_partner_drp.c b/zephyr/emul/tcpc/emul_tcpci_partner_drp.c
index 08a20c7cfc..59e35a829f 100644
--- a/zephyr/emul/tcpc/emul_tcpci_partner_drp.c
+++ b/zephyr/emul/tcpc/emul_tcpci_partner_drp.c
@@ -274,11 +274,21 @@ int tcpci_drp_emul_connect_to_tcpci(struct tcpci_drp_emul_data *data,
/** Check description in emul_tcpci_partner_drp.h */
void tcpci_drp_emul_init(struct tcpci_drp_emul *emul, enum pd_rev_type rev)
{
+ /* By default init as sink */
+ tcpci_drp_emul_init_with_pd_role(emul, rev, PD_ROLE_SINK);
+}
+
+/** Check description in emul_tcpci_partner_drp.h */
+void tcpci_drp_emul_init_with_pd_role(struct tcpci_drp_emul *emul,
+ enum pd_rev_type rev,
+ enum pd_power_role power_role)
+{
tcpci_partner_init(&emul->common_data, tcpci_drp_emul_hard_reset, emul);
- /* By default init as sink */
- emul->common_data.data_role = PD_ROLE_DFP;
- emul->common_data.power_role = PD_ROLE_SINK;
+ emul->common_data.power_role = power_role;
+ emul->common_data.data_role =
+ (power_role == PD_ROLE_SINK) ? PD_ROLE_UFP : PD_ROLE_DFP;
+
emul->common_data.rev = rev;
emul->ops.transmit = tcpci_drp_emul_transmit_op;
@@ -286,7 +296,7 @@ void tcpci_drp_emul_init(struct tcpci_drp_emul *emul, enum pd_rev_type rev)
emul->ops.control_change = NULL;
emul->ops.disconnect = tcpci_drp_emul_disconnect_op;
- emul->data.sink = true;
+ emul->data.sink = power_role == PD_ROLE_SINK;
emul->data.in_pwr_swap = false;
tcpci_src_emul_init_data(&emul->src_data, &emul->common_data);
tcpci_snk_emul_init_data(&emul->snk_data);
diff --git a/zephyr/include/emul/tcpc/emul_tcpci_partner_drp.h b/zephyr/include/emul/tcpc/emul_tcpci_partner_drp.h
index 013849d3e8..f85bd251fe 100644
--- a/zephyr/include/emul/tcpc/emul_tcpci_partner_drp.h
+++ b/zephyr/include/emul/tcpc/emul_tcpci_partner_drp.h
@@ -52,14 +52,28 @@ struct tcpci_drp_emul {
};
/**
- * @brief Initialise USB-C dual role device emulator. Need to be called before
- * any other function that is using common_data.
+ * @brief Initialise USB-C dual role device emulator as a sink. Need to be
+ * called before any other function that is using common_data.
*
* @param emul Pointer to USB-C dual role device emulator
* @param rev The USB-PD revision this port partner supports
*/
void tcpci_drp_emul_init(struct tcpci_drp_emul *emul, enum pd_rev_type rev);
+
+/**
+ * @brief Initialise USB-C dual role device emulator with a specific PD power
+ * role role. Need to be called before any other function that is using
+ * common_data.
+ *
+ * @param emul Pointer to USB-C dual role device emulator
+ * @param rev The USB-PD revision this port partner supports
+ * @param power_role The USB-PD power-role this port partner is when initialized
+ */
+void tcpci_drp_emul_init_with_pd_role(struct tcpci_drp_emul *emul,
+ enum pd_rev_type rev,
+ enum pd_power_role power_role);
+
/**
* @brief Connect emulated device to TCPCI. Connect as sink or source depending
* on sink field in @p data structure. @p common_data power_role field
diff --git a/zephyr/test/drivers/src/integration/usbc/usb_pd_ctrl_msg.c b/zephyr/test/drivers/src/integration/usbc/usb_pd_ctrl_msg.c
index 1bbe256992..4bf50099d8 100644
--- a/zephyr/test/drivers/src/integration/usbc/usb_pd_ctrl_msg.c
+++ b/zephyr/test/drivers/src/integration/usbc/usb_pd_ctrl_msg.c
@@ -26,7 +26,7 @@ struct usb_pd_ctrl_msg_test_fixture {
struct tcpci_drp_emul partner_emul;
const struct emul *tcpci_emul;
const struct emul *charger_emul;
- bool drp_partner_is_sink;
+ enum pd_power_role drp_parter_pd_role;
};
struct usb_pd_ctrl_msg_test_sink_fixture {
@@ -88,7 +88,7 @@ static void *usb_pd_ctrl_msg_sink_setup(void)
struct usb_pd_ctrl_msg_test_fixture *fixture =
usb_pd_ctrl_msg_setup_emul();
- fixture->drp_partner_is_sink = true;
+ fixture->drp_parter_pd_role = PD_ROLE_SINK;
return fixture;
}
@@ -98,7 +98,7 @@ static void *usb_pd_ctrl_msg_source_setup(void)
struct usb_pd_ctrl_msg_test_fixture *fixture =
usb_pd_ctrl_msg_setup_emul();
- fixture->drp_partner_is_sink = false;
+ fixture->drp_parter_pd_role = PD_ROLE_SOURCE;
return fixture;
}
@@ -118,7 +118,8 @@ static void usb_pd_ctrl_msg_before(void *data)
/* TODO(b/214401892): Check why need to give time TCPM to spin */
k_sleep(K_SECONDS(1));
- tcpci_drp_emul_init(&fixture->partner_emul, PD_REV20);
+ tcpci_drp_emul_init_with_pd_role(&fixture->partner_emul, PD_REV20,
+ fixture->drp_parter_pd_role);
/* Add additional Sink PDO to partner to verify
* PE_DR_SNK_Get_Sink_Cap/PE_SRC_Get_Sink_Cap (these are shared PE
@@ -126,14 +127,9 @@ static void usb_pd_ctrl_msg_before(void *data)
*/
fixture->partner_emul.snk_data.pdo[1] = TEST_ADDED_PDO;
- fixture->partner_emul.data.sink = fixture->drp_partner_is_sink;
-
/* Turn TCPCI rev 2 ON */
tcpc_config[TEST_USB_PORT].flags |= TCPC_FLAGS_TCPCI_REV2_0;
- /* Reset to disconnected state */
- disconnect_partner(fixture);
-
tcpci_drp_emul_connect_partner(&fixture->partner_emul,
fixture->tcpci_emul,
fixture->charger_emul);