summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/usb_pd_alt_mode_dfp.c75
-rw-r--r--common/usb_pd_console_cmd.c2
-rw-r--r--common/usb_pd_policy.c12
-rw-r--r--common/usbc/tbt_alt_mode.c6
-rw-r--r--common/usbc/usb_mode.c6
-rw-r--r--common/usbc/usb_pd_host.c6
-rw-r--r--common/usbc/usb_pe_drp_sm.c12
7 files changed, 70 insertions, 49 deletions
diff --git a/common/usb_pd_alt_mode_dfp.c b/common/usb_pd_alt_mode_dfp.c
index 49fbf4cc65..d7048f4c8e 100644
--- a/common/usb_pd_alt_mode_dfp.c
+++ b/common/usb_pd_alt_mode_dfp.c
@@ -79,7 +79,7 @@ static int pd_allocate_mode(int port, enum tcpci_msg_type type,
int i, j;
struct svdm_amode_data *modep;
int mode_idx = pd_get_mode_idx(port, type, svid);
- struct pd_discovery *disc = pd_get_am_discovery(port, type);
+ const struct pd_discovery *disc = pd_get_am_discovery(port, type);
struct partner_active_modes *active =
pd_get_partner_active_modes(port, type);
assert(active);
@@ -96,7 +96,7 @@ static int pd_allocate_mode(int port, enum tcpci_msg_type type,
/* Allocate ... if SVID == 0 enter default supported policy */
for (i = 0; i < supported_modes_cnt; i++) {
for (j = 0; j < disc->svid_cnt; j++) {
- struct svid_mode_data *svidp = &disc->svids[j];
+ const struct svid_mode_data *svidp = &disc->svids[j];
/*
* Looking for a match between supported_modes and
@@ -367,7 +367,7 @@ void dfp_consume_identity(int port, enum tcpci_msg_type type, int cnt,
}
ptype = PD_IDH_PTYPE(payload[VDO_I(IDH)]);
- disc = pd_get_am_discovery(port, type);
+ disc = pd_get_am_discovery_and_notify_access(port, type);
identity_size = MIN(sizeof(union disc_ident_ack),
(cnt - 1) * sizeof(uint32_t));
@@ -403,7 +403,8 @@ void dfp_consume_svids(int port, enum tcpci_msg_type type, int cnt,
uint32_t *ptr = payload + 1;
int vdo = 1;
uint16_t svid0, svid1;
- struct pd_discovery *disc = pd_get_am_discovery(port, type);
+ struct pd_discovery *disc =
+ pd_get_am_discovery_and_notify_access(port, type);
for (i = disc->svid_cnt; i < disc->svid_cnt + 12; i += 2) {
if (i >= SVID_DISCOVERY_MAX) {
@@ -446,7 +447,8 @@ void dfp_consume_modes(int port, enum tcpci_msg_type type, int cnt,
{
int svid_idx;
struct svid_mode_data *mode_discovery = NULL;
- struct pd_discovery *disc = pd_get_am_discovery(port, type);
+ struct pd_discovery *disc =
+ pd_get_am_discovery_and_notify_access(port, type);
uint16_t response_svid = (uint16_t) PD_VDO_VID(payload[0]);
for (svid_idx = 0; svid_idx < disc->svid_cnt; ++svid_idx) {
@@ -498,7 +500,8 @@ int pd_alt_mode(int port, enum tcpci_msg_type type, uint16_t svid)
void pd_set_identity_discovery(int port, enum tcpci_msg_type type,
enum pd_discovery_state disc)
{
- struct pd_discovery *pd = pd_get_am_discovery(port, type);
+ struct pd_discovery *pd =
+ pd_get_am_discovery_and_notify_access(port, type);
pd->identity_discovery = disc;
}
@@ -506,7 +509,7 @@ void pd_set_identity_discovery(int port, enum tcpci_msg_type type,
enum pd_discovery_state pd_get_identity_discovery(int port,
enum tcpci_msg_type type)
{
- struct pd_discovery *disc = pd_get_am_discovery(port, type);
+ const struct pd_discovery *disc = pd_get_am_discovery(port, type);
return disc->identity_discovery;
}
@@ -547,7 +550,8 @@ uint8_t pd_get_product_type(int port)
void pd_set_svids_discovery(int port, enum tcpci_msg_type type,
enum pd_discovery_state disc)
{
- struct pd_discovery *pd = pd_get_am_discovery(port, type);
+ struct pd_discovery *pd =
+ pd_get_am_discovery_and_notify_access(port, type);
pd->svids_discovery = disc;
}
@@ -555,21 +559,21 @@ void pd_set_svids_discovery(int port, enum tcpci_msg_type type,
enum pd_discovery_state pd_get_svids_discovery(int port,
enum tcpci_msg_type type)
{
- struct pd_discovery *disc = pd_get_am_discovery(port, type);
+ const struct pd_discovery *disc = pd_get_am_discovery(port, type);
return disc->svids_discovery;
}
int pd_get_svid_count(int port, enum tcpci_msg_type type)
{
- struct pd_discovery *disc = pd_get_am_discovery(port, type);
+ const struct pd_discovery *disc = pd_get_am_discovery(port, type);
return disc->svid_cnt;
}
uint16_t pd_get_svid(int port, uint16_t svid_idx, enum tcpci_msg_type type)
{
- struct pd_discovery *disc = pd_get_am_discovery(port, type);
+ const struct pd_discovery *disc = pd_get_am_discovery(port, type);
return disc->svids[svid_idx].svid;
}
@@ -577,7 +581,8 @@ uint16_t pd_get_svid(int port, uint16_t svid_idx, enum tcpci_msg_type type)
void pd_set_modes_discovery(int port, enum tcpci_msg_type type,
uint16_t svid, enum pd_discovery_state disc)
{
- struct pd_discovery *pd = pd_get_am_discovery(port, type);
+ struct pd_discovery *pd =
+ pd_get_am_discovery_and_notify_access(port, type);
int svid_idx;
for (svid_idx = 0; svid_idx < pd->svid_cnt; ++svid_idx) {
@@ -610,7 +615,7 @@ int pd_get_mode_vdo_for_svid(int port, enum tcpci_msg_type type,
uint16_t svid, uint32_t *vdo_out)
{
int idx;
- struct pd_discovery *disc;
+ const struct pd_discovery *disc;
if (type >= DISCOVERY_TYPE_COUNT)
return 0;
@@ -627,17 +632,17 @@ int pd_get_mode_vdo_for_svid(int port, enum tcpci_msg_type type,
return 0;
}
-struct svid_mode_data *pd_get_next_mode(int port,
+const struct svid_mode_data *pd_get_next_mode(int port,
enum tcpci_msg_type type)
{
- struct pd_discovery *disc = pd_get_am_discovery(port, type);
- struct svid_mode_data *failed_mode_data = NULL;
+ const struct pd_discovery *disc = pd_get_am_discovery(port, type);
+ const struct svid_mode_data *failed_mode_data = NULL;
bool svid_good_discovery = false;
int svid_idx;
/* Walk through all of the discovery mode entries */
for (svid_idx = 0; svid_idx < disc->svid_cnt; ++svid_idx) {
- struct svid_mode_data *mode_data = &disc->svids[svid_idx];
+ const struct svid_mode_data *mode_data = &disc->svids[svid_idx];
/* Discovery is needed, so send this one back now */
if (mode_data->discovery == PD_DISC_NEEDED)
@@ -662,10 +667,10 @@ struct svid_mode_data *pd_get_next_mode(int port,
return NULL;
}
-uint32_t *pd_get_mode_vdo(int port, uint16_t svid_idx,
+const uint32_t *pd_get_mode_vdo(int port, uint16_t svid_idx,
enum tcpci_msg_type type)
{
- struct pd_discovery *disc = pd_get_am_discovery(port, type);
+ const struct pd_discovery *disc = pd_get_am_discovery(port, type);
return disc->svids[svid_idx].mode_vdo;
}
@@ -710,7 +715,7 @@ static inline bool is_pd_rev3(int port, enum tcpci_msg_type type)
*/
bool is_vpd_ct_supported(int port)
{
- struct pd_discovery *disc =
+ const struct pd_discovery *disc =
pd_get_am_discovery(port, TCPCI_MSG_SOP_PRIME);
union vpd_vdo vpd = disc->identity.product_t1.vpd;
@@ -719,7 +724,7 @@ bool is_vpd_ct_supported(int port)
uint8_t get_vpd_ct_gnd_impedance(int port)
{
- struct pd_discovery *disc =
+ const struct pd_discovery *disc =
pd_get_am_discovery(port, TCPCI_MSG_SOP_PRIME);
union vpd_vdo vpd = disc->identity.product_t1.vpd;
@@ -728,7 +733,7 @@ uint8_t get_vpd_ct_gnd_impedance(int port)
uint8_t get_vpd_ct_vbus_impedance(int port)
{
- struct pd_discovery *disc =
+ const struct pd_discovery *disc =
pd_get_am_discovery(port, TCPCI_MSG_SOP_PRIME);
union vpd_vdo vpd = disc->identity.product_t1.vpd;
@@ -737,7 +742,7 @@ uint8_t get_vpd_ct_vbus_impedance(int port)
uint8_t get_vpd_ct_current_support(int port)
{
- struct pd_discovery *disc =
+ const struct pd_discovery *disc =
pd_get_am_discovery(port, TCPCI_MSG_SOP_PRIME);
union vpd_vdo vpd = disc->identity.product_t1.vpd;
@@ -746,7 +751,7 @@ uint8_t get_vpd_ct_current_support(int port)
uint8_t get_vpd_ct_max_vbus_voltage(int port)
{
- struct pd_discovery *disc =
+ const struct pd_discovery *disc =
pd_get_am_discovery(port, TCPCI_MSG_SOP_PRIME);
union vpd_vdo vpd = disc->identity.product_t1.vpd;
@@ -755,7 +760,7 @@ uint8_t get_vpd_ct_max_vbus_voltage(int port)
uint8_t get_vpd_ct_vdo_version(int port)
{
- struct pd_discovery *disc =
+ const struct pd_discovery *disc =
pd_get_am_discovery(port, TCPCI_MSG_SOP_PRIME);
union vpd_vdo vpd = disc->identity.product_t1.vpd;
@@ -764,7 +769,7 @@ uint8_t get_vpd_ct_vdo_version(int port)
uint8_t get_vpd_ct_firmware_verion(int port)
{
- struct pd_discovery *disc =
+ const struct pd_discovery *disc =
pd_get_am_discovery(port, TCPCI_MSG_SOP_PRIME);
union vpd_vdo vpd = disc->identity.product_t1.vpd;
@@ -773,7 +778,7 @@ uint8_t get_vpd_ct_firmware_verion(int port)
uint8_t get_vpd_ct_hw_version(int port)
{
- struct pd_discovery *disc =
+ const struct pd_discovery *disc =
pd_get_am_discovery(port, TCPCI_MSG_SOP_PRIME);
union vpd_vdo vpd = disc->identity.product_t1.vpd;
@@ -789,7 +794,7 @@ uint8_t get_vpd_ct_hw_version(int port)
*/
enum idh_ptype get_usb_pd_cable_type(int port)
{
- struct pd_discovery *disc =
+ const struct pd_discovery *disc =
pd_get_am_discovery(port, TCPCI_MSG_SOP_PRIME);
return disc->identity.idh.product_type;
@@ -797,7 +802,7 @@ enum idh_ptype get_usb_pd_cable_type(int port)
bool is_usb2_cable_support(int port)
{
- struct pd_discovery *disc =
+ const struct pd_discovery *disc =
pd_get_am_discovery(port, TCPCI_MSG_SOP_PRIME);
return disc->identity.idh.product_type == IDH_PTYPE_PCABLE ||
@@ -808,7 +813,7 @@ bool is_usb2_cable_support(int port)
bool is_cable_speed_gen2_capable(int port)
{
- struct pd_discovery *disc =
+ const struct pd_discovery *disc =
pd_get_am_discovery(port, TCPCI_MSG_SOP_PRIME);
switch (pd_get_rev(port, TCPCI_MSG_SOP_PRIME)) {
@@ -828,7 +833,7 @@ bool is_cable_speed_gen2_capable(int port)
bool is_active_cable_element_retimer(int port)
{
- struct pd_discovery *disc =
+ const struct pd_discovery *disc =
pd_get_am_discovery(port, TCPCI_MSG_SOP_PRIME);
/* Ref: USB PD Spec 2.0 Table 6-29 Active Cable VDO
@@ -878,7 +883,7 @@ void set_tbt_compat_mode_ready(int port)
*/
static bool is_tbt_cable_superspeed(int port)
{
- struct pd_discovery *disc;
+ const struct pd_discovery *disc;
if (!IS_ENABLED(CONFIG_USB_PD_TBT_COMPAT_MODE) ||
!IS_ENABLED(CONFIG_USB_PD_DECODE_SOP))
@@ -944,7 +949,7 @@ enum tbt_compat_cable_speed get_tbt_cable_speed(int port)
* enter Thunderbolt alternate mode.
*/
if (!cable_mode_resp.raw_value) {
- struct pd_discovery *disc;
+ const struct pd_discovery *disc;
if (get_usb_pd_cable_type(port) == IDH_PTYPE_ACABLE)
return TBT_SS_RES_0;
@@ -1066,7 +1071,7 @@ enum usb_rev30_ss get_usb4_cable_speed(int port)
if ((get_usb_pd_cable_type(port) == IDH_PTYPE_ACABLE) &&
is_pd_rev3(port, TCPCI_MSG_SOP_PRIME)) {
- struct pd_discovery *disc =
+ const struct pd_discovery *disc =
pd_get_am_discovery(port, TCPCI_MSG_SOP_PRIME);
union active_cable_vdo1_rev30 a_rev30 =
disc->identity.product_t1.a_rev30;
@@ -1087,7 +1092,7 @@ uint32_t get_enter_usb_msg_payload(int port)
* Table 6-47 Enter_USB Data Object
*/
union enter_usb_data_obj eudo;
- struct pd_discovery *disc;
+ const struct pd_discovery *disc;
union tbt_mode_resp_cable cable_mode_resp;
if (!IS_ENABLED(CONFIG_USB_PD_USB4))
diff --git a/common/usb_pd_console_cmd.c b/common/usb_pd_console_cmd.c
index 984f9def91..3ad1944494 100644
--- a/common/usb_pd_console_cmd.c
+++ b/common/usb_pd_console_cmd.c
@@ -112,7 +112,7 @@ static int command_cable(int argc, char **argv)
{
int port;
char *e;
- struct pd_discovery *disc;
+ const struct pd_discovery *disc;
enum idh_ptype ptype;
int cable_rev;
union tbt_mode_resp_cable cable_mode_resp;
diff --git a/common/usb_pd_policy.c b/common/usb_pd_policy.c
index 08827abe21..de6fc63a60 100644
--- a/common/usb_pd_policy.c
+++ b/common/usb_pd_policy.c
@@ -373,7 +373,14 @@ static int dfp_discover_svids(uint32_t *payload)
return 1;
}
-struct pd_discovery *pd_get_am_discovery(int port, enum tcpci_msg_type type)
+struct pd_discovery *pd_get_am_discovery_and_notify_access(
+ int port, enum tcpci_msg_type type)
+{
+ return (struct pd_discovery *)pd_get_am_discovery(port, type);
+}
+
+const struct pd_discovery *pd_get_am_discovery(int port,
+ enum tcpci_msg_type type)
{
return &discovery[port][type];
}
@@ -399,7 +406,8 @@ void pd_set_dfp_enter_mode_flag(int port, bool set)
*/
static int dfp_discover_modes(int port, uint32_t *payload)
{
- struct pd_discovery *disc = pd_get_am_discovery(port, TCPCI_MSG_SOP);
+ const struct pd_discovery *disc =
+ pd_get_am_discovery(port, TCPCI_MSG_SOP);
uint16_t svid = disc->svids[disc->svid_idx].svid;
if (disc->svid_idx >= disc->svid_cnt)
diff --git a/common/usbc/tbt_alt_mode.c b/common/usbc/tbt_alt_mode.c
index 0509add1f8..73e2796345 100644
--- a/common/usbc/tbt_alt_mode.c
+++ b/common/usbc/tbt_alt_mode.c
@@ -218,7 +218,7 @@ static void tbt_retry_enter_mode(int port)
/* Send Exit Mode to SOP''(if supported), or SOP' */
static void tbt_active_cable_exit_mode(int port)
{
- struct pd_discovery *disc;
+ const struct pd_discovery *disc;
disc = pd_get_am_discovery(port, TCPCI_MSG_SOP_PRIME);
@@ -230,7 +230,7 @@ static void tbt_active_cable_exit_mode(int port)
bool tbt_cable_entry_required_for_usb4(int port)
{
- struct pd_discovery *disc_sop_prime;
+ const struct pd_discovery *disc_sop_prime;
union tbt_mode_resp_cable cable_mode_resp;
/* Request to enter Thunderbolt mode for the cable prior to entering
@@ -262,7 +262,7 @@ bool tbt_cable_entry_required_for_usb4(int port)
void intel_vdm_acked(int port, enum tcpci_msg_type type, int vdo_count,
uint32_t *vdm)
{
- struct pd_discovery *disc;
+ const struct pd_discovery *disc;
const uint8_t vdm_cmd = PD_VDO_CMD(vdm[0]);
int opos_sop, opos_sop_prime;
union tbt_mode_resp_cable cable_mode_resp;
diff --git a/common/usbc/usb_mode.c b/common/usbc/usb_mode.c
index 1ed207353c..b9dc4973bc 100644
--- a/common/usbc/usb_mode.c
+++ b/common/usbc/usb_mode.c
@@ -176,7 +176,7 @@ bool enter_usb_cable_is_capable(int port)
if (get_usb4_cable_speed(port) < USB_R30_SS_U32_U40_GEN1)
return false;
} else if (get_usb_pd_cable_type(port) == IDH_PTYPE_ACABLE) {
- struct pd_discovery *disc_sop_prime =
+ const struct pd_discovery *disc_sop_prime =
pd_get_am_discovery(port, TCPCI_MSG_SOP_PRIME);
if (pd_get_vdo_ver(port, TCPCI_MSG_SOP_PRIME) >= VDM_VER20 &&
@@ -222,7 +222,7 @@ bool enter_usb_cable_is_capable(int port)
void enter_usb_accepted(int port, enum tcpci_msg_type type)
{
- struct pd_discovery *disc;
+ const struct pd_discovery *disc;
if (!enter_usb_response_valid(port, type))
return;
@@ -269,7 +269,7 @@ void enter_usb_rejected(int port, enum tcpci_msg_type type)
uint32_t enter_usb_setup_next_msg(int port, enum tcpci_msg_type *type)
{
- struct pd_discovery *disc_sop_prime;
+ const struct pd_discovery *disc_sop_prime;
switch (usb4_state[port]) {
case USB4_START:
diff --git a/common/usbc/usb_pd_host.c b/common/usbc/usb_pd_host.c
index 514ef82036..4d0fadeec3 100644
--- a/common/usbc/usb_pd_host.c
+++ b/common/usbc/usb_pd_host.c
@@ -44,7 +44,7 @@ static enum ec_status hc_typec_discovery(struct host_cmd_handler_args *args)
*/
pd_discovery_access_clear(p->port, type);
- disc = pd_get_am_discovery(p->port, type);
+ disc = pd_get_am_discovery_and_notify_access(p->port, type);
/* Initialize return size to that of discovery with no SVIDs */
args->response_size = sizeof(*r);
@@ -89,8 +89,10 @@ static enum ec_status hc_typec_discovery(struct host_cmd_handler_args *args)
* of the copy. If the data was accessed, return BUSY so the AP will
* try retrieving again and get the updated data.
*/
- if (!pd_discovery_access_validate(p->port, type))
+ if (!pd_discovery_access_validate(p->port, type)) {
+ CPRINTS("[C%d] %s returns EC_RES_BUSY!!\n", p->port, __func__);
return EC_RES_BUSY;
+ }
return EC_RES_SUCCESS;
}
diff --git a/common/usbc/usb_pe_drp_sm.c b/common/usbc/usb_pe_drp_sm.c
index 59d45b0e28..096f689b0a 100644
--- a/common/usbc/usb_pe_drp_sm.c
+++ b/common/usbc/usb_pe_drp_sm.c
@@ -5762,7 +5762,7 @@ static void pe_init_vdm_modes_request_entry(int port)
static void pe_init_vdm_modes_request_run(int port)
{
- struct svid_mode_data *mode_data;
+ const struct svid_mode_data *mode_data;
uint16_t requested_svid;
mode_data = pd_get_next_mode(port, pe[port].tx_type);
@@ -7050,14 +7050,20 @@ __maybe_unused bool pd_discovery_access_validate(int port,
return !(task_access[port][type] & ~BIT(task_get_current()));
}
-__maybe_unused struct pd_discovery *pd_get_am_discovery(int port,
+__maybe_unused struct pd_discovery *pd_get_am_discovery_and_notify_access(
+ int port, enum tcpci_msg_type type)
+{
+ atomic_or(&task_access[port][type], BIT(task_get_current()));
+ return (struct pd_discovery *)pd_get_am_discovery(port, type);
+}
+
+__maybe_unused const struct pd_discovery *pd_get_am_discovery(int port,
enum tcpci_msg_type type)
{
if (!IS_ENABLED(CONFIG_USB_PD_ALT_MODE_DFP))
assert(0);
ASSERT(type < DISCOVERY_TYPE_COUNT);
- atomic_or(&task_access[port][type], BIT(task_get_current()));
return &pe[port].discovery[type];
}