Nikolai Artemiev has uploaded this change for review.

View Change

writeprotect.c: refactor and fix wp_mode functions

Use a lookup table in get_wp_mode() and drop the srp_bit_present check,
since a chip without SRP is just FLASHROM_WP_MODE_DISABLED.

Add a srp_bit_present check to set_wp_mode() if the mode requires it.

BUG=b:182223106
BRANCH=none
TEST=builds

Change-Id: Ib6c347453f9216e5816e4ed35bf9783fd3c720e0
Signed-off-by: Nikolai Artemiev <nartemiev@google.com>
---
M writeprotect.c
1 file changed, 13 insertions(+), 9 deletions(-)

git pull ssh://review.coreboot.org:29418/flashrom refs/changes/43/62643/1
diff --git a/writeprotect.c b/writeprotect.c
index 6b3bbcf..5893593 100644
--- a/writeprotect.c
+++ b/writeprotect.c
@@ -351,16 +351,17 @@
/** Get the mode selected by a WP configuration. */
static int get_wp_mode(enum flashrom_wp_mode *mode, const struct wp_bits *bits)
{
- if (!bits->srp_bit_present)
- return FLASHROM_WP_ERR_CHIP_UNSUPPORTED;
+ const enum flashrom_wp_mode wp_modes[2][2] = {
+ {
+ FLASHROM_WP_MODE_DISABLED, /* srl=0, srp=0 */
+ FLASHROM_WP_MODE_HARDWARE, /* srl=0, srp=1 */
+ }, {
+ FLASHROM_WP_MODE_POWER_CYCLE, /* srl=1, srp=0 */
+ FLASHROM_WP_MODE_PERMANENT, /* srl=1, srp=1 */
+ },
+ };

- if (bits->srl_bit_present && bits->srl == 1) {
- *mode = bits->srp ? FLASHROM_WP_MODE_PERMANENT :
- FLASHROM_WP_MODE_POWER_CYCLE;
- } else {
- *mode = bits->srp ? FLASHROM_WP_MODE_HARDWARE :
- FLASHROM_WP_MODE_DISABLED;
- }
+ *mode = wp_modes[bits->srl][bits->srp];

return FLASHROM_WP_OK;
}
@@ -375,6 +376,9 @@
return FLASHROM_WP_OK;

case FLASHROM_WP_MODE_HARDWARE:
+ if (!bits->srp_bit_present)
+ return FLASHROM_WP_ERR_CHIP_UNSUPPORTED;
+
bits->srl = 0;
bits->srp = 1;
return FLASHROM_WP_OK;

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

Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: Ib6c347453f9216e5816e4ed35bf9783fd3c720e0
Gerrit-Change-Number: 62643
Gerrit-PatchSet: 1
Gerrit-Owner: Nikolai Artemiev <nartemiev@google.com>
Gerrit-MessageType: newchange