diff options
| author | Chris Phan <cphan@us.ibm.com> | 2013-11-21 20:10:12 -0600 |
|---|---|---|
| committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-01-15 13:37:39 -0600 |
| commit | c04465ebb93eee015d3ef1d6868a72c4726d4b3f (patch) | |
| tree | 5c2f3220ce9dcf627075dce4361a941a99332891 /src/usr/diag/prdf/common/framework/config | |
| parent | 1719a4f5d065c959020f0d7f3e2957341705b06d (diff) | |
| download | talos-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-x | src/usr/diag/prdf/common/framework/config/prdfPllDomain.C | 50 | ||||
| -rwxr-xr-x | src/usr/diag/prdf/common/framework/config/prdfPllDomain.H | 113 |
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 //------------------------------------------------------------------------------ |

