summaryrefslogtreecommitdiff
path: root/util/cbfstool/cbfs_image.c
diff options
context:
space:
mode:
authorSol Boucher <solb@chromium.org>2015-05-07 02:39:22 -0700
committerStefan Reinauer <stefan.reinauer@coreboot.org>2015-05-13 22:23:37 +0200
commit67d5998d9778ef6f740aac4ed1c93fb311b32ebe (patch)
treed28f767a9f8f4230125a34914b9005bd3601fdea /util/cbfstool/cbfs_image.c
parent67a0a864be0e8b81f22ebb9d6f090d77d1da2924 (diff)
downloadcoreboot-67d5998d9778ef6f740aac4ed1c93fb311b32ebe.tar.xz
cbfstool: Support top-aligned addresses for new-format images
The cbfstool handling of new-style FMAP-driven "partitioned" images originally disallowed the use of x86-style top-aligned addresses with the add.* and layout actions because it wasn't obvious how they should work, especially since the normal addressing is done relative to each individual region for these types of images. Not surprisingly, however, the x86 portions of the build system make copious use of top-aligned addresses, so this allows their use with new images and specifies their behavior as being relative to the *image* end---not the region end---just as it is for legacy images. Change-Id: Icecc843f4f8b6bb52aa0ea16df771faa278228d2 Signed-off-by: Sol Boucher <solb@chromium.org> Reviewed-on: http://review.coreboot.org/10136 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'util/cbfstool/cbfs_image.c')
-rw-r--r--util/cbfstool/cbfs_image.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/util/cbfstool/cbfs_image.c b/util/cbfstool/cbfs_image.c
index 4ecb461f5e..8fb2a60f36 100644
--- a/util/cbfstool/cbfs_image.c
+++ b/util/cbfstool/cbfs_image.c
@@ -526,6 +526,12 @@ static int cbfs_add_entry_at(struct cbfs_image *image,
int cbfs_add_entry(struct cbfs_image *image, struct buffer *buffer,
const char *name, uint32_t type, uint32_t content_offset)
{
+ assert(image);
+ assert(buffer);
+ assert(buffer->data);
+ assert(name);
+ assert(!IS_TOP_ALIGNED_ADDRESS(content_offset));
+
uint32_t entry_type;
uint32_t addr, addr_next;
struct cbfs_file *entry, *next;
@@ -537,19 +543,6 @@ int cbfs_add_entry(struct cbfs_image *image, struct buffer *buffer,
DEBUG("cbfs_add_entry('%s'@0x%x) => need_size = %u+%zu=%u\n",
name, content_offset, header_size, buffer->size, need_size);
- if (IS_TOP_ALIGNED_ADDRESS(content_offset)) {
- if (!cbfs_is_legacy_cbfs(image)) {
- ERROR("Top-aligned offsets are only supported for legacy CBFSes (with master headers)\n");
- return -1;
- }
-
- // legacy cbfstool takes top-aligned address.
- uint32_t theromsize = image->header.romsize;
- INFO("Converting top-aligned address 0x%x to offset: 0x%x\n",
- content_offset, content_offset + theromsize);
- content_offset = theromsize + (int32_t)content_offset;
- }
-
// Merge empty entries.
DEBUG("(trying to merge empty entries...)\n");
cbfs_walk(image, cbfs_merge_empty_entry, NULL);