summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorMasahiro Yamada <yamada.masahiro@socionext.com>2017-01-27 11:57:54 +0900
committerMasahiro Yamada <yamada.masahiro@socionext.com>2017-01-27 15:01:23 +0900
commitea39d557aefe6d8bbd9b08901f2b6f2122e417fe (patch)
treeb56690061f65c5dfc7fbcbd923a3207bfbc337b3 /tools
parent67973fb4f73411e08f0de39fed0ca21f97de73eb (diff)
fiptool: revive replace_image() to keep the image order by update command
Commit e0f083a09b29 ("fiptool: Prepare ground for expanding the set of images at runtime") introduced another side effect; the "update" command now changes the image order in the FIP. Let's say you have an FIP with BL2, BL31, BL32, BL33. If you update for example, BL32 with the "update" command, you will get a new FIP with BL2, BL31, BL33, BL32, in this order. It happens like this; remove_image() removes the old image from the linked list, add_image() adds the new image at the tail of the list, then images are packed in the new order. Prior to that commit, images were updated by replace_image(), but it was deleted by the re-work. Revive replace_image() that is re-implemented to work with the linked list. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/fiptool/fiptool.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/tools/fiptool/fiptool.c b/tools/fiptool/fiptool.c
index 46b87267..b79c0d69 100644
--- a/tools/fiptool/fiptool.c
+++ b/tools/fiptool/fiptool.c
@@ -254,6 +254,22 @@ static void add_image(image_t *image)
nr_images++;
}
+static void replace_image(image_t *image)
+{
+ image_t **p = &image_head;
+
+ while (*p) {
+ if (!memcmp(&(*p)->uuid, &image->uuid, sizeof(image->uuid)))
+ break;
+ p = &(*p)->next;
+ }
+
+ assert(*p != NULL);
+
+ image->next = (*p)->next;
+ *p = image;
+}
+
static void free_image(image_t *image)
{
free(image->buffer);
@@ -673,8 +689,7 @@ static void update_fip(void)
desc->cmdline_name,
desc->action_arg);
}
- remove_image(old_image);
- add_image(new_image);
+ replace_image(new_image);
} else {
if (verbose)
log_dbgx("Adding image %s",