aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2019-11-18 12:35:21 -0700
committerPatrick Georgi <pgeorgi@google.com>2019-11-20 13:27:44 +0000
commitfe338e2319f40a22f1c64aef3df95e015ab8b90b (patch)
treeae58f62632c6df74719b1c6ae13607c90d0805de /src/lib
parentaeb652a4a04226f467eb8e850b2096d772c6e31e (diff)
cbfs: switch to region_device for location APIs
Drop struct cbfs_props and replace with struct region_device object. The goal of the cbfs locator APIs are to determine the correct region device to find the cbfs files. Therefore, start directly using struct region_device in the cbfs location paths. Update the users of the API and leverage the default boot region device implementation for apollolake. Change-Id: I0158a095cc64c9900d8738f8ffd45ae4040575ea Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/36939 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/cbfs.c40
-rw-r--r--src/lib/coreboot_table.c8
2 files changed, 14 insertions, 34 deletions
diff --git a/src/lib/cbfs.c b/src/lib/cbfs.c
index fbe6e43496..636ff70de8 100644
--- a/src/lib/cbfs.c
+++ b/src/lib/cbfs.c
@@ -39,26 +39,9 @@
int cbfs_boot_locate(struct cbfsf *fh, const char *name, uint32_t *type)
{
struct region_device rdev;
- const struct region_device *boot_dev;
- struct cbfs_props props;
- if (cbfs_boot_region_properties(&props)) {
- printk(BIOS_ALERT, "ERROR: Failed to locate boot region\n");
+ if (cbfs_boot_region_device(&rdev))
return -1;
- }
-
- /* All boot CBFS operations are performed using the RO device. */
- boot_dev = boot_device_ro();
-
- if (boot_dev == NULL) {
- printk(BIOS_ALERT, "ERROR: Failed to find boot device\n");
- return -1;
- }
-
- if (rdev_chain(&rdev, boot_dev, props.offset, props.size)) {
- printk(BIOS_ALERT, "ERROR: Failed to access boot region inside boot device\n");
- return -1;
- }
int ret = cbfs_locate(fh, &rdev, name, type);
@@ -297,17 +280,13 @@ out:
}
/* The default locator to find the CBFS in the "COREBOOT" FMAP region. */
-int cbfs_default_props(struct cbfs_props *props)
+int cbfs_default_region_device(struct region_device *rdev)
{
- struct region region;
-
- if (fmap_locate_area("COREBOOT", &region))
+ if (fmap_locate_area_as_rdev("COREBOOT", rdev))
return -1;
- props->offset = region_offset(&region);
- props->size = region_sz(&region);
-
- printk(BIOS_SPEW, "CBFS @ %zx size %zx\n", props->offset, props->size);
+ printk(BIOS_SPEW, "CBFS @ %zx size %zx\n",
+ region_device_offset(rdev), region_device_sz(rdev));
return 0;
}
@@ -317,7 +296,7 @@ int cbfs_default_props(struct cbfs_props *props)
* devices. */
const struct cbfs_locator __weak cbfs_default_locator = {
.name = "COREBOOT Locator",
- .locate = cbfs_default_props,
+ .locate = cbfs_default_region_device,
};
extern const struct cbfs_locator vboot_locator;
@@ -334,7 +313,7 @@ static const struct cbfs_locator *locators[] = {
&cbfs_default_locator,
};
-int cbfs_boot_region_properties(struct cbfs_props *props)
+int cbfs_boot_region_device(struct region_device *rdev)
{
int i;
@@ -348,11 +327,12 @@ int cbfs_boot_region_properties(struct cbfs_props *props)
if (ops->locate == NULL)
continue;
- if (ops->locate(props))
+ if (ops->locate(rdev))
continue;
LOG("'%s' located CBFS at [%zx:%zx)\n",
- ops->name, props->offset, props->offset + props->size);
+ ops->name, region_device_offset(rdev),
+ region_device_end(rdev));
return 0;
}
diff --git a/src/lib/coreboot_table.c b/src/lib/coreboot_table.c
index 241d8e1550..7245a63893 100644
--- a/src/lib/coreboot_table.c
+++ b/src/lib/coreboot_table.c
@@ -261,12 +261,12 @@ static void lb_board_id(struct lb_header *header)
static void lb_boot_media_params(struct lb_header *header)
{
struct lb_boot_media_params *bmp;
- struct cbfs_props props;
const struct region_device *boot_dev;
+ struct region_device cbfs_dev;
boot_device_init();
- if (cbfs_boot_region_properties(&props))
+ if (cbfs_boot_region_device(&cbfs_dev))
return;
boot_dev = boot_device_ro();
@@ -277,8 +277,8 @@ static void lb_boot_media_params(struct lb_header *header)
bmp->tag = LB_TAG_BOOT_MEDIA_PARAMS;
bmp->size = sizeof(*bmp);
- bmp->cbfs_offset = props.offset;
- bmp->cbfs_size = props.size;
+ bmp->cbfs_offset = region_device_offset(&cbfs_dev);
+ bmp->cbfs_size = region_device_sz(&cbfs_dev);
bmp->boot_media_size = region_device_sz(boot_dev);
bmp->fmap_offset = get_fmap_flash_offset();