summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFiras Sammoura <fsammoura@google.com>2023-03-15 23:39:51 +0000
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-03-19 02:29:45 +0000
commitb2c9052c7dccdfe7d5a3882816d7d651820375d7 (patch)
treef712f403877cf79352d8072e075e03f58f09a125
parentd3c26057ad2427b902469bcc19fce83ddbaf3ff7 (diff)
downloadchrome-ec-b2c9052c7dccdfe7d5a3882816d7d651820375d7.tar.gz
util: Use libec for EC_VER_FLASH_PROTECT
This is a reland of https://crrev.com/c/4261963 now that the formatting was fixed in https://crrev.com/c/4335705. BRANCH=none BUG=b:116396469 TEST=rm -rf build && make BOARD=host utils TEST=tast run localhost:2200 firmware.Fp{AddEntropy,BioWash, CheckWriteProtect,RDP0,ROOnlyBootsValidRW,RWNoUpdateRO, ReadFlash,RebootToRO,SoftwareWriteProtect} TEST=TEST=test_that --board hatch <IP> suite:fingerprint Change-Id: I8bede5aa8431686e505153fd96a0b9065f37a213 Signed-off-by: Firas Sammoura <fsammoura@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4344032 Reviewed-by: Tom Hughes <tomhughes@chromium.org>
-rw-r--r--util/ectool.cc93
1 files changed, 37 insertions, 56 deletions
diff --git a/util/ectool.cc b/util/ectool.cc
index b3e639f49c..164494a0d4 100644
--- a/util/ectool.cc
+++ b/util/ectool.cc
@@ -37,6 +37,7 @@
#include <libec/add_entropy_command.h>
#include <libec/ec_panicinfo.h>
#include <libec/fingerprint/fp_encryption_status_command.h>
+#include <libec/flash_protect_command.h>
#include <libec/rand_num_command.h>
#include <unistd.h>
#include <vector>
@@ -1745,83 +1746,63 @@ int cmd_flash_erase(int argc, char *argv[])
return 0;
}
-static void print_flash_protect_flags(const char *desc, uint32_t flags)
-{
- printf("%s 0x%08x", desc, flags);
- if (flags & EC_FLASH_PROTECT_GPIO_ASSERTED)
- printf(" wp_gpio_asserted");
- if (flags & EC_FLASH_PROTECT_RO_AT_BOOT)
- printf(" ro_at_boot");
- if (flags & EC_FLASH_PROTECT_RW_AT_BOOT)
- printf(" rw_at_boot");
- if (flags & EC_FLASH_PROTECT_ROLLBACK_AT_BOOT)
- printf(" rollback_at_boot");
- if (flags & EC_FLASH_PROTECT_ALL_AT_BOOT)
- printf(" all_at_boot");
- if (flags & EC_FLASH_PROTECT_RO_NOW)
- printf(" ro_now");
- if (flags & EC_FLASH_PROTECT_RW_NOW)
- printf(" rw_now");
- if (flags & EC_FLASH_PROTECT_ROLLBACK_NOW)
- printf(" rollback_now");
- if (flags & EC_FLASH_PROTECT_ALL_NOW)
- printf(" all_now");
- if (flags & EC_FLASH_PROTECT_ERROR_STUCK)
- printf(" STUCK");
- if (flags & EC_FLASH_PROTECT_ERROR_INCONSISTENT)
- printf(" INCONSISTENT");
- if (flags & EC_FLASH_PROTECT_ERROR_UNKNOWN)
- printf(" UNKNOWN_ERROR");
- printf("\n");
-}
-
int cmd_flash_protect(int argc, char *argv[])
{
- struct ec_params_flash_protect p;
- struct ec_response_flash_protect r;
- int rv, i;
-
/*
- * Set up requested flags. If no flags were specified, p.mask will
- * be 0 and nothing will change.
+ * Set up requested flags. If no flags were specified, mask will
+ * be flash_protect::Flags::kNone and nothing will change.
*/
- p.mask = p.flags = 0;
- for (i = 1; i < argc; i++) {
+ ec::flash_protect::Flags flags = ec::flash_protect::Flags::kNone;
+ ec::flash_protect::Flags mask = ec::flash_protect::Flags::kNone;
+
+ for (int i = 1; i < argc; i++) {
if (!strcasecmp(argv[i], "now")) {
- p.mask |= EC_FLASH_PROTECT_ALL_NOW;
- p.flags |= EC_FLASH_PROTECT_ALL_NOW;
+ mask |= ec::flash_protect::Flags::kAllNow;
+ flags |= ec::flash_protect::Flags::kAllNow;
} else if (!strcasecmp(argv[i], "enable")) {
- p.mask |= EC_FLASH_PROTECT_RO_AT_BOOT;
- p.flags |= EC_FLASH_PROTECT_RO_AT_BOOT;
+ mask |= ec::flash_protect::Flags::kRoAtBoot;
+ flags |= ec::flash_protect::Flags::kRoAtBoot;
} else if (!strcasecmp(argv[i], "disable"))
- p.mask |= EC_FLASH_PROTECT_RO_AT_BOOT;
+ mask |= ec::flash_protect::Flags::kRoAtBoot;
}
- rv = ec_command(EC_CMD_FLASH_PROTECT, EC_VER_FLASH_PROTECT, &p,
- sizeof(p), &r, sizeof(r));
- if (rv < 0)
+ ec::FlashProtectCommand flash_protect_command(flags, mask);
+ if (!flash_protect_command.Run(comm_get_fd())) {
+ int rv = -EECRESULT - flash_protect_command.Result();
+ fprintf(stderr, "Flash protect returned with errors: %d\n", rv);
return rv;
- if (rv < sizeof(r)) {
- fprintf(stderr, "Too little data returned.\n");
- return -1;
}
/* Print returned flags */
- print_flash_protect_flags("Flash protect flags:", r.flags);
- print_flash_protect_flags("Valid flags: ", r.valid_flags);
- print_flash_protect_flags("Writable flags: ", r.writable_flags);
+ printf("Flash protect flags: 0x%08x%s\n",
+ flash_protect_command.GetFlags(),
+ (ec::FlashProtectCommand::ParseFlags(
+ flash_protect_command.GetFlags()))
+ .c_str());
+ printf("Valid flags: 0x%08x%s\n",
+ flash_protect_command.GetValidFlags(),
+ (ec::FlashProtectCommand::ParseFlags(
+ flash_protect_command.GetValidFlags()))
+ .c_str());
+ printf("Writable flags: 0x%08x%s\n",
+ flash_protect_command.GetWritableFlags(),
+
+ (ec::FlashProtectCommand::ParseFlags(
+ flash_protect_command.GetWritableFlags()))
+ .c_str());
/* Check if we got all the flags we asked for */
- if ((r.flags & p.mask) != (p.flags & p.mask)) {
+ if ((flash_protect_command.GetFlags() & mask) != (flags & mask)) {
fprintf(stderr,
"Unable to set requested flags "
"(wanted mask 0x%08x flags 0x%08x)\n",
- p.mask, p.flags);
- if (p.mask & ~r.writable_flags)
+ mask, flags);
+ if ((mask & ~flash_protect_command.GetWritableFlags()) !=
+ ec::flash_protect::Flags::kNone)
fprintf(stderr,
"Which is expected, because writable "
"mask is 0x%08x.\n",
- r.writable_flags);
+ flash_protect_command.GetWritableFlags());
return -1;
}