summaryrefslogtreecommitdiffstats
path: root/src/occ_405/firdata/firData.c
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2017-07-18 19:59:52 -0500
committerMartha Broyles <mbroyles@us.ibm.com>2017-07-20 17:10:34 -0400
commit237557e36673c70772d163913581cb9dfd83c96d (patch)
treeaa1b47403ae7afa64b256045622ba70b8f4ed248 /src/occ_405/firdata/firData.c
parent7cdcf4db35261a60df8a10ac06ce24d587b7626b (diff)
downloadtalos-occ-237557e36673c70772d163913581cb9dfd83c96d.tar.gz
talos-occ-237557e36673c70772d163913581cb9dfd83c96d.zip
FIRDATA: fixed structure alignment in firdata code
Change-Id: I13b03ee6fd21b96eebeb0f141ab294b24ccad6f8 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/43293 Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com> Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Martha Broyles <mbroyles@us.ibm.com>
Diffstat (limited to 'src/occ_405/firdata/firData.c')
-rw-r--r--src/occ_405/firdata/firData.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/occ_405/firdata/firData.c b/src/occ_405/firdata/firData.c
index 03b822b..299f92b 100644
--- a/src/occ_405/firdata/firData.c
+++ b/src/occ_405/firdata/firData.c
@@ -805,7 +805,11 @@ void FirData_addTrgtsToPnor( FirData_t * io_fd )
memset(&l_existBits, 0x00, sizeof(FirData_existBits_t) );
/* Point past HOMER header to first chiplet info */
- uint8_t *l_bytePtr = io_fd->hBuf + sizeof(HOMER_Data_t);
+ /* The HOMER_Data_t struct may have some padding added after the struct
+ * to ensure the HOMER_Chip_t structs are 4-byte word aligned. */
+ uint32_t sz_word = sizeof(uint32_t);
+ uint32_t pad = (sz_word - (sizeof(HOMER_Data_t) % sz_word)) % sz_word;
+ uint8_t *l_bytePtr = io_fd->hBuf + sizeof(HOMER_Data_t) + pad;
HOMER_Chip_t *l_chipPtr = NULL;
TRAC_INFO("AddTgtsMain:numChips:%d", io_fd->hData->chipCount);
@@ -1265,8 +1269,11 @@ int32_t FirData_init( FirData_t * io_fd,
break;
}
- /* Now, skip chip sections. */
- reglist = io_fd->hBuf + sz_hData;
+ /* Now, skip chip sections. Note that the HOMER_Data_t struct may have
+ * some padding added after the struct to ensure the HOMER_Chip_t
+ * structs are 4-byte word aligned. */
+ uint32_t pad = (sz_u32 - (sz_hData % sz_u32)) % sz_u32;
+ reglist = io_fd->hBuf + sz_hData + pad;
HOMER_Chip_t *l_chiptPtr = NULL;
/* Need to skip over chip list **/
OpenPOWER on IntegriCloud