Anastasia Klimchuk has submitted this change. ( https://review.coreboot.org/c/flashrom/+/60231 )
Change subject: writeprotect: add WPS bit and always set it to zero ......................................................................
writeprotect: add WPS bit and always set it to zero
WPS bit controls use of individual block protection which is mutually exclusive with protection based on ranges. Proper support requires extension of the API as well as implementation, so here we're just making sure that range-based protection is enabled and our WP configuration is not ignored by the chip.
Change-Id: I2c26ec65d64a3b6fb1f1a73690bc771415db2744 Signed-off-by: Sergii Dmytruk sergii.dmytruk@3mdeb.com Reviewed-on: https://review.coreboot.org/c/flashrom/+/60231 Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Nikolai Artemiev nartemiev@google.com Reviewed-by: Anastasia Klimchuk aklm@chromium.org --- M flash.h M writeprotect.c 2 files changed, 9 insertions(+), 0 deletions(-)
Approvals: build bot (Jenkins): Verified Nikolai Artemiev: Looks good to me, but someone else must approve Anastasia Klimchuk: Looks good to me, approved
diff --git a/flash.h b/flash.h index 509f226..9493fd2 100644 --- a/flash.h +++ b/flash.h @@ -307,6 +307,9 @@
/* Complement bit (CMP) */ struct reg_bit_info cmp; + + /* Write Protect Selection (per sector protection when set) */ + struct reg_bit_info wps; } reg_bits;
/* Function that takes a set of WP config bits (e.g. BP, SEC, TB, etc) */ diff --git a/writeprotect.c b/writeprotect.c index 5893593..ab6b176 100644 --- a/writeprotect.c +++ b/writeprotect.c @@ -73,6 +73,8 @@ if (ret != FLASHROM_WP_OK) return ret;
+ /* Note: WPS bit isn't read here, because it's not part of any range. */ + for (i = 0; i < ARRAY_SIZE(bits->bp); i++) { if (bit_map->bp[i].reg == INVALID_REG) break; @@ -115,6 +117,8 @@ set_reg_bit(reg_values, write_masks, reg_bits->cmp, bits.cmp); set_reg_bit(reg_values, write_masks, reg_bits->srp, bits.srp); set_reg_bit(reg_values, write_masks, reg_bits->srl, bits.srl); + /* Note: always setting WPS bit to zero until its fully supported. */ + set_reg_bit(reg_values, write_masks, reg_bits->wps, 0);
/* Write each register */ for (enum flash_reg reg = STATUS1; reg < MAX_REGISTERS; reg++) { @@ -253,6 +257,8 @@ *count = 1 << bit_count; *ranges = calloc(*count, sizeof(struct wp_range_and_bits));
+ /* TODO: take WPS bit into account. */ + for (size_t range_index = 0; range_index < *count; range_index++) { /* * Extract bits from the range index and assign them to members
9 is the latest approved patch-set. No files were changed between the latest approved patch-set and the submitted one.