summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/common/framework/config
diff options
context:
space:
mode:
authorChris Phan <cphan@us.ibm.com>2013-11-21 20:10:12 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-01-15 13:37:39 -0600
commitc04465ebb93eee015d3ef1d6868a72c4726d4b3f (patch)
tree5c2f3220ce9dcf627075dce4361a941a99332891 /src/usr/diag/prdf/common/framework/config
parent1719a4f5d065c959020f0d7f3e2957341705b06d (diff)
downloadtalos-hostboot-c04465ebb93eee015d3ef1d6868a72c4726d4b3f.tar.gz
talos-hostboot-c04465ebb93eee015d3ef1d6868a72c4726d4b3f.zip
PRD: add clock osc callout
Change-Id: I9678f73ac5226dd7d0cd9d8817e72153feca1cae RTC: 87125 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7383 Tested-by: Jenkins Server Reviewed-by: BENJAMIN J. WEISENBECK <bweisenb@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com> Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com> Reviewed-by: Zane Shelley <zshelle@us.ibm.com> Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/8062
Diffstat (limited to 'src/usr/diag/prdf/common/framework/config')
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/config/prdfPllDomain.C50
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/config/prdfPllDomain.H113
2 files changed, 123 insertions, 40 deletions
diff --git a/src/usr/diag/prdf/common/framework/config/prdfPllDomain.C b/src/usr/diag/prdf/common/framework/config/prdfPllDomain.C
index 2eab1698c..478720324 100755
--- a/src/usr/diag/prdf/common/framework/config/prdfPllDomain.C
+++ b/src/usr/diag/prdf/common/framework/config/prdfPllDomain.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2003,2013 */
+/* COPYRIGHT International Business Machines Corp. 2003,2014 */
/* */
/* p1 */
/* */
@@ -36,6 +36,9 @@
#include <prdfPluginDef.H>
#include <prdfGlobal.H>
#include <iipSystem.h>
+#include <UtilHash.H>
+
+using namespace TARGETING;
namespace PRDF
{
@@ -114,6 +117,8 @@ int32_t PllDomain::Analyze(STEP_CODE_DATA_STRUCT & serviceData,
CcAutoDeletePointerVector<ChipPtr> chip(new ChipPtr[GetSize()]());
int count = 0;
int32_t rc = SUCCESS;
+ bool calloutProcOsc = false;
+ bool calloutPciOsc = false;
// Due to clock issues some chips may be moved to non-functional during
// analysis. In this case, these chips will need to be removed from their
@@ -125,14 +130,38 @@ int32_t PllDomain::Analyze(STEP_CODE_DATA_STRUCT & serviceData,
for(unsigned int index = 0; index < GetSize(); ++index)
{
ExtensibleChip * l_chip = LookUp(index);
- ExtensibleChipFunction * l_query = l_chip->getExtensibleFunction("QueryPll");
- bool atAttn;
- rc = (*l_query)(l_chip,PluginDef::bindParm<bool &>(atAttn));
- if(atAttn == true)
+ bool atProcAttn = false;
+ bool atPciAttn = false;
+
+ if( CLOCK_DOMAIN_FAB == GetId() )
+ {
+ ExtensibleChipFunction * queryProc =
+ l_chip->getExtensibleFunction("QueryProcPll");
+ rc |= (*queryProc)(l_chip,PluginDef::bindParm<bool &>(atProcAttn));
+ ExtensibleChipFunction * queryPci =
+ l_chip->getExtensibleFunction("QueryPciPll");
+ rc |= (*queryPci)(l_chip,PluginDef::bindParm<bool &>(atPciAttn));
+ }
+ else
+ {
+ ExtensibleChipFunction * l_query =
+ l_chip->getExtensibleFunction("QueryPll");
+ rc |= (*l_query)(l_chip,PluginDef::bindParm<bool &>(atProcAttn));
+ }
+
+ if(atProcAttn || atPciAttn)
{
+ if( atProcAttn ) calloutProcOsc = true;
+ if( atPciAttn ) calloutPciOsc = true;
+
chip()[count] = LookUp(index);
++count;
- l_chip->CaptureErrorData(serviceData.service_data->GetCaptureData());
+ l_chip->CaptureErrorData(
+ serviceData.service_data->GetCaptureData());
+ // Capture PllFIRs group
+ l_chip->CaptureErrorData(
+ serviceData.service_data->GetCaptureData(),
+ Util::hashString("PllFIRs"));
}
else if ( !PlatServices::isFunctional(l_chip->GetChipHandle()) )
{
@@ -148,10 +177,13 @@ int32_t PllDomain::Analyze(STEP_CODE_DATA_STRUCT & serviceData,
}
// always suspect the clock source
- closeClockSource.Resolve(serviceData); // dg06c
- if(&closeClockSource != &farClockSource)
+ if( calloutPciOsc )
+ {
+ closeClockSource.Resolve(serviceData);
+ }
+ if( calloutProcOsc )
{
- farClockSource.Resolve(serviceData); // dg06c
+ farClockSource.Resolve(serviceData);
}
// If only one detected the error, add it to the callout list.
diff --git a/src/usr/diag/prdf/common/framework/config/prdfPllDomain.H b/src/usr/diag/prdf/common/framework/config/prdfPllDomain.H
index 8e232604f..a17560fa2 100755
--- a/src/usr/diag/prdf/common/framework/config/prdfPllDomain.H
+++ b/src/usr/diag/prdf/common/framework/config/prdfPllDomain.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2006,2013 */
+/* COPYRIGHT International Business Machines Corp. 2006,2014 */
/* */
/* p1 */
/* */
@@ -47,54 +47,77 @@ class PllDomain : public RuleChipDomain, public ExtensibleDomain,
#ifdef __HOSTBOOT_MODULE
- /** @fn PllDomain
- * @brief Constructor
- * @param DOMAIN_ID - the domain ID
- * @param Resolution to callout the correct clock source
- * @param ThresholdResolution::ThresholdPolicy
+ /**
+ * @brief Constructor
+ * @param DOMAIN_ID the domain ID
+ * @param Resolution to callout the correct clock source
+ * @param ThresholdResolution::ThresholdPolicy
*/
PllDomain( DOMAIN_ID domain_id, Resolution & clockSource,
const ThresholdResolution::ThresholdPolicy & i_mfgThresh );
+ /**
+ * @brief Constructor
+ * @param DOMAIN_ID the domain ID
+ * @param Resolution to callout the correct second clock source
+ * @param Resolution to callout the correct clock source
+ * @param ThresholdResolution::ThresholdPolicy
+ */
+ PllDomain( DOMAIN_ID domain_id, Resolution & secondClockSource,
+ Resolution & clockSource,
+ const ThresholdResolution::ThresholdPolicy & i_mfgThresh );
+
#else // not __HOSTBOOT_MODULE
- /** @fn PllDomain
- * @brief Constructor
- * @param DOMAIN_ID - the domain ID
- * @param Resolution to callout the correct clock source
- * @param Dump content
- * @param ThresholdResolution::ThresholdPolicy
+ /**
+ * @brief Constructor
+ * @param DOMAIN_ID the domain ID
+ * @param Resolution to callout the correct clock source
+ * @param Dump content
+ * @param ThresholdResolution::ThresholdPolicy
*/
PllDomain( DOMAIN_ID domain_id, Resolution & clockSource,
hwTableContent i_hwdc,
const ThresholdResolution::ThresholdPolicy & i_mfgThresh );
+ /**
+ * @brief Constructor
+ * @param DOMAIN_ID the domain ID
+ * @param Resolution to callout the correct second clock source
+ * @param Resolution to callout the correct clock source
+ * @param Dump content
+ * @param ThresholdResolution::ThresholdPolicy
+ */
+ PllDomain( DOMAIN_ID domain_id, Resolution & secondClockSource,
+ Resolution & clockSource,
+ hwTableContent i_hwdc,
+ const ThresholdResolution::ThresholdPolicy & i_mfgThresh );
+
#endif // not __HOSTBOOT_MODULE
/**
- Perform any initialization required by the hardware
- @returns error code
- @post PLL errors cleared in hardware.
+ * @brief Perform any initialization required by the hardware
+ * @returns error code
+ * @post PLL errors cleared in hardware.
*/
virtual int32_t Initialize(void);
/**
- Query if anything in this domain is at the attention type specified
- @param Attention type to query for. (@see iipsdbug.h)
- @returns [true|false]
- @pre Initialize()
- @post NONE
+ * @brief Query if anything in this domain is at the attention type specified
+ * @param Attention type to query for. (@see iipsdbug.h)
+ * @returns [true|false]
+ * @pre Initialize()
*/
virtual bool Query(ATTENTION_TYPE attentionType);
/**
- Analyze errors within the domain
- @param service data collector
- @param attentiont type (@see iipsdbug.h)
- @returns service data collector - completed
- @return return code
- @pre Initialize(); Query() == true
- @post domain element order may be modified.
+ * @brief Analyze errors within the domain
+ * @param service data collector
+ * @param attentiont type (@see iipsdbug.h)
+ * @returns service data collector - completed
+ * @return return code
+ * @pre Initialize(); Query() == true
+ * @post domain element order may be modified.
*/
virtual int32_t Analyze( STEP_CODE_DATA_STRUCT & serviceData,
ATTENTION_TYPE attentionType );
@@ -122,10 +145,10 @@ class PllDomain : public RuleChipDomain, public ExtensibleDomain,
protected:
/**
- Order the domain - with detecting element at the top
- @param Attention type (@see iipsdbug.h)
- @post domain elemenet order may be altered
- @note this is called by Analyze()
+ * @brief Order the domain - with detecting element at the top
+ * @param Attention type (@see iipsdbug.h)
+ * @post domain elemenet order may be altered
+ * @note this is called by Analyze()
*/
virtual void Order(ATTENTION_TYPE attentionType);
@@ -161,6 +184,19 @@ PllDomain::PllDomain( DOMAIN_ID domain_id, Resolution & clockSource,
i_mfgThresh ) )
{}
+inline
+PllDomain::PllDomain( DOMAIN_ID domain_id, Resolution & secondClockSource,
+ Resolution & clockSource,
+ const ThresholdResolution::ThresholdPolicy& i_mfgThresh) :
+ RuleChipDomain( domain_id, PllDomain::CONTAINER_SIZE ),
+ ExtensibleDomain("PllDomain"),
+ closeClockSource(secondClockSource),
+ farClockSource(clockSource),
+ iv_threshold( ResolutionFactory::Access().GetThresholdResolution( 1,
+ ThresholdResolution::cv_pllDefault,
+ i_mfgThresh ) )
+{}
+
#else // not __HOSTBOOT_MODULE
inline
@@ -177,6 +213,21 @@ PllDomain::PllDomain( DOMAIN_ID domain_id, Resolution & clockSource,
iv_dumpContent(i_hwdc)
{}
+inline
+PllDomain::PllDomain( DOMAIN_ID domain_id, Resolution & secondClockSource,
+ Resolution & clockSource,
+ hwTableContent i_hwdc,
+ const ThresholdResolution::ThresholdPolicy& i_mfgThresh) :
+ RuleChipDomain( domain_id, PllDomain::CONTAINER_SIZE ),
+ ExtensibleDomain("PllDomain"),
+ closeClockSource(secondClockSource),
+ farClockSource(clockSource),
+ iv_threshold( ResolutionFactory::Access().GetThresholdResolution( 1,
+ ThresholdResolution::cv_pllDefault,
+ i_mfgThresh ) ),
+ iv_dumpContent(i_hwdc)
+{}
+
#endif // not __HOSTBOOT_MODULE
//------------------------------------------------------------------------------
OpenPOWER on IntegriCloud