summaryrefslogtreecommitdiff
path: root/baseboard/dedede
diff options
context:
space:
mode:
authorSooraj Govindan <sooraj.govindan@intel.com>2020-05-27 20:31:21 +0530
committerCommit Bot <commit-bot@chromium.org>2020-05-28 04:54:49 +0000
commit5a7c7624a11b9b5681c6d52475b3f8d65f510fad (patch)
tree4cca571b4ceebeaa973f0375afaee3679a3615da /baseboard/dedede
parentf6424dd187d7123c90f4d7a16d08e4ca01370694 (diff)
downloadchrome-ec-5a7c7624a11b9b5681c6d52475b3f8d65f510fad.tar.gz
dedede:Pull VCCIO_EXT low within 200us of SLP_S3_L
There is a potential race condition where VCCST_PWRGD gets pulled LOW, while EN_VCCIO_EXT is still HIGH, during SLP_S3_L assertion. EN_VCCIO_EXT was not driven low in the baseboard_all_sys_pgood_interrupt(). So VCCST_PWRGD was getting SET again by the time EN_VCCIO_EXT is driven LOW in the switch case. This patch ensures that VCCST_PWRGD gets pulled low along with EN_VCCIO_EXT. BUG=b:153763236, b:157216597 BRANCH=none TEST=verify SLP_S3 entry and exit Signed-off-by: Sooraj Govindan <sooraj.govindan@intel.com> Change-Id: Iaf85b9ff6d4cb420dd330d5852b11e05e4401b54 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2217600 Tested-by: Sooraj Govindan <sooraj.govindan@intel.corp-partner.google.com> Reviewed-by: Aseda Aboagye <aaboagye@chromium.org> Commit-Queue: Aseda Aboagye <aaboagye@chromium.org>
Diffstat (limited to 'baseboard/dedede')
-rw-r--r--baseboard/dedede/baseboard.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/baseboard/dedede/baseboard.c b/baseboard/dedede/baseboard.c
index d44622140c..7cccbff2ef 100644
--- a/baseboard/dedede/baseboard.c
+++ b/baseboard/dedede/baseboard.c
@@ -166,9 +166,12 @@ void baseboard_all_sys_pgood_interrupt(enum gpio_signal signal)
* driver to.
* Early protos do not pull VCCST_PWRGD below Vil in hardware logic,
* so we need to do the same for this signal.
+ * Pull EN_VCCIO_EXT to LOW, which ensures VCCST_PWRGD remains LOW during
+ * SLP_S3_L assertion.
*/
if (!gpio_get_level(GPIO_SLP_S3_L)) {
gpio_set_level(GPIO_ALL_SYS_PWRGD, 0);
+ gpio_set_level(GPIO_EN_VCCIO_EXT, 0);
gpio_set_level(GPIO_EC_AP_VCCST_PWRGD_OD, 0);
}
/* Now chain off to the normal power signal interrupt handler. */