summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_qppm.C
diff options
context:
space:
mode:
authorAmit Tendolkar <amit.tendolkar@in.ibm.com>2017-10-30 08:51:54 -0500
committerChristian R. Geddes <crgeddes@us.ibm.com>2017-11-08 19:20:19 -0500
commitc06de50b3c21be4618e820eccfc29adb6577259c (patch)
tree2aab6f38e8236756891efce5b4c5633f988f57f7 /src/import/chips/p9/procedures/hwp/pm/p9_pm_recovery_ffdc_qppm.C
parent42e96493c5fab5df24c1a4be6ce0df8d65834929 (diff)
downloadtalos-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.C78
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:
OpenPOWER on IntegriCloud