summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Georgi <pgeorgi@chromium.org>2015-07-14 22:28:27 +0200
committerPatrick Georgi <pgeorgi@google.com>2015-07-15 16:34:37 +0200
commit4d3e4c421e94814884d1ff035a4c4ec80d4b33b2 (patch)
tree714cf2a02ad6ee568928084df4c5cc36530ae96f
parent45acb34ffce5ffef1e574305b4e18af6d26df46b (diff)
downloadcoreboot-4d3e4c421e94814884d1ff035a4c4ec80d4b33b2.tar.xz
cbfs: hardcode file alignment
Assume that it's 64 byte. Change-Id: I168facd92f64c2cf99c26c350c60317807a4aed4 Signed-off-by: Patrick Georgi <pgeorgi@chromium.org> Reviewed-on: http://review.coreboot.org/10919 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
-rw-r--r--src/arch/x86/mmap_boot.c4
-rw-r--r--src/arch/x86/walkcbfs.S20
-rw-r--r--src/include/cbfs.h3
-rw-r--r--src/include/cbfs_serialized.h5
-rw-r--r--src/lib/cbfs.c9
-rw-r--r--src/lib/cbfs_boot_props.c2
-rw-r--r--src/vendorcode/google/chromeos/vboot2/vboot_loader.c1
7 files changed, 16 insertions, 28 deletions
diff --git a/src/arch/x86/mmap_boot.c b/src/arch/x86/mmap_boot.c
index 4dd269b772..6c98954ff2 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 60eb8b53b0..9c26d3c9a9 100644
--- a/src/arch/x86/walkcbfs.S
+++ b/src/arch/x86/walkcbfs.S
@@ -7,6 +7,9 @@
#define CBFS_HEADER_ALIGN (CBFS_HEADER_BOOTBLOCKSIZE + 4)
#define CBFS_HEADER_OFFSET (CBFS_HEADER_ALIGN + 4)
+/* we use this instead of CBFS_HEADER_ALIGN because the latter is retired. */
+#define CBFS_ALIGNMENT 64
+
#define CBFS_FILE_MAGIC 0
#define CBFS_FILE_LEN (CBFS_FILE_MAGIC + 8)
#define CBFS_FILE_TYPE (CBFS_FILE_LEN + 4)
@@ -74,13 +77,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 $(CBFS_ALIGNMENT - 1), %ecx
+ and $~(CBFS_ALIGNMENT - 1), %ecx
/* if oldaddr >= addr, leave */
cmp %ebx, %ecx
@@ -106,11 +105,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 $CBFS_ALIGNMENT, %ebx
jmp check_for_exit
filemagic:
diff --git a/src/include/cbfs.h b/src/include/cbfs.h
index 00c43f2871..f031141a82 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 df388570bf..f6720959e3 100644
--- a/src/include/cbfs_serialized.h
+++ b/src/include/cbfs_serialized.h
@@ -95,12 +95,15 @@ 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];
} __attribute__((packed));
+/* this used to be flexible, but wasn't ever set to something different. */
+#define CBFS_ALIGNMENT 64
+
/* "Unknown" refers to CBFS headers version 1,
* before the architecture was defined (i.e., x86 only).
*/
diff --git a/src/lib/cbfs.c b/src/lib/cbfs.c
index 3e83765bf3..abc40770af 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, CBFS_ALIGNMENT);
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, CBFS_ALIGNMENT);
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, CBFS_ALIGNMENT);
continue;
}
diff --git a/src/lib/cbfs_boot_props.c b/src/lib/cbfs_boot_props.c
index 21e64d37a5..7a9f7a98e0 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 3c0d67e8b9..90ada1e651 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);
}