summaryrefslogtreecommitdiffstats
path: root/flash.h
diff options
context:
space:
mode:
authorNikolai Artemiev <nartemiev@google.com>2021-10-21 01:35:13 +1100
committerAnastasia Klimchuk <aklm@chromium.org>2022-03-01 04:12:19 +0000
commit9fc100f54953dc74603678fc42e74d9b99e61ff0 (patch)
treeabfee6a62c3ad028187e36f97796d099c944a104 /flash.h
parentcff87a8488597b08c8b0ffb7037ed44f840a156b (diff)
downloadflashrom-9fc100f54953dc74603678fc42e74d9b99e61ff0.tar.gz
flashrom-9fc100f54953dc74603678fc42e74d9b99e61ff0.tar.bz2
flashrom-9fc100f54953dc74603678fc42e74d9b99e61ff0.zip
flashchips,writeprotect_ranges: add range decoding function
Allow chips to specify functions that map status register bits to protection ranges. These are used to enumerate available ranges and determine the protection state of chips. The patch also adds a range decoding function for the example chips. Many other chips can also be handled by it, though some will require different functions (e.g. MX25L6406 and related chips). Another approach that has been tried in cros flashrom is maintaining tables of range data, but it quickly becomes error prone and hard to validate. Using a function to interpret the ranges allows compact encoding with most chips and is flexible enough to allow chips with less predictable ranges to be handled as well. BUG=b:195381327,b:153800563 BRANCH=none TEST=dumped range tables, checked against datasheets Change-Id: Id163ed80938a946a502ed116e48e8236e36eb203 Signed-off-by: Nikolai Artemiev <nartemiev@google.com> Reviewed-on: https://review.coreboot.org/c/flashrom/+/58480 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Edward O'Callaghan <quasisec@chromium.org> Reviewed-by: Nico Huber <nico.h@gmx.de> Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
Diffstat (limited to 'flash.h')
-rw-r--r--flash.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/flash.h b/flash.h
index b935e9bc4..f63aa5d36 100644
--- a/flash.h
+++ b/flash.h
@@ -195,6 +195,8 @@ struct reg_bit_info {
} writability;
};
+struct wp_bits;
+
struct flashchip {
const char *vendor;
const char *name;
@@ -305,6 +307,10 @@ struct flashchip {
/* Complement bit (CMP) */
struct reg_bit_info cmp;
} reg_bits;
+
+ /* Function that takes a set of WP config bits (e.g. BP, SEC, TB, etc) */
+ /* and determines what protection range they select. */
+ void (*decode_range)(size_t *start, size_t *len, const struct wp_bits *, size_t chip_len);
};
typedef int (*chip_restore_fn_cb_t)(struct flashctx *flash, uint8_t status);