cbfstool: Handle alignment in UEFI payloads
Tiano for X64 is much cleaner to start up when using higher alignments in firmware volumes. These are implemented using padding files and sections that cbfstool knew nothing about. Skip these. Change-Id: Ibc433070ae6f822d00af2f187018ed8b358e2018 Signed-off-by: Patrick Georgi <patrick@georgi-clan.de> Reviewed-on: http://review.coreboot.org/2334 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
parent
408aefd176
commit
4610247ef1
|
@ -279,6 +279,11 @@ int parse_fv_to_payload(const struct buffer *input,
|
||||||
}
|
}
|
||||||
|
|
||||||
fh = (ffs_file_header_t *)(input->data + fv->header_length);
|
fh = (ffs_file_header_t *)(input->data + fv->header_length);
|
||||||
|
while (fh->file_type == FILETYPE_PAD) {
|
||||||
|
unsigned long offset = (fh->size[2] << 16) | (fh->size[1] << 8) | fh->size[0];
|
||||||
|
ERROR("skipping %d bytes of FV padding\n", offset);
|
||||||
|
fh = (ffs_file_header_t *)(((void*)fh) + offset);
|
||||||
|
}
|
||||||
if (fh->file_type != FILETYPE_SEC) {
|
if (fh->file_type != FILETYPE_SEC) {
|
||||||
ERROR("Not a usable UEFI firmware volume.\n");
|
ERROR("Not a usable UEFI firmware volume.\n");
|
||||||
INFO("First file in first FV not a SEC core.\n");
|
INFO("First file in first FV not a SEC core.\n");
|
||||||
|
@ -286,6 +291,11 @@ int parse_fv_to_payload(const struct buffer *input,
|
||||||
}
|
}
|
||||||
|
|
||||||
cs = (common_section_header_t *)&fh[1];
|
cs = (common_section_header_t *)&fh[1];
|
||||||
|
while (cs->section_type == SECTION_RAW) {
|
||||||
|
unsigned long offset = (cs->size[2] << 16) | (cs->size[1] << 8) | cs->size[0];
|
||||||
|
ERROR("skipping %d bytes of section padding\n", offset);
|
||||||
|
cs = (common_section_header_t *)(((void*)cs) + offset);
|
||||||
|
}
|
||||||
if (cs->section_type != SECTION_PE32) {
|
if (cs->section_type != SECTION_PE32) {
|
||||||
ERROR("Not a usable UEFI firmware volume.\n");
|
ERROR("Not a usable UEFI firmware volume.\n");
|
||||||
INFO("Section type not PE32.\n");
|
INFO("Section type not PE32.\n");
|
||||||
|
|
|
@ -33,6 +33,7 @@ typedef struct {
|
||||||
} firmware_volume_header_t;
|
} firmware_volume_header_t;
|
||||||
|
|
||||||
#define FILETYPE_SEC 0x03
|
#define FILETYPE_SEC 0x03
|
||||||
|
#define FILETYPE_PAD 0xf0
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t name[16];
|
uint8_t name[16];
|
||||||
uint16_t integrity;
|
uint16_t integrity;
|
||||||
|
@ -43,6 +44,7 @@ typedef struct {
|
||||||
} ffs_file_header_t;
|
} ffs_file_header_t;
|
||||||
|
|
||||||
#define SECTION_PE32 0x10
|
#define SECTION_PE32 0x10
|
||||||
|
#define SECTION_RAW 0x19
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t size[3];
|
uint8_t size[3];
|
||||||
uint8_t section_type;
|
uint8_t section_type;
|
||||||
|
|
Loading…
Reference in New Issue