diff options
author | Aaron Durbin <adurbin@chromium.org> | 2014-03-20 14:28:17 -0500 |
---|---|---|
committer | Marc Jones <marc.jones@se-eng.com> | 2014-12-09 18:41:00 +0100 |
commit | 30974bc2f5f4764425e69256782cca03b290c4f4 (patch) | |
tree | 43643987aeb0056ce5e5e154f464e856dc352919 /src/vendorcode/google/chromeos/vboot_context.h | |
parent | f72f9e7c14a2a5df92c30a3ec88d15b9aca30b1e (diff) |
vboot: allow for non-memory-mapped VBOOT regions
Depending on the platform the underlying regions vboot requires
may not be accessible through a memory-mapped interface. Allow
for non-memory-mapped regions by providing a region request
abstraction. There is then only a few touch points in the code to
provide compile-time decision making no how to obtain a region.
For the vblocks a temporary area is allocated from cbmem. They
are then read from the SPI into the temporarily buffer.
BUG=chrome-os-partner:27094
BRANCH=None
TEST=Built and booted a rambi with vboot verification.
Original-Change-Id: I828a7c36387a8eb573c5a0dd020fe9abad03d902
Original-Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/190924
Original-Reviewed-by: Hung-Te Lin <hungte@chromium.org>
(cherry picked from commit aee0280bbfe110eae88aa297b433c1038c6fe8a3)
Signed-off-by: Marc Jones <marc.jones@se-eng.com>
Change-Id: Ia020d1eebad753da950342656cd11b84e9a85376
Reviewed-on: http://review.coreboot.org/7709
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Diffstat (limited to 'src/vendorcode/google/chromeos/vboot_context.h')
-rw-r--r-- | src/vendorcode/google/chromeos/vboot_context.h | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/vendorcode/google/chromeos/vboot_context.h b/src/vendorcode/google/chromeos/vboot_context.h index 72a05350cd..822fed4d2e 100644 --- a/src/vendorcode/google/chromeos/vboot_context.h +++ b/src/vendorcode/google/chromeos/vboot_context.h @@ -22,17 +22,30 @@ #include <stdint.h> #include <vboot_api.h> +struct cbmem_entry; + /* The vboot context structure provides all the necessary data for invoking * vboot. The vboot loader sets everything up for vboot module to use. */ +struct vboot_region { + /* + * The offset_addr field may be an offset or an address. It depends + * on the capabilities of the underlying architecture. + */ + uintptr_t offset_addr; + int32_t size; +}; + struct vboot_context { struct vboot_handoff *handoff; VbCommonParams *cparams; VbSelectFirmwareParams *fparams; - uint8_t *fw_a; - uint32_t fw_a_size; - uint8_t *fw_b; - uint32_t fw_b_size; + struct vboot_region gbb; + struct vboot_region vblock_a; + struct vboot_region fw_a; + struct vboot_region vblock_b; + struct vboot_region fw_b; + const struct cbmem_entry *vblocks; /* Callback implementations living in romstage. */ void (*read_vbnv)(uint8_t *vbnv_copy); void (*save_vbnv)(const uint8_t *vbnv_copy); @@ -43,6 +56,7 @@ struct vboot_context { size_t *recv_len); void (*log_msg)(const char *fmt, va_list args); void (*fatal_error)(void); + void *(*get_region)(uintptr_t offset_addr, size_t size, void *dest); }; #endif /* VBOOT_CONTEXT_H */ |