[coreboot-gerrit] Patch set updated for coreboot: c4c20bf vboot: allow for dynamic work buffers

Aaron Durbin (adurbin@chromium.org) gerrit at coreboot.org
Mon May 11 18:40:46 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/10157

-gerrit

commit c4c20bf32c1e9a0d979a956e6190e2e60c6bfd8c
Author: Aaron Durbin <adurbin at chromium.org>
Date:   Fri May 8 17:14:15 2015 -0500

    vboot: allow for dynamic work buffers
    
    The vboot library currently relies on link-time known
    address and sizes of the work buffer.  Not all platforms
    can provide such semantics. Therefore, add an option
    to use cbmem for the work buffer. This implies such platforms
    can only do verification of the firmware after main memory
    has been initialized.
    
    Change-Id: If0b0f6b2a187b5c1fb56af08b6cb384a935be096
    Signed-off-by: Aaron Durbin <adurbin at chromium.org>
---
 src/include/cbmem.h                            |  2 ++
 src/vendorcode/google/chromeos/vboot2/Kconfig  | 10 ++++++++++
 src/vendorcode/google/chromeos/vboot2/common.c | 14 ++++++++++++--
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/src/include/cbmem.h b/src/include/cbmem.h
index c5cd52a..07e5645 100644
--- a/src/include/cbmem.h
+++ b/src/include/cbmem.h
@@ -84,6 +84,7 @@
 #define CBMEM_ID_STAGEx_CACHE	0x57a9e100
 #define CBMEM_ID_TIMESTAMP	0x54494d45
 #define CBMEM_ID_VBOOT_HANDOFF	0x780074f0
+#define CBMEM_ID_VBOOT_WORKBUF	0x78007343
 #define CBMEM_ID_WIFI_CALIBRATION 0x57494649
 
 #ifndef __ASSEMBLER__
@@ -128,6 +129,7 @@
 	{ CBMEM_ID_SPINTABLE,		"SPIN TABLE " }, \
 	{ CBMEM_ID_TIMESTAMP,		"TIME STAMP " }, \
 	{ CBMEM_ID_VBOOT_HANDOFF,	"VBOOT      " }, \
+	{ CBMEM_ID_VBOOT_WORKBUF,	"VBOOT WORK " }, \
 	{ CBMEM_ID_WIFI_CALIBRATION,	"WIFI CLBR  " },
 
 struct cbmem_entry;
diff --git a/src/vendorcode/google/chromeos/vboot2/Kconfig b/src/vendorcode/google/chromeos/vboot2/Kconfig
index bb6c1ad..a086785 100644
--- a/src/vendorcode/google/chromeos/vboot2/Kconfig
+++ b/src/vendorcode/google/chromeos/vboot2/Kconfig
@@ -101,3 +101,13 @@ config VBOOT_BOOT_LOADER_INDEX
 	help
 	  This is the index of the bootloader component in the verified
 	  firmware block.
+
+config VBOOT_DYNAMIC_WORK_BUFFER
+	bool "Vboot's work buffer is dynamically allocated."
+	default n
+	depends on VBOOT_VERIFY_FIRMWARE
+	help
+	  This option is used when there isn't enough pre-main memory
+	  ram to allocate the vboot work buffer. That means vboot verification
+	  is after memory init and requires main memory to back the work
+	  buffer.
diff --git a/src/vendorcode/google/chromeos/vboot2/common.c b/src/vendorcode/google/chromeos/vboot2/common.c
index 289005c..deb0c88 100644
--- a/src/vendorcode/google/chromeos/vboot2/common.c
+++ b/src/vendorcode/google/chromeos/vboot2/common.c
@@ -18,6 +18,7 @@
  */
 
 #include <cbfs.h>
+#include <cbmem.h>
 #include <console/console.h>
 #include <reset.h>
 #include "../chromeos.h"
@@ -25,14 +26,23 @@
 #include "../vboot_handoff.h"
 #include "misc.h"
 
+static const size_t vb_work_buf_size = 16 * KiB;
+
 struct vb2_working_data * const vboot_get_working_data(void)
 {
-	return (struct vb2_working_data *)_vboot2_work;
+	if (IS_ENABLED(CONFIG_VBOOT_DYNAMIC_WORK_BUFFER))
+		/* cbmem_add() does a cbmem_find() first. */
+		return cbmem_add(CBMEM_ID_VBOOT_WORKBUF, vb_work_buf_size);
+	else
+		return (struct vb2_working_data *)_vboot2_work;
 }
 
 size_t vb2_working_data_size(void)
 {
-	return _vboot2_work_size;
+	if (IS_ENABLED(CONFIG_VBOOT_DYNAMIC_WORK_BUFFER))
+		return vb_work_buf_size;
+	else
+		return _vboot2_work_size;
 }
 
 void *vboot_get_work_buffer(struct vb2_working_data *wd)



More information about the coreboot-gerrit mailing list