summaryrefslogtreecommitdiff
path: root/util/ectool.cc
diff options
context:
space:
mode:
Diffstat (limited to 'util/ectool.cc')
-rw-r--r--util/ectool.cc92
1 files changed, 56 insertions, 36 deletions
diff --git a/util/ectool.cc b/util/ectool.cc
index f0567e8db5..44871cf9b4 100644
--- a/util/ectool.cc
+++ b/util/ectool.cc
@@ -37,7 +37,6 @@
#include "usb_pd.h"
#include <libec/add_entropy_command.h>
-#include <libec/flash_protect_command.h>
/* Maximum flash size (16 MB, conservative) */
#define MAX_FLASH_SIZE 0x1000000
@@ -1747,62 +1746,83 @@ 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, mask will
- * be flash_protect::Flags::kNone and nothing will change.
+ * Set up requested flags. If no flags were specified, p.mask will
+ * be 0 and nothing will change.
*/
- 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++) {
+ p.mask = p.flags = 0;
+ for (i = 1; i < argc; i++) {
if (!strcasecmp(argv[i], "now")) {
- mask |= ec::flash_protect::Flags::kAllNow;
- flags |= ec::flash_protect::Flags::kAllNow;
+ p.mask |= EC_FLASH_PROTECT_ALL_NOW;
+ p.flags |= EC_FLASH_PROTECT_ALL_NOW;
} else if (!strcasecmp(argv[i], "enable")) {
- mask |= ec::flash_protect::Flags::kRoAtBoot;
- flags |= ec::flash_protect::Flags::kRoAtBoot;
+ p.mask |= EC_FLASH_PROTECT_RO_AT_BOOT;
+ p.flags |= EC_FLASH_PROTECT_RO_AT_BOOT;
} else if (!strcasecmp(argv[i], "disable"))
- mask |= ec::flash_protect::Flags::kRoAtBoot;
+ p.mask |= EC_FLASH_PROTECT_RO_AT_BOOT;
}
- 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);
+ rv = ec_command(EC_CMD_FLASH_PROTECT, EC_VER_FLASH_PROTECT, &p,
+ sizeof(p), &r, sizeof(r));
+ if (rv < 0)
return rv;
+ if (rv < sizeof(r)) {
+ fprintf(stderr, "Too little data returned.\n");
+ return -1;
}
/* Print returned 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());
+ 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);
/* Check if we got all the flags we asked for */
- if ((flash_protect_command.GetFlags() & mask) != (flags & mask)) {
+ if ((r.flags & p.mask) != (p.flags & p.mask)) {
fprintf(stderr,
"Unable to set requested flags "
"(wanted mask 0x%08x flags 0x%08x)\n",
- mask, flags);
- if ((mask & ~flash_protect_command.GetWritableFlags()) !=
- ec::flash_protect::Flags::kNone)
+ p.mask, p.flags);
+ if (p.mask & ~r.writable_flags)
fprintf(stderr,
"Which is expected, because writable "
"mask is 0x%08x.\n",
- flash_protect_command.GetWritableFlags());
+ r.writable_flags);
return -1;
}