diff options
author | Aaron Durbin <adurbin@chromium.org> | 2016-07-16 17:29:47 -0500 |
---|---|---|
committer | Aaron Durbin <adurbin@chromium.org> | 2016-07-19 20:14:10 +0200 |
commit | a3a06aeac5879f36f35bb462616e29fbe4a177f9 (patch) | |
tree | b8584ba34d401bb5ee0d6df500564e630301e2eb /src | |
parent | ddbdcc3898f031cc323a31eddd48671c3dbe5f11 (diff) | |
download | coreboot-a3a06aeac5879f36f35bb462616e29fbe4a177f9.tar.xz |
drivers/intel/fsp2_0: fix hand-off-block types and size
The gcc compiler treats sizeof(void) == 1. Therefore requesting
a 1 byte reservation in cbmem and writing a pointer into the
buffer returned is wrong. Fix the size of the request to be
32-bits because FSP 2.0 is in 32-bit space by definition. Also,
since the access to the field happens across stage boundaries
it's important to ensure fixed widths are used in case a later
stage has a different pointer bit width.
BUG=chrome-os-partner:52679
Change-Id: Ib4efc7d5369d44a995318aac6c4a7cfdc73e4a8c
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: https://review.coreboot.org/15737
Reviewed-by: Furquan Shaikh <furquan@google.com>
Tested-by: build bot (Jenkins)
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Diffstat (limited to 'src')
-rw-r--r-- | src/drivers/intel/fsp2_0/hand_off_block.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/drivers/intel/fsp2_0/hand_off_block.c b/src/drivers/intel/fsp2_0/hand_off_block.c index 00c5d26b71..c9d5b8ea3f 100644 --- a/src/drivers/intel/fsp2_0/hand_off_block.c +++ b/src/drivers/intel/fsp2_0/hand_off_block.c @@ -184,16 +184,16 @@ struct hob_resource *hob_header_to_resource(const struct hob_header *hob) void fsp_save_hob_list(void *hob_list_ptr) { - void **cbmem_loc; - cbmem_loc = cbmem_add(CBMEM_ID_FSP_RUNTIME, sizeof(*hob_list_ptr)); - *cbmem_loc = hob_list_ptr; + uint32_t *cbmem_loc; + cbmem_loc = cbmem_add(CBMEM_ID_FSP_RUNTIME, sizeof(*cbmem_loc)); + *cbmem_loc = (uintptr_t)hob_list_ptr; } const void *fsp_get_hob_list(void) { - void **list_loc = cbmem_find(CBMEM_ID_FSP_RUNTIME); + uint32_t *list_loc = cbmem_find(CBMEM_ID_FSP_RUNTIME); - return (list_loc) ? (*list_loc) : NULL; + return (list_loc) ? (void *)(uintptr_t)(*list_loc) : NULL; } static const |