[coreboot-gerrit] New patch to review for coreboot: 778da9a vboot2: provide path for booting using alternative CBFS instances

Aaron Durbin (adurbin@chromium.org) gerrit at coreboot.org
Wed Apr 15 17:42:31 CEST 2015


Aaron Durbin (adurbin at chromium.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/9704

-gerrit

commit 778da9a8f2118cffd7367810bd91f9a819441717
Author: Vadim Bendebury <vbendeb at chromium.org>
Date:   Thu Dec 25 15:34:32 2014 -0800

    vboot2: provide path for booting using alternative CBFS instances
    
    When CONFIG_MULTIPLE_CBFS_INSTANCES is enabled, the image is expected
    to have CBFS instances in rw-a and rw-b sections of the bootrom.
    
    This patch adds code which makes sure that CBFS header points at the
    proper bootrpom section as determined by vboot, and the RW stages load
    from that section.
    
    BRANCH=storm
    BUG=chrome-os-partner:34161, chromium:445938
    TEST=with the rest of the patches in, STORM boots all the way into
         Linux login prompt.
    
    Original-Change-Id: I187e3d3e65d548c672fdf3b42419544d3bd11ea1
    Original-Signed-off-by: Vadim Bendebury <vbendeb at chromium.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/237662
    Original-Reviewed-by: Aaron Durbin <adurbin at chromium.org>
    
    (cherry picked from commit 71ad0bb41b183374a84a5b9fb92c3afd813ceace)
    Signed-off-by: Aaron Durbin <adurbin at chromium.org>
    
    Change-Id: Ia05cb713981c44da8cb379b72dfbe17fe1f6c5ff
---
 .../google/chromeos/vboot2/vboot_handoff.c           | 14 +++++++++-----
 src/vendorcode/google/chromeos/vboot2/verstub.c      | 20 ++++++++++++++------
 src/vendorcode/google/chromeos/vboot_common.c        |  3 +++
 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 a5c7de6..b84e47e 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 1663926..d7e5fbc 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 ef47fc8..95bab36 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)



More information about the coreboot-gerrit mailing list