diff options
author | Claus Michael Olsen <cmolsen@us.ibm.com> | 2016-08-29 22:15:25 -0500 |
---|---|---|
committer | Sachin Gupta <sgupta2m@in.ibm.com> | 2016-09-26 04:24:53 -0400 |
commit | 84e7a65d875080145df6949c3f6656702002a96c (patch) | |
tree | 6e06b3e252e556d79b60e9d11b42cdd5ab72a61b /src/import/chips/p9/utils/imageProcs/p9_tor.C | |
parent | 7605936bb6d5ecaf7f77fc4b43b4f1fe6196f9aa (diff) | |
download | talos-sbe-84e7a65d875080145df6949c3f6656702002a96c.tar.gz talos-sbe-84e7a65d875080145df6949c3f6656702002a96c.zip |
xip_customize: Added CME/SGPE support.
Includes TOR API fix for improper BE->LE conversion of ddLevelOffset from
HW image.
Includes cleanup and renaming of local variables around above section
to improve clarity of code.
Change-Id: If37518ed24b3431241a2aa9456e709d91ecea696
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/28935
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Martin Gloff <mgloff@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: Martin Peschke <mpeschke@de.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/30266
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
Diffstat (limited to 'src/import/chips/p9/utils/imageProcs/p9_tor.C')
-rw-r--r-- | src/import/chips/p9/utils/imageProcs/p9_tor.C | 41 |
1 files changed, 21 insertions, 20 deletions
diff --git a/src/import/chips/p9/utils/imageProcs/p9_tor.C b/src/import/chips/p9/utils/imageProcs/p9_tor.C index 4d19c6ab..1c68e7df 100644 --- a/src/import/chips/p9/utils/imageProcs/p9_tor.C +++ b/src/import/chips/p9/utils/imageProcs/p9_tor.C @@ -1075,7 +1075,7 @@ int get_ring_from_cme_image ( void* ring_offset = htobe32(ring_offset); var = ring_offset + i_ddLevel + temp; temp1 = var / sizeof(uint16_t) + local; - chiplet_offset = *((uint16_t*)i_ringSection + temp1); + chiplet_offset = *((uint16_t*)i_ringSection + temp1); chiplet_offset = htobe16(chiplet_offset); if (i_RingBlockType == GET_SINGLE_RING) @@ -1225,6 +1225,8 @@ int tor_access_ring( void* uint32_t ddLevelOffset = 0; uint32_t ddLevelCount = 0; + uint32_t ddLevel = 0; + uint32_t ddBlockSize = 0; uint32_t temp = 0, temp1 = 0, local = 0; if(i_dbgl > 1) @@ -1247,24 +1249,23 @@ int tor_access_ring( void* { local = 2; ddLevelOffset = *((uint32_t*)i_ringSection + local); - temp = htobe32(ddLevelOffset) >> 24 & 0x000000FF; + ddLevel = htobe32(ddLevelOffset) >> 24 & 0x000000FF; ddLevelOffset = htobe32(ddLevelOffset) & 0x00FFFFFF; if(i_dbgl > 1) { MY_INF( "TOR_ACCESS_RING(4): DD level offset %d DD %d level Copy \n", - ddLevelOffset, temp ); + ddLevelOffset, ddLevel ); } - if ( temp == i_ddLevel) + if ( ddLevel == i_ddLevel) { ddLevelOffset = *((uint32_t*)i_ringSection + local); - ddLevelOffset = ddLevelOffset & 0xFFFFFF00; - ddLevelOffset = htobe32(ddLevelOffset); + ddLevelOffset = htobe32(ddLevelOffset) & 0x00FFFFFF; ddLevelOffset = ddLevelOffset + sizeof(TorNumDdLevels_t); local = local + 1; - temp1 = *((uint32_t*)i_ringSection + local); - temp1 = htobe32(temp1); + ddBlockSize = *((uint32_t*)i_ringSection + local); + ddBlockSize = htobe32(ddBlockSize); dd_check = 1; break; } @@ -1288,7 +1289,7 @@ int tor_access_ring( void* else { ddLevelOffset = 0; - temp1 = 0; + ddBlockSize = 0; } } else if( i_magic == P9_XIP_MAGIC_CME) @@ -1303,7 +1304,7 @@ int tor_access_ring( void* else { ddLevelOffset = 0; - temp1 = 0; + ddBlockSize = 0; } } else if( i_magic == P9_XIP_MAGIC_SGPE) @@ -1318,7 +1319,7 @@ int tor_access_ring( void* else { ddLevelOffset = 0; - temp1 = 0; + ddBlockSize = 0; } } else @@ -1336,26 +1337,26 @@ int tor_access_ring( void* MY_INF("\tio_ringBlockSize is zero. Returning required size.\n"); } - io_ringBlockSize = temp1; + io_ringBlockSize = ddBlockSize; return 0; } - if (io_ringBlockSize < temp1) + if (io_ringBlockSize < ddBlockSize) { MY_ERR("\tio_ringBlockSize is less than required size.\n"); return IMGBUILD_TGR_BUFFER_TOO_SMALL; } memcpy( (uint8_t*)(*io_ringBlockPtr), - (uint8_t*)i_ringSection + ddLevelOffset, (size_t)temp1); + (uint8_t*)i_ringSection + ddLevelOffset, (size_t)ddBlockSize); if(i_dbgl > 1) { - MY_INF( "TOR_ACCESS_RING(5): DD level offset %d DD %d size 0x%08x %d \n", - ddLevelOffset, temp, temp1, temp1); + MY_INF( "TOR_ACCESS_RING(5): DD offset = %d DD level = %d DD block size = %d \n", + ddLevelOffset, ddLevel, ddBlockSize); } - io_ringBlockSize = temp1; + io_ringBlockSize = ddBlockSize; return IMGBUILD_TGR_RING_BLOCKS_FOUND; } @@ -1366,7 +1367,7 @@ int tor_access_ring( void* if(i_PpeType == SBE) { - int temp = ddLevelOffset >> 2; + temp = ddLevelOffset >> 2; if(i_dbgl > 1) { @@ -1380,7 +1381,7 @@ int tor_access_ring( void* } else if (i_PpeType == CME) { - int temp = (ddLevelOffset >> 2) + 2; + temp = (ddLevelOffset >> 2) + 2; if(i_dbgl > 1) { @@ -1395,7 +1396,7 @@ int tor_access_ring( void* else if (i_PpeType == SGPE) { - int temp = (ddLevelOffset >> 2) + sizeof(uint32_t); + temp = (ddLevelOffset >> 2) + sizeof(uint32_t); if(i_dbgl > 1) { |