diff options
author | Aaron Massey <aaronmassey@google.com> | 2022-05-02 16:43:12 -0600 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-05-03 17:46:12 +0000 |
commit | fb79aa74aee541250c5bd295264106601758f1a0 (patch) | |
tree | 12804007258944b092614b5d9bb2047228ae69c2 | |
parent | f112c4b06340a832f7bf90961618dea2e7c0d04d (diff) | |
download | chrome-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.c | 18 | ||||
-rw-r--r-- | zephyr/include/emul/tcpc/emul_tcpci_partner_drp.h | 18 | ||||
-rw-r--r-- | zephyr/test/drivers/src/integration/usbc/usb_pd_ctrl_msg.c | 14 |
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); |