summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2016-10-21 13:58:35 -0700
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2016-10-26 22:01:51 +0000
commit52b937797b04b78eb3d569e589e4b48639de418a (patch)
tree40c3c438ec0096983048bbc4398170e12e83b399
parent7bd8d80c3886cab7c80e72158911f70b91baaa97 (diff)
downloadchrome-ec-52b937797b04b78eb3d569e589e4b48639de418a.tar.gz
power: rk3399: Decrease max. latency for aborted suspend
Make several calls to msleep() rather than one single call. BUG=chrome-os-partner:58474 BRANCH=gru TEST=S/R stress test on kevin. Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Change-Id: Icdc8f221c51519e0f2b95d273aa0523ea3a4eeee Reviewed-on: https://chromium-review.googlesource.com/401930 Reviewed-by: Douglas Anderson <dianders@chromium.org>
-rw-r--r--power/rk3399.c40
1 files changed, 20 insertions, 20 deletions
diff --git a/power/rk3399.c b/power/rk3399.c
index 2dc2575678..9fd9ef27fb 100644
--- a/power/rk3399.c
+++ b/power/rk3399.c
@@ -110,12 +110,20 @@ DECLARE_DEFERRED(force_shutdown);
* be minimized, so check for deassertion at various stages of our suspend
* power sequencing, and immediately transition out of suspend if necessary.
*/
-#define CHECK_ABORTED_SUSPEND() \
- if (!forcing_shutdown && \
- power_get_signals() & IN_SUSPEND_DEASSERTED) { \
- CPRINTS("suspend aborted"); \
- return POWER_S3S0; \
- }
+#define SLEEP_INTERVAL_MS 5
+#define MSLEEP_CHECK_ABORTED_SUSPEND(msec) \
+ do { \
+ int sleep_remain = msec; \
+ do { \
+ msleep(MIN(sleep_remain, SLEEP_INTERVAL_MS)); \
+ sleep_remain -= SLEEP_INTERVAL_MS; \
+ if (!forcing_shutdown && \
+ power_get_signals() & IN_SUSPEND_DEASSERTED) { \
+ CPRINTS("suspend aborted"); \
+ return POWER_S3S0; \
+ } \
+ } while (sleep_remain > 0); \
+ } while (0)
enum power_state power_handle_state(enum power_state state)
{
@@ -280,32 +288,24 @@ enum power_state power_handle_state(enum power_state state)
case POWER_S0S3:
/* Call hooks before we remove power rails */
hook_notify(HOOK_CHIPSET_SUSPEND);
- CHECK_ABORTED_SUSPEND();
-
- msleep(20);
- CHECK_ABORTED_SUSPEND();
+ MSLEEP_CHECK_ABORTED_SUSPEND(20);
gpio_set_level(GPIO_PP1800_SENSOR_EN_L, 1);
gpio_set_level(GPIO_PP1800_SIXAXIS_EN_L, 1);
gpio_set_level(GPIO_PP3300_S0_EN_L, 1);
- msleep(20);
- CHECK_ABORTED_SUSPEND();
+ MSLEEP_CHECK_ABORTED_SUSPEND(20);
gpio_set_level(GPIO_PP1800_S0_EN_L, 1);
- msleep(1);
- CHECK_ABORTED_SUSPEND();
+ MSLEEP_CHECK_ABORTED_SUSPEND(1);
gpio_set_level(GPIO_AP_CORE_EN, 0);
- msleep(20);
- CHECK_ABORTED_SUSPEND();
+ MSLEEP_CHECK_ABORTED_SUSPEND(20);
gpio_set_level(GPIO_PP1800_AP_AVDD_EN_L, 1);
- msleep(1);
- CHECK_ABORTED_SUSPEND();
+ MSLEEP_CHECK_ABORTED_SUSPEND(1);
gpio_set_level(GPIO_PP900_DDRPLL_EN, 0);
- msleep(1);
- CHECK_ABORTED_SUSPEND();
+ MSLEEP_CHECK_ABORTED_SUSPEND(1);
gpio_set_level(GPIO_PPVAR_CLOGIC_EN, 0);