summaryrefslogtreecommitdiff
path: root/common/usbc
diff options
context:
space:
mode:
authorli feng <li1.feng@intel.com>2021-07-14 21:20:22 -0700
committerCommit Bot <commit-bot@chromium.org>2021-08-03 19:06:20 +0000
commitdb675a7cafc65b754887d65c6a26c6b7b74b258e (patch)
tree3de030bd9bcd5fae85e405b29e9cd5be4160497b /common/usbc
parentbe5018451b150b0d89e91f3c62233298a6625238 (diff)
downloadchrome-ec-db675a7cafc65b754887d65c6a26c6b7b74b258e.tar.gz
retimer: firmware update uses task_wake()
When TCPC low power mode is enabled, PD ports will enter TC state TC_LOW_POWER_MODE if no device is attached, so tc_low_power_mode_run() pauses PD task during PD task running. Meanwhile, retimer firmware update is operated on NDA port, this will start the paused PD task to run in low power mode. The result of one place pauses task and one place starts task is unpredictable. This causes retimer firmware update failure from time to time. Thus task_wake() is used instead of tc_start_event_loop(). BUG=b:193685562 BRANCH=none TEST=Voxel DVT, retimer firmware update Chromium solution, CPFE 13892 OS/Coreboot, PD port 1 NDA, successfully scan retimers. TEST=Voxel DVT, retimer firmware update upstream solution, coreboot includes patches supporting upstream kernel solution, PD port 1 no device attached, successfully scan retimers. /sys/bus/thunderbolt/devices/0-0/usb4_port3 # echo 1 > offline /sys/bus/thunderbolt/devices/0-0/usb4_port3 # echo 1 > rescan /sys/bus/thunderbolt/devices/0-0/usb4_port3 # ls 0-0:3.1 firmware_node link offline power rescan uevent /sys/bus/thunderbolt/devices/0-0/usb4_port3 # echo 0 > offline Signed-off-by: li feng <li1.feng@intel.com> Change-Id: Ia5c6af0dc8dbace1f0391ed2891ac464d07d9cc0 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3029662 Reviewed-by: Diana Z <dzigterman@chromium.org>
Diffstat (limited to 'common/usbc')
-rw-r--r--common/usbc/usb_tc_drp_acc_trysrc_sm.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/common/usbc/usb_tc_drp_acc_trysrc_sm.c b/common/usbc/usb_tc_drp_acc_trysrc_sm.c
index 5478630243..3599415e8e 100644
--- a/common/usbc/usb_tc_drp_acc_trysrc_sm.c
+++ b/common/usbc/usb_tc_drp_acc_trysrc_sm.c
@@ -3827,13 +3827,13 @@ void tc_set_debug_level(enum debug_level debug_level)
void tc_usb_firmware_fw_update_limited_run(int port)
{
TC_SET_FLAG(port, TC_FLAGS_USB_RETIMER_FW_UPDATE_LTD_RUN);
- tc_start_event_loop(port);
+ task_wake(PD_PORT_TO_TASK_ID(port));
}
void tc_usb_firmware_fw_update_run(int port)
{
TC_SET_FLAG(port, TC_FLAGS_USB_RETIMER_FW_UPDATE_RUN);
- tc_start_event_loop(port);
+ task_wake(PD_PORT_TO_TASK_ID(port));
}
void tc_run(const int port)