diff options
author | Firas Sammoura <fsammoura@google.com> | 2023-03-15 23:39:51 +0000 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-03-19 02:29:45 +0000 |
commit | b2c9052c7dccdfe7d5a3882816d7d651820375d7 (patch) | |
tree | f712f403877cf79352d8072e075e03f58f09a125 | |
parent | d3c26057ad2427b902469bcc19fce83ddbaf3ff7 (diff) | |
download | chrome-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.cc | 93 |
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; } |