diff options
author | Sooraj Govindan <sooraj.govindan@intel.com> | 2019-10-10 21:38:51 +0530 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-12-10 21:04:38 +0000 |
commit | 5f429581855f887a81be11804838449ca77f9672 (patch) | |
tree | f5193c93839d9cb8ba3424fb5b4663c899857063 | |
parent | 64482f3c1cedeaa2c0cbf665f851cc85e5eeae5f (diff) | |
download | chrome-ec-5f429581855f887a81be11804838449ca77f9672.tar.gz |
EC: Implementation for AP reboot from G3 state using ectool command.
The new ectool command 'ectool reboot_ap_on_g3' will reboot AP from
G3 state on initiation of DUT shutdown. Thus eliminating the dependency
of servo to trigger wake events when testing AP cold boot cycles.
BUG=b:129507479
BRANCH=None
TEST=Tested on hatch board.
From Kernel console, entered the below commands:
$ectool reboot_ap_on_g3
$shutdown -h now
Observed AP boots back to S0 upon G3.
Change-Id: Ie6fcbd2f00eb6c22ed498ab82dac53132dbbf4a3
Signed-off-by: Poornima Tom <poornima.tom@intel.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1918993
Reviewed-by: Jett Rink <jettrink@chromium.org>
Commit-Queue: Jett Rink <jettrink@chromium.org>
-rw-r--r-- | include/ec_commands.h | 12 | ||||
-rw-r--r-- | power/common.c | 18 | ||||
-rw-r--r-- | util/ectool.c | 11 |
3 files changed, 40 insertions, 1 deletions
diff --git a/include/ec_commands.h b/include/ec_commands.h index fa982f1d55..d23e8e999e 100644 --- a/include/ec_commands.h +++ b/include/ec_commands.h @@ -5766,6 +5766,18 @@ struct ec_response_locate_chip { }; } __ec_align2; +/* + * Reboot AP on G3 + * + * This command is used for validation purpose, where the AP needs to be + * returned back to S0 state from G3 state without using the servo to trigger + * wake events.For this,there is no request or response struct. + * + * Order of command usage: + * ectool reboot_ap_on_g3 && shutdown -h now + */ +#define EC_CMD_REBOOT_AP_ON_G3 0x0127 + /*****************************************************************************/ /* The command range 0x200-0x2FF is reserved for Rotor. */ diff --git a/power/common.c b/power/common.c index a45bbcf2f0..5067443e84 100644 --- a/power/common.c +++ b/power/common.c @@ -76,6 +76,20 @@ static uint32_t hibernate_delay = CONFIG_HIBERNATE_DELAY_SEC; static int pause_in_s5; #endif +static bool want_reboot_ap_at_g3;/* Want to reboot AP from G3? */ + +static enum ec_status +host_command_reboot_ap_on_g3(struct host_cmd_handler_args *args) +{ + /* Store request for processing at g3 */ + want_reboot_ap_at_g3 = true; + + return EC_RES_SUCCESS; +} +DECLARE_HOST_COMMAND(EC_CMD_REBOOT_AP_ON_G3, + host_command_reboot_ap_on_g3, + EC_VER_MASK(0)); + int power_signal_get_level(enum gpio_signal signal) { if (IS_ENABLED(CONFIG_HOSTCMD_ESPI)) { @@ -307,8 +321,10 @@ static enum power_state power_common_state(enum power_state state) { switch (state) { case POWER_G3: - if (want_g3_exit) { + if (want_g3_exit || want_reboot_ap_at_g3) { want_g3_exit = 0; + want_reboot_ap_at_g3 = false; + return POWER_G3S5; } diff --git a/util/ectool.c b/util/ectool.c index 32ebe478e9..802ea530ba 100644 --- a/util/ectool.c +++ b/util/ectool.c @@ -255,6 +255,9 @@ const char help_str[] = " reboot_ec <RO|RW|cold|hibernate|hibernate-clear-ap-off|disable-jump>" " [at-shutdown|switch-slot]\n" " Reboot EC to RO or RW\n" + " reboot_ap_on_g3\n" + " Requests that the EC will automatically reboot the AP the next time\n" + " we enter the G3 power state.\n" " rollbackinfo\n" " Print rollback block information\n" " rtcget\n" @@ -1090,6 +1093,13 @@ int cmd_reboot_ec(int argc, char *argv[]) return (rv < 0 ? rv : 0); } +int cmd_reboot_ap_on_g3(int argc, char *argv[]) +{ + int rv; + + rv = ec_command(EC_CMD_REBOOT_AP_ON_G3, 0, NULL, 0, NULL, 0); + return (rv < 0 ? rv : 0); +} int cmd_flash_info(int argc, char *argv[]) { @@ -9262,6 +9272,7 @@ const struct command commands[] = { {"version", cmd_version}, {"waitevent", cmd_wait_event}, {"wireless", cmd_wireless}, + {"reboot_ap_on_g3", cmd_reboot_ap_on_g3}, {NULL, NULL} }; |