summaryrefslogtreecommitdiff
path: root/zephyr/test/drivers/default/src/usb_mux.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/test/drivers/default/src/usb_mux.c')
-rw-r--r--zephyr/test/drivers/default/src/usb_mux.c96
1 files changed, 58 insertions, 38 deletions
diff --git a/zephyr/test/drivers/default/src/usb_mux.c b/zephyr/test/drivers/default/src/usb_mux.c
index 5366bcb563..45b81d6ea5 100644
--- a/zephyr/test/drivers/default/src/usb_mux.c
+++ b/zephyr/test/drivers/default/src/usb_mux.c
@@ -1,10 +1,9 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
+/* Copyright 2021 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/kernel.h>
-#include <zephyr/zephyr.h>
#include <zephyr/ztest.h>
#include <zephyr/drivers/gpio.h>
#include <zephyr/drivers/gpio/gpio_emul.h>
@@ -30,7 +29,7 @@
#include "test/drivers/utils.h"
/** Copy of original usb_muxes[USB_PORT_C1] */
-struct usb_mux usb_mux_c1;
+struct usb_mux_chain usb_mux_c1;
/** Number of usb mux proxies in chain */
#define NUM_OF_PROXY 3
@@ -281,39 +280,51 @@ static void reset_proxy_fakes(void)
}
/** Chain of 3 proxy usb muxes */
-struct usb_mux proxy_chain_2 = {
+struct usb_mux proxy_mux_2 = {
.usb_port = USBC_PORT_C1,
.driver = &proxy_usb_mux,
- .next_mux = NULL,
.i2c_addr_flags = 2,
.hpd_update = &proxy_hpd_update,
};
-struct usb_mux proxy_chain_1 = {
+struct usb_mux_chain proxy_chain_2 = {
+ .mux = &proxy_mux_2,
+};
+
+struct usb_mux proxy_mux_1 = {
.usb_port = USBC_PORT_C1,
.driver = &proxy_usb_mux,
- .next_mux = &proxy_chain_2,
.i2c_addr_flags = 1,
.hpd_update = &proxy_hpd_update,
};
-struct usb_mux proxy_chain_0 = {
+struct usb_mux_chain proxy_chain_1 = {
+ .mux = &proxy_mux_1,
+ .next = &proxy_chain_2,
+};
+
+struct usb_mux proxy_mux_0 = {
.usb_port = USBC_PORT_C1,
.driver = &proxy_usb_mux,
- .next_mux = &proxy_chain_1,
.i2c_addr_flags = 0,
.hpd_update = &proxy_hpd_update,
};
+struct usb_mux_chain proxy_chain_0 = {
+ .mux = &proxy_mux_0,
+ .next = &proxy_chain_1,
+};
+
/** Setup first 3 usb muxes of port 1 with proxy */
static void setup_usb_mux_proxy_chain(void)
{
- const struct usb_mux *t;
+ const struct usb_mux_chain *t;
int i;
- memcpy(&usb_mux_c1, &usb_muxes[USBC_PORT_C1], sizeof(struct usb_mux));
+ memcpy(&usb_mux_c1, &usb_muxes[USBC_PORT_C1],
+ sizeof(struct usb_mux_chain));
memcpy(&usb_muxes[USBC_PORT_C1], &proxy_chain_0,
- sizeof(struct usb_mux));
+ sizeof(struct usb_mux_chain));
/*
* Setup org_mux array to point real driver which should be called by
@@ -321,28 +332,31 @@ static void setup_usb_mux_proxy_chain(void)
*/
t = &usb_mux_c1;
for (i = 0; i < NUM_OF_PROXY; i++) {
- org_mux[i] = t;
if (t != NULL) {
- t = t->next_mux;
+ org_mux[i] = t->mux;
+ t = t->next;
+ } else {
+ org_mux[i] = NULL;
}
}
- if (org_mux[2] != NULL) {
- proxy_chain_2.next_mux = org_mux[2]->next_mux;
+ if (t != NULL) {
+ proxy_chain_2.next = t;
} else {
- proxy_chain_2.next_mux = NULL;
+ proxy_chain_2.next = NULL;
}
}
/** Restore original usb_mux chain without proxy */
static void restore_usb_mux_chain(void)
{
- memcpy(&usb_muxes[USBC_PORT_C1], &usb_mux_c1, sizeof(struct usb_mux));
+ memcpy(&usb_muxes[USBC_PORT_C1], &usb_mux_c1,
+ sizeof(struct usb_mux_chain));
/* Reset flags to default */
- proxy_chain_0.flags = 0;
- proxy_chain_1.flags = 0;
- proxy_chain_2.flags = 0;
+ proxy_mux_0.flags = 0;
+ proxy_mux_1.flags = 0;
+ proxy_mux_2.flags = 0;
}
/**
@@ -355,15 +369,15 @@ static void restore_usb_mux_chain(void)
zassert_equal(num, proxy##_fake.call_count, "%d != %d", num, \
proxy##_fake.call_count); \
if (num >= 1) { \
- zassert_equal(&usb_muxes[USBC_PORT_C1], \
+ zassert_equal(usb_muxes[USBC_PORT_C1].mux, \
proxy##_fake.arg0_history[0], NULL); \
} \
if (num >= 2) { \
- zassert_equal(&proxy_chain_1, \
+ zassert_equal(proxy_chain_1.mux, \
proxy##_fake.arg0_history[1], NULL); \
} \
if (num >= 3) { \
- zassert_equal(&proxy_chain_2, \
+ zassert_equal(proxy_chain_2.mux, \
proxy##_fake.arg0_history[2], NULL); \
} \
} while (0)
@@ -415,16 +429,16 @@ ZTEST(usb_uninit_mux, test_usb_mux_init)
CHECK_PROXY_FAKE_CALL_CNT(proxy_init, 2);
/* Test board init callback */
- proxy_chain_1.board_init = &mock_board_init;
+ proxy_mux_1.board_init = &mock_board_init;
reset_proxy_fakes();
usb_mux_init(USBC_PORT_C1);
CHECK_PROXY_FAKE_CALL_CNT(proxy_init, NUM_OF_PROXY);
/* Check if board_init was called for proxy 1 */
zassert_equal(1, mock_board_init_fake.call_count, NULL);
- zassert_equal(&proxy_chain_1, mock_board_init_fake.arg0_history[0],
+ zassert_equal(proxy_chain_1.mux, mock_board_init_fake.arg0_history[0],
NULL);
- proxy_chain_1.board_init = NULL;
+ proxy_mux_1.board_init = NULL;
}
/** Test usb_mux setting mux mode */
@@ -434,7 +448,7 @@ ZTEST(usb_uninit_mux, test_usb_mux_set)
mux_state_t exp_mode;
/* Set flag for usb mux 1 to disable polarity setting */
- proxy_chain_1.flags = USB_MUX_FLAG_SET_WITHOUT_FLIP;
+ proxy_mux_1.flags = USB_MUX_FLAG_SET_WITHOUT_FLIP;
/* Test setting mux mode without polarity inversion */
reset_proxy_fakes();
@@ -461,14 +475,14 @@ ZTEST(usb_uninit_mux, test_usb_mux_set)
/* Test board set callback */
reset_proxy_fakes();
- proxy_chain_1.board_set = &mock_board_set;
+ proxy_mux_1.board_set = &mock_board_set;
usb_mux_set(USBC_PORT_C1, exp_mode, USB_SWITCH_CONNECT,
0 /* = polarity */);
CHECK_PROXY_FAKE_CALL_CNT(proxy_init, 0);
CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_set, NUM_OF_PROXY, exp_mode);
/* Check if board_set was called for proxy 1 */
zassert_equal(1, mock_board_set_fake.call_count, NULL);
- zassert_equal(&proxy_chain_1, mock_board_set_fake.arg0_history[0],
+ zassert_equal(proxy_chain_1.mux, mock_board_set_fake.arg0_history[0],
NULL);
zassert_equal(exp_mode, mock_board_set_fake.arg1_history[0], NULL);
@@ -482,7 +496,7 @@ ZTEST(usb_uninit_mux, test_usb_mux_set)
/* board_set shouldn't be called after fail */
zassert_equal(0, mock_board_set_fake.call_count, NULL);
- proxy_chain_1.board_set = NULL;
+ proxy_mux_1.board_set = NULL;
}
/** Test usb_mux reset in g3 when required flag is set */
@@ -498,7 +512,7 @@ ZTEST(usb_uninit_mux, test_usb_mux_reset_in_g3)
CHECK_PROXY_FAKE_CALL_CNT_MUX_STATE(proxy_set, NUM_OF_PROXY, exp_mode);
/* Usb muxes of port 1 should stay initialised */
- usb_muxes[USBC_PORT_C1].flags = 0;
+ proxy_mux_0.flags = 0;
hook_notify(HOOK_CHIPSET_HARD_OFF);
/* Test that init is not called */
@@ -618,7 +632,7 @@ ZTEST(usb_uninit_mux, test_usb_mux_flip)
mux_state_t exp_mode;
/* Set flag for usb mux 1 to disable polarity setting */
- proxy_chain_1.flags = USB_MUX_FLAG_SET_WITHOUT_FLIP;
+ proxy_mux_1.flags = USB_MUX_FLAG_SET_WITHOUT_FLIP;
/* Test flip port without polarity inverted */
exp_mode = USB_PD_MUX_USB_ENABLED;
@@ -702,15 +716,21 @@ ZTEST(usb_uninit_mux, test_usb_mux_hpd_update)
exp_mode);
/* Test ps8xxx hpd update */
- usb_muxes[USBC_PORT_C1].usb_port = 1;
- usb_muxes[USBC_PORT_C1].driver = &tcpci_tcpm_usb_mux_driver;
- usb_muxes[USBC_PORT_C1].hpd_update = &ps8xxx_tcpc_update_hpd_status;
+ proxy_mux_0.usb_port = 1;
+ proxy_mux_0.driver = &tcpci_tcpm_usb_mux_driver;
+ proxy_mux_0.hpd_update = &ps8xxx_tcpc_update_hpd_status;
reset_proxy_fakes();
exp_mode = virt_mode | USB_PD_MUX_HPD_LVL | USB_PD_MUX_HPD_IRQ;
usb_mux_hpd_update(USBC_PORT_C1, exp_mode);
/* Check if PS8xxx mux mode is updated correctly */
- tcpci_tcpm_usb_mux_driver.get(&usb_muxes[USBC_PORT_C1], &mode);
+ tcpci_tcpm_usb_mux_driver.get(usb_muxes[USBC_PORT_C1].mux, &mode);
+
+ /* Restore proxy chain 0 */
+ proxy_mux_0.usb_port = USBC_PORT_C1;
+ proxy_mux_0.driver = &proxy_usb_mux;
+ proxy_mux_0.hpd_update = &proxy_hpd_update;
+
zassert_equal(0, mode, "mux mode is 0x%x (!= 0x%x)", mode, 0);
}
@@ -856,7 +876,7 @@ void usb_uninit_mux_before(void *state)
set_test_runner_tid();
/* Makes sure that usb muxes of port 1 are not init */
- usb_muxes[USBC_PORT_C1].flags = USB_MUX_FLAG_RESETS_IN_G3;
+ proxy_mux_0.flags = USB_MUX_FLAG_RESETS_IN_G3;
hook_notify(HOOK_CHIPSET_HARD_OFF);
reset_proxy_fakes();
}