summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/vendorcode/google/chromeos/vboot2/common.c5
-rw-r--r--src/vendorcode/google/chromeos/vboot2/misc.h6
-rw-r--r--src/vendorcode/google/chromeos/vboot2/vboot_handoff.c2
-rw-r--r--src/vendorcode/google/chromeos/vboot2/verstage.c2
-rw-r--r--src/vendorcode/google/chromeos/vboot2/verstub.c5
5 files changed, 13 insertions, 7 deletions
diff --git a/src/vendorcode/google/chromeos/vboot2/common.c b/src/vendorcode/google/chromeos/vboot2/common.c
index 178e8b53f1..caed89fbdf 100644
--- a/src/vendorcode/google/chromeos/vboot2/common.c
+++ b/src/vendorcode/google/chromeos/vboot2/common.c
@@ -63,6 +63,11 @@ struct vb2_working_data * const vboot_get_working_data(void)
return (struct vb2_working_data *)_vboot2_work;
}
+void *vboot_get_work_buffer(struct vb2_working_data *wd)
+{
+ return (void *)((uintptr_t)wd + wd->buffer_offset);
+}
+
void vboot_reboot(void)
{
hard_reset();
diff --git a/src/vendorcode/google/chromeos/vboot2/misc.h b/src/vendorcode/google/chromeos/vboot2/misc.h
index cae302bc1f..b97be49a31 100644
--- a/src/vendorcode/google/chromeos/vboot2/misc.h
+++ b/src/vendorcode/google/chromeos/vboot2/misc.h
@@ -39,11 +39,13 @@ void vboot_reboot(void);
struct vb2_working_data {
uint32_t selected_region_offset;
uint32_t selected_region_size;
- uint64_t buffer_size;
- uint64_t buffer;
+ /* offset of the buffer from the start of this struct */
+ uint32_t buffer_offset;
+ uint32_t buffer_size;
};
struct vb2_working_data * const vboot_get_working_data(void);
+void *vboot_get_work_buffer(struct vb2_working_data *wd);
static inline void vb2_get_selected_region(struct vb2_working_data *wd,
struct vboot_region *region)
diff --git a/src/vendorcode/google/chromeos/vboot2/vboot_handoff.c b/src/vendorcode/google/chromeos/vboot2/vboot_handoff.c
index 33ff79a4c2..5df0d4a3bd 100644
--- a/src/vendorcode/google/chromeos/vboot2/vboot_handoff.c
+++ b/src/vendorcode/google/chromeos/vboot2/vboot_handoff.c
@@ -152,7 +152,7 @@ void *vboot2_load_ramstage(void)
struct vboot_region fw_main;
struct vb2_working_data *wd = vboot_get_working_data();
- sd = (struct vb2_shared_data *)(uintptr_t)wd->buffer;
+ sd = vboot_get_work_buffer(wd);
sd->workbuf_hash_offset = 0;
sd->workbuf_hash_size = 0;
diff --git a/src/vendorcode/google/chromeos/vboot2/verstage.c b/src/vendorcode/google/chromeos/vboot2/verstage.c
index 42b02564eb..88c18f6de3 100644
--- a/src/vendorcode/google/chromeos/vboot2/verstage.c
+++ b/src/vendorcode/google/chromeos/vboot2/verstage.c
@@ -179,7 +179,7 @@ void verstage_main(void)
/* Set up context and work buffer */
memset(&ctx, 0, sizeof(ctx));
- ctx.workbuf = (uint8_t *)(uintptr_t)wd->buffer;
+ ctx.workbuf = vboot_get_work_buffer(wd);
ctx.workbuf_size = wd->buffer_size;
/* Read nvdata from a non-volatile storage */
diff --git a/src/vendorcode/google/chromeos/vboot2/verstub.c b/src/vendorcode/google/chromeos/vboot2/verstub.c
index e8faa071c5..8f2e9b2d49 100644
--- a/src/vendorcode/google/chromeos/vboot2/verstub.c
+++ b/src/vendorcode/google/chromeos/vboot2/verstub.c
@@ -32,9 +32,8 @@ static struct vb2_working_data *init_vb2_working_data(void)
wd = vboot_get_working_data();
memset(wd, 0, _vboot2_work_size);
/* 8-byte alignment for ARMv7 */
- wd->buffer = ALIGN_UP((uintptr_t)&wd[1], 8);
- wd->buffer_size = _vboot2_work_size + (uintptr_t)wd
- - (uintptr_t)wd->buffer;
+ wd->buffer_offset = ALIGN_UP(sizeof(*wd), 8);
+ wd->buffer_size = _vboot2_work_size - wd->buffer_offset;
return wd;
}