diff options
author | Shawn Nematbakhsh <shawnn@chromium.org> | 2016-10-21 13:58:35 -0700 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2016-10-26 22:01:51 +0000 |
commit | 52b937797b04b78eb3d569e589e4b48639de418a (patch) | |
tree | 40c3c438ec0096983048bbc4398170e12e83b399 | |
parent | 7bd8d80c3886cab7c80e72158911f70b91baaa97 (diff) | |
download | chrome-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.c | 40 |
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); |