summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHung-Te Lin <hungte@chromium.org>2022-01-20 17:48:19 +0800
committerCommit Bot <commit-bot@chromium.org>2022-01-25 12:44:27 +0000
commit78bb610cc96862d5fb55acf8ef4c6c3e99843649 (patch)
tree1680f1aa8b4103cd0e67a832a7fb88c6ad089d24
parent5ef3cdf48bed54baad7974f37abacb9664e0bbce (diff)
downloadvboot-78bb610cc96862d5fb55acf8ef4c6c3e99843649.tar.gz
futility: updater: split 'fast update' into 'diff image' and 'no verify'
Some special quirks (for example preserving ME) may want to use diff image but still do verification, so we want to change 'fast_update' config into two flags: 'do_verify' and 'use_diff_image'. BUG=b:213706510 TEST=build BRANCH=None Change-Id: Ia0160918ac58110850dd7f622610398ebfb92b47 Signed-off-by: Hung-Te Lin <hungte@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/3404061 Reviewed-by: YH Lin <yueherngl@chromium.org> Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Reviewed-by: Edward O'Callaghan <quasisec@chromium.org> Reviewed-by: Yu-Ping Wu <yupingso@chromium.org>
-rw-r--r--futility/flashrom_drv.c4
-rw-r--r--futility/updater.c11
-rw-r--r--futility/updater.h3
-rw-r--r--futility/updater_utils.c5
-rw-r--r--futility/updater_utils.h4
5 files changed, 17 insertions, 10 deletions
diff --git a/futility/flashrom_drv.c b/futility/flashrom_drv.c
index 69532f40..8630b8f3 100644
--- a/futility/flashrom_drv.c
+++ b/futility/flashrom_drv.c
@@ -118,7 +118,7 @@ err_cleanup:
int flashrom_write_image(const struct firmware_image *image,
const char *region,
const struct firmware_image *diff_image,
- int verbosity)
+ int do_verify, int verbosity)
{
int r = 0;
size_t len = 0;
@@ -180,7 +180,7 @@ int flashrom_write_image(const struct firmware_image *image,
flashrom_flag_set(flashctx, FLASHROM_FLAG_VERIFY_WHOLE_CHIP, true);
flashrom_flag_set(flashctx, FLASHROM_FLAG_VERIFY_AFTER_WRITE, true);
- if (diff_image) /* equiv --noverify --flash-contents=diff_image at cli */
+ if (!do_verify)
flashrom_flag_set(flashctx, FLASHROM_FLAG_VERIFY_AFTER_WRITE, false);
r |= flashrom_image_write(flashctx, image->data, image->size,
diff --git a/futility/updater.c b/futility/updater.c
index b550b33c..9a98adea 100644
--- a/futility/updater.c
+++ b/futility/updater.c
@@ -403,11 +403,14 @@ static int write_firmware(struct updater_config *cfg,
cfg->emulation, image, section_name);
}
- if (cfg->fast_update && image == &cfg->image && cfg->image_current.data)
+ if (cfg->use_diff_image && image == &cfg->image &&
+ cfg->image_current.data) {
diff_image = &cfg->image_current;
+ }
return write_system_firmware(image, diff_image, section_name,
- &cfg->tempfiles, cfg->verbosity + 1);
+ &cfg->tempfiles, cfg->do_verify,
+ cfg->verbosity + 1);
}
/*
@@ -1272,6 +1275,7 @@ struct updater_config *updater_new_config()
cfg->pd_image.programmer = PROG_PD;
cfg->check_platform = 1;
+ cfg->do_verify = 1;
init_system_properties(&cfg->system_properties[0],
ARRAY_SIZE(cfg->system_properties));
@@ -1471,7 +1475,8 @@ int updater_setup_config(struct updater_config *cfg,
/* Setup values that may change output or decision of other argument. */
cfg->verbosity = arg->verbosity;
- cfg->fast_update = arg->fast_update;
+ cfg->use_diff_image = arg->fast_update;
+ cfg->do_verify = !arg->fast_update;
cfg->factory_update = arg->is_factory;
if (arg->force_update)
cfg->force_update = 1;
diff --git a/futility/updater.h b/futility/updater.h
index 856ea781..721f09f1 100644
--- a/futility/updater.h
+++ b/futility/updater.h
@@ -69,7 +69,8 @@ struct updater_config {
int legacy_update;
int factory_update;
int check_platform;
- int fast_update;
+ int use_diff_image;
+ int do_verify;
int verbosity;
const char *emulation;
int override_gbb_flags;
diff --git a/futility/updater_utils.c b/futility/updater_utils.c
index 50a33267..2221a878 100644
--- a/futility/updater_utils.c
+++ b/futility/updater_utils.c
@@ -542,9 +542,10 @@ int write_system_firmware(const struct firmware_image *image,
const struct firmware_image *diff_image,
const char *section_name,
struct tempfile *tempfiles,
- int verbosity)
+ int do_verify, int verbosity)
{
- return flashrom_write_image(image, section_name, diff_image, (verbosity + 1));
+ return flashrom_write_image(image, section_name, diff_image,
+ do_verify, (verbosity + 1));
}
/* Helper function to return host software write protection status. */
diff --git a/futility/updater_utils.h b/futility/updater_utils.h
index 2ab6f071..ae5574f2 100644
--- a/futility/updater_utils.h
+++ b/futility/updater_utils.h
@@ -107,7 +107,7 @@ int write_system_firmware(const struct firmware_image *image,
const struct firmware_image *diff_image,
const char *section_name,
struct tempfile *tempfiles,
- int verbosity);
+ int do_verify, int verbosity);
struct firmware_section {
uint8_t *data;
@@ -236,6 +236,6 @@ int flashrom_read_image(struct firmware_image *image, const char *region,
int flashrom_write_image(const struct firmware_image *image,
const char *region,
const struct firmware_image *diff_image,
- int verbosity);
+ int do_verify, int verbosity);
#endif /* VBOOT_REFERENCE_FUTILITY_UPDATER_UTILS_H_ */