diff options
author | Tom Hughes <tomhughes@chromium.org> | 2022-09-21 14:10:01 -0700 |
---|---|---|
committer | Tom Hughes <tomhughes@chromium.org> | 2022-09-22 12:49:33 -0700 |
commit | 2bcf863b492fe7ed8105c853814dba6ed32ba719 (patch) | |
tree | fcf6ce5810f9ff9e3c8cce434812dd75492269ed /common/usb_pd_protocol.c | |
parent | e5fb0b9ba488614b5684e640530f00821ab7b943 (diff) | |
parent | 28712dae9d7ed1e694f7622cc083afa71090d4d5 (diff) | |
download | chrome-ec-2bcf863b492fe7ed8105c853814dba6ed32ba719.tar.gz |
Merge remote-tracking branch cros/main into firmware-fpmcu-bloonchipper-releasefirmware-fpmcu-bloonchipper-release
Generated by: ./util/update_release_branch.py --board bloonchipper
--relevant_paths_file ./util/fingerprint-relevant-paths.txt firmware-
fpmcu-bloonchipper-release
Relevant changes:
git log --oneline e5fb0b9ba4..28712dae9d -- board/hatch_fp
board/bloonchipper common/fpsensor docs/fingerprint driver/fingerprint
util/getversion.sh
ded9307b79 util/getversion.sh: Fix version when not in a git repo
956055e692 board: change Google USB vendor info
71b2ef709d Update license boilerplate text in source code files
33e11afda0 Revert "fpsensor: Build fpsensor source file with C++"
c8d0360723 fpsensor: Build fpsensor source file with C++
bc113abd53 fpsensor: Fix g++ compiler error
150a58a0dc fpsensor: Fix fp_set_sensor_mode return type
b33b5ce85b fpsensor: Remove nested designators for C++ compatibility
2e864b2539 tree-wide: const-ify argv for console commands
56d8b360f9 test: Add test for get ikm failure when seed not set
3a3d6c3690 test: Add test for fpsensor trivial key failure
233e6bbd08 fpsensor_crypto: Abstract calls to hmac_SHA256
0a041b285b docs/fingerprint: Typo correction
c03fab67e2 docs/fingerprint: Fix the path of fputils.py
0b5d4baf5a util/getversion.sh: Fix empty file list handling
6e128fe760 FPMCU dev board environment with Satlab
3eb29b6aa5 builtin: Move ssize_t to sys/types.h
345d62ebd1 docs/fingerprint: Update power numbers for latest dartmonkey release
c25ffdb316 common: Conditionally support printf %l and %i modifiers
9a3c514b45 test: Add a test to check if the debugger is connected
54e603413f Move standard library tests to their own file
43fa6b4bf8 docs/fingerprint: Update power numbers for latest bloonchipper release
25536f9a84 driver/fingerprint/fpc/bep/fpc_sensor_spi.c: Format with clang-format
4face99efd driver/fingerprint/fpc/libfp/fpc_sensor_pal.h: Format with clang-format
738de2b575 trng: Rename rand to trng_rand
14b8270edd docs/fingerprint: Update dragonclaw power numbers
0b268f93d1 driver/fingerprint/fpc/libfp/fpc_private.c: Format with clang-format
f80da163f2 driver/fingerprint/fpc/libfp/fpc_private.h: Format with clang-format
5e9c85c9b1 driver/fingerprint/fpc/libfp/fpc_sensor_pal.c: Format with clang-format
c1f9dd3cf8 driver/fingerprint/fpc/libfp/fpc_bio_algorithm.h: Format with clang-format
eb1e1bed8d driver/fingerprint/fpc/libfp/fpc1145_private.h: Format with clang-format
6e7b611821 driver/fingerprint/fpc/bep/fpc_bio_algorithm.h: Format with clang-format
e0589cd5e2 driver/fingerprint/fpc/bep/fpc1035_private.h: Format with clang-format
7905e556a0 common/fpsensor/fpsensor_crypto.c: Format with clang-format
21289d170c driver/fingerprint/fpc/bep/fpc1025_private.h: Format with clang-format
98a20f937e common/fpsensor/fpsensor_state.c: Format with clang-format
a2d255d8af common/fpsensor/fpsensor.c: Format with clang-format
73055eeb3f driver/fingerprint/fpc/bep/fpc_private.c: Format with clang-format
0f7b5cb509 common/fpsensor/fpsensor_private.h: Format with clang-format
1ceade6e65 driver/fingerprint/fpc/bep/fpc_private.h: Format with clang-format
dc3e9008b8 board/hatch_fp/board.h: Format with clang-format
dca9d74321 Revert "trng: Rename rand to trng_rand"
a6b0b3554f trng: Rename rand to trng_rand
28d0b75b70 third_party/boringssl: Remove unused header
BRANCH=None
BUG=b:246424843 b:234181908 b:244781166 b:234181908 b:244387210
BUG=b:242720240 chromium:1098010 b:180945056 b:236025198 b:234181908
BUG=b:234181908 b:237344361 b:131913998 b:236386294 b:234143158
BUG=b:234781655 b:215613183 b:242720910
TEST=`make -j buildall`
TEST=./test/run_device_tests.py --board bloonchipper
Test "aes": PASSED
Test "cec": PASSED
Test "cortexm_fpu": PASSED
Test "crc": PASSED
Test "flash_physical": PASSED
Test "flash_write_protect": PASSED
Test "fpsensor_hw": PASSED
Test "fpsensor_spi_ro": PASSED
Test "fpsensor_spi_rw": PASSED
Test "fpsensor_uart_ro": PASSED
Test "fpsensor_uart_rw": PASSED
Test "mpu_ro": PASSED
Test "mpu_rw": PASSED
Test "mutex": PASSED
Test "pingpong": PASSED
Test "printf": PASSED
Test "queue": PASSED
Test "rollback_region0": PASSED
Test "rollback_region1": PASSED
Test "rollback_entropy": PASSED
Test "rtc": PASSED
Test "sha256": PASSED
Test "sha256_unrolled": PASSED
Test "static_if": PASSED
Test "stdlib": PASSED
Test "system_is_locked_wp_on": PASSED
Test "system_is_locked_wp_off": PASSED
Test "timer_dos": PASSED
Test "utils": PASSED
Test "utils_str": PASSED
Test "stm32f_rtc": PASSED
Test "panic_data_bloonchipper_v2.0.4277": PASSED
Test "panic_data_bloonchipper_v2.0.5938": PASSED
Force-Relevant-Builds: all
Signed-off-by: Tom Hughes <tomhughes@chromium.org>
Change-Id: I264ad0ffe7afcd507a1e483c6e934a9c4fea47c3
Diffstat (limited to 'common/usb_pd_protocol.c')
-rw-r--r-- | common/usb_pd_protocol.c | 1235 |
1 files changed, 511 insertions, 724 deletions
diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c index 3f0408eedf..80d3b400da 100644 --- a/common/usb_pd_protocol.c +++ b/common/usb_pd_protocol.c @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -7,6 +7,7 @@ #include "battery.h" #include "battery_smart.h" #include "board.h" +#include "builtin/assert.h" #include "charge_manager.h" #include "charge_state.h" #include "chipset.h" @@ -38,27 +39,19 @@ #include "vboot.h" /* Flags to clear on a disconnect */ -#define PD_FLAGS_RESET_ON_DISCONNECT_MASK (PD_FLAGS_PARTNER_DR_POWER | \ - PD_FLAGS_PARTNER_DR_DATA | \ - PD_FLAGS_CHECK_IDENTITY | \ - PD_FLAGS_SNK_CAP_RECVD | \ - PD_FLAGS_TCPC_DRP_TOGGLE | \ - PD_FLAGS_EXPLICIT_CONTRACT | \ - PD_FLAGS_PREVIOUS_PD_CONN | \ - PD_FLAGS_CHECK_PR_ROLE | \ - PD_FLAGS_CHECK_DR_ROLE | \ - PD_FLAGS_PARTNER_UNCONSTR | \ - PD_FLAGS_VCONN_ON | \ - PD_FLAGS_TRY_SRC | \ - PD_FLAGS_PARTNER_USB_COMM | \ - PD_FLAGS_UPDATE_SRC_CAPS | \ - PD_FLAGS_TS_DTS_PARTNER | \ - PD_FLAGS_SNK_WAITING_BATT | \ - PD_FLAGS_CHECK_VCONN_STATE) +#define PD_FLAGS_RESET_ON_DISCONNECT_MASK \ + (PD_FLAGS_PARTNER_DR_POWER | PD_FLAGS_PARTNER_DR_DATA | \ + PD_FLAGS_CHECK_IDENTITY | PD_FLAGS_SNK_CAP_RECVD | \ + PD_FLAGS_TCPC_DRP_TOGGLE | PD_FLAGS_EXPLICIT_CONTRACT | \ + PD_FLAGS_PREVIOUS_PD_CONN | PD_FLAGS_CHECK_PR_ROLE | \ + PD_FLAGS_CHECK_DR_ROLE | PD_FLAGS_PARTNER_UNCONSTR | \ + PD_FLAGS_VCONN_ON | PD_FLAGS_TRY_SRC | PD_FLAGS_PARTNER_USB_COMM | \ + PD_FLAGS_UPDATE_SRC_CAPS | PD_FLAGS_TS_DTS_PARTNER | \ + PD_FLAGS_SNK_WAITING_BATT | PD_FLAGS_CHECK_VCONN_STATE) #ifdef CONFIG_COMMON_RUNTIME -#define CPRINTF(format, args...) cprintf(CC_USBPD, format, ## args) -#define CPRINTS(format, args...) cprints(CC_USBPD, format, ## args) +#define CPRINTF(format, args...) cprintf(CC_USBPD, format, ##args) +#define CPRINTS(format, args...) cprints(CC_USBPD, format, ##args) static int tcpc_prints(const char *string, int port) { @@ -105,11 +98,11 @@ static const int debug_level; #define DUAL_ROLE_IF_ELSE(port, sink_clause, src_clause) (src_clause) #endif -#define READY_RETURN_STATE(port) DUAL_ROLE_IF_ELSE(port, PD_STATE_SNK_READY, \ - PD_STATE_SRC_READY) +#define READY_RETURN_STATE(port) \ + DUAL_ROLE_IF_ELSE(port, PD_STATE_SNK_READY, PD_STATE_SRC_READY) /* Type C supply voltage (mV) */ -#define TYPE_C_VOLTAGE 5000 /* mV */ +#define TYPE_C_VOLTAGE 5000 /* mV */ /* PD counter definitions */ #define PD_MESSAGE_ID_COUNT 7 @@ -153,8 +146,9 @@ enum vdm_states { #ifdef CONFIG_USB_PD_DUAL_ROLE /* Port dual-role state */ enum pd_dual_role_states drp_state[CONFIG_USB_PD_PORT_MAX_COUNT] = { - [0 ... (CONFIG_USB_PD_PORT_MAX_COUNT - 1)] = - CONFIG_USB_PD_INITIAL_DRP_STATE}; + [0 ...(CONFIG_USB_PD_PORT_MAX_COUNT - 1)] = + CONFIG_USB_PD_INITIAL_DRP_STATE +}; /* Enable variable for Try.SRC states */ static bool pd_try_src_enable; @@ -183,8 +177,7 @@ static bool pd_try_src_enable; * Rev 1 (VDO 1.0) - return VDM_VER10 * Rev 2 (VDO 2.0) - return VDM_VER20 */ -static const uint8_t vdo_ver[] = { - VDM_VER10, VDM_VER10, VDM_VER20}; +static const uint8_t vdo_ver[] = { VDM_VER10, VDM_VER10, VDM_VER20 }; #define VDO_VER(v) vdo_ver[v] #else #define VDO_VER(v) VDM_VER10 @@ -277,7 +270,7 @@ static struct pd_protocol { /* Attached ChromeOS device id, RW hash, and current RO / RW image */ uint16_t dev_id; - uint32_t dev_rw_hash[PD_RW_HASH_SIZE/4]; + uint32_t dev_rw_hash[PD_RW_HASH_SIZE / 4]; enum ec_image current_image; #ifdef CONFIG_USB_PD_REV30 /* protocol revision */ @@ -298,24 +291,46 @@ static struct pd_protocol { } pd[CONFIG_USB_PD_PORT_MAX_COUNT]; #ifdef CONFIG_USB_PD_TCPMV1_DEBUG -static const char * const pd_state_names[] = { - "DISABLED", "SUSPENDED", - "SNK_DISCONNECTED", "SNK_DISCONNECTED_DEBOUNCE", +static const char *const pd_state_names[] = { + "DISABLED", + "SUSPENDED", + "SNK_DISCONNECTED", + "SNK_DISCONNECTED_DEBOUNCE", "SNK_HARD_RESET_RECOVER", - "SNK_DISCOVERY", "SNK_REQUESTED", "SNK_TRANSITION", "SNK_READY", - "SNK_SWAP_INIT", "SNK_SWAP_SNK_DISABLE", - "SNK_SWAP_SRC_DISABLE", "SNK_SWAP_STANDBY", "SNK_SWAP_COMPLETE", - "SRC_DISCONNECTED", "SRC_DISCONNECTED_DEBOUNCE", - "SRC_HARD_RESET_RECOVER", "SRC_STARTUP", - "SRC_DISCOVERY", "SRC_NEGOCIATE", "SRC_ACCEPTED", "SRC_POWERED", - "SRC_TRANSITION", "SRC_READY", "SRC_GET_SNK_CAP", "DR_SWAP", - "SRC_SWAP_INIT", "SRC_SWAP_SNK_DISABLE", "SRC_SWAP_SRC_DISABLE", + "SNK_DISCOVERY", + "SNK_REQUESTED", + "SNK_TRANSITION", + "SNK_READY", + "SNK_SWAP_INIT", + "SNK_SWAP_SNK_DISABLE", + "SNK_SWAP_SRC_DISABLE", + "SNK_SWAP_STANDBY", + "SNK_SWAP_COMPLETE", + "SRC_DISCONNECTED", + "SRC_DISCONNECTED_DEBOUNCE", + "SRC_HARD_RESET_RECOVER", + "SRC_STARTUP", + "SRC_DISCOVERY", + "SRC_NEGOCIATE", + "SRC_ACCEPTED", + "SRC_POWERED", + "SRC_TRANSITION", + "SRC_READY", + "SRC_GET_SNK_CAP", + "DR_SWAP", + "SRC_SWAP_INIT", + "SRC_SWAP_SNK_DISABLE", + "SRC_SWAP_SRC_DISABLE", "SRC_SWAP_STANDBY", - "VCONN_SWAP_SEND", "VCONN_SWAP_INIT", "VCONN_SWAP_READY", - "SOFT_RESET", "HARD_RESET_SEND", "HARD_RESET_EXECUTE", "BIST_RX", + "VCONN_SWAP_SEND", + "VCONN_SWAP_INIT", + "VCONN_SWAP_READY", + "SOFT_RESET", + "HARD_RESET_SEND", + "HARD_RESET_EXECUTE", + "BIST_RX", "BIST_TX", "DRP_AUTO_TOGGLE", - "ENTER_USB", }; BUILD_ASSERT(ARRAY_SIZE(pd_state_names) == PD_STATE_COUNT); #endif @@ -336,11 +351,10 @@ bool pd_alt_mode_capable(int port) * the port is not suspended. */ return pd_comm_is_enabled(port) && - !(pd[port].task_state == PD_STATE_SUSPENDED); + !(pd[port].task_state == PD_STATE_SUSPENDED); } -static inline void set_state_timeout(int port, - uint64_t timeout, +static inline void set_state_timeout(int port, uint64_t timeout, enum pd_states timeout_state) { pd[port].timeout = timeout; @@ -353,9 +367,6 @@ int pd_get_rev(int port, enum tcpci_msg_type type) /* TCPMv1 Only stores PD revision for SOP and SOP' types */ ASSERT(type < NUM_SOP_STAR_TYPES - 1); - if (type == TCPCI_MSG_SOP_PRIME) - return get_usb_pd_cable_revision(port); - return pd[port].rev; #else return PD_REV20; @@ -365,9 +376,6 @@ int pd_get_rev(int port, enum tcpci_msg_type type) int pd_get_vdo_ver(int port, enum tcpci_msg_type type) { #ifdef CONFIG_USB_PD_REV30 - if (type == TCPCI_MSG_SOP_PRIME) - return vdo_ver[get_usb_pd_cable_revision(port)]; - return vdo_ver[pd[port].rev]; #else return VDM_VER10; @@ -385,13 +393,16 @@ int pd_is_connected(int port) return 0; #endif - return DUAL_ROLE_IF_ELSE(port, + return DUAL_ROLE_IF_ELSE( + port, /* sink */ pd[port].task_state != PD_STATE_SNK_DISCONNECTED && - pd[port].task_state != PD_STATE_SNK_DISCONNECTED_DEBOUNCE, + pd[port].task_state != + PD_STATE_SNK_DISCONNECTED_DEBOUNCE, /* source */ pd[port].task_state != PD_STATE_SRC_DISCONNECTED && - pd[port].task_state != PD_STATE_SRC_DISCONNECTED_DEBOUNCE); + pd[port].task_state != + PD_STATE_SRC_DISCONNECTED_DEBOUNCE); } /* Return true if partner port is known to be PD capable. */ @@ -425,7 +436,6 @@ void pd_vbus_low(int port) } #endif - #ifdef CONFIG_USBC_VCONN static void set_vconn(int port, int enable) { @@ -485,12 +495,12 @@ static void handle_device_access(int port) pd[port].low_power_time = get_time().val + PD_LPM_DEBOUNCE_US; if (pd[port].flags & PD_FLAGS_LPM_ENGAGED) { tcpc_prints("Exit Low Power Mode", port); - pd[port].flags &= ~(PD_FLAGS_LPM_ENGAGED | - PD_FLAGS_LPM_REQUESTED); + pd[port].flags &= + ~(PD_FLAGS_LPM_ENGAGED | PD_FLAGS_LPM_REQUESTED); pd[port].flags |= PD_FLAGS_LPM_EXIT; - pd[port].low_power_exit_time = get_time().val - + PD_LPM_EXIT_DEBOUNCE_US; + pd[port].low_power_exit_time = + get_time().val + PD_LPM_EXIT_DEBOUNCE_US; /* * Wake to ensure we make another pass through the main task * loop after clearing the flags. @@ -675,28 +685,18 @@ static bool consume_sop_repeat_message(int port, uint8_t msg_id) * @param port USB PD TCPC port number * @param msg_header Message Header containing the RX message ID * @return True if the received message is a duplicate one, False otherwise. - * - * From USB PD version 1.3 section 6.7.1, the port which communicates - * using SOP* Packets Shall maintain copies of the last MessageID for - * each type of SOP* it uses. */ static bool consume_repeat_message(int port, uint32_t msg_header) { uint8_t msg_id = PD_HEADER_ID(msg_header); - enum tcpci_msg_type sop = PD_HEADER_GET_SOP(msg_header); /* If repeat message ignore, except softreset control request. */ if (PD_HEADER_TYPE(msg_header) == PD_CTRL_SOFT_RESET && PD_HEADER_CNT(msg_header) == 0) { return false; - } else if (sop == TCPCI_MSG_SOP_PRIME) { - return consume_sop_prime_repeat_msg(port, msg_id); - } else if (sop == TCPCI_MSG_SOP_PRIME_PRIME) { - return consume_sop_prime_prime_repeat_msg(port, msg_id); } else { return consume_sop_repeat_message(port, msg_id); } - } /** @@ -791,15 +791,13 @@ static inline void set_state(int port, enum pd_states next_state) if (last_state != PD_STATE_SNK_DISCONNECTED_DEBOUNCE && last_state != PD_STATE_SRC_DISCONNECTED_DEBOUNCE) { pd[port].flags &= ~PD_FLAGS_RESET_ON_DISCONNECT_MASK; - reset_pd_cable(port); } /* Clear the input current limit */ pd_set_input_current_limit(port, 0, 0); #ifdef CONFIG_CHARGE_MANAGER typec_set_input_current_limit(port, 0, 0); - charge_manager_set_ceil(port, - CEIL_REQUESTOR_PD, + charge_manager_set_ceil(port, CEIL_REQUESTOR_PD, CHARGE_CEIL_NONE); #endif #ifdef CONFIG_BC12_DETECT_DATA_ROLE_TRIGGER @@ -868,7 +866,7 @@ static inline void set_state(int port, enum pd_states next_state) /* Upon entering SRC_READY, it is safe for the sink to transmit */ if (next_state == PD_STATE_SRC_READY) { if (pd[port].rev == PD_REV30 && - pd[port].flags & PD_FLAGS_EXPLICIT_CONTRACT) + pd[port].flags & PD_FLAGS_EXPLICIT_CONTRACT) sink_can_xmit(port, SINK_TX_OK); } #endif @@ -888,7 +886,7 @@ static inline void set_state(int port, enum pd_states next_state) #ifdef CONFIG_USB_PD_TCPMV1_DEBUG if (debug_level > 0) CPRINTF("C%d st%d %s\n", port, next_state, - pd_state_names[next_state]); + pd_state_names[next_state]); else #endif CPRINTF("C%d st%d\n", port, next_state); @@ -909,8 +907,8 @@ void pd_transmit_complete(int port, int status) task_set_event(PD_PORT_TO_TASK_ID(port), PD_EVENT_TX); } -static int pd_transmit(int port, enum tcpci_msg_type type, - uint16_t header, const uint32_t *data, enum ams_seq ams) +static int pd_transmit(int port, enum tcpci_msg_type type, uint16_t header, + const uint32_t *data, enum ams_seq ams) { int evt; int res; @@ -922,9 +920,9 @@ static int pd_transmit(int port, enum tcpci_msg_type type, if (!pd_comm_is_enabled(port)) return -1; - /* Don't try to transmit anything until we have processed - * all RX messages. - */ + /* Don't try to transmit anything until we have processed + * all RX messages. + */ if (tcpm_has_pending_message(port)) return -1; @@ -951,7 +949,7 @@ static int pd_transmit(int port, enum tcpci_msg_type type, * Note: a Sink can still send Hard Reset signaling at any time. */ if ((pd[port].rev == PD_REV30) && ams == AMS_START && - (pd[port].flags & PD_FLAGS_EXPLICIT_CONTRACT)) { + (pd[port].flags & PD_FLAGS_EXPLICIT_CONTRACT)) { if (pd[port].power_role == PD_ROLE_SOURCE) { /* * Inform Sink that it can't transmit. If a sink @@ -967,7 +965,7 @@ static int pd_transmit(int port, enum tcpci_msg_type type, tcpm_get_cc(port, &cc1, &cc2); if (cc1 == TYPEC_CC_VOLT_RP_1_5 || - cc2 == TYPEC_CC_VOLT_RP_1_5) { + cc2 == TYPEC_CC_VOLT_RP_1_5) { /* Sink can't transmit now. */ /* Return failure, pd_task can retry later */ return -1; @@ -1004,15 +1002,15 @@ static int send_control(int port, int type) { int bit_len; uint16_t header = PD_HEADER(type, pd[port].power_role, - pd[port].data_role, pd[port].msg_id, 0, - pd_get_rev(port, TCPCI_MSG_SOP), 0); + pd[port].data_role, pd[port].msg_id, 0, + pd_get_rev(port, TCPCI_MSG_SOP), 0); /* * For PD 3.0, collision avoidance logic needs to know if this message * will begin a new Atomic Message Sequence (AMS) */ - enum ams_seq ams = ((1 << type) & PD_CTRL_AMS_START_MASK) - ? AMS_START : AMS_RESPONSE; - + enum ams_seq ams = ((1 << type) & PD_CTRL_AMS_START_MASK) ? + AMS_START : + AMS_RESPONSE; bit_len = pd_transmit(port, TCPCI_MSG_SOP, header, NULL, ams); if (debug_level >= 2) @@ -1030,7 +1028,7 @@ static int send_source_cap(int port, enum ams_seq ams) { int bit_len; #if defined(CONFIG_USB_PD_DYNAMIC_SRC_CAP) || \ - defined(CONFIG_USB_PD_MAX_SINGLE_SOURCE_CURRENT) + defined(CONFIG_USB_PD_MAX_SINGLE_SOURCE_CURRENT) const uint32_t *src_pdo; const int src_pdo_cnt = charge_manager_get_source_pdo(&src_pdo, port); #else @@ -1042,12 +1040,13 @@ static int send_source_cap(int port, enum ams_seq ams) if (src_pdo_cnt == 0) /* No source capabilities defined, sink only */ header = PD_HEADER(PD_CTRL_REJECT, pd[port].power_role, - pd[port].data_role, pd[port].msg_id, 0, - pd_get_rev(port, TCPCI_MSG_SOP), 0); + pd[port].data_role, pd[port].msg_id, 0, + pd_get_rev(port, TCPCI_MSG_SOP), 0); else header = PD_HEADER(PD_DATA_SOURCE_CAP, pd[port].power_role, - pd[port].data_role, pd[port].msg_id, src_pdo_cnt, - pd_get_rev(port, TCPCI_MSG_SOP), 0); + pd[port].data_role, pd[port].msg_id, + src_pdo_cnt, pd_get_rev(port, TCPCI_MSG_SOP), + 0); bit_len = pd_transmit(port, TCPCI_MSG_SOP, header, src_pdo, ams); if (debug_level >= 2) @@ -1060,21 +1059,19 @@ static int send_source_cap(int port, enum ams_seq ams) static int send_battery_cap(int port, uint32_t *payload) { int bit_len; - uint16_t msg[6] = {0, 0, 0, 0, 0, 0}; - uint16_t header = PD_HEADER(PD_EXT_BATTERY_CAP, - pd[port].power_role, - pd[port].data_role, - pd[port].msg_id, + uint16_t msg[6] = { 0, 0, 0, 0, 0, 0 }; + uint16_t header = PD_HEADER(PD_EXT_BATTERY_CAP, pd[port].power_role, + pd[port].data_role, pd[port].msg_id, 3, /* Number of Data Objects */ - pd[port].rev, - 1 /* This is an exteded message */ - ); + pd[port].rev, 1 /* This is an exteded + message */ + ); /* Set extended header */ msg[0] = PD_EXT_HEADER(0, /* Chunk Number */ 0, /* Request Chunk */ - 9 /* Data Size in bytes */ - ); + 9 /* Data Size in bytes */ + ); /* Set VID */ msg[1] = USB_VID_GOOGLE; @@ -1121,7 +1118,7 @@ static int send_battery_cap(int port, uint32_t *payload) * 10th of a Wh = Wh * 10 */ msg[3] = DIV_ROUND_NEAREST((c * v), - 100000); + 100000); } if (battery_full_charge_capacity(&c) == 0) { @@ -1130,7 +1127,7 @@ static int send_battery_cap(int port, uint32_t *payload) * 10th of a Wh = Wh * 10 */ msg[4] = DIV_ROUND_NEAREST((c * v), - 100000); + 100000); } } } @@ -1143,18 +1140,16 @@ static int send_battery_cap(int port, uint32_t *payload) return bit_len; } -static int send_battery_status(int port, uint32_t *payload) +static int send_battery_status(int port, uint32_t *payload) { int bit_len; uint32_t msg = 0; - uint16_t header = PD_HEADER(PD_DATA_BATTERY_STATUS, - pd[port].power_role, - pd[port].data_role, - pd[port].msg_id, + uint16_t header = PD_HEADER(PD_DATA_BATTERY_STATUS, pd[port].power_role, + pd[port].data_role, pd[port].msg_id, 1, /* Number of Data Objects */ - pd[port].rev, - 0 /* This is NOT an extended message */ - ); + pd[port].rev, 0 /* This is NOT an extended + message */ + ); if (battery_is_present()) { /* @@ -1169,15 +1164,15 @@ static int send_battery_status(int port, uint32_t *payload) uint32_t c; if (battery_design_voltage(&v) != 0 || - battery_remaining_capacity(&c) != 0) { + battery_remaining_capacity(&c) != 0) { msg |= BSDO_CAP(BSDO_CAP_UNKNOWN); } else { /* * Wh = (c * v) / 1000000 * 10th of a Wh = Wh * 10 */ - msg |= BSDO_CAP(DIV_ROUND_NEAREST((c * v), - 100000)); + msg |= BSDO_CAP( + DIV_ROUND_NEAREST((c * v), 100000)); } /* Battery is present */ @@ -1217,8 +1212,9 @@ static void send_sink_cap(int port) { int bit_len; uint16_t header = PD_HEADER(PD_DATA_SINK_CAP, pd[port].power_role, - pd[port].data_role, pd[port].msg_id, pd_snk_pdo_cnt, - pd_get_rev(port, TCPCI_MSG_SOP), 0); + pd[port].data_role, pd[port].msg_id, + pd_snk_pdo_cnt, + pd_get_rev(port, TCPCI_MSG_SOP), 0); bit_len = pd_transmit(port, TCPCI_MSG_SOP, header, pd_snk_pdo, AMS_RESPONSE); @@ -1230,8 +1226,8 @@ static int send_request(int port, uint32_t rdo) { int bit_len; uint16_t header = PD_HEADER(PD_DATA_REQUEST, pd[port].power_role, - pd[port].data_role, pd[port].msg_id, 1, - pd_get_rev(port, TCPCI_MSG_SOP), 0); + pd[port].data_role, pd[port].msg_id, 1, + pd_get_rev(port, TCPCI_MSG_SOP), 0); /* Note: ams will need to be AMS_START if used for PPS keep alive */ bit_len = pd_transmit(port, TCPCI_MSG_SOP, header, &rdo, AMS_RESPONSE); @@ -1250,8 +1246,8 @@ static int send_bist_cmd(int port) uint32_t bdo = BDO(BDO_MODE_CARRIER2, 0); int bit_len; uint16_t header = PD_HEADER(PD_DATA_BIST, pd[port].power_role, - pd[port].data_role, pd[port].msg_id, 1, - pd_get_rev(port, TCPCI_MSG_SOP), 0); + pd[port].data_role, pd[port].msg_id, 1, + pd_get_rev(port, TCPCI_MSG_SOP), 0); bit_len = pd_transmit(port, TCPCI_MSG_SOP, header, &bdo, AMS_START); CPRINTF("C%d BIST>%d\n", port, bit_len); @@ -1261,19 +1257,18 @@ static int send_bist_cmd(int port) #endif static void queue_vdm(int port, uint32_t *header, const uint32_t *data, - int data_cnt, enum tcpci_msg_type type) + int data_cnt, enum tcpci_msg_type type) { pd[port].vdo_count = data_cnt + 1; pd[port].vdo_data[0] = header[0]; pd[port].xmit_type = type; - memcpy(&pd[port].vdo_data[1], data, - sizeof(uint32_t) * data_cnt); + memcpy(&pd[port].vdo_data[1], data, sizeof(uint32_t) * data_cnt); /* Set ready, pd task will actually send */ pd[port].vdm_state = VDM_STATE_READY; } static void handle_vdm_request(int port, int cnt, uint32_t *payload, - uint32_t head) + uint32_t head) { int rlen = 0; uint32_t *rdata; @@ -1282,11 +1277,11 @@ static void handle_vdm_request(int port, int cnt, uint32_t *payload, if (pd[port].vdm_state == VDM_STATE_BUSY) { /* If UFP responded busy retry after timeout */ if (PD_VDO_CMDT(payload[0]) == CMDT_RSP_BUSY) { - pd[port].vdm_timeout.val = get_time().val + - PD_T_VDM_BUSY; + pd[port].vdm_timeout.val = + get_time().val + PD_T_VDM_BUSY; pd[port].vdm_state = VDM_STATE_WAIT_RSP_BUSY; pd[port].vdo_retry = (payload[0] & ~VDO_CMDT_MASK) | - CMDT_INIT; + CMDT_INIT; return; } else { pd[port].vdm_state = VDM_STATE_DONE; @@ -1310,8 +1305,8 @@ static void handle_vdm_request(int port, int cnt, uint32_t *payload, } if (debug_level >= 2) - CPRINTF("C%d Unhandled VDM VID %04x CMD %04x\n", - port, PD_VDO_VID(payload[0]), payload[0] & 0xFFFF); + CPRINTF("C%d Unhandled VDM VID %04x CMD %04x\n", port, + PD_VDO_VID(payload[0]), payload[0] & 0xFFFF); } bool pd_is_disconnected(int port) @@ -1401,8 +1396,7 @@ void pd_execute_hard_reset(int port) /* Clear the input current limit */ pd_set_input_current_limit(port, 0, 0); #ifdef CONFIG_CHARGE_MANAGER - charge_manager_set_ceil(port, - CEIL_REQUESTOR_PD, + charge_manager_set_ceil(port, CEIL_REQUESTOR_PD, CHARGE_CEIL_NONE); #endif /* CONFIG_CHARGE_MANAGER */ @@ -1442,7 +1436,7 @@ static void execute_soft_reset(int port) { invalidate_last_message_id(port); set_state(port, DUAL_ROLE_IF_ELSE(port, PD_STATE_SNK_DISCOVERY, - PD_STATE_SRC_DISCOVERY)); + PD_STATE_SRC_DISCOVERY)); CPRINTF("C%d Soft Rst\n", port); } @@ -1484,8 +1478,8 @@ static int pd_send_request_msg(int port, int always_send_request) #endif } - CPRINTF("C%d Req [%d] %dmV %dmA", port, RDO_POS(rdo), - supply_voltage, curr_limit); + CPRINTF("C%d Req [%d] %dmV %dmA", port, RDO_POS(rdo), supply_voltage, + curr_limit); if (rdo & RDO_CAP_MISMATCH) CPRINTF(" Mismatch"); CPRINTF("\n"); @@ -1543,8 +1537,7 @@ static void pd_update_pdo_flags(int port, int pdo_cnt, uint32_t *pdos) * Get max power that the partner offers (not necessarily what * this board will request) */ - pd_find_pdo_index(pdo_cnt, pdos, PD_REV3_MAX_VOLTAGE, - &max_pdo); + pd_find_pdo_index(pdo_cnt, pdos, PD_REV3_MAX_VOLTAGE, &max_pdo); pd_extract_pdo_power(max_pdo, &max_ma, &max_mv, &unused); max_mw = max_ma * max_mv / 1000; @@ -1557,8 +1550,7 @@ static void pd_update_pdo_flags(int port, int pdo_cnt, uint32_t *pdos) } } -static void handle_data_request(int port, uint32_t head, - uint32_t *payload) +static void handle_data_request(int port, uint32_t head, uint32_t *payload) { int type = PD_HEADER_TYPE(head); int cnt = PD_HEADER_CNT(head); @@ -1566,14 +1558,12 @@ static void handle_data_request(int port, uint32_t head, switch (type) { #ifdef CONFIG_USB_PD_DUAL_ROLE case PD_DATA_SOURCE_CAP: - if ((pd[port].task_state == PD_STATE_SNK_DISCOVERY) - || (pd[port].task_state == PD_STATE_SNK_TRANSITION) - || (pd[port].task_state == PD_STATE_SNK_REQUESTED) - || ((get_usb_pd_vbus_detect() == - USB_PD_VBUS_DETECT_NONE) - && (pd[port].task_state == - PD_STATE_SNK_HARD_RESET_RECOVER)) - || (pd[port].task_state == PD_STATE_SNK_READY)) { + if ((pd[port].task_state == PD_STATE_SNK_DISCOVERY) || + (pd[port].task_state == PD_STATE_SNK_TRANSITION) || + (pd[port].task_state == PD_STATE_SNK_REQUESTED) || + ((get_usb_pd_vbus_detect() == USB_PD_VBUS_DETECT_NONE) && + (pd[port].task_state == PD_STATE_SNK_HARD_RESET_RECOVER)) || + (pd[port].task_state == PD_STATE_SNK_READY)) { #ifdef CONFIG_USB_PD_REV30 /* * Only adjust sink rev if source rev is higher. @@ -1630,18 +1620,20 @@ static void handle_data_request(int port, uint32_t head, break; case PD_DATA_BIST: /* If not in READY state, then don't start BIST */ - if (DUAL_ROLE_IF_ELSE(port, - pd[port].task_state == PD_STATE_SNK_READY, - pd[port].task_state == PD_STATE_SRC_READY)) { + if (DUAL_ROLE_IF_ELSE( + port, pd[port].task_state == PD_STATE_SNK_READY, + pd[port].task_state == PD_STATE_SRC_READY)) { /* currently only support sending bist carrier mode 2 */ if ((payload[0] >> 28) == 5) { /* bist data object mode is 2 */ pd_transmit(port, TCPCI_MSG_TX_BIST_MODE_2, 0, NULL, AMS_RESPONSE); /* Set to appropriate port disconnected state */ - set_state(port, DUAL_ROLE_IF_ELSE(port, - PD_STATE_SNK_DISCONNECTED, - PD_STATE_SRC_DISCONNECTED)); + set_state(port, + DUAL_ROLE_IF_ELSE( + port, + PD_STATE_SNK_DISCONNECTED, + PD_STATE_SRC_DISCONNECTED)); } } break; @@ -1655,12 +1647,6 @@ static void handle_data_request(int port, uint32_t head, #ifdef CONFIG_USB_PD_REV30 case PD_DATA_BATTERY_STATUS: break; - /* TODO : Add case PD_DATA_RESET for exiting USB4 */ - - /* - * TODO : Add case PD_DATA_ENTER_USB to accept or reject - * Enter_USB request from port partner. - */ #endif case PD_DATA_VENDOR_DEF: handle_vdm_request(port, cnt, payload, head); @@ -1705,9 +1691,8 @@ void pd_try_vconn_src(int port) void pd_request_data_swap(int port) { - if (DUAL_ROLE_IF_ELSE(port, - pd[port].task_state == PD_STATE_SNK_READY, - pd[port].task_state == PD_STATE_SRC_READY)) + if (DUAL_ROLE_IF_ELSE(port, pd[port].task_state == PD_STATE_SNK_READY, + pd[port].task_state == PD_STATE_SRC_READY)) set_state(port, PD_STATE_DR_SWAP); task_wake(PD_PORT_TO_TASK_ID(port)); } @@ -1726,8 +1711,7 @@ static void pd_dr_swap(int port) pd[port].flags |= PD_FLAGS_CHECK_IDENTITY; } -static void handle_ctrl_request(int port, uint32_t head, - uint32_t *payload) +static void handle_ctrl_request(int port, uint32_t head, uint32_t *payload) { int type = PD_HEADER_TYPE(head); int res; @@ -1768,7 +1752,7 @@ static void handle_ctrl_request(int port, uint32_t head, * later time. */ pd_snk_give_back(port, &pd[port].curr_limit, - &pd[port].supply_voltage); + &pd[port].supply_voltage); set_state(port, PD_STATE_SNK_TRANSITION); } #endif @@ -1813,37 +1797,21 @@ static void handle_ctrl_request(int port, uint32_t head, */ if (pd[port].task_state == PD_STATE_SNK_TRANSITION) pd[port].ready_state_holdoff_timer = - get_time().val + SNK_READY_HOLD_OFF_US - + (get_time().le.lo & 0xf) * 12 * MSEC; + get_time().val + SNK_READY_HOLD_OFF_US + + (get_time().le.lo & 0xf) * 12 * MSEC; set_state(port, PD_STATE_SNK_READY); pd_set_input_current_limit(port, pd[port].curr_limit, pd[port].supply_voltage); #ifdef CONFIG_CHARGE_MANAGER /* Set ceiling based on what's negotiated */ - charge_manager_set_ceil(port, - CEIL_REQUESTOR_PD, + charge_manager_set_ceil(port, CEIL_REQUESTOR_PD, pd[port].curr_limit); #endif } break; #endif case PD_CTRL_REJECT: - if (pd[port].task_state == PD_STATE_ENTER_USB) { - if (!IS_ENABLED(CONFIG_USBC_SS_MUX)) - break; - - /* - * Since Enter USB sets the mux state to SAFE mode, - * resetting the mux state back to USB mode on - * recieveing a NACK. - */ - usb_mux_set(port, USB_PD_MUX_USB_ENABLED, - USB_SWITCH_CONNECT, pd[port].polarity); - - set_state(port, READY_RETURN_STATE(port)); - break; - } case PD_CTRL_WAIT: if (pd[port].task_state == PD_STATE_DR_SWAP) { if (type == PD_CTRL_WAIT) /* try again ... */ @@ -1898,28 +1866,15 @@ static void handle_ctrl_request(int port, uint32_t head, const int in_contract = pd[port].flags & PD_FLAGS_EXPLICIT_CONTRACT; - set_state(port, - in_contract ? PD_STATE_SNK_READY - : PD_STATE_SNK_DISCOVERY); + set_state(port, in_contract ? + PD_STATE_SNK_READY : + PD_STATE_SNK_DISCOVERY); } } #endif break; case PD_CTRL_ACCEPT: - if (pd[port].task_state == PD_STATE_ENTER_USB) { - if (!IS_ENABLED(CONFIG_USBC_SS_MUX)) - break; - - /* Connect the SBU and USB lines to the connector */ - if (IS_ENABLED(CONFIG_USBC_PPC_SBU)) - ppc_set_sbu(port, 1); - - /* Set usb mux to USB4 mode */ - usb_mux_set(port, USB_PD_MUX_USB4_ENABLED, - USB_SWITCH_CONNECT, pd[port].polarity); - - set_state(port, READY_RETURN_STATE(port)); - } else if (pd[port].task_state == PD_STATE_SOFT_RESET) { + if (pd[port].task_state == PD_STATE_SOFT_RESET) { /* * For the case that we sent soft reset in SNK_DISCOVERY * on startup due to VBUS never low, clear the flag. @@ -1939,23 +1894,20 @@ static void handle_ctrl_request(int port, uint32_t head, } else if (pd[port].task_state == PD_STATE_SRC_SWAP_INIT) { /* explicit contract goes away for power swap */ pd[port].flags &= ~PD_FLAGS_EXPLICIT_CONTRACT; - pd_update_saved_port_flags(port, - PD_BBRMFLG_EXPLICIT_CONTRACT, - 0); + pd_update_saved_port_flags( + port, PD_BBRMFLG_EXPLICIT_CONTRACT, 0); set_state(port, PD_STATE_SRC_SWAP_SNK_DISABLE); } else if (pd[port].task_state == PD_STATE_SNK_SWAP_INIT) { /* explicit contract goes away for power swap */ pd[port].flags &= ~PD_FLAGS_EXPLICIT_CONTRACT; - pd_update_saved_port_flags(port, - PD_BBRMFLG_EXPLICIT_CONTRACT, - 0); + pd_update_saved_port_flags( + port, PD_BBRMFLG_EXPLICIT_CONTRACT, 0); set_state(port, PD_STATE_SNK_SWAP_SNK_DISABLE); } else if (pd[port].task_state == PD_STATE_SNK_REQUESTED) { /* explicit contract is now in place */ pd[port].flags |= PD_FLAGS_EXPLICIT_CONTRACT; - pd_update_saved_port_flags(port, - PD_BBRMFLG_EXPLICIT_CONTRACT, - 1); + pd_update_saved_port_flags( + port, PD_BBRMFLG_EXPLICIT_CONTRACT, 1); set_state(port, PD_STATE_SNK_TRANSITION); #endif } @@ -1976,9 +1928,9 @@ static void handle_ctrl_request(int port, uint32_t head, */ pd[port].flags &= ~PD_FLAGS_CHECK_PR_ROLE; set_state(port, - DUAL_ROLE_IF_ELSE(port, - PD_STATE_SNK_SWAP_SNK_DISABLE, - PD_STATE_SRC_SWAP_SNK_DISABLE)); + DUAL_ROLE_IF_ELSE( + port, PD_STATE_SNK_SWAP_SNK_DISABLE, + PD_STATE_SRC_SWAP_SNK_DISABLE)); } else { send_control(port, PD_CTRL_REJECT); } @@ -1998,7 +1950,6 @@ static void handle_ctrl_request(int port, uint32_t head, pd_dr_swap(port); } else { send_control(port, PD_CTRL_REJECT); - } break; case PD_CTRL_VCONN_SWAP: @@ -2045,8 +1996,7 @@ static void handle_ext_request(int port, uint16_t head, uint32_t *payload) } #endif -static void handle_request(int port, uint32_t head, - uint32_t *payload) +static void handle_request(int port, uint32_t head, uint32_t *payload) { int cnt = PD_HEADER_CNT(head); int data_role = PD_HEADER_DROLE(head); @@ -2091,8 +2041,7 @@ static void handle_request(int port, uint32_t head, TYPEC_CC_RP)); } set_state(port, - DUAL_ROLE_IF_ELSE(port, - PD_STATE_SNK_DISCONNECTED, + DUAL_ROLE_IF_ELSE(port, PD_STATE_SNK_DISCONNECTED, PD_STATE_SRC_DISCONNECTED)); return; } @@ -2119,8 +2068,11 @@ void pd_send_vdm(int port, uint32_t vid, int cmd, const uint32_t *data, } /* set VDM header with VID & CMD */ - pd[port].vdo_data[0] = VDO(vid, ((vid & USB_SID_PD) == USB_SID_PD) ? - 1 : (PD_VDO_CMD(cmd) <= CMD_ATTENTION), cmd); + pd[port].vdo_data[0] = VDO(vid, + ((vid & USB_SID_PD) == USB_SID_PD) ? + 1 : + (PD_VDO_CMD(cmd) <= CMD_ATTENTION), + cmd); #ifdef CONFIG_USB_PD_REV30 pd[port].vdo_data[0] |= VDO_SVDM_VERS(vdo_ver[pd[port].rev]); #endif @@ -2150,7 +2102,7 @@ static uint64_t vdm_get_ready_timeout(uint32_t vdm_hdr) /* its not a structured VDM command */ if (!PD_VDO_SVDM(vdm_hdr)) - return 500*MSEC; + return 500 * MSEC; switch (PD_VDO_CMDT(vdm_hdr)) { case CMDT_INIT: @@ -2169,50 +2121,10 @@ static uint64_t vdm_get_ready_timeout(uint32_t vdm_hdr) return timeout; } -static void exit_tbt_mode_sop_prime(int port) -{ - /* Exit Thunderbolt-Compatible mode SOP' */ - uint16_t header; - int opos; - - if (!IS_ENABLED(CONFIG_USB_PD_TBT_COMPAT_MODE)) - return; - - opos = pd_alt_mode(port, TCPCI_MSG_SOP, USB_VID_INTEL); - if (opos <= 0) - return; - - CPRINTS("C%d Cable exiting TBT Compat mode", port); - /* - * Note: TCPMv2 contemplates separate discovery structures for each SOP - * type. TCPMv1 only uses one discovery structure, so all accesses - * specify TCPCI_MSG_SOP. - */ - if (pd_dfp_exit_mode(port, TCPCI_MSG_SOP, USB_VID_INTEL, opos)) - usb_mux_set_safe_mode(port); - else - return; - - header = PD_HEADER(PD_DATA_VENDOR_DEF, pd[port].power_role, - pd[port].data_role, pd[port].msg_id, - (int)pd[port].vdo_count, - pd_get_rev(port, TCPCI_MSG_SOP), 0); - - pd[port].vdo_data[0] = VDO(USB_VID_INTEL, 1, - CMD_EXIT_MODE | VDO_OPOS(opos)); - - pd_transmit(port, TCPCI_MSG_SOP_PRIME, header, pd[port].vdo_data, - AMS_START); - - usb_mux_set(port, USB_PD_MUX_USB_ENABLED, USB_SWITCH_CONNECT, - polarity_rm_dts(pd_get_polarity(port))); -} - static void pd_vdm_send_state_machine(int port) { int res; uint16_t header; - enum tcpci_msg_type msg_type = pd[port].xmit_type; switch (pd[port].vdm_state) { case VDM_STATE_READY: @@ -2229,82 +2141,20 @@ static void pd_vdm_send_state_machine(int port) if (pdo_busy(port)) break; - /* - * To communicate with the cable plug, an explicit contract - * should be established, VCONN should be enabled and data role - * that can communicate with the cable plug should be in place. - * For USB3.0, UFP/DFP can communicate whereas in case of - * USB2.0 only DFP can talk to the cable plug. - * - * For communication between USB2.0 UFP and cable plug, - * data role swap takes place during source and sink - * negotiation and in case of failure, a soft reset is issued. - */ - if ((msg_type == TCPCI_MSG_SOP_PRIME) || - (msg_type == TCPCI_MSG_SOP_PRIME_PRIME)) { - /* Prepare SOP'/SOP'' header and send VDM */ - header = PD_HEADER( - PD_DATA_VENDOR_DEF, - PD_PLUG_FROM_DFP_UFP, - 0, - pd[port].msg_id, - (int)pd[port].vdo_count, - pd_get_rev(port, TCPCI_MSG_SOP), - 0); - res = pd_transmit(port, msg_type, header, - pd[port].vdo_data, AMS_START); - /* - * In the case of SOP', if there is no response from - * the cable, it's a non-emark cable and therefore the - * pd flow should continue irrespective of cable - * response, sending discover_identity so the pd flow - * remains intact. - * - * In the case of SOP'', if there is no response from - * the cable, exit Thunderbolt-Compatible mode - * discovery, reset the mux state since, the mux will - * be set to a safe state before entering - * Thunderbolt-Compatible mode and enter the default - * mode. - */ - if (res < 0) { - header = PD_HEADER(PD_DATA_VENDOR_DEF, - pd[port].power_role, - pd[port].data_role, - pd[port].msg_id, - (int)pd[port].vdo_count, - pd_get_rev - (port, TCPCI_MSG_SOP), - 0); - - if ((msg_type == TCPCI_MSG_SOP_PRIME_PRIME) && - IS_ENABLED(CONFIG_USBC_SS_MUX)) { - exit_tbt_mode_sop_prime(port); - } else if (msg_type == TCPCI_MSG_SOP_PRIME) { - pd[port].vdo_data[0] = VDO(USB_SID_PD, - 1, CMD_DISCOVER_SVID); - } - res = pd_transmit(port, TCPCI_MSG_SOP, header, - pd[port].vdo_data, AMS_START); - reset_pd_cable(port); - } - } else { - /* Prepare SOP header and send VDM */ - header = PD_HEADER(PD_DATA_VENDOR_DEF, - pd[port].power_role, - pd[port].data_role, - pd[port].msg_id, - (int)pd[port].vdo_count, - pd_get_rev(port, TCPCI_MSG_SOP), 0); - res = pd_transmit(port, TCPCI_MSG_SOP, header, - pd[port].vdo_data, AMS_START); - } + /* Prepare SOP header and send VDM */ + header = PD_HEADER(PD_DATA_VENDOR_DEF, pd[port].power_role, + pd[port].data_role, pd[port].msg_id, + (int)pd[port].vdo_count, + pd_get_rev(port, TCPCI_MSG_SOP), 0); + res = pd_transmit(port, TCPCI_MSG_SOP, header, + pd[port].vdo_data, AMS_START); if (res < 0) { pd[port].vdm_state = VDM_STATE_ERR_SEND; } else { pd[port].vdm_state = VDM_STATE_BUSY; - pd[port].vdm_timeout.val = get_time().val + + pd[port].vdm_timeout.val = + get_time().val + vdm_get_ready_timeout(pd[port].vdo_data[0]); } break; @@ -2366,15 +2216,14 @@ int pd_dev_store_rw_hash(int port, uint16_t dev_id, uint32_t *rw_hash, /* Search table for matching device / hash */ for (i = 0; i < RW_HASH_ENTRIES; i++) if (dev_id == rw_hash_table[i].dev_id) - return !memcmp(rw_hash, - rw_hash_table[i].dev_rw_hash, + return !memcmp(rw_hash, rw_hash_table[i].dev_rw_hash, PD_RW_HASH_SIZE); #endif return 0; } void pd_dev_get_rw_hash(int port, uint16_t *dev_id, uint8_t *rw_hash, - uint32_t *current_image) + uint32_t *current_image) { *dev_id = pd[port].dev_id; *current_image = pd[port].current_image; @@ -2391,10 +2240,11 @@ __maybe_unused static void exit_supported_alt_mode(int port) for (i = 0; i < supported_modes_cnt; i++) { int opos = pd_alt_mode(port, TCPCI_MSG_SOP, - supported_modes[i].svid); + supported_modes[i].svid); - if (opos > 0 && pd_dfp_exit_mode(port, TCPCI_MSG_SOP, - supported_modes[i].svid, opos)) { + if (opos > 0 && + pd_dfp_exit_mode(port, TCPCI_MSG_SOP, + supported_modes[i].svid, opos)) { CPRINTS("C%d Exiting ALT mode with SVID = 0x%x", port, supported_modes[i].svid); usb_mux_set_safe_mode(port); @@ -2409,7 +2259,6 @@ __maybe_unused static void exit_supported_alt_mode(int port) #ifdef CONFIG_POWER_COMMON static void handle_new_power_state(int port) { - if (chipset_in_or_transitioning_to_state(CHIPSET_STATE_ANY_OFF)) { /* * The SoC will negotiate the alternate mode again when @@ -2473,8 +2322,8 @@ static void pd_update_snk_reset(void) if (pd[i].task_state == PD_STATE_SNK_DISCOVERY) { CPRINTS("C%d: Starting soft reset timer", i); - set_state_timeout(i, - get_time().val + PD_T_SINK_WAIT_CAP, + set_state_timeout( + i, get_time().val + PD_T_SINK_WAIT_CAP, PD_STATE_SOFT_RESET); } } @@ -2518,13 +2367,13 @@ void pd_set_dual_role(int port, enum pd_dual_role_states state) static int pd_is_power_swapping(int port) { /* return true if in the act of swapping power roles */ - return pd[port].task_state == PD_STATE_SNK_SWAP_SNK_DISABLE || - pd[port].task_state == PD_STATE_SNK_SWAP_SRC_DISABLE || - pd[port].task_state == PD_STATE_SNK_SWAP_STANDBY || - pd[port].task_state == PD_STATE_SNK_SWAP_COMPLETE || - pd[port].task_state == PD_STATE_SRC_SWAP_SNK_DISABLE || - pd[port].task_state == PD_STATE_SRC_SWAP_SRC_DISABLE || - pd[port].task_state == PD_STATE_SRC_SWAP_STANDBY; + return pd[port].task_state == PD_STATE_SNK_SWAP_SNK_DISABLE || + pd[port].task_state == PD_STATE_SNK_SWAP_SRC_DISABLE || + pd[port].task_state == PD_STATE_SNK_SWAP_STANDBY || + pd[port].task_state == PD_STATE_SNK_SWAP_COMPLETE || + pd[port].task_state == PD_STATE_SRC_SWAP_SNK_DISABLE || + pd[port].task_state == PD_STATE_SRC_SWAP_SRC_DISABLE || + pd[port].task_state == PD_STATE_SRC_SWAP_STANDBY; } /* This must only be called from the PD task */ @@ -2536,9 +2385,9 @@ static void pd_update_dual_role_config(int port) * source disconnected state). */ if (pd[port].power_role == PD_ROLE_SOURCE && - (drp_state[port] == PD_DRP_FORCE_SINK - || (drp_state[port] == PD_DRP_TOGGLE_OFF - && pd[port].task_state == PD_STATE_SRC_DISCONNECTED))) { + (drp_state[port] == PD_DRP_FORCE_SINK || + (drp_state[port] == PD_DRP_TOGGLE_OFF && + pd[port].task_state == PD_STATE_SRC_DISCONNECTED))) { pd_set_power_role(port, PD_ROLE_SINK); set_state(port, PD_STATE_SNK_DISCONNECTED); tcpm_set_cc(port, TYPEC_CC_RD); @@ -2695,8 +2544,7 @@ void pd_comm_enable(int port, int enable) * any port in PD_SNK_DISCOVERY. */ if (enable && pd[port].task_state == PD_STATE_SNK_DISCOVERY) - set_state_timeout(port, - get_time().val + PD_T_SINK_WAIT_CAP, + set_state_timeout(port, get_time().val + PD_T_SINK_WAIT_CAP, PD_STATE_HARD_RESET_SEND); #endif } @@ -2794,57 +2642,12 @@ static int pd_restart_tcpc(int port) } #endif -static void pd_send_enter_usb(int port, int *timeout) -{ - uint32_t usb4_payload; - uint16_t header; - int res; - - /* - * TODO: Enable Enter USB for cables (SOP'). - * This is needed for active cables - */ - if (!IS_ENABLED(CONFIG_USBC_SS_MUX) || - !IS_ENABLED(CONFIG_USB_PD_USB4) || - !IS_ENABLED(CONFIG_USB_PD_ALT_MODE_DFP)) - return; - - usb4_payload = get_enter_usb_msg_payload(port); - - header = PD_HEADER(PD_DATA_ENTER_USB, - pd[port].power_role, - pd[port].data_role, - pd[port].msg_id, - 1, - PD_REV30, - 0); - - res = pd_transmit(port, TCPCI_MSG_SOP, header, &usb4_payload, - AMS_START); - if (res < 0) { - *timeout = 10*MSEC; - /* - * If failed to get goodCRC, send soft reset, otherwise ignore - * failure. - */ - set_state(port, res == -1 ? - PD_STATE_SOFT_RESET : - READY_RETURN_STATE(port)); - return; - } - - /* Disable Enter USB4 mode prevent re-entry */ - disable_enter_usb4_mode(port); - - set_state(port, PD_STATE_ENTER_USB); -} - void pd_task(void *u) { uint32_t head; int port = TASK_ID_TO_PD_PORT(task_get_current()); uint32_t payload[7]; - int timeout = 10*MSEC; + int timeout = 10 * MSEC; enum tcpc_cc_voltage_status cc1, cc2; int res, incoming_packet = 0; int hard_reset_count = 0; @@ -2922,8 +2725,7 @@ void pd_task(void *u) if (!res) { struct ec_response_pd_chip_info_v1 info; - if (tcpm_get_chip_info(port, 0, &info) == - EC_SUCCESS) { + if (tcpm_get_chip_info(port, 0, &info) == EC_SUCCESS) { CPRINTS("TCPC p%d VID:0x%x PID:0x%x DID:0x%x " "FWV:0x%" PRIx64, port, info.vendor_id, info.product_id, @@ -2943,8 +2745,8 @@ void pd_task(void *u) * present. This flag is used to maintain a PD connection after a * reset by sending a soft reset. */ - pd[port].flags |= - pd_is_vbus_present(port) ? PD_FLAGS_VBUS_NEVER_LOW : 0; + pd[port].flags |= pd_is_vbus_present(port) ? PD_FLAGS_VBUS_NEVER_LOW : + 0; #endif /* Disable TCPC RX until connection is established */ @@ -2968,14 +2770,17 @@ void pd_task(void *u) if ((saved_flgs & PD_BBRMFLG_POWER_ROLE) == PD_ROLE_SINK) { pd_set_power_role(port, (saved_flgs & PD_BBRMFLG_POWER_ROLE) ? - PD_ROLE_SOURCE : PD_ROLE_SINK); + PD_ROLE_SOURCE : + PD_ROLE_SINK); pd_set_data_role(port, (saved_flgs & PD_BBRMFLG_DATA_ROLE) ? - PD_ROLE_DFP : PD_ROLE_UFP); + PD_ROLE_DFP : + PD_ROLE_UFP); #ifdef CONFIG_USBC_VCONN pd_set_vconn_role(port, (saved_flgs & PD_BBRMFLG_VCONN_ROLE) ? - PD_ROLE_VCONN_ON : PD_ROLE_VCONN_OFF); + PD_ROLE_VCONN_ON : + PD_ROLE_VCONN_OFF); #endif /* CONFIG_USBC_VCONN */ /* @@ -2997,9 +2802,8 @@ void pd_task(void *u) * earlier, so clear the contract flag and re-start as * default role */ - pd_update_saved_port_flags(port, - PD_BBRMFLG_EXPLICIT_CONTRACT, 0); - + pd_update_saved_port_flags( + port, PD_BBRMFLG_EXPLICIT_CONTRACT, 0); } /* * Set the TCPC reset event such that we can set our CC @@ -3026,7 +2830,8 @@ void pd_task(void *u) if (!(saved_flgs & PD_BBRMFLG_EXPLICIT_CONTRACT)) #endif /* CONFIG_USB_PD_DUAL_ROLE */ tcpm_set_cc(port, PD_ROLE_DEFAULT(port) == PD_ROLE_SOURCE ? - TYPEC_CC_RP : TYPEC_CC_RD); + TYPEC_CC_RP : + TYPEC_CC_RD); #ifdef CONFIG_USBC_PPC /* @@ -3126,7 +2931,8 @@ void pd_task(void *u) * role. */ tcpm_set_cc(port, pd[port].power_role ? - TYPEC_CC_RP : TYPEC_CC_RD); + TYPEC_CC_RP : + TYPEC_CC_RD); /* Determine the polarity. */ tcpm_get_cc(port, &cc1, &cc2); @@ -3136,7 +2942,7 @@ void pd_task(void *u) } else if (cc_is_snk_dbg_acc(cc1, cc2)) { pd[port].polarity = board_get_src_dts_polarity( - port); + port); } else { pd[port].polarity = get_src_polarity(cc1, cc2); @@ -3145,9 +2951,11 @@ void pd_task(void *u) #endif /* CONFIG_USB_PD_DUAL_ROLE */ { /* Ensure CC termination is default */ - tcpm_set_cc(port, PD_ROLE_DEFAULT(port) == - PD_ROLE_SOURCE ? TYPEC_CC_RP : - TYPEC_CC_RD); + tcpm_set_cc(port, + PD_ROLE_DEFAULT(port) == + PD_ROLE_SOURCE ? + TYPEC_CC_RP : + TYPEC_CC_RD); } /* @@ -3157,14 +2965,18 @@ void pd_task(void *u) * Otherwise, go to the default disconnected state * and force renegotiation. */ - if (pd[port].vdm_state == VDM_STATE_DONE && ( + if (pd[port].vdm_state == VDM_STATE_DONE && + ( #ifdef CONFIG_USB_PD_DUAL_ROLE - (PD_ROLE_DEFAULT(port) == PD_ROLE_SINK && - pd[port].task_state == PD_STATE_SNK_READY) || - (pd[port].task_state == PD_STATE_SOFT_RESET) || -#endif - (PD_ROLE_DEFAULT(port) == PD_ROLE_SOURCE && - pd[port].task_state == PD_STATE_SRC_READY))) { + (PD_ROLE_DEFAULT(port) == PD_ROLE_SINK && + pd[port].task_state == + PD_STATE_SNK_READY) || + (pd[port].task_state == + PD_STATE_SOFT_RESET) || +#endif + (PD_ROLE_DEFAULT(port) == PD_ROLE_SOURCE && + pd[port].task_state == + PD_STATE_SRC_READY))) { typec_set_polarity(port, pd[port].polarity); tcpm_set_msg_header(port, pd[port].power_role, pd[port].data_role); @@ -3198,9 +3010,8 @@ void pd_task(void *u) if (incoming_packet) { /* Dequeue and consume duplicate message ID. */ if (tcpm_dequeue_message(port, payload, &head) == - EC_SUCCESS - && !consume_repeat_message(port, head) - ) + EC_SUCCESS && + !consume_repeat_message(port, head)) handle_request(port, head, payload); /* Check if there are any more messages */ @@ -3214,13 +3025,13 @@ void pd_task(void *u) /* if nothing to do, verify the state of the world in 500ms */ this_state = pd[port].task_state; - timeout = 500*MSEC; + timeout = 500 * MSEC; switch (this_state) { case PD_STATE_DISABLED: /* Nothing to do */ break; case PD_STATE_SRC_DISCONNECTED: - timeout = 10*MSEC; + timeout = 10 * MSEC; pd_set_src_caps(port, 0, NULL); #ifdef CONFIG_USB_PD_TCPC_LOW_POWER /* @@ -3242,10 +3053,9 @@ void pd_task(void *u) */ if (auto_toggle_supported && !(pd[port].flags & PD_FLAGS_TCPC_DRP_TOGGLE) && - !is_try_src(port) && - cc_is_open(cc1, cc2)) { + !is_try_src(port) && cc_is_open(cc1, cc2)) { set_state(port, PD_STATE_DRP_AUTO_TOGGLE); - timeout = 2*MSEC; + timeout = 2 * MSEC; break; } #endif @@ -3275,7 +3085,7 @@ void pd_task(void *u) #endif pd[port].cc_state = PD_CC_NONE; set_state(port, - PD_STATE_SRC_DISCONNECTED_DEBOUNCE); + PD_STATE_SRC_DISCONNECTED_DEBOUNCE); break; } #if defined(CONFIG_USB_PD_DUAL_ROLE) @@ -3331,7 +3141,7 @@ void pd_task(void *u) #endif break; case PD_STATE_SRC_DISCONNECTED_DEBOUNCE: - timeout = 20*MSEC; + timeout = 20 * MSEC; tcpm_get_cc(port, &cc1, &cc2); if (cc_is_snk_dbg_acc(cc1, cc2)) { @@ -3346,7 +3156,7 @@ void pd_task(void *u) } else { /* No UFP */ set_state(port, PD_STATE_SRC_DISCONNECTED); - timeout = 5*MSEC; + timeout = 5 * MSEC; break; } @@ -3354,8 +3164,8 @@ void pd_task(void *u) if (new_cc_state != pd[port].cc_state) { pd[port].cc_debounce = get_time().val + - (is_try_src(port) ? PD_T_DEBOUNCE - : PD_T_CC_DEBOUNCE); + (is_try_src(port) ? PD_T_DEBOUNCE : + PD_T_CC_DEBOUNCE); pd[port].cc_state = new_cc_state; break; } @@ -3455,7 +3265,7 @@ void pd_task(void *u) pd[port].flags |= PD_FLAGS_CHECK_PR_ROLE | PD_FLAGS_CHECK_DR_ROLE; hard_reset_count = 0; - timeout = 5*MSEC; + timeout = 5 * MSEC; set_state(port, PD_STATE_SRC_STARTUP); } @@ -3467,7 +3277,7 @@ void pd_task(void *u) case PD_STATE_SRC_HARD_RESET_RECOVER: /* Do not continue until hard reset recovery time */ if (get_time().val < pd[port].src_recover) { - timeout = 50*MSEC; + timeout = 50 * MSEC; break; } @@ -3481,7 +3291,7 @@ void pd_task(void *u) #endif /* Enable VBUS */ - timeout = 10*MSEC; + timeout = 10 * MSEC; if (pd_set_power_supply_ready(port)) { set_state(port, PD_STATE_SRC_DISCONNECTED); break; @@ -3501,8 +3311,6 @@ void pd_task(void *u) set_state(port, PD_STATE_SRC_STARTUP); break; case PD_STATE_SRC_STARTUP: - /* Reset cable attributes and flags */ - reset_pd_cable(port); /* Wait for power source to enable */ if (pd[port].last_state != pd[port].task_state) { pd[port].flags |= PD_FLAGS_CHECK_IDENTITY; @@ -3520,13 +3328,14 @@ void pd_task(void *u) * on during debounce. */ get_time().val + - PD_POWER_SUPPLY_TURN_ON_DELAY - - (pd[port].last_state == - PD_STATE_SRC_DISCONNECTED_DEBOUNCE - ? PD_T_CC_DEBOUNCE : 0), + PD_POWER_SUPPLY_TURN_ON_DELAY - + (pd[port].last_state == + PD_STATE_SRC_DISCONNECTED_DEBOUNCE ? + PD_T_CC_DEBOUNCE : + 0), #else get_time().val + - PD_POWER_SUPPLY_TURN_ON_DELAY, + PD_POWER_SUPPLY_TURN_ON_DELAY, #endif PD_STATE_SRC_DISCOVERY); } @@ -3541,25 +3350,25 @@ void pd_task(void *u) * partner, then start NoResponseTimer. */ if (pd_capable(port)) - set_state_timeout(port, + set_state_timeout( + port, get_time().val + - PD_T_NO_RESPONSE, + PD_T_NO_RESPONSE, hard_reset_count < - PD_HARD_RESET_COUNT ? - PD_STATE_HARD_RESET_SEND : - PD_STATE_SRC_DISCONNECTED); + PD_HARD_RESET_COUNT ? + PD_STATE_HARD_RESET_SEND : + PD_STATE_SRC_DISCONNECTED); } /* Send source cap some minimum number of times */ - if (caps_count < PD_CAPS_COUNT && - next_src_cap <= now.val) { + if (caps_count < PD_CAPS_COUNT && + next_src_cap <= now.val) { /* Query capabilities of the other side */ res = send_source_cap(port, AMS_START); /* packet was acked => PD capable device) */ if (res >= 0) { - set_state(port, - PD_STATE_SRC_NEGOCIATE); - timeout = 10*MSEC; + set_state(port, PD_STATE_SRC_NEGOCIATE); + timeout = 10 * MSEC; hard_reset_count = 0; caps_count = 0; /* Port partner is PD capable */ @@ -3567,8 +3376,8 @@ void pd_task(void *u) PD_FLAGS_PREVIOUS_PD_CONN; } else { /* failed, retry later */ timeout = PD_T_SEND_SOURCE_CAP; - next_src_cap = now.val + - PD_T_SEND_SOURCE_CAP; + next_src_cap = + now.val + PD_T_SEND_SOURCE_CAP; caps_count++; } } else if (caps_count < PD_CAPS_COUNT) { @@ -3580,17 +3389,16 @@ void pd_task(void *u) if (pd[port].last_state != pd[port].task_state) set_state_timeout(port, get_time().val + - PD_T_SENDER_RESPONSE, + PD_T_SENDER_RESPONSE, PD_STATE_HARD_RESET_SEND); break; case PD_STATE_SRC_ACCEPTED: /* Accept sent, wait for enabling the new voltage */ if (pd[port].last_state != pd[port].task_state) - set_state_timeout( - port, - get_time().val + - PD_T_SINK_TRANSITION, - PD_STATE_SRC_POWERED); + set_state_timeout(port, + get_time().val + + PD_T_SINK_TRANSITION, + PD_STATE_SRC_POWERED); break; case PD_STATE_SRC_POWERED: /* Switch to the new requested voltage */ @@ -3600,7 +3408,7 @@ void pd_task(void *u) set_state_timeout( port, get_time().val + - PD_POWER_SUPPLY_TURN_ON_DELAY, + PD_POWER_SUPPLY_TURN_ON_DELAY, PD_STATE_SRC_TRANSITION); } break; @@ -3608,7 +3416,7 @@ void pd_task(void *u) /* the voltage output is good, notify the source */ res = send_control(port, PD_CTRL_PS_RDY); if (res >= 0) { - timeout = 10*MSEC; + timeout = 10 * MSEC; /* * Give the sink some time to send any messages @@ -3621,8 +3429,8 @@ void pd_task(void *u) * SRC_READY state. */ pd[port].ready_state_holdoff_timer = - get_time().val + SRC_READY_HOLD_OFF_US - + (get_time().le.lo & 0xf) * 12 * MSEC; + get_time().val + SRC_READY_HOLD_OFF_US + + (get_time().le.lo & 0xf) * 12 * MSEC; /* it's time to ping regularly the sink */ set_state(port, PD_STATE_SRC_READY); @@ -3658,8 +3466,7 @@ void pd_task(void *u) if (pd[port].flags & PD_FLAGS_UPDATE_SRC_CAPS) { res = send_source_cap(port, AMS_START); if (res >= 0) { - set_state(port, - PD_STATE_SRC_NEGOCIATE); + set_state(port, PD_STATE_SRC_NEGOCIATE); pd[port].flags &= ~PD_FLAGS_UPDATE_SRC_CAPS; } @@ -3669,12 +3476,16 @@ void pd_task(void *u) /* Send get sink cap if haven't received it yet */ if (!(pd[port].flags & PD_FLAGS_SNK_CAP_RECVD)) { if (++snk_cap_count <= PD_SNK_CAP_RETRIES) { - /* Get sink cap to know if dual-role device */ - send_control(port, PD_CTRL_GET_SINK_CAP); - set_state(port, PD_STATE_SRC_GET_SINK_CAP); + /* Get sink cap to know if dual-role + * device */ + send_control(port, + PD_CTRL_GET_SINK_CAP); + set_state(port, + PD_STATE_SRC_GET_SINK_CAP); break; } else if (debug_level >= 2 && - snk_cap_count == PD_SNK_CAP_RETRIES+1) { + snk_cap_count == + PD_SNK_CAP_RETRIES + 1) { CPRINTF("C%d ERR SNK_CAP\n", port); } } @@ -3686,7 +3497,6 @@ void pd_task(void *u) pd[port].flags &= ~PD_FLAGS_CHECK_PR_ROLE; } - /* Check data role policy, which may trigger a swap */ if (pd[port].flags & PD_FLAGS_CHECK_DR_ROLE) { pd_check_dr_role(port, pd[port].data_role, @@ -3705,8 +3515,7 @@ void pd_task(void *u) * initiate or receive a request an exchange * of VCONN Source. */ - pd_try_execute_vconn_swap(port, - pd[port].flags); + pd_try_execute_vconn_swap(port, pd[port].flags); pd[port].flags &= ~PD_FLAGS_CHECK_VCONN_STATE; break; } @@ -3722,15 +3531,6 @@ void pd_task(void *u) break; } - /* - * Enter_USB if port partner and cable are - * USB4 compatible. - */ - if (should_enter_usb4_mode(port)) { - pd_send_enter_usb(port, &timeout); - break; - } - if (!(pd[port].flags & PD_FLAGS_PING_ENABLED)) break; @@ -3747,28 +3547,30 @@ void pd_task(void *u) if (pd[port].last_state != pd[port].task_state) set_state_timeout(port, get_time().val + - PD_T_SENDER_RESPONSE, + PD_T_SENDER_RESPONSE, PD_STATE_SRC_READY); break; case PD_STATE_DR_SWAP: if (pd[port].last_state != pd[port].task_state) { res = send_control(port, PD_CTRL_DR_SWAP); if (res < 0) { - timeout = 10*MSEC; + timeout = 10 * MSEC; /* * If failed to get goodCRC, send * soft reset, otherwise ignore * failure. */ - set_state(port, res == -1 ? - PD_STATE_SOFT_RESET : - READY_RETURN_STATE(port)); + set_state(port, + res == -1 ? + PD_STATE_SOFT_RESET : + READY_RETURN_STATE( + port)); break; } /* Wait for accept or reject */ set_state_timeout(port, get_time().val + - PD_T_SENDER_RESPONSE, + PD_T_SENDER_RESPONSE, READY_RETURN_STATE(port)); } break; @@ -3777,31 +3579,32 @@ void pd_task(void *u) if (pd[port].last_state != pd[port].task_state) { res = send_control(port, PD_CTRL_PR_SWAP); if (res < 0) { - timeout = 10*MSEC; + timeout = 10 * MSEC; /* * If failed to get goodCRC, send * soft reset, otherwise ignore * failure. */ - set_state(port, res == -1 ? - PD_STATE_SOFT_RESET : - PD_STATE_SRC_READY); + set_state(port, + res == -1 ? + PD_STATE_SOFT_RESET : + PD_STATE_SRC_READY); break; } /* Wait for accept or reject */ set_state_timeout(port, get_time().val + - PD_T_SENDER_RESPONSE, + PD_T_SENDER_RESPONSE, PD_STATE_SRC_READY); } break; case PD_STATE_SRC_SWAP_SNK_DISABLE: /* Give time for sink to stop drawing current */ if (pd[port].last_state != pd[port].task_state) - set_state_timeout(port, - get_time().val + - PD_T_SINK_TRANSITION, - PD_STATE_SRC_SWAP_SRC_DISABLE); + set_state_timeout( + port, + get_time().val + PD_T_SINK_TRANSITION, + PD_STATE_SRC_SWAP_SRC_DISABLE); break; case PD_STATE_SRC_SWAP_SRC_DISABLE: if (pd[port].last_state != pd[port].task_state) { @@ -3824,10 +3627,11 @@ void pd_task(void *u) /* Inform TCPC of power role update. */ pd_update_roles(port); - set_state_timeout(port, - get_time().val + - PD_POWER_SUPPLY_TURN_OFF_DELAY, - PD_STATE_SRC_SWAP_STANDBY); + set_state_timeout( + port, + get_time().val + + PD_POWER_SUPPLY_TURN_OFF_DELAY, + PD_STATE_SRC_SWAP_STANDBY); } break; case PD_STATE_SRC_SWAP_STANDBY: @@ -3836,7 +3640,7 @@ void pd_task(void *u) /* Send PS_RDY */ res = send_control(port, PD_CTRL_PS_RDY); if (res < 0) { - timeout = 10*MSEC; + timeout = 10 * MSEC; set_state(port, PD_STATE_SRC_DISCONNECTED); break; @@ -3844,7 +3648,7 @@ void pd_task(void *u) /* Wait for PS_RDY from new source */ set_state_timeout(port, get_time().val + - PD_T_PS_SOURCE_ON, + PD_T_PS_SOURCE_ON, PD_STATE_SNK_DISCONNECTED); } break; @@ -3895,8 +3699,8 @@ void pd_task(void *u) /* Set the CC termination and state back to default */ tcpm_set_cc(port, PD_ROLE_DEFAULT(port) == PD_ROLE_SOURCE ? - TYPEC_CC_RP : - TYPEC_CC_RD); + TYPEC_CC_RP : + TYPEC_CC_RD); set_state(port, PD_DEFAULT_STATE(port)); tcpc_prints("resumed!", port); #endif @@ -3904,10 +3708,11 @@ void pd_task(void *u) } case PD_STATE_SNK_DISCONNECTED: #ifdef CONFIG_USB_PD_LOW_POWER - timeout = (drp_state[port] != - PD_DRP_TOGGLE_ON ? SECOND : 10*MSEC); + timeout = (drp_state[port] != PD_DRP_TOGGLE_ON ? + SECOND : + 10 * MSEC); #else - timeout = 10*MSEC; + timeout = 10 * MSEC; #endif pd_set_src_caps(port, 0, NULL); #ifdef CONFIG_USB_PD_TCPC_LOW_POWER @@ -3931,11 +3736,10 @@ void pd_task(void *u) */ if (auto_toggle_supported && !(pd[port].flags & PD_FLAGS_TCPC_DRP_TOGGLE) && - !is_try_src(port) && - cc_is_open(cc1, cc2) && - (drp_state[port] == PD_DRP_TOGGLE_ON)) { + !is_try_src(port) && cc_is_open(cc1, cc2) && + (drp_state[port] == PD_DRP_TOGGLE_ON)) { set_state(port, PD_STATE_DRP_AUTO_TOGGLE); - timeout = 2*MSEC; + timeout = 2 * MSEC; break; } #endif @@ -3945,11 +3749,11 @@ void pd_task(void *u) pd[port].cc_state = PD_CC_NONE; hard_reset_count = 0; new_cc_state = PD_CC_NONE; - pd[port].cc_debounce = get_time().val + - PD_T_CC_DEBOUNCE; + pd[port].cc_debounce = + get_time().val + PD_T_CC_DEBOUNCE; set_state(port, - PD_STATE_SNK_DISCONNECTED_DEBOUNCE); - timeout = 10*MSEC; + PD_STATE_SNK_DISCONNECTED_DEBOUNCE); + timeout = 10 * MSEC; break; } @@ -3983,7 +3787,7 @@ void pd_task(void *u) #endif /* Swap states quickly */ - timeout = 2*MSEC; + timeout = 2 * MSEC; break; } @@ -3994,7 +3798,7 @@ void pd_task(void *u) * CC status. */ pd[port].flags |= PD_FLAGS_LPM_REQUESTED; -#endif/* CONFIG_USB_PD_TCPC_LOW_POWER */ +#endif /* CONFIG_USB_PD_TCPC_LOW_POWER */ break; case PD_STATE_SNK_DISCONNECTED_DEBOUNCE: @@ -4008,16 +3812,16 @@ void pd_task(void *u) } else { /* No connection any more */ set_state(port, PD_STATE_SNK_DISCONNECTED); - timeout = 5*MSEC; + timeout = 5 * MSEC; break; } - timeout = 20*MSEC; + timeout = 20 * MSEC; /* Debounce the cc state */ if (new_cc_state != pd[port].cc_state) { - pd[port].cc_debounce = get_time().val + - PD_T_CC_DEBOUNCE; + pd[port].cc_debounce = + get_time().val + PD_T_CC_DEBOUNCE; pd[port].cc_state = new_cc_state; break; } @@ -4032,14 +3836,14 @@ void pd_task(void *u) * If TRY_SRC is enabled, but not active, * then force attempt to connect as source. */ - pd[port].try_src_marker = get_time().val - + PD_T_DRP_TRY; - pd[port].try_timeout = get_time().val - + PD_T_TRY_TIMEOUT; + pd[port].try_src_marker = + get_time().val + PD_T_DRP_TRY; + pd[port].try_timeout = + get_time().val + PD_T_TRY_TIMEOUT; /* Swap roles to source */ pd_set_power_role(port, PD_ROLE_SOURCE); tcpm_set_cc(port, TYPEC_CC_RP); - timeout = 2*MSEC; + timeout = 2 * MSEC; set_state(port, PD_STATE_SRC_DISCONNECTED); /* Set flag after the state change */ pd[port].flags |= PD_FLAGS_TRY_SRC; @@ -4060,8 +3864,8 @@ void pd_task(void *u) #if defined(CONFIG_CHARGE_MANAGER) typec_curr = usb_get_typec_current_limit( pd[port].polarity, cc1, cc2); - typec_set_input_current_limit( - port, typec_curr, TYPE_C_VOLTAGE); + typec_set_input_current_limit(port, typec_curr, + TYPE_C_VOLTAGE); #endif #ifdef CONFIG_USBC_PPC @@ -4081,14 +3885,11 @@ void pd_task(void *u) pd[port].flags |= PD_FLAGS_CHECK_PR_ROLE | PD_FLAGS_CHECK_DR_ROLE | PD_FLAGS_CHECK_IDENTITY; - /* Reset cable attributes and flags */ - reset_pd_cable(port); - if (new_cc_state == PD_CC_DFP_DEBUG_ACC) pd[port].flags |= PD_FLAGS_TS_DTS_PARTNER; set_state(port, PD_STATE_SNK_DISCOVERY); - timeout = 10*MSEC; + timeout = 10 * MSEC; hook_call_deferred( &pd_usb_billboard_deferred_data, PD_T_AME); @@ -4099,47 +3900,49 @@ void pd_task(void *u) pd[port].flags |= PD_FLAGS_CHECK_IDENTITY; if (get_usb_pd_vbus_detect() == - USB_PD_VBUS_DETECT_NONE) { + USB_PD_VBUS_DETECT_NONE) { /* * Can't measure vbus state so this is the * maximum recovery time for the source. */ if (pd[port].last_state != pd[port].task_state) - set_state_timeout(port, get_time().val + - PD_T_SAFE_0V + - PD_T_SRC_RECOVER_MAX + - PD_T_SRC_TURN_ON, - PD_STATE_SNK_DISCONNECTED); + set_state_timeout( + port, + get_time().val + PD_T_SAFE_0V + + PD_T_SRC_RECOVER_MAX + + PD_T_SRC_TURN_ON, + PD_STATE_SNK_DISCONNECTED); } else { #ifndef CONFIG_USB_PD_VBUS_DETECT_NONE /* Wait for VBUS to go low and then high*/ if (pd[port].last_state != - pd[port].task_state) { + pd[port].task_state) { snk_hard_reset_vbus_off = 0; - set_state_timeout(port, - get_time().val + - PD_T_SAFE_0V, - hard_reset_count < - PD_HARD_RESET_COUNT ? - PD_STATE_HARD_RESET_SEND : - PD_STATE_SNK_DISCOVERY); + set_state_timeout( + port, + get_time().val + PD_T_SAFE_0V, + hard_reset_count < + PD_HARD_RESET_COUNT ? + PD_STATE_HARD_RESET_SEND : + PD_STATE_SNK_DISCOVERY); } if (!pd_is_vbus_present(port) && !snk_hard_reset_vbus_off) { /* VBUS has gone low, reset timeout */ snk_hard_reset_vbus_off = 1; - set_state_timeout(port, - get_time().val + - PD_T_SRC_RECOVER_MAX + - PD_T_SRC_TURN_ON, - PD_STATE_SNK_DISCONNECTED); + set_state_timeout( + port, + get_time().val + + PD_T_SRC_RECOVER_MAX + + PD_T_SRC_TURN_ON, + PD_STATE_SNK_DISCONNECTED); } if (pd_is_vbus_present(port) && snk_hard_reset_vbus_off) { /* VBUS went high again */ set_state(port, PD_STATE_SNK_DISCOVERY); - timeout = 10*MSEC; + timeout = 10 * MSEC; } /* @@ -4152,8 +3955,8 @@ void pd_task(void *u) break; case PD_STATE_SNK_DISCOVERY: /* Wait for source cap expired only if we are enabled */ - if ((pd[port].last_state != pd[port].task_state) - && pd_comm_is_enabled(port)) { + if ((pd[port].last_state != pd[port].task_state) && + pd_comm_is_enabled(port)) { #if defined(CONFIG_USB_PD_TCPM_TCPCI) || defined(CONFIG_USB_PD_TCPM_STUB) /* * If we come from hard reset recover state, @@ -4176,58 +3979,64 @@ void pd_task(void *u) */ int batt_soc = usb_get_battery_soc(); - if (batt_soc < CONFIG_USB_PD_RESET_MIN_BATT_SOC || + if (batt_soc < + CONFIG_USB_PD_RESET_MIN_BATT_SOC || battery_get_disconnect_state() != - BATTERY_NOT_DISCONNECTED) + BATTERY_NOT_DISCONNECTED) pd[port].flags |= - PD_FLAGS_SNK_WAITING_BATT; + PD_FLAGS_SNK_WAITING_BATT; else pd[port].flags &= - ~PD_FLAGS_SNK_WAITING_BATT; + ~PD_FLAGS_SNK_WAITING_BATT; #endif if (pd[port].flags & - PD_FLAGS_SNK_WAITING_BATT) { + PD_FLAGS_SNK_WAITING_BATT) { #ifdef CONFIG_CHARGE_MANAGER /* * Configure this port as dedicated for * now, so it won't be de-selected by * the charge manager leaving safe mode. */ - charge_manager_update_dualrole(port, - CAP_DEDICATED); + charge_manager_update_dualrole( + port, CAP_DEDICATED); #endif CPRINTS("C%d: Battery low. " - "Hold reset timer", port); - /* - * If VBUS has never been low, and we timeout - * waiting for source cap, try a soft reset - * first, in case we were already in a stable - * contract before this boot. - */ + "Hold reset timer", + port); + /* + * If VBUS has never been low, and we + * timeout waiting for source cap, try a + * soft reset first, in case we were + * already in a stable contract before + * this boot. + */ } else if (pd[port].flags & - PD_FLAGS_VBUS_NEVER_LOW) { - set_state_timeout(port, - get_time().val + - PD_T_SINK_WAIT_CAP, - PD_STATE_SOFT_RESET); - /* - * If we haven't passed hard reset counter, - * start SinkWaitCapTimer, otherwise start - * NoResponseTimer. - */ + PD_FLAGS_VBUS_NEVER_LOW) { + set_state_timeout( + port, + get_time().val + + PD_T_SINK_WAIT_CAP, + PD_STATE_SOFT_RESET); + /* + * If we haven't passed hard reset + * counter, start SinkWaitCapTimer, + * otherwise start NoResponseTimer. + */ } else if (hard_reset_count < - PD_HARD_RESET_COUNT) { - set_state_timeout(port, - get_time().val + - PD_T_SINK_WAIT_CAP, - PD_STATE_HARD_RESET_SEND); + PD_HARD_RESET_COUNT) { + set_state_timeout( + port, + get_time().val + + PD_T_SINK_WAIT_CAP, + PD_STATE_HARD_RESET_SEND); } else if (pd_capable(port)) { /* ErrorRecovery */ - set_state_timeout(port, - get_time().val + - PD_T_NO_RESPONSE, - PD_STATE_SNK_DISCONNECTED); + set_state_timeout( + port, + get_time().val + + PD_T_NO_RESPONSE, + PD_STATE_SNK_DISCONNECTED); } #if defined(CONFIG_CHARGE_MANAGER) /* @@ -4247,17 +4056,17 @@ void pd_task(void *u) /* Check if CC pull-up has changed */ tcpm_get_cc(port, &cc1, &cc2); - if (typec_curr != usb_get_typec_current_limit( - pd[port].polarity, cc1, cc2)) { + if (typec_curr != + usb_get_typec_current_limit(pd[port].polarity, cc1, + cc2)) { /* debounce signal by requiring two reads */ if (typec_curr_change) { /* set new input current limit */ - typec_curr = - usb_get_typec_current_limit( - pd[port].polarity, - cc1, cc2); + typec_curr = usb_get_typec_current_limit( + pd[port].polarity, cc1, cc2); typec_set_input_current_limit( - port, typec_curr, TYPE_C_VOLTAGE); + port, typec_curr, + TYPE_C_VOLTAGE); } else { /* delay for debounce */ timeout = PD_T_DEBOUNCE; @@ -4275,7 +4084,7 @@ void pd_task(void *u) hard_reset_count = 0; set_state_timeout(port, get_time().val + - PD_T_SENDER_RESPONSE, + PD_T_SENDER_RESPONSE, PD_STATE_HARD_RESET_SEND); } break; @@ -4284,11 +4093,11 @@ void pd_task(void *u) if (pd[port].last_state != pd[port].task_state) set_state_timeout(port, get_time().val + - PD_T_PS_TRANSITION, + PD_T_PS_TRANSITION, PD_STATE_HARD_RESET_SEND); break; case PD_STATE_SNK_READY: - timeout = 20*MSEC; + timeout = 20 * MSEC; /* * Don't send any traffic yet until our holdoff timer @@ -4343,52 +4152,43 @@ void pd_task(void *u) * initiate or receive a request an exchange * of VCONN Source. */ - pd_try_execute_vconn_swap(port, - pd[port].flags); + pd_try_execute_vconn_swap(port, pd[port].flags); pd[port].flags &= ~PD_FLAGS_CHECK_VCONN_STATE; break; } /* If DFP, send discovery SVDMs */ if (pd[port].data_role == PD_ROLE_DFP && - (pd[port].flags & PD_FLAGS_CHECK_IDENTITY)) { + (pd[port].flags & PD_FLAGS_CHECK_IDENTITY)) { pd_send_vdm(port, USB_SID_PD, CMD_DISCOVER_IDENT, NULL, 0); pd[port].flags &= ~PD_FLAGS_CHECK_IDENTITY; break; } - /* - * Enter_USB if port partner and cable are - * USB4 compatible. - */ - if (should_enter_usb4_mode(port)) { - pd_send_enter_usb(port, &timeout); - break; - } - /* Sent all messages, don't need to wake very often */ - timeout = 200*MSEC; + timeout = 200 * MSEC; break; case PD_STATE_SNK_SWAP_INIT: if (pd[port].last_state != pd[port].task_state) { res = send_control(port, PD_CTRL_PR_SWAP); if (res < 0) { - timeout = 10*MSEC; + timeout = 10 * MSEC; /* * If failed to get goodCRC, send * soft reset, otherwise ignore * failure. */ - set_state(port, res == -1 ? - PD_STATE_SOFT_RESET : - PD_STATE_SNK_READY); + set_state(port, + res == -1 ? + PD_STATE_SOFT_RESET : + PD_STATE_SNK_READY); break; } /* Wait for accept or reject */ set_state_timeout(port, get_time().val + - PD_T_SENDER_RESPONSE, + PD_T_SENDER_RESPONSE, PD_STATE_SNK_READY); } break; @@ -4397,19 +4197,18 @@ void pd_task(void *u) pd_set_input_current_limit(port, 0, 0); #ifdef CONFIG_CHARGE_MANAGER typec_set_input_current_limit(port, 0, 0); - charge_manager_set_ceil(port, - CEIL_REQUESTOR_PD, + charge_manager_set_ceil(port, CEIL_REQUESTOR_PD, CHARGE_CEIL_NONE); #endif set_state(port, PD_STATE_SNK_SWAP_SRC_DISABLE); - timeout = 10*MSEC; + timeout = 10 * MSEC; break; case PD_STATE_SNK_SWAP_SRC_DISABLE: /* Wait for PS_RDY */ if (pd[port].last_state != pd[port].task_state) set_state_timeout(port, get_time().val + - PD_T_PS_SOURCE_OFF, + PD_T_PS_SOURCE_OFF, PD_STATE_HARD_RESET_SEND); break; case PD_STATE_SNK_SWAP_STANDBY: @@ -4419,7 +4218,7 @@ void pd_task(void *u) if (pd_set_power_supply_ready(port)) { /* Restore Rd */ tcpm_set_cc(port, TYPEC_CC_RD); - timeout = 10*MSEC; + timeout = 10 * MSEC; set_state(port, PD_STATE_SNK_DISCONNECTED); break; @@ -4428,7 +4227,7 @@ void pd_task(void *u) set_state_timeout( port, get_time().val + - PD_POWER_SUPPLY_TURN_ON_DELAY, + PD_POWER_SUPPLY_TURN_ON_DELAY, PD_STATE_SNK_SWAP_COMPLETE); } break; @@ -4445,34 +4244,36 @@ void pd_task(void *u) } /* Don't send GET_SINK_CAP on swap */ - snk_cap_count = PD_SNK_CAP_RETRIES+1; + snk_cap_count = PD_SNK_CAP_RETRIES + 1; caps_count = 0; pd[port].msg_id = 0; pd_set_power_role(port, PD_ROLE_SOURCE); pd_update_roles(port); set_state(port, PD_STATE_SRC_DISCOVERY); - timeout = 10*MSEC; + timeout = 10 * MSEC; break; #ifdef CONFIG_USBC_VCONN_SWAP case PD_STATE_VCONN_SWAP_SEND: if (pd[port].last_state != pd[port].task_state) { res = send_control(port, PD_CTRL_VCONN_SWAP); if (res < 0) { - timeout = 10*MSEC; + timeout = 10 * MSEC; /* * If failed to get goodCRC, send * soft reset, otherwise ignore * failure. */ - set_state(port, res == -1 ? - PD_STATE_SOFT_RESET : - READY_RETURN_STATE(port)); + set_state(port, + res == -1 ? + PD_STATE_SOFT_RESET : + READY_RETURN_STATE( + port)); break; } /* Wait for accept or reject */ set_state_timeout(port, get_time().val + - PD_T_SENDER_RESPONSE, + PD_T_SENDER_RESPONSE, READY_RETURN_STATE(port)); } break; @@ -4481,12 +4282,14 @@ void pd_task(void *u) if (!(pd[port].flags & PD_FLAGS_VCONN_ON)) { /* Turn VCONN on and wait for it */ set_vconn(port, 1); - set_state_timeout(port, + set_state_timeout( + port, get_time().val + - CONFIG_USBC_VCONN_SWAP_DELAY_US, + CONFIG_USBC_VCONN_SWAP_DELAY_US, PD_STATE_VCONN_SWAP_READY); } else { - set_state_timeout(port, + set_state_timeout( + port, get_time().val + PD_T_VCONN_SOURCE_ON, READY_RETURN_STATE(port)); @@ -4498,29 +4301,30 @@ void pd_task(void *u) if (!(pd[port].flags & PD_FLAGS_VCONN_ON)) { /* VCONN is now on, send PS_RDY */ pd_set_vconn_role(port, - PD_ROLE_VCONN_ON); + PD_ROLE_VCONN_ON); res = send_control(port, - PD_CTRL_PS_RDY); + PD_CTRL_PS_RDY); if (res == -1) { - timeout = 10*MSEC; + timeout = 10 * MSEC; /* * If failed to get goodCRC, * send soft reset */ set_state(port, - PD_STATE_SOFT_RESET); + PD_STATE_SOFT_RESET); break; } set_state(port, - READY_RETURN_STATE(port)); + READY_RETURN_STATE(port)); } else { /* Turn VCONN off and wait for it */ set_vconn(port, 0); pd_set_vconn_role(port, - PD_ROLE_VCONN_OFF); - set_state_timeout(port, + PD_ROLE_VCONN_OFF); + set_state_timeout( + port, get_time().val + - CONFIG_USBC_VCONN_SWAP_DELAY_US, + CONFIG_USBC_VCONN_SWAP_DELAY_US, READY_RETURN_STATE(port)); } } @@ -4538,14 +4342,14 @@ void pd_task(void *u) if (res < 0) { set_state(port, PD_STATE_HARD_RESET_SEND); - timeout = 5*MSEC; + timeout = 5 * MSEC; break; } - set_state_timeout( - port, - get_time().val + PD_T_SENDER_RESPONSE, - PD_STATE_HARD_RESET_SEND); + set_state_timeout(port, + get_time().val + + PD_T_SENDER_RESPONSE, + PD_STATE_HARD_RESET_SEND); } break; case PD_STATE_HARD_RESET_SEND: @@ -4577,7 +4381,7 @@ void pd_task(void *u) break; if (pd_transmit(port, TCPCI_MSG_TX_HARD_RESET, 0, NULL, - AMS_START) < 0) { + AMS_START) < 0) { /* * likely a non-idle channel * TCPCI r2.0 v1.0 4.4.15: @@ -4614,7 +4418,8 @@ void pd_task(void *u) */ if (pd[port].power_role == PD_ROLE_SOURCE) { set_state_timeout(port, - get_time().val + PD_T_PS_HARD_RESET, + get_time().val + + PD_T_PS_HARD_RESET, PD_STATE_HARD_RESET_EXECUTE); } else { set_state(port, PD_STATE_HARD_RESET_EXECUTE); @@ -4633,32 +4438,31 @@ void pd_task(void *u) /* reset our own state machine */ pd_execute_hard_reset(port); - timeout = 10*MSEC; + timeout = 10 * MSEC; break; #ifdef CONFIG_COMMON_RUNTIME case PD_STATE_BIST_RX: send_bist_cmd(port); /* Delay at least enough for partner to finish BIST */ - timeout = PD_T_BIST_RECEIVE + 20*MSEC; + timeout = PD_T_BIST_RECEIVE + 20 * MSEC; /* Set to appropriate port disconnected state */ - set_state(port, DUAL_ROLE_IF_ELSE(port, - PD_STATE_SNK_DISCONNECTED, + set_state(port, DUAL_ROLE_IF_ELSE( + port, PD_STATE_SNK_DISCONNECTED, PD_STATE_SRC_DISCONNECTED)); break; case PD_STATE_BIST_TX: pd_transmit(port, TCPCI_MSG_TX_BIST_MODE_2, 0, NULL, AMS_START); /* Delay at least enough to finish sending BIST */ - timeout = PD_T_BIST_TRANSMIT + 20*MSEC; + timeout = PD_T_BIST_TRANSMIT + 20 * MSEC; /* Set to appropriate port disconnected state */ - set_state(port, DUAL_ROLE_IF_ELSE(port, - PD_STATE_SNK_DISCONNECTED, + set_state(port, DUAL_ROLE_IF_ELSE( + port, PD_STATE_SNK_DISCONNECTED, PD_STATE_SRC_DISCONNECTED)); break; #endif #ifdef CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE - case PD_STATE_DRP_AUTO_TOGGLE: - { + case PD_STATE_DRP_AUTO_TOGGLE: { enum pd_drp_next_states next_state; assert(auto_toggle_supported); @@ -4701,10 +4505,8 @@ void pd_task(void *u) tcpm_get_cc(port, &cc1, &cc2); next_state = drp_auto_toggle_next_state( - &pd[port].drp_sink_time, - pd[port].power_role, - drp_state[port], - cc1, cc2, false); + &pd[port].drp_sink_time, pd[port].power_role, + drp_state[port], cc1, cc2, false); #ifdef CONFIG_USB_PD_TCPC_LOW_POWER /* @@ -4718,7 +4520,7 @@ void pd_task(void *u) #endif if (next_state == DRP_TC_DEFAULT) { if (PD_DEFAULT_STATE(port) == - PD_STATE_SNK_DISCONNECTED) + PD_STATE_SNK_DISCONNECTED) next_state = DRP_TC_UNATTACHED_SNK; else next_state = DRP_TC_UNATTACHED_SRC; @@ -4737,7 +4539,7 @@ void pd_task(void *u) tcpm_set_cc(port, TYPEC_CC_RD); pd_set_power_role(port, PD_ROLE_SINK); - timeout = 2*MSEC; + timeout = 2 * MSEC; set_state(port, PD_STATE_SNK_DISCONNECTED); } else if (next_state == DRP_TC_UNATTACHED_SRC) { /* @@ -4752,7 +4554,7 @@ void pd_task(void *u) tcpm_set_cc(port, TYPEC_CC_RP); pd_set_power_role(port, PD_ROLE_SOURCE); - timeout = 2*MSEC; + timeout = 2 * MSEC; set_state(port, PD_STATE_SRC_DISCONNECTED); } else { /* @@ -4767,13 +4569,6 @@ void pd_task(void *u) break; } #endif - case PD_STATE_ENTER_USB: - if (pd[port].last_state != pd[port].task_state) { - set_state_timeout(port, - get_time().val + PD_T_SENDER_RESPONSE, - READY_RETURN_STATE(port)); - } - break; default: break; } @@ -4789,7 +4584,8 @@ void pd_task(void *u) if (now.val >= pd[port].timeout) { set_state(port, pd[port].timeout_state); /* On a state timeout, run next state soon */ - timeout = timeout < 10*MSEC ? timeout : 10*MSEC; + timeout = timeout < 10 * MSEC ? timeout : + 10 * MSEC; } else if (pd[port].timeout - now.val < timeout) { timeout = pd[port].timeout - now.val; } @@ -4836,7 +4632,7 @@ void pd_task(void *u) if (cc1 == TYPEC_CC_VOLT_OPEN) { set_state(port, PD_STATE_SRC_DISCONNECTED); /* Debouncing */ - timeout = 10*MSEC; + timeout = 10 * MSEC; #ifdef CONFIG_USB_PD_DUAL_ROLE /* * If Try.SRC is configured, then ATTACHED_SRC @@ -4848,8 +4644,8 @@ void pd_task(void *u) pd_set_power_role(port, PD_ROLE_SINK); tcpm_set_cc(port, TYPEC_CC_RD); /* Set timer for TryWait.SNK state */ - pd[port].try_src_marker = get_time().val - + PD_T_DEBOUNCE; + pd[port].try_src_marker = + get_time().val + PD_T_DEBOUNCE; /* Advance to TryWait.SNK state */ set_state(port, PD_STATE_SNK_DISCONNECTED); @@ -4874,7 +4670,7 @@ void pd_task(void *u) /* Sink: detect disconnect by monitoring VBUS */ set_state(port, PD_STATE_SNK_DISCONNECTED); /* set timeout small to reconnect fast */ - timeout = 5*MSEC; + timeout = 5 * MSEC; } #endif /* CONFIG_USB_PD_DUAL_ROLE */ } @@ -4915,8 +4711,6 @@ static void pd_chipset_startup(void) for (i = 0; i < board_get_usb_pd_port_count(); i++) { pd_set_dual_role_no_wakeup(i, PD_DRP_TOGGLE_OFF); pd[i].flags |= PD_FLAGS_CHECK_IDENTITY; - /* Reset cable attributes and flags */ - reset_pd_cable(i); task_set_event(PD_PORT_TO_TASK_ID(i), PD_EVENT_POWER_STATE_CHANGE | PD_EVENT_UPDATE_DUAL_ROLE); @@ -5013,16 +4807,16 @@ void pd_send_hpd(int port, enum hpd_event hpd) if (!opos) return; - data[0] = VDO_DP_STATUS((hpd == hpd_irq), /* IRQ_HPD */ - (hpd != hpd_low), /* HPD_HI|LOW */ - 0, /* request exit DP */ - 0, /* request exit USB */ - 0, /* MF pref */ - 1, /* enabled */ - 0, /* power low */ + data[0] = VDO_DP_STATUS((hpd == hpd_irq), /* IRQ_HPD */ + (hpd != hpd_low), /* HPD_HI|LOW */ + 0, /* request exit DP */ + 0, /* request exit USB */ + 0, /* MF pref */ + 1, /* enabled */ + 0, /* power low */ 0x2); - pd_send_vdm(port, USB_SID_DISPLAYPORT, - VDO_OPOS(opos) | CMD_ATTENTION, data, 1); + pd_send_vdm(port, USB_SID_DISPLAYPORT, VDO_OPOS(opos) | CMD_ATTENTION, + data, 1); /* Wait until VDM is done. */ while (pd[0].vdm_state > 0) task_wait_event(USB_PD_RX_TMOUT_US * @@ -5037,15 +4831,15 @@ int pd_fetch_acc_log_entry(int port) /* Cannot send a VDM now, the host should retry */ if (pd[port].vdm_state > 0) return pd[port].vdm_state == VDM_STATE_BUSY ? - EC_RES_BUSY : EC_RES_UNAVAILABLE; + EC_RES_BUSY : + EC_RES_UNAVAILABLE; pd_send_vdm(port, USB_VID_GOOGLE, VDO_CMD_GET_LOG, NULL, 0); - timeout.val = get_time().val + 75*MSEC; + timeout.val = get_time().val + 75 * MSEC; /* Wait until VDM is done */ - while ((pd[port].vdm_state > 0) && - (get_time().val < timeout.val)) - task_wait_event(10*MSEC); + while ((pd[port].vdm_state > 0) && (get_time().val < timeout.val)) + task_wait_event(10 * MSEC); if (pd[port].vdm_state > 0) return EC_RES_TIMEOUT; @@ -5096,7 +4890,7 @@ void pd_update_contract(int port) #endif /* CONFIG_USB_PD_DUAL_ROLE */ -static int command_pd(int argc, char **argv) +static int command_pd(int argc, const char **argv) { int port; char *e; @@ -5119,7 +4913,6 @@ static int command_pd(int argc, char **argv) return EC_SUCCESS; } - #ifdef CONFIG_CMD_PD #ifdef CONFIG_CMD_PD_DEV_DUMP_INFO else if (!strncasecmp(argv[1], "rwhashtable", 3)) { @@ -5234,8 +5027,8 @@ static int command_pd(int argc, char **argv) } ccprintf("Pings %s\n", - (pd[port].flags & PD_FLAGS_PING_ENABLED) ? - "on" : "off"); + (pd[port].flags & PD_FLAGS_PING_ENABLED) ? "on" : + "off"); } else if (!strncasecmp(argv[2], "vdm", 3)) { if (argc < 4) return EC_ERROR_PARAM_COUNT; @@ -5250,11 +5043,11 @@ static int command_pd(int argc, char **argv) pd_send_vdm(port, USB_VID_GOOGLE, VDO_CMD_PING_ENABLE, &enable, 1); } else if (!strncasecmp(argv[3], "curr", 4)) { - pd_send_vdm(port, USB_VID_GOOGLE, VDO_CMD_CURRENT, - NULL, 0); + pd_send_vdm(port, USB_VID_GOOGLE, VDO_CMD_CURRENT, NULL, + 0); } else if (!strncasecmp(argv[3], "vers", 4)) { - pd_send_vdm(port, USB_VID_GOOGLE, VDO_CMD_VERSION, - NULL, 0); + pd_send_vdm(port, USB_VID_GOOGLE, VDO_CMD_VERSION, NULL, + 0); } else { return EC_ERROR_PARAM_COUNT; } @@ -5293,8 +5086,7 @@ static int command_pd(int argc, char **argv) else if (!strcasecmp(argv[3], "sink")) pd_set_dual_role(port, PD_DRP_FORCE_SINK); else if (!strcasecmp(argv[3], "source")) - pd_set_dual_role(port, - PD_DRP_FORCE_SOURCE); + pd_set_dual_role(port, PD_DRP_FORCE_SOURCE); else return EC_ERROR_PARAM4; } @@ -5302,17 +5094,17 @@ static int command_pd(int argc, char **argv) #endif } else #endif - if (!strncasecmp(argv[2], "state", 5)) { + if (!strncasecmp(argv[2], "state", 5)) { ccprintf("Port C%d CC%d, %s - Role: %s-%s%s " "State: %d(%s), Flags: 0x%04x\n", - port, pd[port].polarity + 1, - pd_comm_is_enabled(port) ? "Ena" : "Dis", - pd[port].power_role == PD_ROLE_SOURCE ? "SRC" : "SNK", - pd[port].data_role == PD_ROLE_DFP ? "DFP" : "UFP", - (pd[port].flags & PD_FLAGS_VCONN_ON) ? "-VC" : "", - pd[port].task_state, - debug_level > 0 ? pd_get_task_state_name(port) : "", - pd[port].flags); + port, pd[port].polarity + 1, + pd_comm_is_enabled(port) ? "Ena" : "Dis", + pd[port].power_role == PD_ROLE_SOURCE ? "SRC" : "SNK", + pd[port].data_role == PD_ROLE_DFP ? "DFP" : "UFP", + (pd[port].flags & PD_FLAGS_VCONN_ON) ? "-VC" : "", + pd[port].task_state, + debug_level > 0 ? pd_get_task_state_name(port) : "", + pd[port].flags); } else { return EC_ERROR_PARAM1; } @@ -5360,9 +5152,8 @@ static enum ec_status hc_remote_flash(struct host_cmd_handler_args *args) if (p->size + sizeof(*p) > args->params_size) return EC_RES_INVALID_PARAM; -#if defined(CONFIG_BATTERY) && \ - (defined(CONFIG_BATTERY_PRESENT_CUSTOM) || \ - defined(CONFIG_BATTERY_PRESENT_GPIO)) +#if defined(CONFIG_BATTERY) && (defined(CONFIG_BATTERY_PRESENT_CUSTOM) || \ + defined(CONFIG_BATTERY_PRESENT_GPIO)) /* * Do not allow PD firmware update if no battery and this port * is sinking power, because we will lose power. @@ -5400,7 +5191,7 @@ static enum ec_status hc_remote_flash(struct host_cmd_handler_args *args) case USB_PD_FW_ERASE_SIG: pd_send_vdm(port, USB_VID_GOOGLE, VDO_CMD_ERASE_SIG, NULL, 0); - timeout.val = get_time().val + 500*MSEC; + timeout.val = get_time().val + 500 * MSEC; break; case USB_PD_FW_FLASH_WRITE: @@ -5412,12 +5203,12 @@ static enum ec_status hc_remote_flash(struct host_cmd_handler_args *args) for (i = 0; i < size; i += VDO_MAX_SIZE - 1) { pd_send_vdm(port, USB_VID_GOOGLE, VDO_CMD_FLASH_WRITE, data + i, MIN(size - i, VDO_MAX_SIZE - 1)); - timeout.val = get_time().val + 500*MSEC; + timeout.val = get_time().val + 500 * MSEC; /* Wait until VDM is done */ while ((pd[port].vdm_state > 0) && (get_time().val < timeout.val)) - task_wait_event(10*MSEC); + task_wait_event(10 * MSEC); if (pd[port].vdm_state > 0) return EC_RES_TIMEOUT; @@ -5431,7 +5222,7 @@ static enum ec_status hc_remote_flash(struct host_cmd_handler_args *args) /* Wait until VDM is done or timeout */ while ((pd[port].vdm_state > 0) && (get_time().val < timeout.val)) - task_wait_event(50*MSEC); + task_wait_event(50 * MSEC); if ((pd[port].vdm_state > 0) || (pd[port].vdm_state == VDM_STATE_ERR_TMOUT)) @@ -5441,12 +5232,8 @@ static enum ec_status hc_remote_flash(struct host_cmd_handler_args *args) return rv; } -DECLARE_HOST_COMMAND(EC_CMD_USB_PD_FW_UPDATE, - hc_remote_flash, - EC_VER_MASK(0)); +DECLARE_HOST_COMMAND(EC_CMD_USB_PD_FW_UPDATE, hc_remote_flash, EC_VER_MASK(0)); #endif /* CONFIG_HOSTCMD_FLASHPD */ #endif /* HAS_TASK_HOSTCMD */ - - #endif /* CONFIG_COMMON_RUNTIME */ |