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:
parent
a548fe5a03
commit
4cb8464e90
@ -127,7 +127,8 @@ enum flashrom_wp_result {
|
|||||||
FLASHROM_WP_ERR_OTHER = 2,
|
FLASHROM_WP_ERR_OTHER = 2,
|
||||||
FLASHROM_WP_ERR_READ_FAILED = 3,
|
FLASHROM_WP_ERR_READ_FAILED = 3,
|
||||||
FLASHROM_WP_ERR_WRITE_FAILED = 4,
|
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 {
|
enum flashrom_wp_mode {
|
||||||
|
@ -314,6 +314,40 @@ static enum flashrom_wp_result get_ranges_and_wp_bits(struct flashctx *flash, st
|
|||||||
return FLASHROM_WP_OK;
|
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)
|
static bool chip_supported(struct flashctx *flash)
|
||||||
{
|
{
|
||||||
return (flash->chip != NULL) && (flash->chip->decode_range != NULL);
|
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);
|
ret = read_wp_bits(&bits, flash);
|
||||||
|
|
||||||
/* Set protection range */
|
/* Set protection range */
|
||||||
/* TODO: implement set_wp_range() and use it */
|
|
||||||
/*
|
|
||||||
if (ret == FLASHROM_WP_OK)
|
if (ret == FLASHROM_WP_OK)
|
||||||
ret = set_wp_range(&bits, flash, cfg->range);
|
ret = set_wp_range(&bits, flash, cfg->range);
|
||||||
if (ret == FLASHROM_WP_OK)
|
if (ret == FLASHROM_WP_OK)
|
||||||
ret = write_wp_bits(flash, bits);
|
ret = write_wp_bits(flash, bits);
|
||||||
*/
|
|
||||||
|
|
||||||
/* Set protection mode */
|
/* Set protection mode */
|
||||||
/* TODO: implement set_wp_mode() and use it */
|
/* TODO: implement set_wp_mode() and use it */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user