Edward O'Callaghan has uploaded this change for review. ( https://review.coreboot.org/c/flashrom/+/71119 )
Change subject: flashrom.c: Add switch for legacy impl of erasure path ......................................................................
flashrom.c: Add switch for legacy impl of erasure path
As part of a GSoC project to optimise the erasure path in flashrom a completely different algorithm is used to perform erasure. Therefore we need a mechanism to have the two implementations side by side to allow for A/B testing and easy reverts should issue arise.
Change-Id: Ib5660db0067c1c799dcb5c8e83b4a4826b236442 Signed-off-by: Edward O'Callaghan quasisec@google.com --- M flashrom.c 1 file changed, 34 insertions(+), 2 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/19/71119/1
diff --git a/flashrom.c b/flashrom.c index 785da6f..4e0f83a 100644 --- a/flashrom.c +++ b/flashrom.c @@ -34,6 +34,8 @@ #include "hwaccess_physmap.h" #include "chipdrivers.h"
+static bool use_legacy_erase_path = true; + const char flashrom_version[] = FLASHROM_VERSION;
static const struct programmer_entry *programmer = NULL; @@ -1436,12 +1438,19 @@ * @return 0 on success, * 1 if all available erase functions failed. */ -static int erase_by_layout(struct flashctx *const flashctx) +static int erase_by_layout_legacy(struct flashctx *const flashctx) { struct walk_info info = { 0 }; return walk_by_layout(flashctx, &info, &erase_block); }
+static int erase_by_layout(struct flashctx *const flashctx) +{ + if (use_legacy_erase_path) + return erase_by_layout_legacy(flashctx); + return 1; /* unimplemented. */ +} + static int read_erase_write_block(struct flashctx *const flashctx, const struct walk_info *const info, const erasefn_t erasefn) { @@ -1549,7 +1558,7 @@ * @return 0 on success, * 1 if anything has gone wrong. */ -static int write_by_layout(struct flashctx *const flashctx, +static int write_by_layout_legacy(struct flashctx *const flashctx, void *const curcontents, const void *const newcontents) { struct walk_info info; @@ -1558,6 +1567,14 @@ return walk_by_layout(flashctx, &info, read_erase_write_block); }
+static int write_by_layout(struct flashctx *const flashctx, + uint8_t *const curcontents, const uint8_t *const newcontents) +{ + if (use_legacy_erase_path) + return write_by_layout_legacy(flashctx, curcontents, newcontents); + return 1; /* unimplemented. */ +} + /** * @brief Compares the included layout regions with content from a buffer. *