summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorli feng <li1.feng@intel.com>2021-07-14 21:20:22 -0700
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-07-27 07:25:41 +0000
commit33e5ebfbe3bb4f49bc44e18769e09e3aced91dbd (patch)
tree9900b49ce020d0b6887248d918a3f7ccdf83d1f4
parent482dc6eb9e2fc11c1c39feb4a451c6c2f9b02a04 (diff)
downloadchrome-ec-33e5ebfbe3bb4f49bc44e18769e09e3aced91dbd.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> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3788858 Reviewed-by: caveh jalali <caveh@chromium.org>
-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)