1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-04-27 23:22:37 +02:00

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>
This commit is contained in:
Nikolai Artemiev 2021-10-21 02:28:23 +11:00 committed by Anastasia Klimchuk
parent a548fe5a03
commit 4cb8464e90
2 changed files with 36 additions and 4 deletions

View File

@ -127,7 +127,8 @@ enum flashrom_wp_result {
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 {

View File

@ -314,6 +314,40 @@ static enum flashrom_wp_result get_ranges_and_wp_bits(struct flashctx *flash, st
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 @@ enum flashrom_wp_result wp_write_cfg(struct flashctx *flash, const struct flashr
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 */