summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSooraj Govindan <sooraj.govindan@intel.com>2019-10-10 21:38:51 +0530
committerCommit Bot <commit-bot@chromium.org>2019-12-10 21:04:38 +0000
commit5f429581855f887a81be11804838449ca77f9672 (patch)
treef5193c93839d9cb8ba3424fb5b4663c899857063
parent64482f3c1cedeaa2c0cbf665f851cc85e5eeae5f (diff)
downloadchrome-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.h12
-rw-r--r--power/common.c18
-rw-r--r--util/ectool.c11
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}
};