From 6507b863e6c34b6bfc2810a702bc15f4d792d5f9 Mon Sep 17 00:00:00 2001 From: Josie Nordrum Date: Fri, 10 Mar 2023 23:53:24 +0000 Subject: Revert "util: Use libec for EC_VER_FLASH_PROTECT" This reverts commit b03820fc23e64a4141283ae198415a918d50ba5f. Reason for revert: http://b/272648081 Original change's description: > util: Use libec for EC_VER_FLASH_PROTECT > > 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} > > Change-Id: I1a2da399af50ed70d06d407da76de78f0cc25e1f > Signed-off-by: Firas Sammoura > Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4261963 > Reviewed-by: Tom Hughes Bug: b:116396469 Change-Id: I6637a85a5ed7c179d34075ea029a4b4060cdde6d Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4329102 Reviewed-by: Tom Hughes Commit-Queue: Josie Nordrum Tested-by: Josie Nordrum --- util/ectool.cc | 92 +++++++++++++++++++++++++++++++++++----------------------- 1 file 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 -#include /* 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; } -- cgit v1.2.1