summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Michalec <tm@semihalf.com>2022-03-14 12:48:20 +0100
committerCommit Bot <commit-bot@chromium.org>2022-03-18 14:21:01 +0000
commitf4f609046666cfa2ceb7452560463f4a6ad2baea (patch)
tree114290c106821939dd483c5973f759c7495531eb
parent1c08eb4b2663d0e2ad0ca5bc98a8369b793b816b (diff)
downloadchrome-ec-f4f609046666cfa2ceb7452560463f4a6ad2baea.tar.gz
zephyr: emul: Fix TCPCI partner emulator hard reset
Sink and source TCPCI partner emulators require pointer to emulator data, not emulator structure in hard reset callback function. DRP TCPCI partner still uses emulator structure. BUG=none BRANCH=none TEST=zmake configure --test test-drivers Signed-off-by: Tomasz Michalec <tm@semihalf.com> Change-Id: I0da673fbeeb3c8ae082987bf0ef21cb7d8d8fed2 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3528401 Tested-by: Tomasz Michalec <tmichalec@google.com> Reviewed-by: Sam Hurst <shurst@google.com> Commit-Queue: Tomasz Michalec <tmichalec@google.com>
-rw-r--r--zephyr/emul/tcpc/emul_tcpci_partner_common.c2
-rw-r--r--zephyr/emul/tcpc/emul_tcpci_partner_drp.c6
-rw-r--r--zephyr/emul/tcpc/emul_tcpci_partner_snk.c9
-rw-r--r--zephyr/emul/tcpc/emul_tcpci_partner_src.c16
-rw-r--r--zephyr/include/emul/tcpc/emul_tcpci_partner_drp.h4
-rw-r--r--zephyr/include/emul/tcpc/emul_tcpci_partner_src.h6
6 files changed, 26 insertions, 17 deletions
diff --git a/zephyr/emul/tcpc/emul_tcpci_partner_common.c b/zephyr/emul/tcpc/emul_tcpci_partner_common.c
index affde1225f..69b2e3013b 100644
--- a/zephyr/emul/tcpc/emul_tcpci_partner_common.c
+++ b/zephyr/emul/tcpc/emul_tcpci_partner_common.c
@@ -700,6 +700,6 @@ void tcpci_partner_init(struct tcpci_partner_data *data,
data->collect_msg_log = false;
tcpci_partner_common_reset(data);
data->hard_reset_func = hard_reset_func;
- data->hard_reset_data = data;
+ data->hard_reset_data = hard_reset_data;
data->tcpm_timeouts = 0;
}
diff --git a/zephyr/emul/tcpc/emul_tcpci_partner_drp.c b/zephyr/emul/tcpc/emul_tcpci_partner_drp.c
index 778b64c4a8..08a6fd7b5e 100644
--- a/zephyr/emul/tcpc/emul_tcpci_partner_drp.c
+++ b/zephyr/emul/tcpc/emul_tcpci_partner_drp.c
@@ -105,9 +105,9 @@ enum tcpci_partner_handler_res tcpci_drp_emul_handle_sop_msg(
}
/** Check description in emul_tcpci_partner_drp.h */
-void tcpci_drp_emul_hard_reset(void *data)
+void tcpci_drp_emul_hard_reset(void *emul)
{
- struct tcpci_drp_emul *drp_emul = data;
+ struct tcpci_drp_emul *drp_emul = emul;
if (drp_emul->data.sink) {
tcpci_snk_emul_hard_reset(&drp_emul->snk_data);
@@ -273,7 +273,7 @@ void tcpci_drp_emul_init(struct tcpci_drp_emul *emul)
emul->data.sink = true;
emul->data.in_pwr_swap = false;
- tcpci_src_emul_init_data(&emul->src_data);
+ tcpci_src_emul_init_data(&emul->src_data, &emul->common_data);
tcpci_snk_emul_init_data(&emul->snk_data);
/* Add dual role bit to sink and source PDOs */
diff --git a/zephyr/emul/tcpc/emul_tcpci_partner_snk.c b/zephyr/emul/tcpc/emul_tcpci_partner_snk.c
index b0641f684e..82838a6618 100644
--- a/zephyr/emul/tcpc/emul_tcpci_partner_snk.c
+++ b/zephyr/emul/tcpc/emul_tcpci_partner_snk.c
@@ -386,10 +386,10 @@ enum tcpci_partner_handler_res tcpci_snk_emul_handle_sop_msg(
/** Check description in emul_tcpci_partner_snk.h */
void tcpci_snk_emul_hard_reset(void *data)
{
- struct tcpci_snk_emul *snk_emul = data;
+ struct tcpci_snk_emul_data *snk_emul_data = data;
- snk_emul->data.wait_for_ps_rdy = false;
- snk_emul->data.pd_completed = false;
+ snk_emul_data->wait_for_ps_rdy = false;
+ snk_emul_data->pd_completed = false;
}
/**
@@ -516,7 +516,8 @@ void tcpci_snk_emul_init_data(struct tcpci_snk_emul_data *data)
/** Check description in emul_tcpci_snk.h */
void tcpci_snk_emul_init(struct tcpci_snk_emul *emul)
{
- tcpci_partner_init(&emul->common_data, tcpci_snk_emul_hard_reset, emul);
+ tcpci_partner_init(&emul->common_data, tcpci_snk_emul_hard_reset,
+ &emul->data);
emul->common_data.data_role = PD_ROLE_DFP;
emul->common_data.power_role = PD_ROLE_SINK;
diff --git a/zephyr/emul/tcpc/emul_tcpci_partner_src.c b/zephyr/emul/tcpc/emul_tcpci_partner_src.c
index 057cd53fb5..99b9d5581b 100644
--- a/zephyr/emul/tcpc/emul_tcpci_partner_src.c
+++ b/zephyr/emul/tcpc/emul_tcpci_partner_src.c
@@ -78,11 +78,11 @@ enum tcpci_partner_handler_res tcpci_src_emul_handle_sop_msg(
/** Check description in emul_tcpci_partner_src.h */
void tcpci_src_emul_hard_reset(void *data)
{
- struct tcpci_src_emul *src_emul = data;
+ struct tcpci_src_emul_data *src_emul_data = data;
/* Send capability after 15 ms to establish PD again */
- tcpci_src_emul_send_capability_msg(&src_emul->data,
- &src_emul->common_data, 15);
+ tcpci_src_emul_send_capability_msg(src_emul_data,
+ src_emul_data->common_data, 15);
}
/**
@@ -297,19 +297,23 @@ enum check_pdos_res tcpci_src_emul_check_pdos(struct tcpci_src_emul_data *data)
}
/** Check description in emul_tcpci_partner_src.h */
-void tcpci_src_emul_init_data(struct tcpci_src_emul_data *data)
+void tcpci_src_emul_init_data(struct tcpci_src_emul_data *data,
+ struct tcpci_partner_data *common_data)
{
/* By default there is only PDO 5v@3A */
data->pdo[0] = PDO_FIXED(5000, 3000, PDO_FIXED_UNCONSTRAINED);
for (int i = 1; i < PDO_MAX_OBJECTS; i++) {
data->pdo[i] = 0;
}
+
+ data->common_data = common_data;
}
/** Check description in emul_tcpci_parnter_src.h */
void tcpci_src_emul_init(struct tcpci_src_emul *emul)
{
- tcpci_partner_init(&emul->common_data, tcpci_src_emul_hard_reset, emul);
+ tcpci_partner_init(&emul->common_data, tcpci_src_emul_hard_reset,
+ &emul->data);
emul->common_data.data_role = PD_ROLE_UFP;
emul->common_data.power_role = PD_ROLE_SOURCE;
@@ -319,5 +323,5 @@ void tcpci_src_emul_init(struct tcpci_src_emul *emul)
emul->ops.rx_consumed = tcpci_src_emul_rx_consumed_op;
emul->ops.control_change = NULL;
- tcpci_src_emul_init_data(&emul->data);
+ tcpci_src_emul_init_data(&emul->data, &emul->common_data);
}
diff --git a/zephyr/include/emul/tcpc/emul_tcpci_partner_drp.h b/zephyr/include/emul/tcpc/emul_tcpci_partner_drp.h
index 5e7abe6723..37c61a13ae 100644
--- a/zephyr/include/emul/tcpc/emul_tcpci_partner_drp.h
+++ b/zephyr/include/emul/tcpc/emul_tcpci_partner_drp.h
@@ -107,9 +107,9 @@ enum tcpci_partner_handler_res tcpci_drp_emul_handle_sop_msg(
* as sink, sink hard reset function is called. Otherwise source hard
* reset function is called.
*
- * @param data Pointer to USB-C dual role device emulator data
+ * @param emul Pointer to USB-C dual role device emulator
*/
-void tcpci_src_emul_hard_reset(void *data);
+void tcpci_src_emul_hard_reset(void *emul);
/**
* @}
diff --git a/zephyr/include/emul/tcpc/emul_tcpci_partner_src.h b/zephyr/include/emul/tcpc/emul_tcpci_partner_src.h
index 9937d790eb..e530df5500 100644
--- a/zephyr/include/emul/tcpc/emul_tcpci_partner_src.h
+++ b/zephyr/include/emul/tcpc/emul_tcpci_partner_src.h
@@ -31,6 +31,8 @@
struct tcpci_src_emul_data {
/** Power data objects returned in source capabilities message */
uint32_t pdo[PDO_MAX_OBJECTS];
+ /** Pointer to common TCPCI partner data */
+ struct tcpci_partner_data *common_data;
};
/** Structure describing standalone source device emulator */
@@ -70,8 +72,10 @@ void tcpci_src_emul_init(struct tcpci_src_emul *emul);
* created with fixed unconstrained flag.
*
* @param data Pointer to USB-C source device emulator data
+ * @param common_data Pointer to USB-C device emulator common data
*/
-void tcpci_src_emul_init_data(struct tcpci_src_emul_data *data);
+void tcpci_src_emul_init_data(struct tcpci_src_emul_data *data,
+ struct tcpci_partner_data *common_data);
/**
* @brief Connect emulated device to TCPCI