diff options
author | Benjamin Weisenbeck <bweisenb@us.ibm.com> | 2018-04-30 10:08:10 -0500 |
---|---|---|
committer | Zane C. Shelley <zshelle@us.ibm.com> | 2018-05-04 22:26:49 -0400 |
commit | b9f23622a49f8f5dd71d98cb7edf5d6318e30a8b (patch) | |
tree | 5834352f16d47a5a972cad3147a566e351c80fbb /src/usr/diag/prdf | |
parent | 2ab7c3f22534bd55e62f16ca54e6e9f8eafd5cb7 (diff) | |
download | talos-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')
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; } //############################################################################## |