summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures
diff options
context:
space:
mode:
authorClaus Michael Olsen <cmolsen@us.ibm.com>2016-09-29 02:44:19 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2016-09-29 23:25:39 -0400
commit6eabda34fa0adfe714f1e11090383e59ef7516ce (patch)
treec19935bccad6d55e81be456792f5a8f215ac8683 /src/import/chips/p9/procedures
parent74a70a51b6f1a14ca45aa89a8639e741de23a948 (diff)
downloadtalos-hostboot-6eabda34fa0adfe714f1e11090383e59ef7516ce.tar.gz
talos-hostboot-6eabda34fa0adfe714f1e11090383e59ef7516ce.zip
Support for EX VPD instance rings.
Change-Id: I43090f95b6ee2729549d962c1af6827d59b4277c Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/30458 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Dev-Ready: Matt K. Light <mklight@us.ibm.com> Reviewed-by: RANGANATHPRASAD G. BRAHMASAMUDRA <prasadbgr@in.ibm.com> Reviewed-by: Martin Gloff <mgloff@us.ibm.com> Reviewed-by: Benjamin Gass <bgass@us.ibm.com> Reviewed-by: Joseph J. McGill <jmcgill@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/30461 Reviewed-by: Hostboot Team <hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures')
-rw-r--r--src/import/chips/p9/procedures/hwp/accessors/p9_get_mvpd_ring.C27
-rw-r--r--src/import/chips/p9/procedures/hwp/accessors/p9_get_mvpd_ring.H15
-rw-r--r--src/import/chips/p9/procedures/hwp/accessors/p9_mvpd_ring_funcs.C76
-rw-r--r--src/import/chips/p9/procedures/hwp/accessors/p9_mvpd_ring_funcs.H34
-rw-r--r--src/import/chips/p9/procedures/hwp/customize/p9_xip_customize.C602
5 files changed, 402 insertions, 352 deletions
diff --git a/src/import/chips/p9/procedures/hwp/accessors/p9_get_mvpd_ring.C b/src/import/chips/p9/procedures/hwp/accessors/p9_get_mvpd_ring.C
index b7b77ec8a..72f63f030 100644
--- a/src/import/chips/p9/procedures/hwp/accessors/p9_get_mvpd_ring.C
+++ b/src/import/chips/p9/procedures/hwp/accessors/p9_get_mvpd_ring.C
@@ -42,32 +42,35 @@ extern "C"
{
using namespace fapi2;
-// getMvpdRing: Wrapper to call common function mvpdRingFunc
+ // getMvpdRing: Wrapper to call common function mvpdRingFunc
fapi2::ReturnCode getMvpdRing( fapi2::MvpdRecord i_record,
fapi2::MvpdKeyword i_keyword,
const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>
& i_fapiTarget,
const uint8_t i_chipletId,
+ const uint64_t i_evenOddMask,
const uint8_t i_ringId,
- uint8_t* i_pRingBuf,
- uint32_t& io_rRingBufsize)
+ uint8_t* i_pRingBuf,
+ uint32_t& io_rRingBufsize )
{
fapi2::ReturnCode l_fapirc;
- FAPI_DBG("getMvpdRing: entry ringId=0x%x, chipletId=0x%x, size=0x%x ",
+ FAPI_DBG("getMvpdRing: Called w/ringId=0x%x, chipletId=0x%x, evenOddMask=0x%016llx, size=0x%x",
i_ringId,
i_chipletId,
+ i_evenOddMask,
io_rRingBufsize );
// common get and set processing
- l_fapirc = mvpdRingFunc(MVPD_RING_GET,
- i_record,
- i_keyword,
- i_fapiTarget,
- i_chipletId,
- i_ringId,
- i_pRingBuf,
- io_rRingBufsize);
+ l_fapirc = mvpdRingFunc( MVPD_RING_GET,
+ i_record,
+ i_keyword,
+ i_fapiTarget,
+ i_chipletId,
+ i_evenOddMask,
+ i_ringId,
+ i_pRingBuf,
+ io_rRingBufsize );
FAPI_DBG("getMvpdRing: exit rc=0x%x",
diff --git a/src/import/chips/p9/procedures/hwp/accessors/p9_get_mvpd_ring.H b/src/import/chips/p9/procedures/hwp/accessors/p9_get_mvpd_ring.H
index c0ad0ab9a..622c11687 100644
--- a/src/import/chips/p9/procedures/hwp/accessors/p9_get_mvpd_ring.H
+++ b/src/import/chips/p9/procedures/hwp/accessors/p9_get_mvpd_ring.H
@@ -39,10 +39,15 @@ namespace fapi2
{
// function pointer typedef definition for HWP call support
-typedef ReturnCode (*getMvpdRing_FP_t)
-(MvpdRecord, MvpdKeyword,
- const Target<TARGET_TYPE_PROC_CHIP>&,
- const uint8_t, const uint8_t, uint8_t*, uint32_t&);
+typedef ReturnCode (*getMvpdRing_FP_t) (
+ MvpdRecord,
+ MvpdKeyword,
+ const Target<TARGET_TYPE_PROC_CHIP>&,
+ const uint8_t,
+ const uint64_t,
+ const uint8_t,
+ uint8_t*,
+ uint32_t& );
extern "C"
{
@@ -60,6 +65,7 @@ extern "C"
* MVPD_RECORD_CP00 - MVPD_KEYWORD_PDG
* @param i_fapiTarget - cpu target
* @param i_chipletId - Chiplet ID
+ * @param i_evenOddMask - Mask to choose even or odd EX. O for all other chiplets
* @param i_ringId - Ring ID
* @param i_pRingBuf - pointer to a buffer allocated by the caller
* to receive the ring header and data.
@@ -91,6 +97,7 @@ extern "C"
const Target<TARGET_TYPE_PROC_CHIP>&
i_fapiTarget,
const uint8_t i_chipletId,
+ const uint64_t i_evenOddMask,
const uint8_t i_ringId,
uint8_t* io_pRingBuf,
uint32_t& io_rRingBufsize );
diff --git a/src/import/chips/p9/procedures/hwp/accessors/p9_mvpd_ring_funcs.C b/src/import/chips/p9/procedures/hwp/accessors/p9_mvpd_ring_funcs.C
index db02498ec..939ce2619 100644
--- a/src/import/chips/p9/procedures/hwp/accessors/p9_mvpd_ring_funcs.C
+++ b/src/import/chips/p9/procedures/hwp/accessors/p9_mvpd_ring_funcs.C
@@ -59,6 +59,7 @@ extern "C"
fapi2::MvpdRecord i_record,
fapi2::MvpdKeyword i_keyword,
const uint8_t i_chipletId,
+ const uint64_t i_evenOddMask,
const uint8_t i_ringId,
uint8_t* i_pRecordBuf,
uint32_t i_recordBufLenfapi,
@@ -163,6 +164,9 @@ extern "C"
* @param[in] i_chipletId
* Chiplet ID for the op
*
+ * @param[in] i_evenOddMask
+ * Mask to choose even or odd EX. O for all other chiplets
+ *
* @param[in] i_ringId
* Ring ID for the op
*
@@ -176,15 +180,16 @@ extern "C"
*
* @return fapi2::ReturnCode
*/
- fapi2::ReturnCode mvpdRingFunc(const mvpdRingFuncOp i_mvpdRingFuncOp,
- fapi2::MvpdRecord i_record,
- fapi2::MvpdKeyword i_keyword,
- const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>
- & i_fapiTarget,
- const uint8_t i_chipletId,
- const uint8_t i_ringId,
- uint8_t* i_pRingBuf,
- uint32_t& io_rRingBufsize)
+ fapi2::ReturnCode mvpdRingFunc( const mvpdRingFuncOp i_mvpdRingFuncOp,
+ fapi2::MvpdRecord i_record,
+ fapi2::MvpdKeyword i_keyword,
+ const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>
+ & i_fapiTarget,
+ const uint8_t i_chipletId,
+ const uint64_t i_evenOddMask,
+ const uint8_t i_ringId,
+ uint8_t* i_pRingBuf,
+ uint32_t& io_rRingBufsize )
{
fapi2::ReturnCode l_fapirc = fapi2::FAPI2_RC_SUCCESS;
uint32_t l_recordLen = 0;
@@ -192,11 +197,12 @@ extern "C"
uint8_t* l_pRing = NULL;
uint32_t l_ringLen = 0;
- FAPI_DBG("mvpdRingFunc:entry op=0x%x ringId=0x%x chipletId=0x%x "
- "size=0x%x",
+ FAPI_DBG("mvpdRingFunc: Called w/op=0x%x, ringId=0x%x, chipletId=0x%x, "
+ "evenOddMask=0x%016llx, size=0x%x",
i_mvpdRingFuncOp,
i_ringId,
i_chipletId,
+ i_evenOddMask,
io_rRingBufsize );
// do common get and set input parameter error checks
@@ -256,8 +262,9 @@ extern "C"
l_recordBuf,
l_recordLen ),
"mvpdRingFunc: getMvpdField failed "
- "chipletId=0x%x, ringId=0x%x",
+ "chipletId=0x%x, evenOddMask=0x%016llx, ringId=0x%x",
i_chipletId,
+ i_evenOddMask,
i_ringId);
// find ring in the record. It is an error if not there for a "get".
@@ -267,14 +274,16 @@ extern "C"
i_record,
i_keyword,
i_chipletId,
+ i_evenOddMask,
i_ringId,
l_recordBuf,
l_recordLen,
l_pRing,
l_ringLen),
"mvpdRingFunc: mvpdRingFuncFind failed "
- "chipletId=0x%x, ringId=0x%x",
+ "chipletId=0x%x, evenOddMask=0x%016llx, ringId=0x%x",
i_chipletId,
+ i_evenOddMask,
i_ringId);
// do the get or set specific operations
@@ -306,8 +315,9 @@ extern "C"
i_pRingBuf,
io_rRingBufsize),
"mvpdRingFunc: mvpdRingFuncGet failed "
- "chipletId=0x%x, ringId=0x%x",
+ "chipletId=0x%x, evenOddMask=0x%016llx, ringId=0x%x",
i_chipletId,
+ i_evenOddMask,
i_ringId);
}
else // set operation
@@ -371,6 +381,9 @@ extern "C"
* @param[in] i_chipletId
* Chiplet ID for the op
*
+ * @param[in] i_evenOddMask
+ * Mask to choose even or odd EX. O for all other chiplets
+ *
* @param[in] i_ringId
* Ring ID for the op
*
@@ -391,16 +404,17 @@ extern "C"
*
* @return fapi2::ReturnCode
*/
- fapi2::ReturnCode mvpdRingFuncFind(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>
- & i_fapiTarget,
- fapi2::MvpdRecord i_record,
- fapi2::MvpdKeyword i_keyword,
- const uint8_t i_chipletId,
- const uint8_t i_ringId,
- uint8_t* i_pRecordBuf,
- uint32_t i_recordBufLen,
- uint8_t*& o_rpRing,
- uint32_t& o_rRingLen)
+ fapi2::ReturnCode mvpdRingFuncFind( const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>
+ & i_fapiTarget,
+ fapi2::MvpdRecord i_record,
+ fapi2::MvpdKeyword i_keyword,
+ const uint8_t i_chipletId,
+ const uint64_t i_evenOddMask,
+ const uint8_t i_ringId,
+ uint8_t* i_pRecordBuf,
+ uint32_t i_recordBufLen,
+ uint8_t*& o_rpRing,
+ uint32_t& o_rRingLen )
{
fapi2::ReturnCode l_fapirc;
uint8_t* l_pRing = NULL;
@@ -412,9 +426,10 @@ extern "C"
o_rpRing = NULL;
o_rRingLen = 0;
- FAPI_DBG("mvpdRingFuncFind: entry chipletId=0x%x, ringId=0x%x ",
+ FAPI_DBG("mvpdRingFuncFind: Called w/chipletId=0x%x, evenOddMask=0x%016llx, ringId=0x%x ",
i_chipletId,
- i_ringId );
+ i_evenOddMask,
+ i_ringId);
do
{
@@ -483,13 +498,15 @@ extern "C"
be32toh(l_pScanData->iv_size) );
- if ( (l_pScanData->iv_ringId == i_ringId)
- && (l_pScanData->iv_chipletId == i_chipletId) )
+ if ( l_pScanData->iv_ringId == i_ringId &&
+ l_pScanData->iv_chipletId == i_chipletId &&
+ ( i_evenOddMask == 0 || (be64toh(l_pScanData->iv_scanSelect) & i_evenOddMask) ) )
{
FAPI_DBG( "mvpdRingFuncFind: Found it: ringId=0x%x, "
- "chiplet=0x%x, ringlen=0x%x",
+ "chipletId=0x%x, evenOddMask=0x%016llx, ringlen=0x%x",
i_ringId,
i_chipletId,
+ i_evenOddMask,
be32toh(l_pScanData->iv_length) );
// shouldn't happen, but does not all fit
@@ -759,6 +776,7 @@ extern "C"
i_keyword,
0x00,
0x00,
+ 0x00,
i_pRecordBuf,
i_recordLen,
l_pRingEnd, // find start of padding
diff --git a/src/import/chips/p9/procedures/hwp/accessors/p9_mvpd_ring_funcs.H b/src/import/chips/p9/procedures/hwp/accessors/p9_mvpd_ring_funcs.H
index 636c65140..6965d4b1b 100644
--- a/src/import/chips/p9/procedures/hwp/accessors/p9_mvpd_ring_funcs.H
+++ b/src/import/chips/p9/procedures/hwp/accessors/p9_mvpd_ring_funcs.H
@@ -46,10 +46,16 @@ enum mvpdRingFuncOp
MVPD_RING_SET,
};
-typedef ReturnCode (*mvpdRingFuncs_FP_t)
-(mvpdRingFuncOp, MvpdRecord, MvpdKeyword,
- const Target<TARGET_TYPE_PROC_CHIP>&,
- const uint8_t, const uint8_t, uint8_t*, uint32_t&);
+typedef ReturnCode (*mvpdRingFuncs_FP_t) (
+ mvpdRingFuncOp,
+ MvpdRecord,
+ MvpdKeyword,
+ const Target<TARGET_TYPE_PROC_CHIP>&,
+ const uint8_t,
+ const uint64_t,
+ const uint8_t,
+ uint8_t*,
+ uint32_t& );
extern "C"
{
@@ -66,6 +72,7 @@ extern "C"
* @param i_keyword - Keyword enumerator
* @param i_fapiTarget - cpu target
* @param i_chipletId - Chiplet ID
+ * @param i_evenOddMask - Mask to choose even or odd EX. O for all other chiplets
* @param i_ringId - Ring ID
* @param i_pRingBuf - The buffer to receive or send the ring
* @param io_rRingBufsize - Size of ring / ring buffer
@@ -73,15 +80,16 @@ extern "C"
* @return fapi2::ReturnCode - FAPI_RC_SUCCESS if success,
* relevant error code for failure.
*/
- ReturnCode mvpdRingFunc(mvpdRingFuncOp i_mvpdRingFuncOp,
- MvpdRecord i_record,
- MvpdKeyword i_keyword,
- const Target<TARGET_TYPE_PROC_CHIP>&
- i_fapiTarget,
- const uint8_t i_chipletId,
- const uint8_t i_ringId,
- uint8_t* i_pRingBuf,
- uint32_t& io_rRingBufsize);
+ ReturnCode mvpdRingFunc( mvpdRingFuncOp i_mvpdRingFuncOp,
+ MvpdRecord i_record,
+ MvpdKeyword i_keyword,
+ const Target<TARGET_TYPE_PROC_CHIP>&
+ i_fapiTarget,
+ const uint8_t i_chipletId,
+ const uint64_t i_evenOddMask,
+ const uint8_t i_ringId,
+ uint8_t* i_pRingBuf,
+ uint32_t& io_rRingBufsize );
} // extern "C"
} // namespace fapi
diff --git a/src/import/chips/p9/procedures/hwp/customize/p9_xip_customize.C b/src/import/chips/p9/procedures/hwp/customize/p9_xip_customize.C
index a28476393..97ba4c63b 100644
--- a/src/import/chips/p9/procedures/hwp/customize/p9_xip_customize.C
+++ b/src/import/chips/p9/procedures/hwp/customize/p9_xip_customize.C
@@ -155,9 +155,13 @@ fapi2::ReturnCode _fetch_and_insert_vpd_rings(
ReturnCode l_fapiRc = fapi2::FAPI2_RC_SUCCESS;
int l_rc = 0;
- uint8_t iRingsPerChipletId, l_ringsPerChipletId = 0;
- uint16_t l_instanceIdMax;
- uint8_t bSkipRing = 0;
+ uint8_t l_chipletId;
+ uint8_t l_ringsPerChipletId = 0;
+ uint8_t l_instanceIdMax;
+ uint8_t l_evenOdd;
+ uint64_t l_evenOddMaskStart;
+ uint64_t l_evenOddMask;
+ uint8_t bSkipRing = 0;
FAPI_DBG("Entering _fetch_and_insert_vpd_rings");
@@ -170,19 +174,20 @@ fapi2::ReturnCode _fetch_and_insert_vpd_rings(
goto fapi_try_exit;
}
- // For EX rings, there's two [identical] rings listed in Mvpd per [EQ] chipletId
- // listed in ring_identification.C: One for each of the two cores, even and odd.
+ // For EX rings, there's two rings listed in the Mvpd per [EQ] chipletId
+ // listed in ring_identification.C: One for each of the two EX, even and odd.
// Each of these two rings have the same [EQ] chipletId encoded in their
// iv_chipletId (current RS4 header) or iv_scanAddress (next gen RS4 header).
- // So for each chipletId listed in ring_identification.C we need to fetch and
- // append two Mvpd rings.
- if (i_ring.vpdRingClass == VPD_RING_CLASS_EX)
+ // They are distinguished by their even-odd bits 12-13 in iv_scanSelect.
+ if (i_ring.vpdRingClass == VPD_RING_CLASS_EX_INS)
{
- l_ringsPerChipletId = 1; // Will be =2 when we start RS4v2 header support.
+ l_ringsPerChipletId = 2;
+ l_evenOddMaskStart = ((uint64_t)0x00080000) << 32;
}
else
{
l_ringsPerChipletId = 1;
+ l_evenOddMaskStart = 0;
}
@@ -199,106 +204,140 @@ fapi2::ReturnCode _fetch_and_insert_vpd_rings(
l_instanceIdMax = i_ring.instanceIdMax;
}
- for (auto l_chipletId = i_ring.instanceIdMin; l_chipletId <= l_instanceIdMax; l_chipletId++)
+ for (l_chipletId = i_ring.instanceIdMin; l_chipletId <= l_instanceIdMax; l_chipletId++)
{
- FAPI_INF("_fetch_and_insert_vpd_rings: (ringId,chipletId) = (0x%02X,0x%02x)",
- i_ring.ringId, l_chipletId);
+ for (l_evenOdd = 0; l_evenOdd < l_ringsPerChipletId; l_evenOdd++)
+ {
- auto l_vpdRingSize = i_vpdRingSize;
- MvpdKeyword l_mvpdKeyword;
+ l_evenOddMask = l_evenOddMaskStart >> l_evenOdd;
- switch (i_ring.vpdKeyword)
- {
- case VPD_KEYWORD_PDG: // #G Time rings
- l_mvpdKeyword = fapi2::MVPD_KEYWORD_PDG;
- break;
- case VPD_KEYWORD_PDR: // #R Repair rings
- l_mvpdKeyword = fapi2::MVPD_KEYWORD_PDR;
- break;
+ FAPI_INF("_fetch_and_insert_vpd_rings: (ringId,chipletId) = (0x%02X,0x%02x)",
+ i_ring.ringId, l_chipletId);
- default:
- FAPI_ASSERT( false,
- fapi2::XIPC_INVALID_VPD_KEYWORD().
- set_CHIP_TARGET(i_proc_target).
- set_VPD_KEYWORD(i_ring.vpdKeyword),
- "Code bug: Unsupported value of vpdKeyword (=%d)",
- i_ring.vpdKeyword );
- break;
- }
+ auto l_vpdRingSize = i_vpdRingSize;
+ MvpdKeyword l_mvpdKeyword;
+ switch (i_ring.vpdKeyword)
+ {
+ case VPD_KEYWORD_PDG: // #G Time rings
+ l_mvpdKeyword = fapi2::MVPD_KEYWORD_PDG;
+ break;
+
+ case VPD_KEYWORD_PDR: // #R Repair rings
+ l_mvpdKeyword = fapi2::MVPD_KEYWORD_PDR;
+ break;
+
+ default:
+ FAPI_ASSERT( false,
+ fapi2::XIPC_INVALID_VPD_KEYWORD().
+ set_CHIP_TARGET(i_proc_target).
+ set_VPD_KEYWORD(i_ring.vpdKeyword),
+ "Code bug: Unsupported value of vpdKeyword (=%d)",
+ i_ring.vpdKeyword );
+ break;
+ }
- /////////////////////////////////////////////////////////////////////
- // Fetch rings from the MVPD:
- /////////////////////////////////////////////////////////////////////
- // If an EC ring is an instance ring, then check if EC chipletId is represented in bootCoreMask,
- // and only fetch if it is.
- // If an EX/EQ ring is an instance ring, then check if the associated EC chipletId range in
- // in bootCoreMask is represented by at least one EC chipletId, and fetch it if it is.
- // Otherwise the ring is a common ring which we always must fetch.
+ /////////////////////////////////////////////////////////////////////
+ // Fetch rings from the MVPD:
+ /////////////////////////////////////////////////////////////////////
- bSkipRing = 0;
+ // If an EC ring is an instance ring, then check if EC chipletId is represented in bootCoreMask,
+ // and only fetch if it is.
+ // If an EX/EQ ring is an instance ring, then check if the associated EC chipletId range in
+ // in bootCoreMask is represented by at least one EC chipletId, and fetch it if it is.
+ // Otherwise the ring is a common ring which we always must fetch.
- if ( i_ring.vpdRingClass == VPD_RING_CLASS_EQ_INS &&
- (i_sysPhase == SYSPHASE_HB_SBE || i_sysPhase == SYSPHASE_RT_SGPE) )
- {
- // Fetch EQ instance ring
- // - Fetch for SBE and SGPE only.
+ bSkipRing = 0;
- if ( ((0x0000000F << ((NUM_OF_QUADS - 1)*CORES_PER_QUAD)) >> ((l_chipletId - i_ring.instanceIdMin)*CORES_PER_QUAD)) &
- io_bootCoreMask )
+ if ( i_ring.vpdRingClass == VPD_RING_CLASS_EQ_INS &&
+ (i_sysPhase == SYSPHASE_HB_SBE || i_sysPhase == SYSPHASE_RT_SGPE) )
{
- l_fapiRc = getMvpdRing( MVPD_RECORD_CP00,
- l_mvpdKeyword,
- i_proc_target,
- l_chipletId,
- i_ring.ringId,
- (uint8_t*)i_vpdRing,
- l_vpdRingSize );
+ // Fetch EQ instance ring
+ // - Fetch for SBE and SGPE only.
+
+ if ( ((0x0000000F << ((NUM_OF_QUADS - 1)*CORES_PER_QUAD)) >> ((l_chipletId - i_ring.instanceIdMin)*CORES_PER_QUAD)) &
+ io_bootCoreMask )
+ {
+ l_fapiRc = getMvpdRing( MVPD_RECORD_CP00,
+ l_mvpdKeyword,
+ i_proc_target,
+ l_chipletId,
+ l_evenOddMask,
+ i_ring.ringId,
+ (uint8_t*)i_vpdRing,
+ l_vpdRingSize );
+ }
+ else
+ {
+ bSkipRing = 1;
+ }
+
}
- else
+ else if ( i_ring.vpdRingClass == VPD_RING_CLASS_EX_INS &&
+ (i_sysPhase == SYSPHASE_HB_SBE || i_sysPhase == SYSPHASE_RT_SGPE) )
{
- bSkipRing = 1;
- }
+ // Fetch EX instance ring
+ // - Fetch for SBE and SGPE only.
- }
- else if ( i_ring.vpdRingClass == VPD_RING_CLASS_EX_INS &&
- (i_sysPhase == SYSPHASE_HB_SBE || i_sysPhase == SYSPHASE_RT_SGPE) )
- {
- // Fetch EX instance ring
- // - Fetch for SBE and SGPE only.
+ if ( ((0x0000000F << ((NUM_OF_QUADS - 1)*CORES_PER_QUAD)) >> ((l_chipletId - i_ring.instanceIdMin)*CORES_PER_QUAD)) &
+ io_bootCoreMask )
+ {
+ l_fapiRc = getMvpdRing( MVPD_RECORD_CP00,
+ l_mvpdKeyword,
+ i_proc_target,
+ l_chipletId,
+ l_evenOddMask,
+ i_ring.ringId,
+ (uint8_t*)i_vpdRing,
+ l_vpdRingSize );
+ }
+ else
+ {
+ bSkipRing = 1;
+ }
- if ( ((0x0000000F << ((NUM_OF_QUADS - 1)*CORES_PER_QUAD)) >> ((l_chipletId - i_ring.instanceIdMin)*CORES_PER_QUAD)) &
- io_bootCoreMask )
- {
- l_fapiRc = getMvpdRing( MVPD_RECORD_CP00,
- l_mvpdKeyword,
- i_proc_target,
- l_chipletId,
- i_ring.ringId,
- (uint8_t*)i_vpdRing,
- l_vpdRingSize );
}
- else
+ else if ( i_ring.vpdRingClass == VPD_RING_CLASS_EC_INS &&
+ (i_sysPhase == SYSPHASE_HB_SBE || i_sysPhase == SYSPHASE_RT_CME) )
{
- bSkipRing = 1;
- }
+ // Fetch EC instance ring
+ // - Fetch for SBE and CME only.
- }
- else if ( i_ring.vpdRingClass == VPD_RING_CLASS_EC_INS &&
- (i_sysPhase == SYSPHASE_HB_SBE || i_sysPhase == SYSPHASE_RT_CME) )
- {
- // Fetch EC instance ring
- // - Fetch for SBE and CME only.
+ if ( ((0x00000001 << (NUM_OF_CORES - 1)) >> (l_chipletId - i_ring.instanceIdMin)) & io_bootCoreMask )
+ {
+ l_fapiRc = getMvpdRing( MVPD_RECORD_CP00,
+ l_mvpdKeyword,
+ i_proc_target,
+ l_chipletId,
+ l_evenOddMask,
+ i_ring.ringId,
+ (uint8_t*)i_vpdRing,
+ l_vpdRingSize );
+ }
+ else
+ {
+ bSkipRing = 1;
+ }
- if ( ((0x00000001 << (NUM_OF_CORES - 1)) >> (l_chipletId - i_ring.instanceIdMin)) & io_bootCoreMask )
+ }
+ else if ( i_sysPhase == SYSPHASE_HB_SBE ||
+ (i_sysPhase == SYSPHASE_RT_CME && i_ring.vpdRingClass == VPD_RING_CLASS_EC) ||
+ (i_sysPhase == SYSPHASE_RT_SGPE && (i_ring.vpdRingClass == VPD_RING_CLASS_EX ||
+ i_ring.vpdRingClass == VPD_RING_CLASS_EQ)) )
{
+ // Fetch common ring
+ // - Fetch all VPD rings for SBE.
+ // - Fetch only EC VPD rings for CME.
+ // - Fetch only EX+EQ VPD rings for SGPE.
+
l_fapiRc = getMvpdRing( MVPD_RECORD_CP00,
l_mvpdKeyword,
i_proc_target,
l_chipletId,
+ l_evenOddMask,
i_ring.ringId,
(uint8_t*)i_vpdRing,
l_vpdRingSize );
@@ -308,149 +347,129 @@ fapi2::ReturnCode _fetch_and_insert_vpd_rings(
bSkipRing = 1;
}
- }
- else if ( i_sysPhase == SYSPHASE_HB_SBE ||
- (i_sysPhase == SYSPHASE_RT_CME && i_ring.vpdRingClass == VPD_RING_CLASS_EC) ||
- (i_sysPhase == SYSPHASE_RT_SGPE && (i_ring.vpdRingClass == VPD_RING_CLASS_EX ||
- i_ring.vpdRingClass == VPD_RING_CLASS_EQ)) )
- {
- // Fetch common ring
- // - Fetch all VPD rings for SBE.
- // - Fetch only EC VPD rings for CME.
- // - Fetch only EX+EQ VPD rings for SGPE.
-
- l_fapiRc = getMvpdRing( MVPD_RECORD_CP00,
- l_mvpdKeyword,
- i_proc_target,
- l_chipletId,
- i_ring.ringId,
- (uint8_t*)i_vpdRing,
- l_vpdRingSize );
- }
- else
- {
- bSkipRing = 1;
- }
-
-
- ///////////////////////////////////////////////////////////////////////
- //Append VPD ring to the ring section
- ///////////////////////////////////////////////////////////////////////
-
- if (bSkipRing)
- {
- continue;
- }
- else if (l_fapiRc == fapi2::FAPI2_RC_SUCCESS)
- {
-
- auto l_vpdChipletId = ((CompressedScanData*)i_vpdRing)->iv_chipletId;
- // Even though success, checking that chipletId didn't somehow get
- // messed up (code bug).
- //@TODO: Modify this when chipletId becomes part of iv_scanAddress
- // as part of RS4 shrinkage (RTC158101).
- FAPI_ASSERT( l_vpdChipletId == l_chipletId,
- fapi2::XIPC_MVPD_CHIPLET_ID_MESS().
- set_CHIP_TARGET(i_proc_target).
- set_CHIPLET_ID(l_chipletId).
- set_MVPD_CHIPLET_ID(l_vpdChipletId).
- set_RING_ID(i_ring.ringId),
- "_fetch_and_insert_vpd_rings: Code bug: VPD ring's chipletId"
- " in scan container (=0x%X) doesn't match the requested"
- " chipletId (=0x%X)",
- l_vpdChipletId, l_chipletId );
-
- // Even though success, checking for accidental buffer overflow (code bug).
- FAPI_ASSERT( l_vpdRingSize <= i_vpdRingSize,
- fapi2::XIPC_MVPD_RING_SIZE_MESS().
- set_CHIP_TARGET(i_proc_target).
- set_RING_ID(i_ring.ringId).
- set_CHIPLET_ID(l_chipletId).
- set_RING_BUFFER_SIZE(i_vpdRingSize).
- set_MVPD_RING_SIZE(l_vpdRingSize),
- "_fetch_and_insert_vpd_rings: Code bug: VPD ring size (=0x%X) exceeds"
- " allowed ring buffer size (=0x%X)",
- l_vpdRingSize, i_vpdRingSize );
-
- //@TODO: Remove following line asap. Temporary fix until Sgro starts using
- // latest p9_scan_compression.H.
- // Also fix p9_mvpd_ring_funcs.C to look for entire RS4_MAGIC string.
- // Actually, do all the above in connection with RS4 header
- // shrinkage (RTC158101 and RTC159801).
- ((CompressedScanData*)i_vpdRing)->iv_magic = htobe32(RS4_MAGIC);
-
- // Check if ring is a flush ring, i.e. if it is redundant, meaning that it will
- // result in no change.
- int redundant = 0;
- l_rc = rs4_redundant((CompressedScanData*)i_vpdRing, &redundant);
- FAPI_ASSERT( l_rc == 0,
- fapi2::XIPC_RS4_REDUNDANT_ERROR().
- set_CHIP_TARGET(i_proc_target).
- set_RING_ID(i_ring.ringId).
- set_CHIPLET_ID(l_chipletId),
- "rs4_redundant: Failed w/rc=%i for "
- "ringId=0x%02X, chipletId=0x%02X ",
- l_rc, i_ring.ringId, l_chipletId );
+ ///////////////////////////////////////////////////////////////////////
+ //Append VPD ring to the ring section
+ ///////////////////////////////////////////////////////////////////////
- if (redundant)
+ if (bSkipRing)
{
- FAPI_DBG("Skipping redundant VPD ring: ringId=0x%02X, chipletId=0x%02X ", i_ring.ringId, l_chipletId);
- fapi2::current_err = fapi2::FAPI2_RC_SUCCESS;
- // Note that we do not want to exit here. There could be content in the next
- // instance. We're just not appending the current redundant one.
+ continue;
}
- else
+ else if (l_fapiRc == fapi2::FAPI2_RC_SUCCESS)
{
- //@TODO: Temporary fix to convert VPD RS4 container format to
- // to RingLayout format. Remove/replace in connection
- // with RS4 header shrinkage (RTC158101)
- uint32_t i;
+ auto l_vpdChipletId = ((CompressedScanData*)i_vpdRing)->iv_chipletId;
- for (i = 0; i < l_vpdRingSize; i++)
+ // Even though success, checking that chipletId didn't somehow get
+ // messed up (code bug).
+ //@TODO: Modify this when chipletId becomes part of iv_scanAddress
+ // as part of RS4 shrinkage (RTC158101).
+ FAPI_ASSERT( l_vpdChipletId == l_chipletId,
+ fapi2::XIPC_MVPD_CHIPLET_ID_MESS().
+ set_CHIP_TARGET(i_proc_target).
+ set_CHIPLET_ID(l_chipletId).
+ set_MVPD_CHIPLET_ID(l_vpdChipletId).
+ set_RING_ID(i_ring.ringId),
+ "_fetch_and_insert_vpd_rings: Code bug: VPD ring's chipletId"
+ " in scan container (=0x%X) doesn't match the requested"
+ " chipletId (=0x%X)",
+ l_vpdChipletId, l_chipletId );
+
+ // Even though success, checking for accidental buffer overflow (code bug).
+ FAPI_ASSERT( l_vpdRingSize <= i_vpdRingSize,
+ fapi2::XIPC_MVPD_RING_SIZE_MESS().
+ set_CHIP_TARGET(i_proc_target).
+ set_RING_ID(i_ring.ringId).
+ set_CHIPLET_ID(l_chipletId).
+ set_RING_BUFFER_SIZE(i_vpdRingSize).
+ set_MVPD_RING_SIZE(l_vpdRingSize),
+ "_fetch_and_insert_vpd_rings: Code bug: VPD ring size (=0x%X) exceeds"
+ " allowed ring buffer size (=0x%X)",
+ l_vpdRingSize, i_vpdRingSize );
+
+ //@TODO: Remove following line asap. Temporary fix until Sgro starts using
+ // latest p9_scan_compression.H.
+ // Also fix p9_mvpd_ring_funcs.C to look for entire RS4_MAGIC string.
+ // Actually, do all the above in connection with RS4 header
+ // shrinkage (RTC158101 and RTC159801).
+ ((CompressedScanData*)i_vpdRing)->iv_magic = htobe32(RS4_MAGIC);
+
+ // Check if ring is a flush ring, i.e. if it is redundant, meaning that it will
+ // result in no change.
+ int redundant = 0;
+ l_rc = rs4_redundant((CompressedScanData*)i_vpdRing, &redundant);
+ FAPI_ASSERT( l_rc == 0,
+ fapi2::XIPC_RS4_REDUNDANT_ERROR().
+ set_CHIP_TARGET(i_proc_target).
+ set_RING_ID(i_ring.ringId).
+ set_CHIPLET_ID(l_chipletId),
+ "rs4_redundant: Failed w/rc=%i for "
+ "ringId=0x%02X, chipletId=0x%02X ",
+ l_rc, i_ring.ringId, l_chipletId );
+
+ if (redundant)
{
- *(((uint8_t*)i_vpdRing) + l_vpdRingSize - 1 + sizeof(P9_TOR::RingLayout_t) - i) =
- *(((uint8_t*)i_vpdRing) + l_vpdRingSize - 1 - i);
+ FAPI_DBG("Skipping redundant VPD ring: ringId=0x%02X, chipletId=0x%02X ", i_ring.ringId, l_chipletId);
+ fapi2::current_err = fapi2::FAPI2_RC_SUCCESS;
+ // Note that we do not want to exit here. There could be content in the next
+ // instance. We're just not appending the current redundant one.
}
+ else
+ {
- uint32_t l_sizeOfThisRing = l_vpdRingSize + sizeof(P9_TOR::RingLayout_t);
- ((P9_TOR::RingLayout_t*)i_vpdRing)->sizeOfThis = htobe32(l_sizeOfThisRing);
- ((P9_TOR::RingLayout_t*)i_vpdRing)->sizeOfCmsk = 0;
- ((P9_TOR::RingLayout_t*)i_vpdRing)->sizeOfMeta = 0;
+ //@TODO: Temporary fix to convert VPD RS4 container format to
+ // to RingLayout format. Remove/replace in connection
+ // with RS4 header shrinkage (RTC158101)
+ uint32_t i;
- // Checking for potential image overflow BEFORE appending the ring.
- if ( (io_ringSectionSize + l_sizeOfThisRing) > i_maxRingSectionSize )
- {
- //@TODO: We can't update bootCoreMask until RTC158106. So for now
- // we're simply returning the requested bootCoreMask. Thus,
- // should there be an overflow condition before RTC158106
- // gets implemented (i.e., inserting VPD rings in EC order),
- // we would manually have to scale back on the requested
- // cores in the initialled supplied io_bootCoreMask arg to
- // xip_customize.
- FAPI_ASSERT( false,
- fapi2::XIPC_IMAGE_WOULD_OVERFLOW().
- set_CHIP_TARGET(i_proc_target).
- set_CURRENT_RING_SECTION_SIZE(io_ringSectionSize).
- set_SIZE_OF_THIS_RING(l_sizeOfThisRing).
- set_MAX_RING_SECTION_SIZE(i_maxRingSectionSize).
- set_RING_ID(i_ring.ringId).
- set_CHIPLET_ID(l_chipletId).
- set_CURRENT_BOOT_CORE_MASK(io_bootCoreMask),
- "Ran out of image buffer space trying to append a ring"
- " to the .rings section" );
- }
+ for (i = 0; i < l_vpdRingSize; i++)
+ {
+ *(((uint8_t*)i_vpdRing) + l_vpdRingSize - 1 + sizeof(P9_TOR::RingLayout_t) - i) =
+ *(((uint8_t*)i_vpdRing) + l_vpdRingSize - 1 - i);
+ }
- //------------------------------------------
- // Now, append the ring to the ring section
- //------------------------------------------
- switch (i_sysPhase)
- {
+ uint32_t l_sizeOfThisRing = l_vpdRingSize + sizeof(P9_TOR::RingLayout_t);
+ ((P9_TOR::RingLayout_t*)i_vpdRing)->sizeOfThis = htobe32(l_sizeOfThisRing);
+ ((P9_TOR::RingLayout_t*)i_vpdRing)->sizeOfCmsk = 0;
+ ((P9_TOR::RingLayout_t*)i_vpdRing)->sizeOfMeta = 0;
- case SYSPHASE_HB_SBE:
- for (iRingsPerChipletId = 0; iRingsPerChipletId < l_ringsPerChipletId; iRingsPerChipletId++)
- {
+ // Checking for potential image overflow BEFORE appending the ring.
+ if ( (io_ringSectionSize + l_sizeOfThisRing) > i_maxRingSectionSize )
+ {
+ //@TODO: We can't update bootCoreMask until RTC158106. So for now
+ // we're simply returning the requested bootCoreMask. Thus,
+ // should there be an overflow condition before RTC158106
+ // gets implemented (i.e., inserting VPD rings in EC order),
+ // we would manually have to scale back on the requested
+ // cores in the initialled supplied io_bootCoreMask arg to
+ // xip_customize.
+ FAPI_ASSERT( false,
+ fapi2::XIPC_IMAGE_WOULD_OVERFLOW().
+ set_CHIP_TARGET(i_proc_target).
+ set_CURRENT_RING_SECTION_SIZE(io_ringSectionSize).
+ set_SIZE_OF_THIS_RING(l_sizeOfThisRing).
+ set_MAX_RING_SECTION_SIZE(i_maxRingSectionSize).
+ set_RING_ID(i_ring.ringId).
+ set_CHIPLET_ID(l_chipletId).
+ set_CURRENT_BOOT_CORE_MASK(io_bootCoreMask),
+ "Ran out of image buffer space trying to append a ring"
+ " to the .rings section" );
+ }
+
+ //------------------------------------------
+ // Now, append the ring to the ring section
+ //------------------------------------------
+
+ // Calculate the chiplet TOR index
+ uint8_t l_chipletTorId = l_chipletId +
+ (l_chipletId - i_ring.instanceIdMin ) * (l_ringsPerChipletId - 1) +
+ l_evenOdd;
+
+ switch (i_sysPhase)
+ {
+
+ case SYSPHASE_HB_SBE:
l_rc = tor_append_ring(
i_ringSection,
io_ringSectionSize, // In: Exact size. Out: Updated size.
@@ -460,13 +479,13 @@ fapi2::ReturnCode _fetch_and_insert_vpd_rings(
P9_TOR::SBE, // We're working on the SBE image
P9_TOR::ALLRING, // No-care
BASE, // All VPD rings are Base ringVariant
- l_chipletId, // Chiplet instance ID
+ l_chipletTorId, // Chiplet instance TOR Index
i_vpdRing ); // The VPD RS4 ring container
if (l_rc == IMGBUILD_TGR_TOR_PUT_RING_DONE)
{
- FAPI_INF("Successfully added VPD ring: (ringId,chipletId)=(0x%02X,0x%02X)",
- i_ring.ringId, l_chipletId);
+ FAPI_INF("Successfully added VPD ring: (ringId,evenOdd,chipletId)=(0x%02X,0x%X,0x%02X)",
+ i_ring.ringId, l_evenOdd, l_chipletId);
}
else
{
@@ -477,13 +496,10 @@ fapi2::ReturnCode _fetch_and_insert_vpd_rings(
"tor_append_ring() failed w/l_rc=%d",
l_rc );
}
- }
- break;
+ break;
- case SYSPHASE_RT_CME:
- for (iRingsPerChipletId = 0; iRingsPerChipletId < l_ringsPerChipletId; iRingsPerChipletId++)
- {
+ case SYSPHASE_RT_CME:
l_rc = tor_append_ring(
i_ringSection,
io_ringSectionSize, // In: Exact size. Out: Updated size.
@@ -493,13 +509,13 @@ fapi2::ReturnCode _fetch_and_insert_vpd_rings(
P9_TOR::CME, // We're working on the SBE image
P9_TOR::ALLRING, // No-care
BASE, // All VPD rings are Base ringVariant
- l_chipletId, // Chiplet instance ID
+ l_chipletTorId, // Chiplet instance ID
i_vpdRing ); // The VPD RS4 ring container
if (l_rc == IMGBUILD_TGR_TOR_PUT_RING_DONE)
{
- FAPI_INF("Successfully added VPD ring: (ringId,chipletId)=(0x%02X,0x%02X)",
- i_ring.ringId, l_chipletId);
+ FAPI_INF("Successfully added VPD ring: (ringId,evenOdd,chipletId)=(0x%02X,0x%X,0x%02X)",
+ i_ring.ringId, l_evenOdd, l_chipletId);
}
else
{
@@ -512,13 +528,10 @@ fapi2::ReturnCode _fetch_and_insert_vpd_rings(
}
FAPI_DBG("(After tor_append) io_ringSectionSize = %d", io_ringSectionSize);
- }
- break;
+ break;
- case SYSPHASE_RT_SGPE:
- for (iRingsPerChipletId = 0; iRingsPerChipletId < l_ringsPerChipletId; iRingsPerChipletId++)
- {
+ case SYSPHASE_RT_SGPE:
l_rc = tor_append_ring(
i_ringSection,
io_ringSectionSize, // In: Exact size. Out: Updated size.
@@ -528,13 +541,13 @@ fapi2::ReturnCode _fetch_and_insert_vpd_rings(
P9_TOR::SGPE, // We're working on the SGPE image
P9_TOR::ALLRING, // No-care
BASE, // All VPD rings are Base ringVariant
- l_chipletId, // Chiplet instance ID
+ l_chipletTorId, // Chiplet instance ID
i_vpdRing ); // The VPD RS4 ring container
if (l_rc == IMGBUILD_TGR_TOR_PUT_RING_DONE)
{
- FAPI_INF("Successfully added VPD ring: (ringId,chipletId)=(0x%02X,0x%02X)",
- i_ring.ringId, l_chipletId);
+ FAPI_INF("Successfully added VPD ring: (ringId,evenOdd,chipletId)=(0x%02X,0x%X,0x%02X)",
+ i_ring.ringId, l_evenOdd, l_chipletId);
}
else
{
@@ -547,77 +560,78 @@ fapi2::ReturnCode _fetch_and_insert_vpd_rings(
}
FAPI_DBG("(After tor_append) io_ringSectionSize = %d", io_ringSectionSize);
- }
- break;
+ break;
- default:
- FAPI_ASSERT( false,
- fapi2::XIPC_INVALID_SYSPHASE_PARM().
- set_CHIP_TARGET(i_proc_target).
- set_SYSPHASE(i_sysPhase).
- set_OCCURRENCE(2),
- "Code bug: Unsupported value of sysPhase (=%d)",
- i_sysPhase );
- break;
- } // End switch(sysPhase)
+ default:
+ FAPI_ASSERT( false,
+ fapi2::XIPC_INVALID_SYSPHASE_PARM().
+ set_CHIP_TARGET(i_proc_target).
+ set_SYSPHASE(i_sysPhase).
+ set_OCCURRENCE(2),
+ "Code bug: Unsupported value of sysPhase (=%d)",
+ i_sysPhase );
+ break;
+ } // End switch(sysPhase)
- } // End if(redundant)
-
- }
- else if (l_fapiRc.isRC(RC_MVPD_RING_NOT_FOUND))
- {
+ } // End if(redundant)
- // No match, do nothing. Next chipletId.
- //@TODO: Uncomment the following after PowerOn. Also, need to come
- // to agreement whether this should be fatal error or not.
- // For now, for PO, it's considered benigh and noise and is
- // being commented out.
- //FAPI_INF("_fetch_and_insert_vpd_rings():"
- // "(ringId,chipletId)=(0x%X,0x%X) not found.",
- // i_ring.ringId, l_chipletId);
+ }
+ else if (l_fapiRc.isRC(RC_MVPD_RING_NOT_FOUND))
+ {
- fapi2::current_err = fapi2::FAPI2_RC_SUCCESS;
+ // No match, do nothing. Next chipletId.
+ //@TODO: Uncomment the following after PowerOn. Also, need to come
+ // to agreement whether this should be fatal error or not.
+ // For now, for PO, it's considered benigh and noise and is
+ // being commented out.
+ //FAPI_INF("_fetch_and_insert_vpd_rings():"
+ // "(ringId,chipletId)=(0x%X,0x%X) not found.",
+ // i_ring.ringId, l_chipletId);
- }
- else
- {
- //--------------------------
- // Handle other error cases
- //--------------------------
-
- // getMvpdRing failed due to insufficient ring buffer space.
- // Assumption here is that getMvpdRing returns required buffer size
- // in l_vpdRingSize (and which it does!).
- FAPI_ASSERT( !l_fapiRc.isRC(RC_MVPD_RING_BUFFER_TOO_SMALL),
- fapi2::XIPC_MVPD_RING_SIZE_TOO_BIG().
- set_CHIP_TARGET(i_proc_target).
- set_RING_ID(i_ring.ringId).
- set_CHIPLET_ID(l_chipletId).
- set_RING_BUFFER_SIZE(i_vpdRingSize).
- set_MVPD_RING_SIZE(l_vpdRingSize),
- "_fetch_and_insert_vpd_rings(): VPD ring size (=0x%X) exceeds"
- " allowed ring buffer size (=0x%X)",
- l_vpdRingSize, i_vpdRingSize );
-
- // getMvpdRing failed due to invalid record data magic word.
- FAPI_ASSERT( !l_fapiRc.isRC(RC_MVPD_INVALID_RS4_HEADER),
- fapi2::XIPC_MVPD_INVALID_RECORD_DATA().
- set_CHIP_TARGET(i_proc_target).
- set_RING_ID(i_ring.ringId).
- set_CHIPLET_ID(l_chipletId),
- "_fetch_and_insert_vpd_rings(): MVPD has invalid record data" );
+ fapi2::current_err = fapi2::FAPI2_RC_SUCCESS;
- // getMvpdRing failed for some other reason aside from above handled cases.
- if (l_fapiRc != fapi2::FAPI2_RC_SUCCESS)
- {
- FAPI_ERR("_fetch_and_insert_vpd_rings(): getMvpdRing failed "
- " w/rc=0x%08X", (uint64_t)l_fapiRc);
- fapi2::current_err = l_fapiRc;
- goto fapi_try_exit;
}
+ else
+ {
+ //--------------------------
+ // Handle other error cases
+ //--------------------------
+
+ // getMvpdRing failed due to insufficient ring buffer space.
+ // Assumption here is that getMvpdRing returns required buffer size
+ // in l_vpdRingSize (and which it does!).
+ FAPI_ASSERT( !l_fapiRc.isRC(RC_MVPD_RING_BUFFER_TOO_SMALL),
+ fapi2::XIPC_MVPD_RING_SIZE_TOO_BIG().
+ set_CHIP_TARGET(i_proc_target).
+ set_RING_ID(i_ring.ringId).
+ set_CHIPLET_ID(l_chipletId).
+ set_RING_BUFFER_SIZE(i_vpdRingSize).
+ set_MVPD_RING_SIZE(l_vpdRingSize),
+ "_fetch_and_insert_vpd_rings(): VPD ring size (=0x%X) exceeds"
+ " allowed ring buffer size (=0x%X)",
+ l_vpdRingSize, i_vpdRingSize );
+
+ // getMvpdRing failed due to invalid record data magic word.
+ FAPI_ASSERT( !l_fapiRc.isRC(RC_MVPD_INVALID_RS4_HEADER),
+ fapi2::XIPC_MVPD_INVALID_RECORD_DATA().
+ set_CHIP_TARGET(i_proc_target).
+ set_RING_ID(i_ring.ringId).
+ set_CHIPLET_ID(l_chipletId),
+ "_fetch_and_insert_vpd_rings(): MVPD has invalid record data" );
+
+ // getMvpdRing failed for some other reason aside from above handled cases.
+ if (l_fapiRc != fapi2::FAPI2_RC_SUCCESS)
+ {
+ FAPI_ERR("_fetch_and_insert_vpd_rings(): getMvpdRing failed "
+ " w/rc=0x%08X", (uint64_t)l_fapiRc);
+ fapi2::current_err = l_fapiRc;
+ goto fapi_try_exit;
+ }
+
+ } // End if(bSkipRing)
- } // End if(bSkipRing)
+ } // Loop on evenOdd
} //Loop on chipletId
OpenPOWER on IntegriCloud