diff options
Diffstat (limited to 'src/import')
10 files changed, 99 insertions, 46 deletions
diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_pm_callout.C b/src/import/chips/p9/procedures/hwp/pm/p9_pm_callout.C index 4117bdd62..dff4805a8 100644 --- a/src/import/chips/p9/procedures/hwp/pm/p9_pm_callout.C +++ b/src/import/chips/p9/procedures/hwp/pm/p9_pm_callout.C @@ -62,16 +62,6 @@ enum CFG_PM_MUX_DISABLE = 7, TP_FENCE_PCB = 25, OCC_FLAG2_SCOM1_ADDR = 0x0006C18B, - STATE_CONFIG_SECTN = 0x00, - SGPE_SECTN = 0x01, - PGPE_SECTN = 0x02, - CME_SECTN = 0x03, - QPPM_SECTN = 0x04, - CPPM_SECTN = 0x05, - SGPE_GLOBAL_VAR_SECTN = 0x06, - PGPE_GLOBAL_VAR_SECTN = 0x07, - CME_GLOBAL_VAR_SECTN = 0x08, - MAX_FFDC_SUMMARY_SECTN_CNT = 0x09, }; /** @@ -305,6 +295,7 @@ extern "C" using namespace p9_stop_recov_ffdc; FAPI_IMP(">> p9_pm_callout" ); + errlver_t l_summSectn; HomerFfdcRegion* l_pHomerFfdc = ( HomerFfdcRegion*)( (uint8_t*)i_pHomerBase + FFDC_REGION_HOMER_BASE_OFFSET ); uint8_t* l_pSummary = NULL; @@ -331,29 +322,33 @@ extern "C" l_coreActn.getDeadCoreVector( o_deadCores ); //retrieve Phyp generated dead core vector FAPI_INF("Dead cores from PHYP: 0x%08x", o_deadCores); - for( uint8_t l_ffdcSecId = 0; l_ffdcSecId < MAX_FFDC_SUMMARY_SECTN_CNT; - l_ffdcSecId++ ) + for( uint8_t l_secId = 0; l_secId < MAX_FFDC_SUMMARY_SECTN_CNT; + l_secId++ ) { - switch( l_ffdcSecId ) + switch( l_secId ) { case STATE_CONFIG_SECTN: l_pSummary = (uint8_t*) &l_pHomerFfdc->iv_ffdcSummaryRegion.iv_sysState; l_sectnSize = sizeof(SysState); + l_summSectn = STATE_CONFIG_SECTN; break; case SGPE_SECTN: l_pSummary = &l_pHomerFfdc->iv_ffdcSummaryRegion.iv_sgpeSummary[0]; l_sectnSize = FFDC_SUMMARY_SIZE_SGPE; + l_summSectn = SGPE_SECTN; break; case PGPE_SECTN: l_pSummary = &l_pHomerFfdc->iv_ffdcSummaryRegion.iv_pgpeSummary[0]; l_sectnSize = FFDC_SUMMARY_SIZE_PGPE; + l_summSectn = PGPE_SECTN; break; case CME_SECTN: l_pSummary = &l_pHomerFfdc->iv_ffdcSummaryRegion.iv_cmeSummary[0][0]; l_sectnSize = (FFDC_SUMMARY_SIZE_CME * MAX_CMES_PER_CHIP); + l_summSectn = CME_SECTN; break; case QPPM_SECTN: @@ -361,6 +356,7 @@ extern "C" //section of error log. l_pSummary = &l_pHomerFfdc->iv_ffdcSummaryRegion.iv_qpmmRegSummary[0][0]; l_sectnSize = (FFDC_SUMMARY_SIZE_QPPM_REG * MAX_QUADS_PER_CHIP); + l_summSectn = QPPM_SECTN; break; case CPPM_SECTN: @@ -368,16 +364,19 @@ extern "C" //section of error log. l_pSummary = &l_pHomerFfdc->iv_ffdcSummaryRegion.iv_cpmmRegSummary[0][0]; l_sectnSize = (FFDC_SUMMARY_SIZE_CPPM_REG * MAX_CORES_PER_CHIP); + l_summSectn = CPPM_SECTN; break; case SGPE_GLOBAL_VAR_SECTN: l_pSummary = l_pHomerFfdc->iv_ffdcSummaryRegion.iv_sgpeScoreBoard.iv_dataPtr; l_sectnSize = l_pHomerFfdc->iv_ffdcSummaryRegion.iv_sgpeScoreBoard.iv_dataSize; + l_summSectn = SGPE_GLOBAL_VAR_SECTN; break; case PGPE_GLOBAL_VAR_SECTN: l_pSummary = l_pHomerFfdc->iv_ffdcSummaryRegion.iv_pgpeScoreBoard.iv_dataPtr; l_sectnSize = l_pHomerFfdc->iv_ffdcSummaryRegion.iv_pgpeScoreBoard.iv_dataSize; + l_summSectn = PGPE_GLOBAL_VAR_SECTN; break; case CME_GLOBAL_VAR_SECTN: @@ -388,21 +387,25 @@ extern "C" { l_pSummary = l_pHomerFfdc->iv_ffdcSummaryRegion.iv_cmeScoreBoard[l_corePos].iv_dataPtr; l_sectnSize = l_pHomerFfdc->iv_ffdcSummaryRegion.iv_cmeScoreBoard[l_corePos].iv_dataSize; - StopErrLogSectn l_coreGlobalVarSectn( l_pSummary, l_sectnSize ); + StopErrLogSectn l_coreGlobalVarSectn( l_pSummary, l_sectnSize, CME_GLOBAL_VAR_SECTN ); o_ffdcList.push_back( l_coreGlobalVarSectn ); } } + l_summSectn = CME_GLOBAL_VAR_SECTN; break; default: //Skip the addition of this section to error log - FAPI_ERR("Section Number %d Not Defined in STOP Recovery Summary", l_ffdcSecId ); + FAPI_ERR("Section Number %d Not Defined in STOP Recovery Summary", l_secId ); continue; } - StopErrLogSectn l_ffdcSubSectn( l_pSummary, l_sectnSize ); - o_ffdcList.push_back( l_ffdcSubSectn ); + if( l_summSectn < MAX_FFDC_SUMMARY_SECTN_CNT ) + { + StopErrLogSectn l_ffdcSubSectn( l_pSummary, l_sectnSize, l_summSectn ); + o_ffdcList.push_back( l_ffdcSubSectn ); + } } if( o_ffdcList.size() > 0 ) diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_pm_callout.H b/src/import/chips/p9/procedures/hwp/pm/p9_pm_callout.H index 374370c3a..fa9d58f1a 100644 --- a/src/import/chips/p9/procedures/hwp/pm/p9_pm_callout.H +++ b/src/import/chips/p9/procedures/hwp/pm/p9_pm_callout.H @@ -48,23 +48,7 @@ // Includes // ------------------------------------------------------------------------------ #include <fapi2.H> - -///@brief models a sub-section of STOP Recovery summary. -///@note caller of HWP passes in an empty vector however, -///HWP populates it with pointers to all summary sub-section. -struct StopErrLogSectn -{ - uint8_t* iv_pBufPtr; - uint16_t iv_bufSize; - StopErrLogSectn( uint8_t* i_bufPtr, uint16_t i_bufSize ) - : iv_pBufPtr( i_bufPtr ), iv_bufSize( i_bufSize ) - { } - - StopErrLogSectn( ) - : iv_pBufPtr( NULL ), - iv_bufSize( 0 ) - { } -}; +#include <p9_pm_recovery_ffdc_defines.H> enum RasAction { diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_base.C b/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_base.C index c308feb57..58de5aa92 100644 --- a/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_base.C +++ b/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_base.C @@ -142,6 +142,8 @@ namespace p9_stop_recov_ffdc { FAPI_DBG( ">> PlatPmComplex::initRegList" ); iv_summaryReg.clear(); + //NOTE: Update major or minor number as appropriate if this list + //ever changes. Failing to do so can break the error log parser. iv_summaryReg.push_back( XSR ); iv_summaryReg.push_back( IAR ); iv_summaryReg.push_back( IR ); diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_cme.C b/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_cme.C index 9a73d5f24..7c2791473 100644 --- a/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_cme.C +++ b/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_cme.C @@ -432,8 +432,8 @@ l_pHomerFfdc->iv_ffdcSummaryRegion.iv_cmeScoreBoard[l_exPos].iv_dataSize = FFDC_PPE_SCORE_BOARD_SIZE; l_pCmeSummaryHdr->iv_subSectnId = PLAT_CME; - l_pCmeSummaryHdr->iv_majorNum = 1; - l_pCmeSummaryHdr->iv_minorNum = 0; + l_pCmeSummaryHdr->iv_majorNum = CME_MAJ_NUM; + l_pCmeSummaryHdr->iv_minorNum = CME_MIN_NUM; l_pCmeSummaryHdr->iv_secValid = l_pCmeLayout->iv_ppeFfdcHdr.iv_ppeFfdcHdr.iv_sectionsValid; if( !l_pCmeSummaryHdr->iv_secValid ) diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_cppm.C b/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_cppm.C index 0d50b2e73..999abd617 100644 --- a/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_cppm.C +++ b/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_cppm.C @@ -57,6 +57,8 @@ void CppmRegs::initRegList() { std::vector < uint32_t> l_scomRegList; + //NOTE: Update major or minor number as appropriate if this list + //ever changes. Failing to do so can break the error log parser. l_scomRegList.push_back( C_PPM_SSHSRC ); l_scomRegList.push_back( C_PPM_VDMCR ); PlatPmComplex::updateSummaryList( l_scomRegList ); @@ -169,8 +171,8 @@ PpmFfdcHeader * l_CppmFfdcHdr = (PpmFfdcHeader *) i_pHomerBuf ; l_CppmFfdcHdr->iv_ppmMagicWord = htobe32(FFDC_CPPM_MAGIC_NUM); - l_CppmFfdcHdr->iv_versionMajor = 1; - l_CppmFfdcHdr->iv_versionMinor = 0; + l_CppmFfdcHdr->iv_versionMajor = CPPM_MAJ_NUM; + l_CppmFfdcHdr->iv_versionMinor = CPPM_MIN_NUM; l_CppmFfdcHdr->iv_Instance = i_corePos; // CHIP_UNIT_POS l_CppmFfdcHdr->iv_ppmHeaderSize = htobe16 (sizeof(PpmFfdcHeader)); l_CppmFfdcHdr->iv_sectionSize = htobe16 (FFDC_CPPM_REGION_SIZE); diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_defines.H b/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_defines.H index c518e8d38..c9af43998 100644 --- a/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_defines.H +++ b/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_defines.H @@ -35,6 +35,45 @@ ( (((WORD) >> 8) & 0x00FF) | (((WORD) << 8) & 0xFF00) ) #endif +typedef uint8_t errlver_t; + +///@brief models a sub-section of STOP Recovery summary. +///@note caller of p9_pm_callout passes in an empty vector +/// however, HWP populates it with pointers to all +/// summary sub-section. +struct StopErrLogSectn +{ + uint8_t* iv_pBufPtr; + uint16_t iv_bufSize; + errlver_t iv_subsec; + StopErrLogSectn( uint8_t* i_bufPtr, uint16_t i_bufSize, errlver_t i_subSectn ) + : iv_pBufPtr( i_bufPtr ), iv_bufSize( i_bufSize ), iv_subsec( i_subSectn ) + { } + + StopErrLogSectn( ) + : iv_pBufPtr( NULL ), + iv_bufSize( 0 ), + iv_subsec( 0 ) + { } +}; + +/** + * @brief sections of STOP Recovery FFDC summary + */ +enum VerList_t +{ + STATE_CONFIG_SECTN = 0x00, + SGPE_SECTN = 0x01, + PGPE_SECTN = 0x02, + CME_SECTN = 0x03, + QPPM_SECTN = 0x04, + CPPM_SECTN = 0x05, + SGPE_GLOBAL_VAR_SECTN = 0x06, + PGPE_GLOBAL_VAR_SECTN = 0x07, + CME_GLOBAL_VAR_SECTN = 0x08, + MAX_FFDC_SUMMARY_SECTN_CNT = 0x09, +}; + namespace p9_stop_recov_ffdc { @@ -68,6 +107,25 @@ enum PmResetStep }; /** + * @brief miscellaneous constants + */ +enum SectionVer +{ + SYS_CONFIG_MAJ_NUM = 1, + SYS_CONFIG_MIN_NUM = 0, + SGPE_MAJ_NUM = 1, + SGPE_MIN_NUM = 0, + PGPE_MAJ_NUM = 1, + PGPE_MIN_NUM = 0, + CME_MAJ_NUM = 1, + CME_MIN_NUM = 0, + QPPM_MAJ_NUM = 1, + QPPM_MIN_NUM = 0, + CPPM_MAJ_NUM = 1, + CPPM_MIN_NUM = 0, +}; + +/** * @brief enumerates all the platforms involved with STOP Recovery. */ enum PmComplexPlatId diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_occ.C b/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_occ.C index ba5c4000d..271f0af8a 100644 --- a/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_occ.C +++ b/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_occ.C @@ -76,6 +76,8 @@ namespace p9_stop_recov_ffdc { FAPI_DBG (">> PlatOcc::initRegList" ); std::vector < uint32_t> l_scomRegList; + //NOTE: Update major or minor number as appropriate if this list + //ever changes. Failing to do so can break the error log parser. l_scomRegList.push_back( PU_OCB_OCI_CCSR_SCOM ); l_scomRegList.push_back( PU_OCB_OCI_QSSR_SCOM ); l_scomRegList.push_back( P9N2_PU_OCB_OCI_OCCFLG_SCOM ); @@ -479,8 +481,8 @@ namespace p9_stop_recov_ffdc FfdcSummSubSectHdr * l_pSysConfigHdr = (FfdcSummSubSectHdr *)&l_pSysConfig->iv_subSecHdr; l_pSysConfigHdr->iv_subSectnId = PLAT_OCC; - l_pSysConfigHdr->iv_majorNum = 1; - l_pSysConfigHdr->iv_minorNum = 0; + l_pSysConfigHdr->iv_majorNum = SYS_CONFIG_MAJ_NUM; + l_pSysConfigHdr->iv_minorNum = SYS_CONFIG_MIN_NUM; l_pSysConfigHdr->iv_secValid = l_pOccFfdcHdr->iv_sectionsValid; if( l_pSysConfigHdr->iv_secValid ) diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_pgpe.C b/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_pgpe.C index 894f35f85..0c661da1b 100644 --- a/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_pgpe.C +++ b/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_pgpe.C @@ -288,8 +288,8 @@ FfdcSummSubSectHdr * l_pPgpeSummaryHdr = (FfdcSummSubSectHdr *)&l_pHomerFfdc->iv_ffdcSummaryRegion.iv_pgpeSummary[0]; l_pPgpeSummaryHdr->iv_subSectnId = PLAT_PGPE; - l_pPgpeSummaryHdr->iv_majorNum = 1; - l_pPgpeSummaryHdr->iv_minorNum = 0; + l_pPgpeSummaryHdr->iv_majorNum = PGPE_MAJ_NUM; + l_pPgpeSummaryHdr->iv_minorNum = PGPE_MIN_NUM; l_pPgpeSummaryHdr->iv_secValid = l_pPgpeFfdcHdr->iv_sectionsValid; if( l_pPgpeSummaryHdr->iv_secValid ) diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_qppm.C b/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_qppm.C index 44543ed58..23bce323e 100644 --- a/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_qppm.C +++ b/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_qppm.C @@ -71,6 +71,8 @@ void QppmRegs::initRegList() { std::vector < uint32_t> l_scomRegList; + //NOTE: Update major or minor number as appropriate if this list + //ever changes. Failing to do so can break the error log parser. l_scomRegList.push_back( EQ_PPM_GPMMR_SCOM ); l_scomRegList.push_back( EQ_PPM_SSHSRC ); l_scomRegList.push_back( EQ_QPPM_DPLL_FREQ ); @@ -181,8 +183,8 @@ FfdcSummSubSectHdr * l_pQppmSummaryHdr = (FfdcSummSubSectHdr *)&l_pHomerFfdc->iv_ffdcSummaryRegion.iv_qpmmRegSummary[l_ppmPos][0]; l_pQppmSummaryHdr->iv_subSectnId = PLAT_QPPM; - l_pQppmSummaryHdr->iv_majorNum = 1; - l_pQppmSummaryHdr->iv_minorNum = 0; + l_pQppmSummaryHdr->iv_majorNum = QPPM_MAJ_NUM; + l_pQppmSummaryHdr->iv_minorNum = QPPM_MIN_NUM; l_pQppmSummaryHdr->iv_secValid = htobe16(l_pQppmHdr->iv_ffdcValid); if( !l_pQppmSummaryHdr->iv_secValid ) diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_sgpe.C b/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_sgpe.C index cbc1f8c6f..077059fba 100644 --- a/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_sgpe.C +++ b/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_sgpe.C @@ -335,8 +335,8 @@ PpeFfdcHeader* l_pSgpeFfdcHdr = ( PpeFfdcHeader* )&l_pHomerFfdc->iv_sgpeFfdcRegion; FfdcSummSubSectHdr * l_pSgpeSummaryHdr = (FfdcSummSubSectHdr *)&l_pHomerFfdc->iv_ffdcSummaryRegion.iv_sgpeSummary[0]; l_pSgpeSummaryHdr->iv_subSectnId = PLAT_SGPE; - l_pSgpeSummaryHdr->iv_majorNum = 1; - l_pSgpeSummaryHdr->iv_minorNum = 0; + l_pSgpeSummaryHdr->iv_majorNum = SGPE_MAJ_NUM; + l_pSgpeSummaryHdr->iv_minorNum = SGPE_MIN_NUM; l_pSgpeSummaryHdr->iv_secValid = l_pSgpeFfdcHdr->iv_sectionsValid; if( l_pSgpeSummaryHdr->iv_secValid ) |