summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.C
diff options
context:
space:
mode:
authorPrem Shanker Jha <premjha2@in.ibm.com>2016-12-08 04:33:07 -0600
committerWilliam G. Hoffa <wghoffa@us.ibm.com>2016-12-16 12:33:05 -0500
commit3dfcb24f2e12cbf3ec25ea569e8df5a091148de6 (patch)
tree4d5a18cc89f2939dee415881ad3467bc53ce60ce /src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.C
parent294e4d770414f943fed4ca165488c0260517b43a (diff)
downloadtalos-hostboot-3dfcb24f2e12cbf3ec25ea569e8df5a091148de6.tar.gz
talos-hostboot-3dfcb24f2e12cbf3ec25ea569e8df5a091148de6.zip
PM: Scan ring layout changes in HOMER in response to roll out of RS4v3.
RS4v3 eliminates Ring Block Header. Ring container starts directly with RS4 Header. Hence, for putring to find RS4 header, from start of the ring container, an 8B offset is no longer necessary. Change-Id: I3b02065d98bbc1028398aee173fb47720ae934c7 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/33580 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: RANGANATHPRASAD G. BRAHMASAMUDRA <prasadbgr@in.ibm.com> Reviewed-by: Prem Shanker Jha <premjha2@in.ibm.com> Reviewed-by: ADAM S. HALE <ashale@us.ibm.com> Dev-Ready: ADAM S. HALE <ashale@us.ibm.com> Reviewed-by: Prachi Gupta <pragupta@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/33582 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.C')
-rw-r--r--src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.C23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.C b/src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.C
index 3f629681d..c899ba90f 100644
--- a/src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.C
+++ b/src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.C
@@ -110,6 +110,8 @@ extern "C"
CORE_COMMON_RING_INDEX_SIZE = sizeof(CoreCmnRingsList_t),
CORE_SPEC_RING_INDEX_SIZE = sizeof(CoreSpecRingList_t),
RING_START_TO_RS4_OFFSET = 8,
+ TOR_VER_ONE = 1,
+ TOR_VER_TWO = 2,
};
/**
@@ -1225,6 +1227,8 @@ extern "C"
uint32_t tempRingLength = 0;
uint32_t tempBufSize = 0;
bool overrideNotFound = true;
+ uint32_t ringStartToHdrOffset = ( TOR_VER_ONE == P9_TOR::tor_version() ) ? RING_START_TO_RS4_OFFSET : 0;
+ FAPI_DBG("TOR Version : 0x%02x", P9_TOR::tor_version() );
for( uint32_t ringIndex = 0; ringIndex < EQ::g_eqData.iv_num_common_rings;
ringIndex++ )
@@ -1255,7 +1259,7 @@ extern "C"
ALIGN_RING_LOC( pOverrideStart, pOvrdRingPayload );
memcpy( pOvrdRingPayload, i_ringData.iv_pWorkBuf2, tempBufSize);
- *(pScanRingIndex + ringIndex) = SWIZZLE_2_BYTE((pOvrdRingPayload - pOverrideStart) + RING_START_TO_RS4_OFFSET );
+ *(pScanRingIndex + ringIndex) = SWIZZLE_2_BYTE((pOvrdRingPayload - pOverrideStart) + ringStartToHdrOffset);
sgpeOvrdRings.setRingOffset(pOvrdRingPayload, sgpeOvrdRings.getCommonRingId( ringIndex ));
sgpeOvrdRings.setRingSize( sgpeOvrdRings.getCommonRingId( ringIndex ), tempBufSize );
@@ -1326,6 +1330,7 @@ extern "C"
uint8_t* pRingStart = &i_pHomer->cpmrRegion.cmeSramRegion[io_cmnRingSize];
uint16_t* pScanRingIndex = (uint16_t*) pRingStart;
uint8_t* pRingPayload = pRingStart + CORE_COMMON_RING_INDEX_SIZE;
+ uint32_t ringStartToHdrOffset = ( TOR_VER_ONE == P9_TOR::tor_version() ) ? RING_START_TO_RS4_OFFSET : 0;
if( !i_imgType.cmeCommonRingBuild )
{
@@ -1360,8 +1365,8 @@ extern "C"
ALIGN_RING_LOC( pRingStart, pRingPayload );
memcpy( pRingPayload, i_ringData.iv_pWorkBuf1, ringSize );
- *(pScanRingIndex + ringIndex) = SWIZZLE_2_BYTE((pRingPayload - pRingStart) +
- RING_START_TO_RS4_OFFSET );
+ *(pScanRingIndex + ringIndex) = SWIZZLE_2_BYTE((pRingPayload - pRingStart) + ringStartToHdrOffset);
+
io_cmeRings.setRingOffset( pRingPayload, io_cmeRings.getCommonRingId( ringIndex ));
io_cmeRings.setRingSize( io_cmeRings.getCommonRingId( ringIndex ), ringSize );
@@ -1414,6 +1419,7 @@ extern "C"
uint32_t maxCoreSpecRingLength = 0;
uint32_t ringLength = 0;
uint32_t tempSize = 0;
+ uint32_t ringStartToHdrOffset = ( TOR_VER_ONE == P9_TOR::tor_version() ) ? RING_START_TO_RS4_OFFSET : 0;
do
{
@@ -1525,7 +1531,7 @@ extern "C"
io_cmeRings.setRingOffset( pRingPayload,
io_cmeRings.getInstRingId(0),
( MAX_CORES_PER_EX * exId ) + coreId );
- *(pScanRingIndex + coreId) = SWIZZLE_2_BYTE((pRingPayload - pRingStart ) + RING_START_TO_RS4_OFFSET );
+ *(pScanRingIndex + coreId) = SWIZZLE_2_BYTE((pRingPayload - pRingStart ) + ringStartToHdrOffset);
pRingPayload = pRingPayload + tempSize;
io_cmeRings.setRingSize( io_cmeRings.getInstRingId(0), tempSize, ((MAX_CORES_PER_EX * exId) + coreId) );
@@ -1555,6 +1561,7 @@ extern "C"
uint32_t rc = IMG_BUILD_SUCCESS;
uint32_t tempRingLength = io_ovrdRingLength;
uint32_t tempBufSize = 0;
+ uint32_t ringStartToHdrOffset = ( TOR_VER_ONE == P9_TOR::tor_version() ) ? RING_START_TO_RS4_OFFSET : 0;
RingBucket cmeOvrdRings( PLAT_CME,
(uint8_t*)&i_pHomer->cpmrRegion,
@@ -1606,7 +1613,7 @@ extern "C"
ALIGN_RING_LOC( pOverrideStart, pOverrideRingPayload );
memcpy( pOverrideRingPayload, i_ringData.iv_pWorkBuf2, tempBufSize);
- *(pScanRingIndex + ringIndex) = SWIZZLE_2_BYTE((pOverrideRingPayload - pOverrideStart) + RING_START_TO_RS4_OFFSET);
+ *(pScanRingIndex + ringIndex) = SWIZZLE_2_BYTE((pOverrideRingPayload - pOverrideStart) + ringStartToHdrOffset);
cmeOvrdRings.setRingOffset(pOverrideRingPayload, cmeOvrdRings.getCommonRingId( ringIndex ));
cmeOvrdRings.setRingSize( cmeOvrdRings.getCommonRingId( ringIndex ), tempBufSize );
@@ -1811,6 +1818,7 @@ extern "C"
uint32_t ringIndex = 0;
uint32_t tempLength = 0;
uint32_t tempBufSize = i_ringData.iv_sizeWorkBuf1;
+ uint32_t ringStartToHdrOffset = ( TOR_VER_ONE == P9_TOR::tor_version() ) ? RING_START_TO_RS4_OFFSET : 0;
RingBucket sgpeRings( PLAT_SGPE,
(uint8_t*)&i_pHomer->qpmrRegion,
@@ -1853,7 +1861,7 @@ extern "C"
memcpy( pCmnRingPayload, i_ringData.iv_pWorkBuf1, tempBufSize);
io_sgpeRings.setRingOffset( pCmnRingPayload, io_sgpeRings.getCommonRingId( ringIndex ) );
- *(pCmnRingIndex + ringIndex) = SWIZZLE_2_BYTE((pCmnRingPayload - pRingStart ) + RING_START_TO_RS4_OFFSET );
+ *(pCmnRingIndex + ringIndex) = SWIZZLE_2_BYTE((pCmnRingPayload - pRingStart ) + ringStartToHdrOffset);
io_sgpeRings.setRingSize( io_sgpeRings.getCommonRingId( ringIndex ), tempBufSize );
io_sgpeRings.extractRing( i_ringData.iv_pWorkBuf1, tempBufSize, io_sgpeRings.getCommonRingId( ringIndex ) );
pCmnRingPayload = pCmnRingPayload + tempBufSize;
@@ -1912,6 +1920,7 @@ extern "C"
uint8_t* pRingStart = &i_pHomer->qpmrRegion.sgpeRegion.sgpeSramImage[quadSpecRingStart];
uint8_t* instRingPayLoad = &i_pHomer->qpmrRegion.sgpeRegion.sgpeSramImage[ quadSpecRingStart +
QUAD_SPEC_RING_INDEX_LEN ];
+ uint32_t ringStartToHdrOffset = ( TOR_VER_ONE == P9_TOR::tor_version() ) ? RING_START_TO_RS4_OFFSET : 0;
for( uint32_t cacheInst = 0; cacheInst < MAX_CACHE_CHIPLET; cacheInst++ )
{
@@ -1959,7 +1968,7 @@ extern "C"
memcpy( instRingPayLoad, i_ringData.iv_pWorkBuf1, tempBufSize);
io_sgpeRings.setRingOffset( instRingPayLoad, io_sgpeRings.getInstRingId( ringIndex ), chipletId );
- *(pCmnRingIndex + ringIndex) = SWIZZLE_2_BYTE((instRingPayLoad - pRingStart ) + RING_START_TO_RS4_OFFSET );
+ *(pCmnRingIndex + ringIndex) = SWIZZLE_2_BYTE((instRingPayLoad - pRingStart ) + ringStartToHdrOffset);
io_sgpeRings.setRingSize( io_sgpeRings.getInstRingId( ringIndex ), tempBufSize, chipletId );
instRingPayLoad = instRingPayLoad + tempBufSize;
io_sgpeRings.extractRing( i_ringData.iv_pWorkBuf1, tempBufSize, io_sgpeRings.getInstRingId( ringIndex ) );
OpenPOWER on IntegriCloud