Anastasia Klimchuk submitted this change.

View Change

Approvals: build bot (Jenkins): Verified Nico Huber: Looks good to me, approved
writeprotect: add set_wp_range()

BUG=b:195381327,b:153800563
BRANCH=none
TEST=flashrom --wp-{status,range}

Change-Id: I7d26f43fb05c5828b9839bb57a28fa1088dcd9a0
Signed-off-by: Nikolai Artemiev <nartemiev@google.com>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/58482
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Nico Huber <nico.h@gmx.de>
---
M libflashrom.h
M writeprotect.c
2 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/libflashrom.h b/libflashrom.h
index c9138da..83a6250 100644
--- a/libflashrom.h
+++ b/libflashrom.h
@@ -127,7 +127,8 @@
FLASHROM_WP_ERR_OTHER = 2,
FLASHROM_WP_ERR_READ_FAILED = 3,
FLASHROM_WP_ERR_WRITE_FAILED = 4,
- FLASHROM_WP_ERR_VERIFY_FAILED = 5
+ FLASHROM_WP_ERR_VERIFY_FAILED = 5,
+ FLASHROM_WP_ERR_RANGE_UNSUPPORTED = 6
};

enum flashrom_wp_mode {
diff --git a/writeprotect.c b/writeprotect.c
index b619a24..82ecd8e 100644
--- a/writeprotect.c
+++ b/writeprotect.c
@@ -314,6 +314,40 @@
return FLASHROM_WP_OK;
}

+static bool ranges_equal(struct wp_range a, struct wp_range b)
+{
+ return (a.start == b.start) && (a.len == b.len);
+}
+
+/*
+ * Modify the range-related bits in a wp_bits structure so they select a given
+ * protection range. Bits that control the protection mode are not changed.
+ */
+static int set_wp_range(struct wp_bits *bits, struct flashctx *flash, const struct wp_range range)
+{
+ struct wp_range_and_bits *ranges = NULL;
+ size_t count;
+
+ enum flashrom_wp_result ret = get_ranges_and_wp_bits(flash, *bits, &ranges, &count);
+ if (ret != FLASHROM_WP_OK)
+ return ret;
+
+ /* Search for matching range */
+ ret = FLASHROM_WP_ERR_RANGE_UNSUPPORTED;
+ for (size_t i = 0; i < count; i++) {
+
+ if (ranges_equal(ranges[i].range, range)) {
+ *bits = ranges[i].bits;
+ ret = 0;
+ break;
+ }
+ }
+
+ free(ranges);
+
+ return ret;
+}
+
static bool chip_supported(struct flashctx *flash)
{
return (flash->chip != NULL) && (flash->chip->decode_range != NULL);
@@ -354,13 +388,10 @@
ret = read_wp_bits(&bits, flash);

/* Set protection range */
- /* TODO: implement set_wp_range() and use it */
- /*
if (ret == FLASHROM_WP_OK)
ret = set_wp_range(&bits, flash, cfg->range);
if (ret == FLASHROM_WP_OK)
ret = write_wp_bits(flash, bits);
- */

/* Set protection mode */
/* TODO: implement set_wp_mode() and use it */

60 is the latest approved patch-set. No files were changed between the latest approved patch-set and the submitted one.

To view, visit change 58482. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I7d26f43fb05c5828b9839bb57a28fa1088dcd9a0
Gerrit-Change-Number: 58482
Gerrit-PatchSet: 66
Gerrit-Owner: Nikolai Artemiev <nartemiev@google.com>
Gerrit-Reviewer: Anastasia Klimchuk <aklm@chromium.org>
Gerrit-Reviewer: Angel Pons <th3fanbus@gmail.com>
Gerrit-Reviewer: Edward O'Callaghan <quasisec@chromium.org>
Gerrit-Reviewer: Nico Huber <nico.h@gmx.de>
Gerrit-Reviewer: Paul Menzel <paulepanter@mailbox.org>
Gerrit-Reviewer: Sergii Dmytruk <sergii.dmytruk@3mdeb.com>
Gerrit-Reviewer: build bot (Jenkins) <no-reply@coreboot.org>
Gerrit-MessageType: merged