summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWei-Ning Huang <wnhuang@google.com>2017-04-22 06:26:39 +0800
committerchrome-bot <chrome-bot@chromium.org>2017-04-27 06:38:14 -0700
commit4bc509b0608ef8ce41356415bc1bb1d1ec619a37 (patch)
tree250e3753761e1b9af2e5c12c352abbbfb9d9eaa7
parentfb387c4f4a0fa38521d5e30fe971fef529f10548 (diff)
downloadchrome-ec-4bc509b0608ef8ce41356415bc1bb1d1ec619a37.tar.gz
rwsig: add host command for getting rwsig status
Add a new host command EC_CMD_RWSIG_CHECK_STATUS for getting rwsig status and rw firmware hash. This command is used to check the RW signature of newly updated RW image. A new subcommand is also added to ectool. BRANCH=none BUG=b:37584134 TEST=on rose board `ectool rwsigstatus` works Change-Id: I33d8709f5248d3a4b8bedb36ded84a93dc8c971f Signed-off-by: Wei-Ning Huang <wnhuang@google.com> Reviewed-on: https://chromium-review.googlesource.com/485079 Commit-Ready: Wei-Ning Huang <wnhuang@chromium.org> Tested-by: Wei-Ning Huang <wnhuang@chromium.org> Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>
-rw-r--r--common/rwsig.c15
-rw-r--r--include/ec_commands.h7
-rw-r--r--util/ectool.c18
3 files changed, 40 insertions, 0 deletions
diff --git a/common/rwsig.c b/common/rwsig.c
index 600c3eeaad..efc8c03ee1 100644
--- a/common/rwsig.c
+++ b/common/rwsig.c
@@ -10,6 +10,7 @@
#include "console.h"
#include "ec_commands.h"
#include "flash.h"
+#include "host_command.h"
#include "rollback.h"
#include "rsa.h"
#include "rwsig.h"
@@ -271,4 +272,18 @@ exit:
while (1)
task_wait_event(-1);
}
+#else /* !HAS_TASK_RWSIG */
+int rwsig_cmd_check_status(struct host_cmd_handler_args *args)
+{
+ struct ec_response_rwsig_check_status *r = args->response;
+
+ memset(r, 0, sizeof(*r));
+ r->status = rwsig_check_signature();
+ args->response_size = sizeof(*r);
+
+ return EC_RES_SUCCESS;
+}
+DECLARE_HOST_COMMAND(EC_CMD_RWSIG_CHECK_STATUS,
+ rwsig_cmd_check_status,
+ EC_VER_MASK(0));
#endif
diff --git a/include/ec_commands.h b/include/ec_commands.h
index 4db42609c3..2295e26320 100644
--- a/include/ec_commands.h
+++ b/include/ec_commands.h
@@ -4042,6 +4042,13 @@ struct __ec_align2 ec_response_pd_chip_info {
};
};
+/* Run RW signature verification and get status */
+#define EC_CMD_RWSIG_CHECK_STATUS 0x011C
+
+struct __ec_align4 ec_response_rwsig_check_status {
+ uint32_t status;
+};
+
#endif /* !__ACPI__ */
/*****************************************************************************/
diff --git a/util/ectool.c b/util/ectool.c
index 00a2395bfc..8e3f21b8cc 100644
--- a/util/ectool.c
+++ b/util/ectool.c
@@ -208,6 +208,8 @@ const char help_str[] =
" Set real-time clock alarm to go off in <sec> seconds\n"
" rwhashpd <dev_id> <HASH[0] ... <HASH[4]>\n"
" Set entry in PD MCU's device rw_hash table.\n"
+ " rwsigstatus\n"
+ " Run RW signature verification and get status.\n"
" sertest\n"
" Serial output test for COM2\n"
" switches\n"
@@ -1019,6 +1021,21 @@ int cmd_rw_hash_pd(int argc, char *argv[])
return rv;
}
+int cmd_rwsig_status(int argc, char *argv[])
+{
+ int rv;
+ struct ec_response_rwsig_check_status resp;
+
+ rv = ec_command(EC_CMD_RWSIG_CHECK_STATUS, 0, NULL, 0,
+ &resp, sizeof(resp));
+ if (rv < 0)
+ return rv;
+
+ printf("RW signature check: %s\n", resp.status ? "OK" : "FAILED");
+
+ return 0;
+}
+
/**
* determine if in GFU mode or not.
*
@@ -7048,6 +7065,7 @@ const struct command commands[] = {
{"rtcset", cmd_rtc_set},
{"rtcsetalarm", cmd_rtc_set_alarm},
{"rwhashpd", cmd_rw_hash_pd},
+ {"rwsigstatus", cmd_rwsig_status},
{"sertest", cmd_serial_test},
{"port80flood", cmd_port_80_flood},
{"switches", cmd_switches},