diff options
author | Chris Phan <cphan@us.ibm.com> | 2014-03-10 14:28:50 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-03-20 14:01:24 -0500 |
commit | dd911ee39fd8e3d4fd7a6157bdb0745e97462569 (patch) | |
tree | 705c0decc5e7345a3e66a7f5afb409c2dc683462 /src/usr/diag/prdf | |
parent | e7ac12283e3b48c9ee0dbe4361e6cc591c06a957 (diff) | |
download | talos-hostboot-dd911ee39fd8e3d4fd7a6157bdb0745e97462569.tar.gz talos-hostboot-dd911ee39fd8e3d4fd7a6157bdb0745e97462569.zip |
PRD: Add CFAM FSI Status Reg 0x1007 to PLL data capture
Change-Id: I99c83f5da87ed32b8d6f2271ee6eb17c5ff461fe
RTC: 98680
Backport: release-fips810
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/9463
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Reviewed-by: Zane Shelley <zshelle@us.ibm.com>
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/9754
Diffstat (limited to 'src/usr/diag/prdf')
6 files changed, 131 insertions, 4 deletions
diff --git a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H index 2586e54c2..928772f61 100755 --- a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H +++ b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H @@ -37,7 +37,6 @@ */ #include <prdfTargetServices.H> // must include all common targeting code - #include <prdfCenConst.H> #include <prdfTimer.H> @@ -60,6 +59,8 @@ class CenDqBitmap; class CenMark; class CenRank; class CenSymbol; +class ExtensibleChip; +struct STEP_CODE_DATA_STRUCT; namespace PlatServices { @@ -441,6 +442,21 @@ mss_MaintCmdWrapper * createMssCmd( mss_MaintCmdWrapper::CmdType i_cmdType, uint32_t i_flags = mss_MaintCmdWrapper::NO_FLAGS, const CenAddr * i_sAddrOverride = NULL ); + +//############################################################################## +//## util functions +//############################################################################## + +/** + * @brief capture FSI Status Reg for FFDC + * @param i_chip Extensible chip + * @param i_sc service data collector + */ +void captureFsiStatusReg( ExtensibleChip * i_chip, + STEP_CODE_DATA_STRUCT & io_sc ); + + + } // end namespace PlatServices } // end namespace PRDF diff --git a/src/usr/diag/prdf/common/plat/pegasus/Membuf.rule b/src/usr/diag/prdf/common/plat/pegasus/Membuf.rule index 2e4de7c03..5aeb8581c 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Membuf.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Membuf.rule @@ -127,6 +127,18 @@ chip Membuf capture group never; }; + ############################################################################ + # PLL Registers + ############################################################################ + + register CFAM_FSI_STATUS + { + name "VI.FSI.STATUS"; + scomaddr 0x00001007; + capture group never; + }; + + }; ############################################################################## diff --git a/src/usr/diag/prdf/common/plat/pegasus/Proc.rule b/src/usr/diag/prdf/common/plat/pegasus/Proc.rule index de5519049..9f2f8aa33 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Proc.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Proc.rule @@ -149,6 +149,17 @@ chip Proc capture group default; }; + ############################################################################ + # PLL Registers + ############################################################################ + + register CFAM_FSI_STATUS + { + name "TPC.FSI.FSI2PIB.STATUS"; + scomaddr 0x00001007; + capture group never; + }; + }; ############################################################################## diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenPll.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenPll.C index 8fbeb4cc0..f8605cc05 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenPll.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenPll.C @@ -32,6 +32,8 @@ namespace PRDF { +using namespace PlatServices; + namespace Membuf { @@ -131,6 +133,26 @@ int32_t MaskPll( ExtensibleChip * i_chip,void * unused) } PRDF_PLUGIN_DEFINE( Membuf, MaskPll ); +/** + * @brief capture additional PLL FFDC + * @param i_chip Membuf chip + * @param i_sc service data collector + * @returns Success + */ +int32_t capturePllFfdc( ExtensibleChip * i_chip, + STEP_CODE_DATA_STRUCT & io_sc ) +{ + #define PRDF_FUNC "[Membuf::capturePllFfdc] " + + // Add FSI status reg + captureFsiStatusReg( i_chip, io_sc ); + + return SUCCESS; + + #undef PRDF_FUNC +} +PRDF_PLUGIN_DEFINE( Membuf, capturePllFfdc ); + } // end namespace Membuf diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Pll.C b/src/usr/diag/prdf/common/plat/pegasus/prdfP8Pll.C index b087aceba..69e5c8cb6 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Pll.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfP8Pll.C @@ -484,8 +484,12 @@ PRDF_PLUGIN_DEFINE( Proc, PllPostAnalysis ); int32_t capturePllFfdc( ExtensibleChip * i_chip, STEP_CODE_DATA_STRUCT & io_sc ) { - #define PRDF_FUNC "[capturePllFfdc] " + #define PRDF_FUNC "[Proc::capturePllFfdc] " + // Add FSI status reg + captureFsiStatusReg( i_chip, io_sc ); + + // Add EX scom data TargetHandleList exList = getConnected( i_chip->GetChipHandle(), TYPE_EX); ExtensibleChip * exChip; @@ -502,7 +506,7 @@ int32_t capturePllFfdc( ExtensibleChip * i_chip, return SUCCESS; -#undef PRDF_FUNC + #undef PRDF_FUNC } PRDF_PLUGIN_DEFINE( Proc, capturePllFfdc ); diff --git a/src/usr/diag/prdf/framework/service/prdfPlatServices.C b/src/usr/diag/prdf/framework/service/prdfPlatServices.C index 730cc350e..5a7f4455c 100644 --- a/src/usr/diag/prdf/framework/service/prdfPlatServices.C +++ b/src/usr/diag/prdf/framework/service/prdfPlatServices.C @@ -38,12 +38,15 @@ #include <prdfCenAddress.H> #include <prdfCenDqBitmap.H> +#include <iipServiceDataCollector.h> +#include <UtilHash.H> #include <diag/mdia/mdia.H> #include <diag/mdia/mdiamevent.H> #include <errno.h> #include <sys/time.h> #include <time.h> +#include <targeting/common/targetservice.H> using namespace TARGETING; @@ -230,7 +233,66 @@ TARGETING::TargetHandle_t getMasterCore( TARGETING::TargetHandle_t i_procTgt ) #undef PRDF_FUNC } -//------------------------------------------------------------------------------ +//############################################################################## +//## util functions +//############################################################################## + +void captureFsiStatusReg( ExtensibleChip * i_chip, + STEP_CODE_DATA_STRUCT & io_sc ) +{ + #define PRDF_FUNC "[PlatServices::captureFsiStatusReg] " + + do + { + // HB doesn't allow cfam access on master proc + TargetHandle_t l_procTgt = i_chip->GetChipHandle(); + + if( TYPE_PROC == getTargetType(l_procTgt) ) + { + TargetHandle_t l_pMasterProcChip = NULL; + targetService(). + masterProcChipTargetHandle( l_pMasterProcChip ); + + if( l_pMasterProcChip == l_procTgt ) + { + PRDF_DTRAC( PRDF_FUNC"can't access CFAM from master " + "proc: 0x%.8X", i_chip->GetId() ); + break; + } + } + + errlHndl_t errH = NULL; + ecmdDataBufferBase cfamData(32); + uint32_t u32Data = 0; + + PRD_FAPI_TO_ERRL(errH, + fapiGetCfamRegister, + PlatServices::getFapiTarget(i_chip->GetChipHandle()), + 0x00001007, + cfamData); + + if(errH) + { + PRDF_ERR( PRDF_FUNC"chip: 0x%.8X, failed to get " + "CFAM_FSI_STATUS: 0x%X", + i_chip->GetId(), cfamData.getWord( 0 ) ); + PRDF_COMMIT_ERRL(errH, ERRL_ACTION_SA|ERRL_ACTION_REPORT); + break; + } + + u32Data = cfamData.getWord(0); + BIT_STRING_ADDRESS_CLASS bs (0, 32, (CPU_WORD *) &u32Data); + + io_sc.service_data->GetCaptureData().Add( + i_chip->GetChipHandle(), + ( Util::hashString("CFAM_FSI_STATUS") ^ + i_chip->getSignatureOffset() ), + bs); + } while(0); + + #undef PRDF_FUNC +} + } // end namespace PlatServices |