summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Boichat <drinkcat@chromium.org>2018-09-14 18:32:50 +0200
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2019-03-29 07:28:18 +0000
commit176fb8eae34d8f58717a83bb78f6a1ec54fe909b (patch)
tree0e8ad750ec0864b8635324bb647aecb0a3481938
parent8f4372e8a8cd615f5985d6edcd630633b9e40bcf (diff)
downloadchrome-ec-176fb8eae34d8f58717a83bb78f6a1ec54fe909b.tar.gz
rollback: Add host command to query rollback information
Rollback id will be useful to check that the secret has actually been wiped. Min rollback version and RW rollback version might be useful in the future. BRANCH=nocturne BUG=b:115733483 TEST=ectool --name=cros_fp rollbackinfo => Rollback block id: X ectool --name=cros_fp reboot_ec; sleep 0.5; \ ectool --name=cros_fp rwsigaction abort && \ ectool --name=cros_fp addentropy reset && \ ectool --name=cros_fp reboot_ec ectool --name=cros_fp rollbackinfo => Rollback block id: X+2 Change-Id: I039d26d302d3a12b0d41acca34aa28d4a2dd096d Signed-off-by: Nicolas Boichat <drinkcat@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1226126 Reviewed-by: Randall Spangler <rspangler@chromium.org> Reviewed-by: Nicolas Norvez <norvez@chromium.org> (cherry picked from commit 852a4f2f35602724ac8d784b721df5cdc57ac086) Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1539363 Commit-Queue: Corner Li <cornerli@google.com> Tested-by: Corner Li <cornerli@google.com>
-rw-r--r--common/rollback.c23
-rw-r--r--include/ec_commands.h11
-rw-r--r--util/ectool.c22
3 files changed, 56 insertions, 0 deletions
diff --git a/common/rollback.c b/common/rollback.c
index cc5d27cb12..53d840ec46 100644
--- a/common/rollback.c
+++ b/common/rollback.c
@@ -459,3 +459,26 @@ static int command_rollback_info(int argc, char **argv)
DECLARE_SAFE_CONSOLE_COMMAND(rollbackinfo, command_rollback_info,
NULL,
"Print rollback info");
+
+static int host_command_rollback_info(struct host_cmd_handler_args *args)
+{
+ struct ec_response_rollback_info *r = args->response;
+ int min_region;
+ struct rollback_data data;
+
+ min_region = get_latest_rollback(&data);
+
+ if (min_region < 0)
+ return EC_RES_UNAVAILABLE;
+
+ r->id = data.id;
+ r->rollback_min_version = data.rollback_min_version;
+ r->rw_rollback_version = system_get_rollback_version(SYSTEM_IMAGE_RW);
+
+ args->response_size = sizeof(*r);
+
+ return EC_RES_SUCCESS;
+}
+DECLARE_HOST_COMMAND(EC_CMD_ROLLBACK_INFO,
+ host_command_rollback_info,
+ EC_VER_MASK(0));
diff --git a/include/ec_commands.h b/include/ec_commands.h
index 54c7827231..53c84867fb 100644
--- a/include/ec_commands.h
+++ b/include/ec_commands.h
@@ -4886,6 +4886,17 @@ struct __ec_align4 ec_response_adc_read {
int32_t adc_value;
};
+/*
+ * Read back rollback info
+ */
+#define EC_CMD_ROLLBACK_INFO 0x0124
+
+struct __ec_align4 ec_response_rollback_info {
+ int32_t id; /* Incrementing number to indicate which region to use. */
+ int32_t rollback_min_version;
+ int32_t rw_rollback_version;
+};
+
/*****************************************************************************/
/* The command range 0x200-0x2FF is reserved for Rotor. */
diff --git a/util/ectool.c b/util/ectool.c
index 795c5de869..e22e951ac1 100644
--- a/util/ectool.c
+++ b/util/ectool.c
@@ -229,6 +229,8 @@ 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"
+ " rollbackinfo\n"
+ " Print rollback block information\n"
" rtcget\n"
" Print real-time clock\n"
" rtcgetalarm\n"
@@ -1305,6 +1307,25 @@ int cmd_rwsig_action(int argc, char *argv[])
return ec_command(EC_CMD_RWSIG_ACTION, 0, &req, sizeof(req), NULL, 0);
}
+int cmd_rollback_info(int argc, char *argv[])
+{
+ struct ec_response_rollback_info r;
+ int rv;
+
+ rv = ec_command(EC_CMD_ROLLBACK_INFO, 0, NULL, 0, &r, sizeof(r));
+ if (rv < 0) {
+ fprintf(stderr, "ERROR: EC_CMD_ROLLBACK_INFO failed: %d\n", rv);
+ return rv;
+ }
+
+ /* Print versions */
+ printf("Rollback block id: %d\n", r.id);
+ printf("Rollback min version: %d\n", r.rollback_min_version);
+ printf("RW rollback version: %d\n", r.rw_rollback_version);
+
+ return rv;
+}
+
#define FP_FRAME_INDEX_SIMPLE_IMAGE -1
/*
@@ -8364,6 +8385,7 @@ const struct command commands[] = {
{"pwmsetduty", cmd_pwm_set_duty},
{"readtest", cmd_read_test},
{"reboot_ec", cmd_reboot_ec},
+ {"rollbackinfo", cmd_rollback_info},
{"rtcget", cmd_rtc_get},
{"rtcgetalarm", cmd_rtc_get_alarm},
{"rtcset", cmd_rtc_set},