Edward O'Callaghan has uploaded this change for review.

View Change

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.
*

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

Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: Ib5660db0067c1c799dcb5c8e83b4a4826b236442
Gerrit-Change-Number: 71119
Gerrit-PatchSet: 1
Gerrit-Owner: Edward O'Callaghan <quasisec@chromium.org>
Gerrit-MessageType: newchange