summaryrefslogtreecommitdiff
path: root/zephyr/test/drivers
diff options
context:
space:
mode:
authorAbe Levkoy <alevkoy@chromium.org>2023-03-13 15:34:26 -0600
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-03-15 16:07:30 +0000
commit3aa70f706008d48967f7d79229d6c778535527cd (patch)
tree57e8ffcfebf2268ec2c6779103d00b1efdc5073e /zephyr/test/drivers
parent3efa30fa07272980f85be0caa711d2fbfeeca287 (diff)
downloadchrome-ec-3aa70f706008d48967f7d79229d6c778535527cd.tar.gz
zephyr test: Verify no discovery notification spam
Attach to a PD 2.0 partner that will not let the TCPM swap to DFP, preventing the TCPM from performing discovery. Verify that the TCPM only notifies the AP that discovery is complete (and empty) once. BUG=b:271613370 TEST=twister -s zephyr/test/drivers/drivers.usbc_alt_mode BRANCH=none Change-Id: I3f97d05e7578f06d9867442fdfbc73a3e4d9b8a5 Signed-off-by: Abe Levkoy <alevkoy@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4334628 Reviewed-by: Diana Z <dzigterman@chromium.org>
Diffstat (limited to 'zephyr/test/drivers')
-rw-r--r--zephyr/test/drivers/usbc_alt_mode/include/test_usbc_alt_mode.h7
-rw-r--r--zephyr/test/drivers/usbc_alt_mode/src/usbc_alt_mode.c60
2 files changed, 67 insertions, 0 deletions
diff --git a/zephyr/test/drivers/usbc_alt_mode/include/test_usbc_alt_mode.h b/zephyr/test/drivers/usbc_alt_mode/include/test_usbc_alt_mode.h
index ea178fcfaa..15b3f07d40 100644
--- a/zephyr/test/drivers/usbc_alt_mode/include/test_usbc_alt_mode.h
+++ b/zephyr/test/drivers/usbc_alt_mode/include/test_usbc_alt_mode.h
@@ -40,4 +40,11 @@ struct usbc_alt_mode_minus_dp_configure_fixture {
struct tcpci_src_emul_data src_ext;
};
+struct usbc_discovery_no_drs_fixture {
+ const struct emul *tcpci_emul;
+ const struct emul *charger_emul;
+ struct tcpci_partner_data partner;
+ struct tcpci_src_emul_data src_ext;
+};
+
#endif /* ZEPHYR_TEST_DRIVERS_USBC_ALT_MODE_TEST_USBC_ALT_MODE_H_ */
diff --git a/zephyr/test/drivers/usbc_alt_mode/src/usbc_alt_mode.c b/zephyr/test/drivers/usbc_alt_mode/src/usbc_alt_mode.c
index 2d9d866d10..9f57db83fa 100644
--- a/zephyr/test/drivers/usbc_alt_mode/src/usbc_alt_mode.c
+++ b/zephyr/test/drivers/usbc_alt_mode/src/usbc_alt_mode.c
@@ -651,3 +651,63 @@ ZTEST_SUITE(usbc_alt_mode_minus_dp_configure, drivers_predicate_post_main,
usbc_alt_mode_minus_dp_configure_setup,
usbc_alt_mode_minus_dp_configure_before,
usbc_alt_mode_minus_dp_configure_after, NULL);
+
+/* Set up the partner to refuse to swap to UFP, preventing discovery in PD 2.0.
+ * Configure DP alt mode responses to try to catch the TCPM entering DP mode
+ * anyway.
+ */
+static void *usbc_alt_mode_no_drs_setup(void)
+{
+ static struct usbc_alt_mode_fixture fixture;
+ struct tcpci_partner_data *partner = &fixture.partner;
+ struct tcpci_src_emul_data *src_ext = &fixture.src_ext;
+
+ tcpci_partner_init(partner, PD_REV20);
+ partner->extensions = tcpci_src_emul_init(src_ext, partner, NULL);
+ tcpci_partner_set_drs_support(partner, /*drs_to_ufp_supported=*/false,
+ /*drs_to_dfp_supported=*/true);
+
+ /* 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);
+
+ add_discovery_responses(partner);
+
+ return &fixture;
+}
+
+ZTEST_F(usbc_discovery_no_drs, test_no_drs_no_discovery)
+{
+ /* Verify host command when VDOs are present. */
+ struct ec_response_typec_status status =
+ host_cmd_typec_status(TEST_PORT);
+ uint8_t response_buffer[EC_LPC_HOST_PACKET_SIZE];
+ struct ec_response_typec_discovery *discovery =
+ (struct ec_response_typec_discovery *)response_buffer;
+
+ /* Verify port partner does not think it's configured for DisplayPort */
+ zassert_false(fixture->partner.displayport_configured);
+
+ /* Verify TCPM reports discovery done with no data from partner. */
+ zassert_true(status.events & PD_STATUS_EVENT_SOP_DISC_DONE);
+ zassert_true(status.events & PD_STATUS_EVENT_SOP_PRIME_DISC_DONE);
+
+ host_cmd_typec_discovery(TEST_PORT, TYPEC_PARTNER_SOP, response_buffer,
+ sizeof(response_buffer));
+ zassert_equal(discovery->identity_count, 0,
+ "Expected 0 identity VDOs, got %d",
+ discovery->identity_count);
+
+ /* Verify TCPM does not notify AP of discovery done again. */
+ host_cmd_typec_control_clear_events(
+ TEST_PORT, PD_STATUS_EVENT_SOP_DISC_DONE |
+ PD_STATUS_EVENT_SOP_PRIME_DISC_DONE);
+ k_sleep(K_MSEC(100));
+ status = host_cmd_typec_status(TEST_PORT);
+ zassert_false(status.events & (PD_STATUS_EVENT_SOP_DISC_DONE |
+ PD_STATUS_EVENT_SOP_PRIME_DISC_DONE));
+}
+
+ZTEST_SUITE(usbc_discovery_no_drs, drivers_predicate_post_main,
+ usbc_alt_mode_no_drs_setup, usbc_alt_mode_before,
+ usbc_alt_mode_after, NULL);