summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf
diff options
context:
space:
mode:
authorBenjamin Weisenbeck <bweisenb@us.ibm.com>2018-04-30 10:08:10 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2018-05-04 22:26:49 -0400
commitb9f23622a49f8f5dd71d98cb7edf5d6318e30a8b (patch)
tree5834352f16d47a5a972cad3147a566e351c80fbb /src/usr/diag/prdf
parent2ab7c3f22534bd55e62f16ca54e6e9f8eafd5cb7 (diff)
downloadtalos-hostboot-b9f23622a49f8f5dd71d98cb7edf5d6318e30a8b.tar.gz
talos-hostboot-b9f23622a49f8f5dd71d98cb7edf5d6318e30a8b.zip
PRD: Updates for Cumulus PLL analysis
Change-Id: I239cd979f09b6e190c1ded70f780739286f15af8 RTC: 155673 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/58027 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com> Reviewed-by: Matt Derksen <mderkse1@us.ibm.com> Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/58329 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+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>
Diffstat (limited to 'src/usr/diag/prdf')
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/resolution/prdfClockResolution.C31
-rwxr-xr-xsrc/usr/diag/prdf/common/iipconst.h3
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/p9/prdfP9Configurator.C21
-rw-r--r--src/usr/diag/prdf/common/plat/p9/prdfP9PllDomain.C19
-rw-r--r--src/usr/diag/prdf/common/plat/p9/prdfP9ProcMbCommonExtraSig.H5
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/prdfPlatServices_common.H3
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/prdfTargetServices.C4
-rw-r--r--src/usr/diag/prdf/plat/prdfPlatServices.C7
8 files changed, 62 insertions, 31 deletions
diff --git a/src/usr/diag/prdf/common/framework/resolution/prdfClockResolution.C b/src/usr/diag/prdf/common/framework/resolution/prdfClockResolution.C
index 737345d5e..28933e93a 100755
--- a/src/usr/diag/prdf/common/framework/resolution/prdfClockResolution.C
+++ b/src/usr/diag/prdf/common/framework/resolution/prdfClockResolution.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2016 */
+/* Contributors Listed Below - COPYRIGHT 2012,2018 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -49,13 +49,11 @@ int32_t ClockResolution::Resolve(STEP_CODE_DATA_STRUCT & serviceData)
if ( (iv_targetType == TYPE_PROC) ||
(iv_targetType == TYPE_MEMBUF) )
{
- // even though we pass in pos=0 for systemref clk,
- // getActiveRefClk will make sure it returns the active osc.
TargetHandle_t l_ptargetClock =
- PlatServices::getActiveRefClk(iv_ptargetClock,
- TYPE_OSCREFCLK, 0);
+ PlatServices::getActiveRefClk(iv_ptargetClock, TYPE_OSCREFCLK);
// Callout this chip if nothing else.
+ // Or in the case of hostboot, use this chip for addClockCallout
if(NULL == l_ptargetClock)
{
l_ptargetClock = iv_ptargetClock;
@@ -73,6 +71,29 @@ int32_t ClockResolution::Resolve(STEP_CODE_DATA_STRUCT & serviceData)
PRDcalloutData::TYPE_PROCCLK));
#endif
}
+ else if (iv_targetType == TYPE_PEC)
+ {
+ TargetHandle_t l_ptargetClock =
+ PlatServices::getActiveRefClk(iv_ptargetClock, TYPE_OSCPCICLK);
+
+ // Callout this chip if nothing else.
+ if(NULL == l_ptargetClock)
+ {
+ l_ptargetClock = iv_ptargetClock;
+ }
+
+ // callout the clock source
+ // HB does not have the osc target modeled
+ // so we need to use the proc target with
+ // osc clock type to call out
+ #ifndef __HOSTBOOT_MODULE
+ serviceData.service_data->SetCallout(l_ptargetClock);
+ #else
+ serviceData.service_data->SetCallout(
+ PRDcallout(l_ptargetClock,
+ PRDcalloutData::TYPE_PCICLK));
+ #endif
+ }
// Get all connected chips for non-CLOCK_CARD types.
else
{
diff --git a/src/usr/diag/prdf/common/iipconst.h b/src/usr/diag/prdf/common/iipconst.h
index f99b614a6..41ed537d6 100755
--- a/src/usr/diag/prdf/common/iipconst.h
+++ b/src/usr/diag/prdf/common/iipconst.h
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2017 */
+/* Contributors Listed Below - COPYRIGHT 2012,2018 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -91,6 +91,7 @@ enum DOMAIN_ID
CLOCK_DOMAIN_FAB = 0x90,
CLOCK_DOMAIN_MEMBUF = 0x91,
+ CLOCK_DOMAIN_IO = 0x92,
END_DOMAIN_ID
};
diff --git a/src/usr/diag/prdf/common/plat/p9/prdfP9Configurator.C b/src/usr/diag/prdf/common/plat/p9/prdfP9Configurator.C
index e0003eb7d..7fe20f430 100755
--- a/src/usr/diag/prdf/common/plat/p9/prdfP9Configurator.C
+++ b/src/usr/diag/prdf/common/plat/p9/prdfP9Configurator.C
@@ -318,7 +318,8 @@ errlHndl_t PlatConfigurator::addDomainChips( TARGETING::TYPE i_type,
}
// Generic empty PLL domain map
- PllDomainMap pllDmnMap;
+ PllDomainMap sysRefPllDmnMap;
+ PllDomainMap mfRefPllDmnMap;
// Add each chip to the chip domain.
for ( const auto & trgt : trgtList )
@@ -340,13 +341,16 @@ errlHndl_t PlatConfigurator::addDomainChips( TARGETING::TYPE i_type,
switch ( i_type )
{
case TYPE_PROC:
- addChipToPllDomain( CLOCK_DOMAIN_FAB, pllDmnMap,
+ addChipToPllDomain( CLOCK_DOMAIN_FAB, sysRefPllDmnMap,
chip, trgt, TYPE_PROC,
scanFac, resFac );
+ addChipToPllDomain( CLOCK_DOMAIN_IO, mfRefPllDmnMap,
+ chip, trgt, TYPE_PEC,
+ scanFac, resFac );
break;
case TYPE_MEMBUF:
- addChipToPllDomain( CLOCK_DOMAIN_MEMBUF, pllDmnMap,
+ addChipToPllDomain( CLOCK_DOMAIN_MEMBUF, sysRefPllDmnMap,
chip, trgt, TYPE_MEMBUF,
scanFac, resFac );
break;
@@ -356,7 +360,10 @@ errlHndl_t PlatConfigurator::addDomainChips( TARGETING::TYPE i_type,
}
// Add the PLL domain maps to the PLL domain map list.
- if ( !pllDmnMap.empty() ) io_pllDmnLst.push_back( pllDmnMap );
+ if ( !sysRefPllDmnMap.empty() )
+ io_pllDmnLst.push_back( sysRefPllDmnMap );
+ if ( !mfRefPllDmnMap.empty() )
+ io_pllDmnLst.push_back( mfRefPllDmnMap );
// Flush rule table cache since objects are all built.
Prdr::LoadChipCache::flushCache();
@@ -381,7 +388,7 @@ void PlatConfigurator::addChipToPllDomain( DOMAIN_ID i_domainId,
// that is not very maintainable code. Instead, we should be querying
// clock domain attributes so that this code does not need to be
// modified if the clock domains change.
- uint32_t pos = 0;
+ uint32_t pos = getTargetPosition( getConnectedParent( i_trgt, TYPE_NODE ) );
if ( io_pllDmnMap.end() == io_pllDmnMap.find(pos) )
{
@@ -389,10 +396,10 @@ void PlatConfigurator::addChipToPllDomain( DOMAIN_ID i_domainId,
#ifdef __HOSTBOOT_MODULE
io_pllDmnMap[pos] = new PllDomain( i_domainId, clock,
- ThresholdResolution::cv_mnfgDefault );
+ ThresholdResolution::cv_mnfgDefault );
#else
io_pllDmnMap[pos] = new PllDomain( i_domainId, clock, CONTENT_HW,
- ThresholdResolution::cv_mnfgDefault );
+ ThresholdResolution::cv_mnfgDefault );
#endif
}
diff --git a/src/usr/diag/prdf/common/plat/p9/prdfP9PllDomain.C b/src/usr/diag/prdf/common/plat/p9/prdfP9PllDomain.C
index 9c6e805d3..fc42d0e68 100644
--- a/src/usr/diag/prdf/common/plat/p9/prdfP9PllDomain.C
+++ b/src/usr/diag/prdf/common/plat/p9/prdfP9PllDomain.C
@@ -206,9 +206,6 @@ int32_t PllDomain::Analyze(STEP_CODE_DATA_STRUCT & serviceData,
serviceData.service_data->SetUERE();
}
- // TODO: RTC 155673 - use attributes to callout active clock sources
- // For Nimbus sys ref and mf ref clock source is the same
-
// always suspect the clock source
closeClockSource.Resolve(serviceData);
if(&closeClockSource != &farClockSource)
@@ -298,19 +295,23 @@ int32_t PllDomain::Analyze(STEP_CODE_DATA_STRUCT & serviceData,
}
- // TODO: RTC 155673 - Handle redundant Osc failovers
- // Shouldn't see these on nimbus
if (mfFoList.size() > 0)
{
- PRDF_ERR( PRDF_FUNC "Unexpected PCI osc failover detected" );
mskErrType |= PCI_OSC_FAILOVER;
- serviceData.service_data->SetCallout( LEVEL2_SUPPORT, MRU_LOW );
+
+ // Set Signature
+ serviceData.service_data->GetErrorSignature()->
+ setChipId(pciList[0]->getHuid());
+ serviceData.service_data->SetErrorSig( PRDFSIG_MF_REF_FAILOVER );
}
if (sysRefFoList.size() > 0)
{
- PRDF_ERR( PRDF_FUNC "Unexpected Sys osc failover detected" );
mskErrType |= SYS_OSC_FAILOVER;
- serviceData.service_data->SetCallout( LEVEL2_SUPPORT, MRU_LOW );
+
+ // Set Signature
+ serviceData.service_data->GetErrorSignature()->
+ setChipId(pciList[0]->getHuid());
+ serviceData.service_data->SetErrorSig( PRDFSIG_SYS_REF_FAILOVER );
}
if (serviceData.service_data->IsAtThreshold())
diff --git a/src/usr/diag/prdf/common/plat/p9/prdfP9ProcMbCommonExtraSig.H b/src/usr/diag/prdf/common/plat/p9/prdfP9ProcMbCommonExtraSig.H
index 13f75095e..49260983d 100644
--- a/src/usr/diag/prdf/common/plat/p9/prdfP9ProcMbCommonExtraSig.H
+++ b/src/usr/diag/prdf/common/plat/p9/prdfP9ProcMbCommonExtraSig.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2016,2017 */
+/* Contributors Listed Below - COPYRIGHT 2016,2018 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -35,4 +35,7 @@ PRDR_ERROR_SIGNATURE( ERepair_FWThrExceeded, 0xffff0001, "",
/* PLL Extra signatures */
PRDR_ERROR_SIGNATURE( PLL_ERROR, 0x00ed0000, "","PLL error" );
+PRDR_ERROR_SIGNATURE( MF_REF_FAILOVER, 0x00ed0001, "", "MF Ref Clk failover" );
+PRDR_ERROR_SIGNATURE( SYS_REF_FAILOVER, 0x00ed0002, "",
+ "Sys Ref Clk failover" );
#endif // __prdfP9ProcMbCommonExtraSig_H
diff --git a/src/usr/diag/prdf/common/plat/prdfPlatServices_common.H b/src/usr/diag/prdf/common/plat/prdfPlatServices_common.H
index ed3e3e324..a71f44061 100755
--- a/src/usr/diag/prdf/common/plat/prdfPlatServices_common.H
+++ b/src/usr/diag/prdf/common/plat/prdfPlatServices_common.H
@@ -476,8 +476,7 @@ int32_t getCfam( ExtensibleChip * i_chip,
*/
TARGETING::TargetHandle_t getActiveRefClk(
TARGETING::TargetHandle_t i_procTarget,
- TARGETING::TYPE i_connType,
- uint32_t i_oscPos);
+ TARGETING::TYPE i_connType);
/**
diff --git a/src/usr/diag/prdf/common/plat/prdfTargetServices.C b/src/usr/diag/prdf/common/plat/prdfTargetServices.C
index 0da0a2047..2943cea07 100755
--- a/src/usr/diag/prdf/common/plat/prdfTargetServices.C
+++ b/src/usr/diag/prdf/common/plat/prdfTargetServices.C
@@ -1717,7 +1717,9 @@ TARGETING::TargetHandle_t getClockId(TARGETING::TargetHandle_t
PredicateIsFunctional l_funcFilter;
PredicateCTM l_oscFilter(CLASS_CHIP, i_connType);
- PredicateCTM l_peerFilter(CLASS_UNIT, TYPE_MFREFCLKENDPT);
+ PredicateCTM l_peerFilter(CLASS_UNIT,
+ (i_connType == TYPE_OSCREFCLK ?
+ TYPE_SYSREFCLKENDPT:TYPE_MFREFCLKENDPT));
PredicatePostfixExpr l_funcAndOscFilter, l_funcAndPeerFilter;
l_funcAndOscFilter.push(&l_oscFilter).push(&l_funcFilter).And();
l_funcAndPeerFilter.push(&l_peerFilter).push(&l_funcFilter).And();
diff --git a/src/usr/diag/prdf/plat/prdfPlatServices.C b/src/usr/diag/prdf/plat/prdfPlatServices.C
index b3a62f9dc..fc6ca377b 100644
--- a/src/usr/diag/prdf/plat/prdfPlatServices.C
+++ b/src/usr/diag/prdf/plat/prdfPlatServices.C
@@ -262,12 +262,9 @@ int32_t getCfam( ExtensibleChip * i_chip,
TARGETING::TargetHandle_t getActiveRefClk(TARGETING::TargetHandle_t
i_procTarget,
- TARGETING::TYPE i_connType,
- uint32_t i_oscPos)
+ TARGETING::TYPE i_connType)
{
- return PlatServices::getClockId( i_procTarget,
- i_connType,
- i_oscPos );
+ return nullptr;
}
//##############################################################################
OpenPOWER on IntegriCloud