aboutsummaryrefslogtreecommitdiff
path: root/util/cbfstool/cbfstool.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/cbfstool/cbfstool.c')
-rw-r--r--util/cbfstool/cbfstool.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/util/cbfstool/cbfstool.c b/util/cbfstool/cbfstool.c
index bd84b01e5b..06d0cef1d4 100644
--- a/util/cbfstool/cbfstool.c
+++ b/util/cbfstool/cbfstool.c
@@ -33,6 +33,8 @@
#include "fit.h"
#include "partitioned_file.h"
+#define SECTION_WITH_FIT_TABLE "BOOTBLOCK"
+
struct command {
const char *name;
const char *optstring;
@@ -677,12 +679,29 @@ static int cbfs_update_fit(void)
return 1;
}
+ // Decide which region to read/write the FIT table from/to.
+ struct buffer bootblock;
+ if (partitioned_file_is_partitioned(param.image_file)) {
+ if (!partitioned_file_read_region(&bootblock, param.image_file,
+ SECTION_WITH_FIT_TABLE))
+ return 1;
+ } else {
+ // In legacy images, the bootblock is part of the CBFS.
+ buffer_clone(&bootblock, param.image_region);
+ }
+
struct cbfs_image image;
if (cbfs_image_from_buffer(&image, param.image_region,
param.headeroffset))
return 1;
- return fit_update_table(&image, param.fit_empty_entries, param.name);
+ if (fit_update_table(&bootblock, &image, param.name,
+ param.fit_empty_entries, convert_to_from_top_aligned))
+ return 1;
+
+ // The region to be written depends on the type of image, so we write it
+ // here rather than having main() write the CBFS region back as usual.
+ return !partitioned_file_write_region(param.image_file, &bootblock);
}
static int cbfs_copy(void)
@@ -731,7 +750,7 @@ static const struct command commands[] = {
{"print", "H:r:vh?", cbfs_print, true, false},
{"read", "r:f:vh?", cbfs_read, true, false},
{"remove", "H:r:n:vh?", cbfs_remove, true, true},
- {"update-fit", "H:r:n:x:vh?", cbfs_update_fit, true, true},
+ {"update-fit", "H:r:n:x:vh?", cbfs_update_fit, true, false},
{"write", "r:f:udvh?", cbfs_write, true, true},
};