diff options
author | li feng <li1.feng@intel.com> | 2021-07-14 21:20:22 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-08-03 19:06:20 +0000 |
commit | db675a7cafc65b754887d65c6a26c6b7b74b258e (patch) | |
tree | 3de030bd9bcd5fae85e405b29e9cd5be4160497b | |
parent | be5018451b150b0d89e91f3c62233298a6625238 (diff) | |
download | chrome-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>
-rw-r--r-- | common/usbc/usb_tc_drp_acc_trysrc_sm.c | 4 |
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) |