Patrick Georgi (pgeorgi@google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/10919
-gerrit
commit 59dc05c18cf4474f19fb7dc053adc86d83ea7401 Author: Patrick Georgi pgeorgi@chromium.org Date: Tue Jul 14 22:28:27 2015 +0200
cbfs: hardcode file alignment
Assume that it's 64 byte.
Change-Id: I168facd92f64c2cf99c26c350c60317807a4aed4 Signed-off-by: Patrick Georgi pgeorgi@chromium.org --- src/arch/x86/mmap_boot.c | 4 +--- src/arch/x86/walkcbfs.S | 17 +++++------------ src/include/cbfs.h | 3 --- src/include/cbfs_serialized.h | 2 +- src/lib/cbfs.c | 9 +++------ src/lib/cbfs_boot_props.c | 2 -- src/vendorcode/google/chromeos/vboot2/vboot_loader.c | 1 - 7 files changed, 10 insertions(+), 28 deletions(-)
diff --git a/src/arch/x86/mmap_boot.c b/src/arch/x86/mmap_boot.c index 4dd269b..6c98954 100644 --- a/src/arch/x86/mmap_boot.c +++ b/src/arch/x86/mmap_boot.c @@ -53,13 +53,11 @@ int cbfs_boot_region_properties(struct cbfs_props *props) header.magic = ntohl(header.magic); header.romsize = ntohl(header.romsize); header.bootblocksize = ntohl(header.bootblocksize); - header.align = ntohl(header.align); header.offset = ntohl(header.offset);
if (header.magic != CBFS_HEADER_MAGIC) return -1;
- props->align = header.align; props->offset = header.offset; if (CONFIG_ROM_SIZE != header.romsize) props->size = CONFIG_ROM_SIZE; @@ -67,7 +65,7 @@ int cbfs_boot_region_properties(struct cbfs_props *props) props->size = header.romsize; props->size -= props->offset; props->size -= header.bootblocksize; - props->size = ALIGN_DOWN(props->size, props->align); + props->size = ALIGN_DOWN(props->size, 64);
printk(BIOS_DEBUG, "CBFS @ %zx size %zx\n", props->offset, props->size);
diff --git a/src/arch/x86/walkcbfs.S b/src/arch/x86/walkcbfs.S index 60eb8b5..00ac24a 100644 --- a/src/arch/x86/walkcbfs.S +++ b/src/arch/x86/walkcbfs.S @@ -74,13 +74,9 @@ tryharder: mov CBFS_FILE_LEN(%ebx), %edi bswap %edi add %edi, %ecx - mov CBFS_HEADER_PTR, %edi - mov CBFS_HEADER_ALIGN(%edi), %edi - bswap %edi - sub $1, %edi - add %edi, %ecx - not %edi - and %edi, %ecx + /* round by 64 bytes */ + add $(64 - 1), %ecx + and $~(64 - 1), %ecx
/* if oldaddr >= addr, leave */ cmp %ebx, %ecx @@ -106,11 +102,8 @@ out:
searchfile: - /* if filemagic isn't found, move forward cbfs_header->align bytes */ - mov CBFS_HEADER_PTR, %edi - mov CBFS_HEADER_ALIGN(%edi), %edi - bswap %edi - add %edi, %ebx + /* if filemagic isn't found, move forward 64 bytes */ + add $64, %ebx jmp check_for_exit
filemagic: diff --git a/src/include/cbfs.h b/src/include/cbfs.h index 00c43f2..f031141 100644 --- a/src/include/cbfs.h +++ b/src/include/cbfs.h @@ -66,13 +66,10 @@ int cbfs_locate(struct region_device *fh, const struct cbfsd *cbfs,
struct cbfsd { const struct region_device *rdev; - size_t align; };
/* The cbfs_props struct describes the properties associated with a CBFS. */ struct cbfs_props { - /* Each file is aligned. */ - size_t align; /* CBFS starts at the following offset within the boot region. */ size_t offset; /* CBFS size. */ diff --git a/src/include/cbfs_serialized.h b/src/include/cbfs_serialized.h index df38857..c8bf79d 100644 --- a/src/include/cbfs_serialized.h +++ b/src/include/cbfs_serialized.h @@ -95,7 +95,7 @@ struct cbfs_header { uint32_t version; uint32_t romsize; uint32_t bootblocksize; - uint32_t align; + uint32_t align; /* fixed to 64 bytes */ uint32_t offset; uint32_t architecture; uint32_t pad[1]; diff --git a/src/lib/cbfs.c b/src/lib/cbfs.c index 3e83765..cee18ee 100644 --- a/src/lib/cbfs.c +++ b/src/lib/cbfs.c @@ -57,7 +57,6 @@ int cbfs_boot_locate(struct region_device *fh, const char *name, uint32_t *type) return -1;
cbfs.rdev = &rdev; - cbfs.align = props.align;
return cbfs_locate(fh, &cbfs, name, type); } @@ -83,11 +82,9 @@ int cbfs_locate(struct region_device *fh, const struct cbfsd *cbfs, { size_t offset; const struct region_device *rd; - size_t align;
offset = 0; rd = cbfs->rdev; - align = cbfs->align;
LOG("Locating '%s'\n", name);
@@ -107,7 +104,7 @@ int cbfs_locate(struct region_device *fh, const struct cbfsd *cbfs,
if (memcmp(file.magic, CBFS_FILE_MAGIC, sizeof(file.magic))) { offset++; - offset = ALIGN_UP(offset, align); + offset = ALIGN_UP(offset, 64); continue; }
@@ -127,14 +124,14 @@ int cbfs_locate(struct region_device *fh, const struct cbfsd *cbfs, if (!name_match) { DEBUG(" Unmatched '%s' at %zx\n", fname, offset); offset += file.offset + file.len; - offset = ALIGN_UP(offset, align); + offset = ALIGN_UP(offset, 64); continue; }
if (type != NULL && *type != file.type) { DEBUG(" Unmatched type %x at %zx\n", file.type, offset); offset += file.offset + file.len; - offset = ALIGN_UP(offset, align); + offset = ALIGN_UP(offset, 64); continue; }
diff --git a/src/lib/cbfs_boot_props.c b/src/lib/cbfs_boot_props.c index 21e64d3..7a9f7a9 100644 --- a/src/lib/cbfs_boot_props.c +++ b/src/lib/cbfs_boot_props.c @@ -49,13 +49,11 @@ int __attribute__((weak)) cbfs_boot_region_properties(struct cbfs_props *props)
header.magic = ntohl(header.magic); header.romsize = ntohl(header.romsize); - header.align = ntohl(header.align); header.offset = ntohl(header.offset);
if (header.magic != CBFS_HEADER_MAGIC) return -1;
- props->align = header.align; props->offset = header.offset; props->size = header.romsize; props->size -= props->offset; diff --git a/src/vendorcode/google/chromeos/vboot2/vboot_loader.c b/src/vendorcode/google/chromeos/vboot2/vboot_loader.c index 3c0d67e..90ada1e 100644 --- a/src/vendorcode/google/chromeos/vboot2/vboot_loader.c +++ b/src/vendorcode/google/chromeos/vboot2/vboot_loader.c @@ -173,7 +173,6 @@ static int vboot_locate_by_multi_cbfs(const struct region_device *fw_main, return -1;
cbfs.rdev = &rdev; - cbfs.align = props.align;
return cbfs_locate(asset_rdev(asset), &cbfs, asset_name(asset), NULL); }