diff --git a/src/include/cbfs.h b/src/include/cbfs.h index f012441896..d76fdd3e80 100644 --- a/src/include/cbfs.h +++ b/src/include/cbfs.h @@ -74,7 +74,7 @@ struct cbfs_props { }; /* Default CBFS locator .locate() callback that locates "COREBOOT" region. */ -int cbfs_master_header_props(struct cbfs_props *props); +int cbfs_default_props(struct cbfs_props *props); /* Return < 0 on error otherwise props are filled out accordingly. */ int cbfs_boot_region_properties(struct cbfs_props *props); diff --git a/src/lib/cbfs.c b/src/lib/cbfs.c index 27a1592e2b..408e685256 100644 --- a/src/lib/cbfs.c +++ b/src/lib/cbfs.c @@ -296,44 +296,16 @@ out: return 0; } -/* This only supports the "COREBOOT" fmap region. */ -int cbfs_master_header_props(struct cbfs_props *props) +/* The default locator to find the CBFS in the "COREBOOT" FMAP region. */ +int cbfs_default_props(struct cbfs_props *props) { - struct cbfs_header header; - const struct region_device *bdev; - int32_t rel_offset; - size_t offset; + struct region region; - bdev = boot_device_ro(); - - if (bdev == NULL) + if (fmap_locate_area("COREBOOT", ®ion)) return -1; - struct region fmap_region; - if (fmap_locate_area("COREBOOT", &fmap_region)) - return -1; - size_t fmap_top = region_end(&fmap_region); - - /* Find location of header using signed 32-bit offset from - * end of CBFS region. */ - offset = fmap_top - sizeof(int32_t); - if (rdev_readat(bdev, &rel_offset, offset, sizeof(int32_t)) < 0) - return -1; - - offset = fmap_top + (int32_t)le32_to_cpu(rel_offset); - if (rdev_readat(bdev, &header, offset, sizeof(header)) < 0) - return -1; - - header.magic = ntohl(header.magic); - header.romsize = ntohl(header.romsize); - header.offset = ntohl(header.offset); - - if (header.magic != CBFS_HEADER_MAGIC) - return -1; - - props->offset = header.offset; - props->size = header.romsize; - props->size -= props->offset; + props->offset = region_offset(®ion); + props->size = region_sz(®ion); printk(BIOS_SPEW, "CBFS @ %zx size %zx\n", props->offset, props->size); @@ -343,9 +315,9 @@ int cbfs_master_header_props(struct cbfs_props *props) /* This struct is marked as weak to allow a particular platform to * override the master header logic. This implementation should work for most * devices. */ -const struct cbfs_locator __weak cbfs_master_header_locator = { - .name = "Master Header Locator", - .locate = cbfs_master_header_props, +const struct cbfs_locator __weak cbfs_default_locator = { + .name = "COREBOOT Locator", + .locate = cbfs_default_props, }; extern const struct cbfs_locator vboot_locator; @@ -359,7 +331,7 @@ static const struct cbfs_locator *locators[] = { */ &vboot_locator, #endif - &cbfs_master_header_locator, + &cbfs_default_locator, }; int cbfs_boot_region_properties(struct cbfs_props *props) diff --git a/src/soc/intel/apollolake/mmap_boot.c b/src/soc/intel/apollolake/mmap_boot.c index 614b6031c4..631a834160 100644 --- a/src/soc/intel/apollolake/mmap_boot.c +++ b/src/soc/intel/apollolake/mmap_boot.c @@ -128,10 +128,10 @@ static int iafw_boot_region_properties(struct cbfs_props *props) } /* - * Named cbfs_master_header_locator so that it overrides the default, but - * incompatible locator in cbfs.c + * Named cbfs_default_locator so that it overrides the default, but incompatible + * locator in cbfs.c */ -const struct cbfs_locator cbfs_master_header_locator = { +const struct cbfs_locator cbfs_default_locator = { .name = "IAFW Locator", .locate = iafw_boot_region_properties, }; diff --git a/src/vendorcode/eltan/security/verified_boot/vboot_check.c b/src/vendorcode/eltan/security/verified_boot/vboot_check.c index 823c2de412..c58ace1cf6 100644 --- a/src/vendorcode/eltan/security/verified_boot/vboot_check.c +++ b/src/vendorcode/eltan/security/verified_boot/vboot_check.c @@ -355,8 +355,8 @@ static void vendor_secure_prepare(void) } } -const struct cbfs_locator cbfs_master_header_locator = { +const struct cbfs_locator cbfs_default_locator = { .name = "Vendorcode Header Locator", .prepare = vendor_secure_prepare, - .locate = cbfs_master_header_props + .locate = cbfs_default_props };