From 1fe446bc92ba7f267dd5f854795a8e0d5883d25f Mon Sep 17 00:00:00 2001 From: Abe Levkoy Date: Fri, 7 Oct 2022 11:26:40 -0600 Subject: zephyr test: Add empty usbc_vconn_swap test target Add a new test target for future VCONN Swap tests. Add a suite with no tests but a common fixture and setup/before/after functions and a layer of indirection to allow those functions to be trivially but type-safely reused in other suites with "different" fixtures. BUG=b:251485312 TEST=./twister -s zephyr/test/drivers/drivers.usbc_vconn_swap BRANCH=none Signed-off-by: Abe Levkoy Change-Id: I4639275ff66f1bf780495ef2c310c8382a234d09 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3943257 Reviewed-by: Aaron Massey Code-Coverage: Zoss --- zephyr/test/drivers/CMakeLists.txt | 1 + zephyr/test/drivers/Kconfig | 5 + zephyr/test/drivers/testcase.yaml | 3 + zephyr/test/drivers/usbc_vconn_swap/CMakeLists.txt | 7 ++ .../usbc_vconn_swap/include/usbc_vconn_swap.h | 14 +++ .../drivers/usbc_vconn_swap/src/usbc_vconn_swap.c | 129 +++++++++++++++++++++ 6 files changed, 159 insertions(+) create mode 100644 zephyr/test/drivers/usbc_vconn_swap/CMakeLists.txt create mode 100644 zephyr/test/drivers/usbc_vconn_swap/include/usbc_vconn_swap.h create mode 100644 zephyr/test/drivers/usbc_vconn_swap/src/usbc_vconn_swap.c diff --git a/zephyr/test/drivers/CMakeLists.txt b/zephyr/test/drivers/CMakeLists.txt index c9f5f606d3..76f170573a 100644 --- a/zephyr/test/drivers/CMakeLists.txt +++ b/zephyr/test/drivers/CMakeLists.txt @@ -67,6 +67,7 @@ add_subdirectory_ifdef(CONFIG_LINK_TEST_SUITE_USB_RETIMER_FW_UPDATE usb_retimer_ add_subdirectory_ifdef(CONFIG_LINK_TEST_SUITE_USBC_ALT_MODE usbc_alt_mode) add_subdirectory_ifdef(CONFIG_LINK_TEST_SUITE_USBC_SVDM_DFP_ONLY usbc_svdm_dfp_only) add_subdirectory_ifdef(CONFIG_LINK_TEST_SUITE_USBC_TBT_MODE usbc_tbt_mode) +add_subdirectory_ifdef(CONFIG_LINK_TEST_SUITE_USBC_VCONN_SWAP usbc_vconn_swap) add_subdirectory_ifdef(CONFIG_LINK_TEST_SUITE_USBC_OCP usbc_ocp) add_subdirectory_ifdef(CONFIG_LINK_TEST_SUITE_USBC_PPC usbc_ppc) add_subdirectory_ifdef(CONFIG_LINK_TEST_SUITE_HOST_COMMANDS host_cmd) diff --git a/zephyr/test/drivers/Kconfig b/zephyr/test/drivers/Kconfig index 3cf356d2ab..fcc06dee9b 100644 --- a/zephyr/test/drivers/Kconfig +++ b/zephyr/test/drivers/Kconfig @@ -71,6 +71,11 @@ config LINK_TEST_SUITE_USBC_SVDM_DFP_ONLY config LINK_TEST_SUITE_USBC_TBT_MODE bool "Link and test the usbc_tbt_mode tests" +config LINK_TEST_SUITE_USBC_VCONN_SWAP + bool "Link and test the usbc_vconn_swap tests" + help + Include the test suite exercising VCONN Swap behaviors in the binary. + config LINK_TEST_SUITE_USBC_OCP bool "Link tests for common USBC OCP code" diff --git a/zephyr/test/drivers/testcase.yaml b/zephyr/test/drivers/testcase.yaml index 6b822f2316..f5096e5d23 100644 --- a/zephyr/test/drivers/testcase.yaml +++ b/zephyr/test/drivers/testcase.yaml @@ -137,6 +137,9 @@ tests: drivers.usbc_tbt_mode: extra_configs: - CONFIG_LINK_TEST_SUITE_USBC_TBT_MODE=y + drivers.usbc_vconn_swap: + extra_configs: + - CONFIG_LINK_TEST_SUITE_USBC_VCONN_SWAP=y drivers.usbc_ocp: extra_configs: - CONFIG_LINK_TEST_SUITE_USBC_OCP=y diff --git a/zephyr/test/drivers/usbc_vconn_swap/CMakeLists.txt b/zephyr/test/drivers/usbc_vconn_swap/CMakeLists.txt new file mode 100644 index 0000000000..78c97ce952 --- /dev/null +++ b/zephyr/test/drivers/usbc_vconn_swap/CMakeLists.txt @@ -0,0 +1,7 @@ +# Copyright 2022 The ChromiumOS Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +target_include_directories(app PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) + +target_sources(app PRIVATE src/usbc_vconn_swap.c) diff --git a/zephyr/test/drivers/usbc_vconn_swap/include/usbc_vconn_swap.h b/zephyr/test/drivers/usbc_vconn_swap/include/usbc_vconn_swap.h new file mode 100644 index 0000000000..83c88c4f6c --- /dev/null +++ b/zephyr/test/drivers/usbc_vconn_swap/include/usbc_vconn_swap.h @@ -0,0 +1,14 @@ +/* Copyright 2022 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef ZEPHYR_TEST_DRIVERS_USBC_VCONN_SWAP_USBC_VCONN_SWAP_H_ +#define ZEPHYR_TEST_DRIVERS_USBC_VCONN_SWAP_USBC_VCONN_SWAP_H_ + +#include "compile_time_macros.h" +#include "emul/tcpc/emul_tcpci.h" +#include "emul/tcpc/emul_tcpci_partner_snk.h" +#include "test/drivers/stubs.h" + +#endif /* ZEPHYR_TEST_DRIVERS_USBC_VCONN_SWAP_USBC_VCONN_SWAP_H_ */ diff --git a/zephyr/test/drivers/usbc_vconn_swap/src/usbc_vconn_swap.c b/zephyr/test/drivers/usbc_vconn_swap/src/usbc_vconn_swap.c new file mode 100644 index 0000000000..359d5b97aa --- /dev/null +++ b/zephyr/test/drivers/usbc_vconn_swap/src/usbc_vconn_swap.c @@ -0,0 +1,129 @@ +/* Copyright 2022 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include + +#include "ec_commands.h" +#include "ec_tasks.h" +#include "emul/emul_isl923x.h" +#include "emul/tcpc/emul_ps8xxx.h" +#include "emul/tcpc/emul_tcpci.h" +#include "emul/tcpc/emul_tcpci_partner_common.h" +#include "emul/tcpc/emul_tcpci_partner_drp.h" +#include "emul/tcpc/emul_tcpci_partner_snk.h" +#include "host_command.h" +#include "test/drivers/stubs.h" +#include "tcpm/tcpci.h" +#include "test/drivers/utils.h" +#include "test/drivers/test_state.h" + +#define TEST_PORT 0 + +struct common_fixture { + const struct emul *tcpci_emul; + const struct emul *charger_emul; + struct tcpci_partner_data partner; + struct tcpci_snk_emul_data snk_ext; + struct tcpci_src_emul_data src_ext; + struct tcpci_drp_emul_data drp_ext; +}; + +struct usbc_vconn_swap_fixture { + struct common_fixture common; +}; + +static void connect_partner_to_port(const struct emul *tcpc_emul, + const struct emul *charger_emul, + struct tcpci_partner_data *partner_emul, + const struct tcpci_src_emul_data *src_ext) +{ + /* + * TODO(b/221439302): Updating the TCPCI emulator registers, updating + * the charger, and alerting should all be a part of the connect + * function. + */ + set_ac_enabled(true); + zassume_ok(tcpci_partner_connect_to_tcpci(partner_emul, tcpc_emul), + NULL); + + isl923x_emul_set_adc_vbus(charger_emul, + PDO_FIXED_GET_VOLT(src_ext->pdo[0])); + + /* Wait for PD negotiation and current ramp. */ + k_sleep(K_SECONDS(10)); +} + +static void disconnect_partner_from_port(const struct emul *tcpc_emul, + const struct emul *charger_emul) +{ + zassume_ok(tcpci_emul_disconnect_partner(tcpc_emul), NULL); + isl923x_emul_set_adc_vbus(charger_emul, 0); + k_sleep(K_SECONDS(1)); +} + +static void *common_setup(void) +{ + static struct usbc_vconn_swap_fixture outer_fixture; + struct common_fixture *fixture = &outer_fixture.common; + struct tcpci_partner_data *partner = &fixture->partner; + struct tcpci_src_emul_data *src_ext = &fixture->src_ext; + struct tcpci_snk_emul_data *snk_ext = &fixture->snk_ext; + + tcpci_partner_init(partner, PD_REV30); + fixture->partner.extensions = tcpci_drp_emul_init( + &fixture->drp_ext, partner, PD_ROLE_SOURCE, + tcpci_src_emul_init(src_ext, partner, NULL), + tcpci_snk_emul_init(snk_ext, partner, NULL)); + + /* Get references for the emulators */ + fixture->tcpci_emul = EMUL_GET_USBC_BINDING(TEST_PORT, tcpc); + fixture->charger_emul = EMUL_GET_USBC_BINDING(TEST_PORT, chg); + + return &outer_fixture; +} + +static void *usbc_vconn_swap_setup(void) +{ + return common_setup(); +} + +static void common_before(struct common_fixture *fixture) +{ + /* Set chipset to ON, this will set TCPM to DRP */ + test_set_chipset_to_s0(); + + /* TODO(b/214401892): Check why need to give time TCPM to spin */ + k_sleep(K_SECONDS(1)); + + connect_partner_to_port(fixture->tcpci_emul, fixture->charger_emul, + &fixture->partner, &fixture->src_ext); + k_sleep(K_SECONDS(1)); +} + +static void usbc_vconn_swap_before(void *data) +{ + struct usbc_vconn_swap_fixture *outer = data; + + common_before(&outer->common); +} + +static void common_after(struct common_fixture *fixture) +{ + disconnect_partner_from_port(fixture->tcpci_emul, + fixture->charger_emul); +} + +static void usbc_vconn_swap_after(void *data) +{ + struct usbc_vconn_swap_fixture *outer = data; + + common_after(&outer->common); +} + +ZTEST_SUITE(usbc_vconn_swap, drivers_predicate_post_main, usbc_vconn_swap_setup, + usbc_vconn_swap_before, usbc_vconn_swap_after, NULL); -- cgit v1.2.1