summaryrefslogtreecommitdiff
path: root/zephyr/test/drivers/default/src/console_cmd/usb_pd_console.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/test/drivers/default/src/console_cmd/usb_pd_console.c')
-rw-r--r--zephyr/test/drivers/default/src/console_cmd/usb_pd_console.c358
1 files changed, 358 insertions, 0 deletions
diff --git a/zephyr/test/drivers/default/src/console_cmd/usb_pd_console.c b/zephyr/test/drivers/default/src/console_cmd/usb_pd_console.c
new file mode 100644
index 0000000000..21056056d4
--- /dev/null
+++ b/zephyr/test/drivers/default/src/console_cmd/usb_pd_console.c
@@ -0,0 +1,358 @@
+/* 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 <zephyr/shell/shell.h>
+#include <zephyr/ztest.h>
+
+#include "console.h"
+#include "ec_commands.h"
+#include "test/drivers/test_state.h"
+#include "test/drivers/utils.h"
+#include "usb_prl_sm.h"
+
+static void console_cmd_usb_pd_after(void *fixture)
+{
+ ARG_UNUSED(fixture);
+
+ /* TODO (b/230059737) */
+ test_set_chipset_to_g3();
+ k_sleep(K_SECONDS(1));
+ test_set_chipset_to_s0();
+ k_sleep(K_SECONDS(10));
+
+ /* Keep port used by testsuite enabled (default state) */
+ pd_comm_enable(0, 1);
+ pd_set_suspend(0, 0);
+}
+
+ZTEST_SUITE(console_cmd_usb_pd, drivers_predicate_post_main, NULL, NULL,
+ console_cmd_usb_pd_after, NULL);
+
+ZTEST_USER(console_cmd_usb_pd, test_too_few_args)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd");
+ zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
+ EC_ERROR_PARAM_COUNT, rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0");
+ zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
+ EC_ERROR_PARAM_COUNT, rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_dump)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd dump 0");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd dump 4");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd dump -4");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd dump x");
+ zassert_equal(rv, EC_ERROR_PARAM2, "Expected %d, but got %d",
+ EC_ERROR_PARAM2, rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_trysrc)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd trysrc 0");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd trysrc 2");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd trysrc 5");
+ zassert_equal(rv, EC_ERROR_PARAM3, "Expected %d, but got %d",
+ EC_ERROR_PARAM3, rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_version)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd version");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_bad_port)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 5");
+ zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
+ EC_ERROR_PARAM_COUNT, rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 5 tx");
+ zassert_equal(rv, EC_ERROR_PARAM2, "Expected %d, but got %d",
+ EC_ERROR_PARAM2, rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_tx)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 tx");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_charger)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 charger");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_dev)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 dev");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 dev 20");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 dev x");
+ zassert_equal(rv, EC_ERROR_PARAM3, "Expected %d, but got %d",
+ EC_ERROR_PARAM3, rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_disable)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 disable");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_enable)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 enable");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_suspend)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 suspend");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_resume)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 resume");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_hard)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 hard");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_soft)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 soft");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_swap)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 swap");
+ zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
+ EC_ERROR_PARAM_COUNT, rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 swap power");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 swap data");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 swap vconn");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 swap x");
+ zassert_equal(rv, EC_ERROR_PARAM3, "Expected %d, but got %d",
+ EC_ERROR_PARAM3, rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_dualrole)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 dualrole");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 dualrole on");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 dualrole off");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 dualrole freeze");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 dualrole sink");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 dualrole source");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 dualrole x");
+ zassert_equal(rv, EC_ERROR_PARAM4, "Expected %d, but got %d",
+ EC_ERROR_PARAM4, rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_state)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 state");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_srccaps)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 srccaps");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_timer)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pd 0 timer");
+ zassert_equal(rv, EC_SUCCESS, "Expected %d, but got %d", EC_SUCCESS,
+ rv);
+}
+
+static void set_device_vdo(int port, enum tcpci_msg_type type)
+{
+ union tbt_mode_resp_device device_resp;
+ struct pd_discovery *dev_disc;
+
+ dev_disc = pd_get_am_discovery_and_notify_access(port, type);
+ dev_disc->svid_cnt = 1;
+ dev_disc->svids[0].svid = USB_VID_INTEL;
+ dev_disc->svids[0].discovery = PD_DISC_COMPLETE;
+ dev_disc->svids[0].mode_cnt = 1;
+ device_resp.tbt_alt_mode = TBT_ALTERNATE_MODE;
+ device_resp.tbt_adapter = TBT_ADAPTER_TBT3;
+ device_resp.intel_spec_b0 = VENDOR_SPECIFIC_NOT_SUPPORTED;
+ device_resp.vendor_spec_b0 = VENDOR_SPECIFIC_NOT_SUPPORTED;
+ device_resp.vendor_spec_b1 = VENDOR_SPECIFIC_NOT_SUPPORTED;
+ dev_disc->svids[0].mode_vdo[0] = device_resp.raw_value;
+}
+
+static void set_active_cable_type(int port, enum tcpci_msg_type type,
+ enum idh_ptype ptype)
+{
+ struct pd_discovery *dev_disc;
+
+ dev_disc = pd_get_am_discovery_and_notify_access(port, type);
+ dev_disc->identity.idh.product_type = ptype;
+ prl_set_rev(port, type, PD_REV30);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_pe)
+{
+ int rv;
+
+ pd_set_identity_discovery(0, TCPCI_MSG_SOP, PD_DISC_COMPLETE);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pe 0 dump");
+ zassert_ok(rv, "Expected %d, but got %d", EC_SUCCESS, rv);
+
+ set_device_vdo(0, TCPCI_MSG_SOP);
+ rv = shell_execute_cmd(get_ec_shell(), "pe 0 dump");
+ zassert_ok(rv, "Expected %d, but got %d", EC_SUCCESS, rv);
+
+ /* Handle error scenarios */
+ rv = shell_execute_cmd(get_ec_shell(), "pe 0");
+ zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
+ EC_ERROR_PARAM_COUNT, rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pe x dump");
+ zassert_equal(rv, EC_ERROR_PARAM2, "Expected %d, but got %d",
+ EC_ERROR_PARAM2, rv);
+}
+
+ZTEST_USER(console_cmd_usb_pd, test_pdcable)
+{
+ int rv;
+
+ rv = shell_execute_cmd(get_ec_shell(), "pdcable 0");
+ zassert_ok(rv, "Expected %d, but got %d", EC_SUCCESS, rv);
+
+ set_device_vdo(0, TCPCI_MSG_SOP_PRIME);
+
+ /* Set active cable type IDH_PTYPE_ACABLE */
+ set_active_cable_type(0, TCPCI_MSG_SOP_PRIME, IDH_PTYPE_ACABLE);
+ rv = shell_execute_cmd(get_ec_shell(), "pdcable 0");
+ zassert_ok(rv, "Expected %d, but got %d", EC_SUCCESS, rv);
+
+ /* Set active cable type IDH_PTYPE_PCABLE */
+ set_active_cable_type(0, TCPCI_MSG_SOP_PRIME, IDH_PTYPE_PCABLE);
+ rv = shell_execute_cmd(get_ec_shell(), "pdcable 0");
+ zassert_ok(rv, "Expected %d, but got %d", EC_SUCCESS, rv);
+
+ /* Handle error scenarios */
+ rv = shell_execute_cmd(get_ec_shell(), "pdcable");
+ zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d",
+ EC_ERROR_PARAM_COUNT, rv);
+
+ rv = shell_execute_cmd(get_ec_shell(), "pdcable t");
+ zassert_equal(rv, EC_ERROR_PARAM2, "Expected %d, but got %d",
+ EC_ERROR_PARAM2, rv);
+}