summaryrefslogtreecommitdiff
path: root/futility/updater_utils.c
diff options
context:
space:
mode:
authorHung-Te Lin <hungte@chromium.org>2022-02-11 14:24:51 +0800
committerCommit Bot <commit-bot@chromium.org>2022-02-14 09:06:39 +0000
commit707b839fadfd600af4300bc451946f8e8ccf840e (patch)
tree73cf3834f6e31e9425c708667207ea2eed93162d /futility/updater_utils.c
parenta8f973b82171f933e5877c6cc65b0c2bc510510a (diff)
downloadvboot-707b839fadfd600af4300bc451946f8e8ccf840e.tar.gz
futility: updater: add new quirk 'extra_retries'
In early bring up, some devices may have problem when flashrom is reading or writing to the system flash. To unblock dogfood process, we want to have a special quirk to retry flashing. BUG=b:213706510 TEST=make; build and run test BRANCH=None Change-Id: I58788f620fb32f7c886d1e5638f4a3605ea77953 Signed-off-by: Hung-Te Lin <hungte@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/3452846 Reviewed-by: YH Lin <yueherngl@chromium.org> Commit-Queue: YH Lin <yueherngl@chromium.org> Reviewed-by: Yu-Ping Wu <yupingso@chromium.org>
Diffstat (limited to 'futility/updater_utils.c')
-rw-r--r--futility/updater_utils.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/futility/updater_utils.c b/futility/updater_utils.c
index 2221a878..a846ef2b 100644
--- a/futility/updater_utils.c
+++ b/futility/updater_utils.c
@@ -523,11 +523,16 @@ char *host_detect_servo(int *need_prepare_ptr)
* Returns 0 if success, non-zero if error.
*/
int load_system_firmware(struct firmware_image *image,
- struct tempfile *tempfiles, int verbosity)
+ struct tempfile *tempfiles,
+ int retries, int verbosity)
{
- int r;
+ int r, i;
- r = flashrom_read_image(image, NULL, (verbosity + 1));
+ for (i = 1, r = -1; i <= retries && r != 0; i++) {
+ if (i > 1)
+ WARN("Retry reading firmware (%d/%d)...\n", i, retries);
+ r = flashrom_read_image(image, NULL, verbosity + 1);
+ }
if (!r)
r = parse_firmware_image(image);
return r;
@@ -542,10 +547,17 @@ int write_system_firmware(const struct firmware_image *image,
const struct firmware_image *diff_image,
const char *section_name,
struct tempfile *tempfiles,
- int do_verify, int verbosity)
+ int do_verify, int retries, int verbosity)
{
- return flashrom_write_image(image, section_name, diff_image,
- do_verify, (verbosity + 1));
+ int r, i;
+
+ for (i = 1, r = -1; i <= retries && r != 0; i++) {
+ if (i > 1)
+ WARN("Retry writing firmware (%d/%d)...\n", i, retries);
+ r = flashrom_write_image(image, section_name, diff_image,
+ do_verify, verbosity + 1);
+ }
+ return r;
}
/* Helper function to return host software write protection status. */