summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChris Phan <cphan@us.ibm.com>2014-03-10 14:28:50 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-03-20 14:01:24 -0500
commitdd911ee39fd8e3d4fd7a6157bdb0745e97462569 (patch)
tree705c0decc5e7345a3e66a7f5afb409c2dc683462 /src
parente7ac12283e3b48c9ee0dbe4361e6cc591c06a957 (diff)
downloadtalos-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')
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H18
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Membuf.rule12
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Proc.rule11
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfCenPll.C22
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfP8Pll.C8
-rw-r--r--src/usr/diag/prdf/framework/service/prdfPlatServices.C64
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
OpenPOWER on IntegriCloud