summaryrefslogtreecommitdiff
path: root/zephyr/test/drivers/ap_vdm_control/src/ap_vdm_control.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/test/drivers/ap_vdm_control/src/ap_vdm_control.c')
-rw-r--r--zephyr/test/drivers/ap_vdm_control/src/ap_vdm_control.c247
1 files changed, 6 insertions, 241 deletions
diff --git a/zephyr/test/drivers/ap_vdm_control/src/ap_vdm_control.c b/zephyr/test/drivers/ap_vdm_control/src/ap_vdm_control.c
index fe7dab88f4..7c526f0ccb 100644
--- a/zephyr/test/drivers/ap_vdm_control/src/ap_vdm_control.c
+++ b/zephyr/test/drivers/ap_vdm_control/src/ap_vdm_control.c
@@ -3,123 +3,24 @@
* found in the LICENSE file.
*/
+#include <zephyr/ztest.h>
+
#include "ec_commands.h"
+#include "usb_mux.h"
#include "test/drivers/stubs.h"
#include "test/drivers/test_state.h"
#include "test/drivers/utils.h"
-#include "usb_mux.h"
-#include "usb_pd_vdo.h"
-
-#include <stdint.h>
-
-#include <zephyr/kernel.h>
-#include <zephyr/sys/byteorder.h>
-#include <zephyr/ztest.h>
-
-#define TEST_PORT USBC_PORT_C0
-
-struct ap_vdm_control_fixture {
- const struct emul *tcpci_emul;
- const struct emul *charger_emul;
- struct tcpci_partner_data partner;
- struct tcpci_src_emul_data src_ext;
-};
-
-struct tcpci_cable_data passive_usb3 = {
- .identity_vdm[VDO_INDEX_HDR] =
- VDO(USB_SID_PD, /* structured VDM */ true,
- VDO_CMDT(CMDT_RSP_ACK) | CMD_DISCOVER_IDENT),
- .identity_vdm[VDO_INDEX_IDH] = VDO_IDH(
- /* USB host */ false, /* USB device */ false, IDH_PTYPE_PCABLE,
- /* modal operation */ false, USB_VID_GOOGLE),
- .identity_vdm[VDO_INDEX_CSTAT] = 0,
- .identity_vdm[VDO_INDEX_PRODUCT] = VDO_PRODUCT(0x1234, 0xABCD),
- .identity_vdm[VDO_INDEX_PTYPE_CABLE1] =
- VDO_REV30_PASSIVE(USB_R30_SS_U32_U40_GEN2, USB_VBUS_CUR_3A,
- USB_REV30_LATENCY_1m, USB_REV30_TYPE_C),
- .identity_vdos = VDO_INDEX_PTYPE_CABLE1 + 1,
-
-};
-
-static void verify_vdm_req(struct ap_vdm_control_fixture *fixture,
- struct typec_vdm_req *req)
-{
- struct tcpci_partner_log_msg *msg;
- bool message_seen = 0;
-
- SYS_SLIST_FOR_EACH_CONTAINER(&fixture->partner.msg_log, msg, node)
- {
- uint16_t header = sys_get_le16(msg->buf);
-
- /* Ignore messages from ourselves */
- if (msg->sender == TCPCI_PARTNER_SENDER_PARTNER)
- continue;
-
- /*
- * Control messages, non-VDMs, and extended messages are not of
- * interest
- */
- if ((PD_HEADER_CNT(header) == 0) ||
- (PD_HEADER_TYPE(header) != PD_DATA_VENDOR_DEF) ||
- (PD_HEADER_EXT(header) != 0)) {
- continue;
- }
-
- if (req->partner_type != msg->sop)
- continue;
-
- /* We have a VDM, check entry we're interested in */
- if (memcmp(msg->buf, req->vdm_data,
- req->vdm_data_objects * sizeof(uint32_t))) {
- message_seen = true;
- break;
- }
- }
-
- zassert_true(message_seen, "Expected message not found");
-}
-
-static void *ap_vdm_control_setup(void)
-{
- static struct ap_vdm_control_fixture fixture;
- struct tcpci_partner_data *partner = &fixture.partner;
- struct tcpci_src_emul_data *src_ext = &fixture.src_ext;
-
- tcpci_partner_init(partner, PD_REV30);
- partner->extensions = tcpci_src_emul_init(src_ext, partner, NULL);
- partner->cable = &passive_usb3;
-
- /* Get references for the emulators */
- fixture.tcpci_emul = EMUL_DT_GET(DT_NODELABEL(tcpci_emul));
- fixture.charger_emul = EMUL_DT_GET(DT_NODELABEL(isl923x_emul));
-
- return &fixture;
-}
static void ap_vdm_control_before(void *data)
{
- struct ap_vdm_control_fixture *fix = data;
-
/* Set chipset on so the "AP" is on to give us commands */
test_set_chipset_to_s0();
-
- /* Connect our port partner */
- connect_source_to_port(&fix->partner, &fix->src_ext, 0, fix->tcpci_emul,
- fix->charger_emul);
-}
-
-static void ap_vdm_control_after(void *data)
-{
- struct ap_vdm_control_fixture *fix = data;
-
- disconnect_source_from_port(fix->tcpci_emul, fix->charger_emul);
- tcpci_partner_common_clear_logged_msgs(&fix->partner);
}
-ZTEST_SUITE(ap_vdm_control, drivers_predicate_post_main, ap_vdm_control_setup,
- ap_vdm_control_before, ap_vdm_control_after, NULL);
+ZTEST_SUITE(ap_vdm_control, drivers_predicate_post_main, NULL,
+ ap_vdm_control_before, NULL, NULL);
-ZTEST_F(ap_vdm_control, test_feature_present)
+ZTEST(ap_vdm_control, test_feature_present)
{
struct ec_response_get_features feat = host_cmd_get_features();
@@ -127,139 +28,3 @@ ZTEST_F(ap_vdm_control, test_feature_present)
EC_FEATURE_MASK_1(EC_FEATURE_TYPEC_AP_VDM_SEND),
"Failed to see feature present");
}
-
-ZTEST_F(ap_vdm_control, test_send_vdm_req_bad_port)
-{
- struct ec_params_typec_control params = {
- .port = 85,
- .command = TYPEC_CONTROL_COMMAND_SEND_VDM_REQ,
- .vdm_req_params = {
- .vdm_data = { 0 },
- .vdm_data_objects = 1,
- .partner_type = TYPEC_PARTNER_SOP,
- },
- };
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND_PARAMS(EC_CMD_TYPEC_CONTROL, 0, params);
-
- zassert_equal(host_command_process(&args), EC_RES_INVALID_PARAM,
- "Failed to see port error");
-}
-
-ZTEST_F(ap_vdm_control, test_send_vdm_req_bad_type)
-{
- struct ec_params_typec_control params = {
- .port = TEST_PORT,
- .command = TYPEC_CONTROL_COMMAND_SEND_VDM_REQ,
- .vdm_req_params = {
- .vdm_data = { 0 },
- .vdm_data_objects = 1,
- .partner_type = TYPEC_PARTNER_SOP_PRIME_PRIME + 1,
- },
- };
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND_PARAMS(EC_CMD_TYPEC_CONTROL, 0, params);
-
- zassert_equal(host_command_process(&args), EC_RES_INVALID_PARAM,
- "Failed to see port error");
-}
-
-ZTEST_F(ap_vdm_control, test_send_vdm_req_bad_count)
-{
- struct ec_params_typec_control params = {
- .port = TEST_PORT,
- .command = TYPEC_CONTROL_COMMAND_SEND_VDM_REQ,
- .vdm_req_params = {
- .vdm_data = { 0 },
- .vdm_data_objects = 0,
- .partner_type = TYPEC_PARTNER_SOP,
- },
- };
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND_PARAMS(EC_CMD_TYPEC_CONTROL, 0, params);
-
- zassert_equal(host_command_process(&args), EC_RES_INVALID_PARAM,
- "Failed to see port error");
-}
-
-ZTEST_F(ap_vdm_control, test_send_vdm_sop_req_valid)
-{
- uint32_t vdm_req_header = VDO(USB_SID_PD, 1, CMD_DISCOVER_IDENT);
- struct typec_vdm_req req = {
- .vdm_data = { vdm_req_header },
- .vdm_data_objects = 1,
- .partner_type = TYPEC_PARTNER_SOP,
- };
-
- tcpci_partner_common_enable_pd_logging(&fixture->partner, true);
- host_cmd_typec_control_vdm_req(TEST_PORT, req);
- k_sleep(K_SECONDS(1));
-
- tcpci_partner_common_enable_pd_logging(&fixture->partner, false);
-
- /* Look for our REQ */
- verify_vdm_req(fixture, &req);
-}
-
-ZTEST_F(ap_vdm_control, test_send_vdm_sop_prime_req_valid)
-{
- uint32_t vdm_req_header = VDO(USB_SID_PD, 1, CMD_DISCOVER_IDENT);
- struct typec_vdm_req req = {
- .vdm_data = { vdm_req_header },
- .vdm_data_objects = 1,
- .partner_type = TYPEC_PARTNER_SOP_PRIME,
- };
-
- tcpci_partner_common_enable_pd_logging(&fixture->partner, true);
- host_cmd_typec_control_vdm_req(TEST_PORT, req);
- k_sleep(K_SECONDS(1));
-
- tcpci_partner_common_enable_pd_logging(&fixture->partner, false);
-
- /* Look for our REQ */
- verify_vdm_req(fixture, &req);
-}
-
-ZTEST_F(ap_vdm_control, test_send_vdm_sop_attention_bad)
-{
- uint32_t vdm_req_header = VDO(USB_SID_DISPLAYPORT, 1, CMD_ATTENTION);
- struct ec_params_typec_control params = {
- .port = TEST_PORT,
- .command = TYPEC_CONTROL_COMMAND_SEND_VDM_REQ,
- .vdm_req_params = {
- .vdm_data = { vdm_req_header },
- .vdm_data_objects = 5,
- .partner_type = TYPEC_PARTNER_SOP,
- },
- };
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND_PARAMS(EC_CMD_TYPEC_CONTROL, 0, params);
-
- zassert_equal(host_command_process(&args), EC_RES_INVALID_PARAM,
- "Failed to see port error");
-}
-
-ZTEST_F(ap_vdm_control, test_send_vdm_req_in_progress)
-{
- uint32_t vdm_req_header = VDO(USB_SID_PD, 1, CMD_DISCOVER_IDENT);
- struct ec_params_typec_control params = {
- .port = TEST_PORT,
- .command = TYPEC_CONTROL_COMMAND_SEND_VDM_REQ,
- .vdm_req_params = {
- .vdm_data = { vdm_req_header },
- .vdm_data_objects = 1,
- .partner_type = TYPEC_PARTNER_SOP,
- },
- };
- struct host_cmd_handler_args args =
- BUILD_HOST_COMMAND_PARAMS(EC_CMD_TYPEC_CONTROL, 0, params);
-
- /*
- * First command should succeed, but given no time to process the second
- * should return busy
- */
- zassert_equal(host_command_process(&args), EC_RES_SUCCESS,
- "Failed to send successful request");
- zassert_equal(host_command_process(&args), EC_RES_BUSY,
- "Failed to see busy");
-}