From 237557e36673c70772d163913581cb9dfd83c96d Mon Sep 17 00:00:00 2001 From: Zane Shelley Date: Tue, 18 Jul 2017 19:59:52 -0500 Subject: FIRDATA: fixed structure alignment in firdata code Change-Id: I13b03ee6fd21b96eebeb0f141ab294b24ccad6f8 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/43293 Reviewed-by: Caleb N. Palmer Reviewed-by: Benjamin J. Weisenbeck Tested-by: FSP CI Jenkins Reviewed-by: Martha Broyles --- src/occ_405/firdata/firData.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src/occ_405/firdata/firData.c') 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 **/ -- cgit v1.2.1