diff options
author | Amit Tendolkar <amit.tendolkar@in.ibm.com> | 2017-10-30 08:51:54 -0500 |
---|---|---|
committer | Christian R. Geddes <crgeddes@us.ibm.com> | 2017-11-08 19:20:19 -0500 |
commit | c06de50b3c21be4618e820eccfc29adb6577259c (patch) | |
tree | 2aab6f38e8236756891efce5b4c5633f988f57f7 /src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_qppm.C | |
parent | 42e96493c5fab5df24c1a4be6ce0df8d65834929 (diff) | |
download | talos-hostboot-c06de50b3c21be4618e820eccfc29adb6577259c.tar.gz talos-hostboot-c06de50b3c21be4618e820eccfc29adb6577259c.zip |
STOP Recovery: Misc infra. updates to enable PM FFDC in HOMER
1. Updated STOP Recovery wrapper for test
2. Enable GPE0/1, shared region sram data collection
3. FIR and OCC register collection support
4. PM FFDC Section Header and Region Inits
5. Defined constants for FFDC region boundary in HOMER
6. Fixed miscellaneous review comments and UT bugs
Change-Id: I802e6ddb919efaa09b9ffab5ddd3283d8efa9323
RTC: 179599
CQ: SW406487
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/48987
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com>
Reviewed-by: RANGANATHPRASAD G. BRAHMASAMUDRA <prasadbgr@in.ibm.com>
Reviewed-by: Prem Shanker Jha <premjha2@in.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Gregory S. Still <stillgs@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/48992
Reviewed-by: Hostboot Team <hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_qppm.C')
-rw-r--r-- | src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_qppm.C | 78 |
1 files changed, 51 insertions, 27 deletions
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 2dcc181c7..205240346 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 @@ -48,66 +48,90 @@ namespace p9_stop_recov_ffdc { QppmRegs::QppmRegs( const fapi2::Target< fapi2::TARGET_TYPE_PROC_CHIP > i_procChipTgt ) - : PlatPmComplex( i_procChipTgt,0,0,0,PLAT_PPM) + : PlatPmComplex ( i_procChipTgt, PLAT_QPPM ) { } //---------------------------------------------------------------------- - fapi2::ReturnCode QppmRegs::collectRegFfdc( void * i_pHomerBuf ) + fapi2::ReturnCode QppmRegs::init ( void* i_pHomerBuf ) { - FAPI_DBG(">> QppmRegs::collectRegFfdc"); - fapi2::current_err = fapi2::FAPI2_RC_SUCCESS; - fapi2::ReturnCode l_rc = fapi2::current_err; + FAPI_DBG (">> QppmRegs::init" ); + FAPI_TRY ( collectFfdc( i_pHomerBuf, INIT), + "Failed To init QPPM REGS FFDC" ); + + fapi_try_exit: + FAPI_DBG ("<< QppmRegs::init" ); + return fapi2::current_err; + } + + //---------------------------------------------------------------------- + + fapi2::ReturnCode QppmRegs::collectFfdc ( void* i_pHomerBuf, + uint8_t i_ffdcType ) + { + FAPI_DBG(">> QppmRegs::collectFfdc"); + + fapi2::ReturnCode l_rc = fapi2::FAPI2_RC_SUCCESS; + auto l_quadList = getProcChip().getChildren< fapi2::TARGET_TYPE_EQ > ( fapi2::TARGET_STATE_PRESENT ); uint8_t l_quadPos = 0; - uint8_t *l_pFfdcLoc = NULL; - uint8_t l_ffdcValid = 0; + uint8_t* l_pFfdcLoc = NULL; + uint16_t l_ffdcValid = 0; HomerFfdcRegion * l_pHomerFfdc = ( HomerFfdcRegion *)( (uint8_t *)i_pHomerBuf + FFDC_REGION_HOMER_BASE_OFFSET ); for( auto quad : l_quadList ) { + FAPI_TRY( FAPI_ATTR_GET( fapi2::ATTR_CHIP_UNIT_POS, quad, l_quadPos ), "FAPI_ATTR_GET Failed To Read QUAD Position" ); l_pFfdcLoc = &l_pHomerFfdc->iv_quadFfdc[l_quadPos].iv_quadQppmRegion[0]; - if( quad.isFunctional() ) - { - l_ffdcValid = 1; - FAPI_INF("QPPM FFDC Pos %d ", l_quadPos); - l_rc = collectRegisterData<fapi2::TARGET_TYPE_EQ> (quad, - l_pFfdcLoc + sizeof(PpmFfdcHeader), - static_cast<fapi2::HwpFfdcId>(fapi2::QPPM_FFDC_REGISTERS)); - if (l_rc ) + // On INIT, update the headers just as in case of not functional + if (quad.isFunctional()) + { + // Note: ( i_ffdcType & INIT ) is the default case + if ( i_ffdcType & SCOM_REG ) { - l_ffdcValid = 0; + l_ffdcValid = 1; + FAPI_INF("QPPM FFDC Pos %d ", l_quadPos); + + l_rc = collectRegisterData <fapi2::TARGET_TYPE_EQ> ( + quad, + l_pFfdcLoc + sizeof(PpmFfdcHeader), + static_cast<fapi2::HwpFfdcId>(fapi2::QPPM_FFDC_REGISTERS)); + if (l_rc ) + { + l_ffdcValid = 0; + } } } - FAPI_TRY( updateQppmFfdcHeader( l_pFfdcLoc, l_quadPos, l_ffdcValid), "Failed To Update QPPM FFDC Header for quad 0x%0d", l_quadPos); } - fapi_try_exit: - FAPI_DBG("<< QppmRegs::collectRegFfdc"); + fapi_try_exit: + FAPI_DBG("<< QppmRegs::collectFfdc"); return fapi2::current_err; } fapi2::ReturnCode QppmRegs::updateQppmFfdcHeader( uint8_t * i_pHomerBuf, const uint8_t i_quadPos, - const uint8_t i_ffdcValid) + const uint16_t i_ffdcValid) { FAPI_DBG(">> updateQppmFfdcHeader" ); - PpmFfdcHeader * l_QppmFfdcHdr = (PpmFfdcHeader *) i_pHomerBuf ; - l_QppmFfdcHdr->iv_ppmMagicWord = htobe32(FFDC_QPPM_MAGIC_NUM); - l_QppmFfdcHdr->iv_Instance = i_quadPos; - l_QppmFfdcHdr->iv_ppmHeaderSize = sizeof(PpmFfdcHeader); - l_QppmFfdcHdr->iv_sectionSize = FFDC_QPPM_REGISTERS_SIZE; - l_QppmFfdcHdr->iv_ffdcValid = i_ffdcValid; + PpmFfdcHeader * l_QppmFfdcHdr = (PpmFfdcHeader *) i_pHomerBuf ; + l_QppmFfdcHdr->iv_ppmMagicWord = htobe32(FFDC_QPPM_MAGIC_NUM); + l_QppmFfdcHdr->iv_versionMajor = 1; + l_QppmFfdcHdr->iv_versionMinor = 0; + l_QppmFfdcHdr->iv_Instance = i_quadPos; + l_QppmFfdcHdr->iv_ppmHeaderSize = htobe16(sizeof(PpmFfdcHeader)); + l_QppmFfdcHdr->iv_sectionSize = htobe16(FFDC_QPPM_REGION_SIZE); + l_QppmFfdcHdr->iv_ffdcValid = htobe16 (i_ffdcValid); FAPI_DBG("<< updateQppmFfdcHeader" ); return fapi2::FAPI2_RC_SUCCESS; @@ -122,7 +146,7 @@ extern "C" { FAPI_IMP(">> p9_pm_recovery_ffdc_qppm" ); QppmRegs l_qppmFfdc( i_procChip ); - FAPI_TRY( l_qppmFfdc.collectRegFfdc( i_pFfdcBuf ), + FAPI_TRY( l_qppmFfdc.collectFfdc( i_pFfdcBuf, SCOM_REG ), "Failed To Collect QPPM FFDC" ); fapi_try_exit: |