summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorli feng <li1.feng@intel.com>2021-02-10 23:29:20 -0800
committerCommit Bot <commit-bot@chromium.org>2021-02-12 01:53:17 +0000
commit06bfa637b0e77b2f0fa05560b4bdd846000baac0 (patch)
tree54005079932bc24d6a1b4faa55dfb41e368fa56d
parent79fc947670536c6ac19679b0eb0b066447cb1e00 (diff)
downloadchrome-ec-06bfa637b0e77b2f0fa05560b4bdd846000baac0.tar.gz
TCPMv2: Exit modes on AP reset
In AP driven mode entry, in the cases of AP reset, kernel panic, etc, EC will exit modes to ensure next time AP boot up, it can enter same Alt modes. BUG=b:168746787 BRANCH=None TEST=On Voxel, EC binary has AP mode entry enabled, OS has AP mode switch enabled. Boot up system with TBT dock, "ectool usbpdmuxinfo" shows DP=1; "reboot" from AP console, after reboot, get DP=1; hot plug TBT dock, get DP=1; browse as guest, get TBT=1, and enumerated in sysfs. "reboot" from AP console again, after reboot, get DP=1. TEST=On Voxel, EC binary has EC driven mode entry, OS is same as above. Boot up system with TBT dock, get TBT=1; "reboot" from AP console, get TBT=1 after reset and enumerated. Signed-off-by: li feng <li1.feng@intel.com> Change-Id: I127c23ec58f55d7672babf1762ac5fb17e24cc7e Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2689671 Commit-Queue: Abe Levkoy <alevkoy@chromium.org> Reviewed-by: Abe Levkoy <alevkoy@chromium.org> Reviewed-by: Vijay P Hiremath <vijay.p.hiremath@intel.com> Reviewed-by: Ayushee Shah <ayushee.shah@intel.com>
-rw-r--r--common/usbc/usb_tc_drp_acc_trysrc_sm.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/common/usbc/usb_tc_drp_acc_trysrc_sm.c b/common/usbc/usb_tc_drp_acc_trysrc_sm.c
index 3737d6d7a5..ab94531cf7 100644
--- a/common/usbc/usb_tc_drp_acc_trysrc_sm.c
+++ b/common/usbc/usb_tc_drp_acc_trysrc_sm.c
@@ -3718,6 +3718,19 @@ static void pd_chipset_suspend(void)
}
DECLARE_HOOK(HOOK_CHIPSET_SUSPEND, pd_chipset_suspend, HOOK_PRIO_DEFAULT);
+static void pd_chipset_reset(void)
+{
+ int i;
+
+ if (IS_ENABLED(CONFIG_USB_PD_REQUIRE_AP_MODE_ENTRY)) {
+ for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++) {
+ /* Exit mode. PD can enter mode again after reset */
+ dpm_set_mode_exit_request(i);
+ }
+ }
+}
+DECLARE_HOOK(HOOK_CHIPSET_RESET, pd_chipset_reset, HOOK_PRIO_DEFAULT);
+
static void pd_chipset_startup(void)
{
int i;