summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/vendorcode/google/chromeos/vboot2/vboot_handoff.c14
-rw-r--r--src/vendorcode/google/chromeos/vboot2/verstub.c20
-rw-r--r--src/vendorcode/google/chromeos/vboot_common.c3
3 files changed, 26 insertions, 11 deletions
diff --git a/src/vendorcode/google/chromeos/vboot2/vboot_handoff.c b/src/vendorcode/google/chromeos/vboot2/vboot_handoff.c
index a5c7de617c..b84e47ef16 100644
--- a/src/vendorcode/google/chromeos/vboot2/vboot_handoff.c
+++ b/src/vendorcode/google/chromeos/vboot2/vboot_handoff.c
@@ -176,9 +176,13 @@ void *vboot2_load_ramstage(void)
/* we're on recovery path. continue to ro-ramstage. */
return NULL;
- printk(BIOS_INFO,
- "loading ramstage from Slot %c\n", sd->fw_slot ? 'B' : 'A');
- vb2_get_selected_region(wd, &fw_main);
-
- return load_ramstage(vh, &fw_main);
+ if (IS_ENABLED(CONFIG_MULTIPLE_CBFS_INSTANCES)) {
+ return cbfs_load_stage(CBFS_DEFAULT_MEDIA,
+ CONFIG_CBFS_PREFIX "/ramstage");
+ } else {
+ printk(BIOS_INFO, "loading ramstage from Slot %c\n",
+ sd->fw_slot ? 'B' : 'A');
+ vb2_get_selected_region(wd, &fw_main);
+ return load_ramstage(vh, &fw_main);
+ }
}
diff --git a/src/vendorcode/google/chromeos/vboot2/verstub.c b/src/vendorcode/google/chromeos/vboot2/verstub.c
index 5630defc28..86c6e1ce2a 100644
--- a/src/vendorcode/google/chromeos/vboot2/verstub.c
+++ b/src/vendorcode/google/chromeos/vboot2/verstub.c
@@ -78,13 +78,21 @@ void *vboot2_verify_firmware(void)
if (vboot_is_slot_selected(wd)) {
/* RW A or B */
struct vboot_region fw_main;
- struct vboot_components *fw_info;
+
vb2_get_selected_region(wd, &fw_main);
- fw_info = vboot_locate_components(&fw_main);
- if (fw_info == NULL)
- die("failed to locate firmware components\n");
- entry = vboot_load_stage(CONFIG_VBOOT_ROMSTAGE_INDEX,
- &fw_main, fw_info);
+
+ if (IS_ENABLED(CONFIG_MULTIPLE_CBFS_INSTANCES)) {
+ cbfs_set_header_offset(fw_main.offset_addr);
+ entry = cbfs_load_stage(CBFS_DEFAULT_MEDIA,
+ CONFIG_CBFS_PREFIX "/romstage");
+ } else {
+ struct vboot_components *fw_info;
+ fw_info = vboot_locate_components(&fw_main);
+ if (fw_info == NULL)
+ die("failed to locate firmware components\n");
+ entry = vboot_load_stage(CONFIG_VBOOT_ROMSTAGE_INDEX,
+ &fw_main, fw_info);
+ }
} else if (vboot_is_readonly_path(wd)) {
/* RO */
entry = cbfs_load_stage(CBFS_DEFAULT_MEDIA,
diff --git a/src/vendorcode/google/chromeos/vboot_common.c b/src/vendorcode/google/chromeos/vboot_common.c
index ef47fc8a56..95bab367ed 100644
--- a/src/vendorcode/google/chromeos/vboot_common.c
+++ b/src/vendorcode/google/chromeos/vboot_common.c
@@ -95,6 +95,9 @@ void *vboot_get_payload(int *len)
struct vboot_handoff *vboot_handoff;
struct firmware_component *fwc;
+ if (IS_ENABLED(CONFIG_MULTIPLE_CBFS_INSTANCES))
+ return NULL; /* Let CBFS figure it out. */
+
vboot_handoff = cbmem_find(CBMEM_ID_VBOOT_HANDOFF);
if (vboot_handoff == NULL)