mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 23:22:37 +02:00
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> Reviewed-on: https://review.coreboot.org/c/flashrom/+/71119 Reviewed-by: Anastasia Klimchuk <aklm@chromium.org> Reviewed-by: Thomas Heijligen <src@posteo.de> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Edward O'Callaghan <quasisec@chromium.org>
This commit is contained in:
parent
a30841dfe6
commit
bd90bbeccd
22
flashrom.c
22
flashrom.c
@ -34,6 +34,8 @@
|
|||||||
#include "hwaccess_physmap.h"
|
#include "hwaccess_physmap.h"
|
||||||
#include "chipdrivers.h"
|
#include "chipdrivers.h"
|
||||||
|
|
||||||
|
static bool use_legacy_erase_path = true;
|
||||||
|
|
||||||
const char flashrom_version[] = FLASHROM_VERSION;
|
const char flashrom_version[] = FLASHROM_VERSION;
|
||||||
|
|
||||||
static const struct programmer_entry *programmer = NULL;
|
static const struct programmer_entry *programmer = NULL;
|
||||||
@ -1528,13 +1530,20 @@ _free_ret:
|
|||||||
* @return 0 on success,
|
* @return 0 on success,
|
||||||
* 1 if all available erase functions failed.
|
* 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 };
|
struct walk_info info = { 0 };
|
||||||
bool all_skipped = true;
|
bool all_skipped = true;
|
||||||
return walk_by_layout(flashctx, &info, &erase_block, &all_skipped);
|
return walk_by_layout(flashctx, &info, &erase_block, &all_skipped);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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,
|
static int read_erase_write_block(struct flashctx *const flashctx,
|
||||||
const struct walk_info *const info, const erasefn_t erasefn,
|
const struct walk_info *const info, const erasefn_t erasefn,
|
||||||
bool *all_skipped)
|
bool *all_skipped)
|
||||||
@ -1643,7 +1652,7 @@ _free_ret:
|
|||||||
* @return 0 on success,
|
* @return 0 on success,
|
||||||
* 1 if anything has gone wrong.
|
* 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,
|
void *const curcontents, const void *const newcontents,
|
||||||
bool *all_skipped)
|
bool *all_skipped)
|
||||||
{
|
{
|
||||||
@ -1653,6 +1662,15 @@ static int write_by_layout(struct flashctx *const flashctx,
|
|||||||
return walk_by_layout(flashctx, &info, read_erase_write_block, all_skipped);
|
return walk_by_layout(flashctx, &info, read_erase_write_block, all_skipped);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int write_by_layout(struct flashctx *const flashctx,
|
||||||
|
uint8_t *const curcontents, const uint8_t *const newcontents,
|
||||||
|
bool *all_skipped)
|
||||||
|
{
|
||||||
|
if (use_legacy_erase_path)
|
||||||
|
return write_by_layout_legacy(flashctx, curcontents, newcontents, all_skipped);
|
||||||
|
return 1; /* unimplemented. */
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Compares the included layout regions with content from a buffer.
|
* @brief Compares the included layout regions with content from a buffer.
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user