summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/utils/imageProcs/p9_tor.C
diff options
context:
space:
mode:
authorClaus Michael Olsen <cmolsen@us.ibm.com>2016-08-29 22:15:25 -0500
committerSachin Gupta <sgupta2m@in.ibm.com>2016-09-26 04:24:53 -0400
commit84e7a65d875080145df6949c3f6656702002a96c (patch)
tree6e06b3e252e556d79b60e9d11b42cdd5ab72a61b /src/import/chips/p9/utils/imageProcs/p9_tor.C
parent7605936bb6d5ecaf7f77fc4b43b4f1fe6196f9aa (diff)
downloadtalos-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.C41
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)
{
OpenPOWER on IntegriCloud