aboutsummaryrefslogtreecommitdiff
path: root/src/vendorcode/google/chromeos/vboot2/common.c
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2015-05-08 17:14:15 -0500
committerPatrick Georgi <pgeorgi@google.com>2015-05-11 22:40:10 +0200
commit0e571fd7ac15b9cef44c47d460bebd33ba74d892 (patch)
tree364f85c75e01aa062bf28f8a556edf4d1326b738 /src/vendorcode/google/chromeos/vboot2/common.c
parent1e8be636cc941ab262ce08401ede0bf4555985b0 (diff)
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@chromium.org> Reviewed-on: http://review.coreboot.org/10157 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Diffstat (limited to 'src/vendorcode/google/chromeos/vboot2/common.c')
-rw-r--r--src/vendorcode/google/chromeos/vboot2/common.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/vendorcode/google/chromeos/vboot2/common.c b/src/vendorcode/google/chromeos/vboot2/common.c
index 289005c996..deb0c8816c 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)