diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2016-06-10 11:28:48 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2016-07-03 22:39:40 -0400 |
commit | 3abbc2756991593bee3e2ad88f36f9eb26e6bf00 (patch) | |
tree | 816322d70dbd7b5045de55e6e4c0e8078741f7f9 | |
parent | 0b65db2f12b9d51f0ed6120b8ed0115f911dafb3 (diff) | |
download | talos-hostboot-3abbc2756991593bee3e2ad88f36f9eb26e6bf00.tar.gz talos-hostboot-3abbc2756991593bee3e2ad88f36f9eb26e6bf00.zip |
PRD: added sample simulator test cases and resolved code bugs
Change-Id: I5afcbe288a31e9caa35072bcd1d6eafb0714e0d6
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/25654
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com>
Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/26555
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
6 files changed, 237 insertions, 153 deletions
diff --git a/src/usr/diag/prdf/common/framework/resolution/iipResolution.C b/src/usr/diag/prdf/common/framework/resolution/iipResolution.C index a8bfa68a4..82da0b518 100755 --- a/src/usr/diag/prdf/common/framework/resolution/iipResolution.C +++ b/src/usr/diag/prdf/common/framework/resolution/iipResolution.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2012,2015 */ +/* Contributors Listed Below - COPYRIGHT 2012,2016 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -57,6 +57,8 @@ #include <prdfPlatServices.H> #undef iipResolution_C +using namespace TARGETING; + namespace PRDF { @@ -213,56 +215,46 @@ int32_t TryResolution::Resolve( STEP_CODE_DATA_STRUCT & io_serviceData ) //-------------------------------------------------------------------- int32_t CalloutConnectedGard::Resolve( STEP_CODE_DATA_STRUCT & io_serviceData ) { - using namespace TARGETING; - - TargetHandle_t sourceTrgt = ServiceDataCollector::getTargetAnalyzed(); - TargetHandle_t connTrgt = NULL; - TargetHandle_t srcEndPoint = NULL; + TargetHandle_t sourceTrgt = ServiceDataCollector::getTargetAnalyzed(); + TargetHandle_t connTrgt = nullptr; - if(TYPE_NA == iv_peerConnType) + if ( TYPE_NA == iv_peerConnType ) { - TargetHandleList list = getConnected( sourceTrgt, iv_targetType ); - - if ( 0xffffffff == iv_idx ) + if ( INVALID_INDEX == iv_idx ) { - if ( 0 < list.size() ) - connTrgt = list[0]; + connTrgt = getConnectedParent( sourceTrgt, iv_targetType ); } else { - for (TargetHandleList::iterator i = list.begin(); - i != list.end(); - i++) - { - if ( iv_idx == getTargetPosition(*i) ) - { - connTrgt = *i; - break; - } - } + connTrgt = getConnectedChild( sourceTrgt, iv_targetType, iv_idx ); } } else { - srcEndPoint = getConnectedChild( sourceTrgt, iv_peerConnType, iv_idx ); + TargetHandle_t srcEndPoint + = getConnectedChild( sourceTrgt, iv_peerConnType, iv_idx ); - if ( NULL != srcEndPoint ) + if ( nullptr != srcEndPoint ) connTrgt = getConnectedPeerTarget( srcEndPoint ); } - if ( NULL != connTrgt ) + if ( nullptr != connTrgt ) + { io_serviceData.service_data->SetCallout( connTrgt, iv_priority, - iv_gardState); + iv_gardState ); + } else { - if ( NULL != iv_altResolution ) + if ( nullptr != iv_altResolution ) + { iv_altResolution->Resolve( io_serviceData ); + } else { PRDF_ERR( "[CalloutConnected::Resolve] No connected chip found:" " sourceTrgt=0x%08x, iv_peerConnType=0x%x", - getHuid(sourceTrgt), iv_peerConnType); + getHuid(sourceTrgt), iv_peerConnType ); io_serviceData.service_data->SetCallout( sourceTrgt, MRU_MED, @@ -278,39 +270,27 @@ int32_t CalloutConnectedGard::Resolve( STEP_CODE_DATA_STRUCT & io_serviceData ) //-------------------------------------------------------------------- int32_t AnalyzeConnected::Resolve( STEP_CODE_DATA_STRUCT & io_serviceData ) { - using namespace TARGETING; - TargetHandle_t sourceTrgt = ServiceDataCollector::getTargetAnalyzed(); - TargetHandle_t connTrgt = NULL; + TargetHandle_t connTrgt = nullptr; - TargetHandleList list = getConnected( sourceTrgt, iv_targetType ); - - if ( 0xffffffff == iv_idx ) + if ( INVALID_INDEX == iv_idx ) { - if ( 0 < list.size() ) - connTrgt = list[0]; + connTrgt = getConnectedParent( sourceTrgt, iv_targetType ); } else { - for (TargetHandleList::iterator i = list.begin(); i != list.end(); i++) - { - if ( iv_idx == getTargetPosition(*i) ) - { - connTrgt = *i; - break; - } - } + connTrgt = getConnectedChild( sourceTrgt, iv_targetType, iv_idx ); } // If valid chip found, look up in global system container. - CHIP_CLASS * connChip = NULL; - if ( NULL != connTrgt ) + CHIP_CLASS * connChip = nullptr; + if ( nullptr != connTrgt ) { connChip = systemPtr->GetChip( connTrgt ); } // Analyze chip. - if ( NULL != connChip ) + if ( nullptr != connChip ) return connChip->Analyze( io_serviceData, io_serviceData.service_data->getSecondaryAttnType() ); else diff --git a/src/usr/diag/prdf/common/framework/resolution/prdfAnalyzeConnected.H b/src/usr/diag/prdf/common/framework/resolution/prdfAnalyzeConnected.H index 38d0753d6..52dd4861f 100755 --- a/src/usr/diag/prdf/common/framework/resolution/prdfAnalyzeConnected.H +++ b/src/usr/diag/prdf/common/framework/resolution/prdfAnalyzeConnected.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2012,2015 */ +/* Contributors Listed Below - COPYRIGHT 2012,2016 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -58,63 +58,47 @@ struct STEP_CODE_DATA_STRUCT; */ class AnalyzeConnected : public Resolution { -public: - /** - default ctor - */ - AnalyzeConnected(void); - - /** - * @brief Constructor - * @param[in] i_targetType Target type of unit that's connected to given - * target - * @param[in] i_idx: index into getConnected list of chip. - */ - AnalyzeConnected( TARGETING::TYPE i_targetType, - uint32_t i_idx =0xffffffff ); - - // ~prdfAnalyzeConnected(); default dtor is sufficient - - /** - * @brief Determine chip object for current connected unit and call its - * analyze func. - * @param[io] io_service_data References to STEP_CODE_DATA_STRUCT - * @return SUCCESS | non-zero if chip not found. - * @note if the call to getConnected yields NULL than the - * altResolution is called. If the altResolution is NULL than the - * source is added to the callout list. - */ - virtual int32_t Resolve( STEP_CODE_DATA_STRUCT & io_service_data ); - - virtual bool operator==(const AnalyzeConnected & r) const; - -private: // functions -private: // Data - - TARGETING::TYPE iv_targetType; - uint32_t iv_idx; + public: + + /** + * @brief Constructor + * @param[in] i_targetType Target type of unit that's connected to given + * target + * @param[in] i_idx: index into getConnected list of chip. + */ + AnalyzeConnected( TARGETING::TYPE i_targetType = TARGETING::TYPE_NA, + uint32_t i_idx = INVALID_INDEX ) : + iv_targetType(i_targetType), iv_idx(i_idx) + {} + + // ~prdfAnalyzeConnected(); default dtor is sufficient + + /** + * @brief Determine chip object for current connected unit and call its + * analyze func. + * @param[io] io_service_data References to STEP_CODE_DATA_STRUCT + * @return SUCCESS | non-zero if chip not found. + * @note if the call to getConnected yields NULL than the + * altResolution is called. If the altResolution is NULL than the + * source is added to the callout list. + */ + virtual int32_t Resolve( STEP_CODE_DATA_STRUCT & io_service_data ); + + virtual bool operator==(const AnalyzeConnected & r) const + { + return ( iv_targetType == r.iv_targetType && + iv_idx == r.iv_idx ); + } + + private: // functions + private: // Data + + TARGETING::TYPE iv_targetType; + uint32_t iv_idx; + + static constexpr uint32_t INVALID_INDEX = 0xffffffff; }; -inline AnalyzeConnected::AnalyzeConnected(void) - : iv_targetType(TARGETING::TYPE_NA), - iv_idx(0xffffffff) -{ -} - -inline AnalyzeConnected::AnalyzeConnected( - TARGETING::TYPE i_targetType, - uint32_t i_idx ) - : iv_targetType(i_targetType), - iv_idx(i_idx) -{ -} - -inline bool AnalyzeConnected::operator==(const AnalyzeConnected & r) const -{ - return ( iv_targetType == r.iv_targetType && - iv_idx == r.iv_idx ); -} - } // end namespace PRDF #endif /* PRDFANALYZECONNECTED_H */ diff --git a/src/usr/diag/prdf/common/framework/resolution/prdfCalloutConnectedGard.H b/src/usr/diag/prdf/common/framework/resolution/prdfCalloutConnectedGard.H index 776ab9bd5..4f0e6f033 100644 --- a/src/usr/diag/prdf/common/framework/resolution/prdfCalloutConnectedGard.H +++ b/src/usr/diag/prdf/common/framework/resolution/prdfCalloutConnectedGard.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2014,2015 */ +/* Contributors Listed Below - COPYRIGHT 2014,2016 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -51,17 +51,13 @@ struct STEP_CODE_DATA_STRUCT; class CalloutConnectedGard : public Resolution { public: - /** - * @brief default ctor - */ - CalloutConnectedGard(void); /** * @brief Constructor * @param i_targetType type of desired unit that's connected to * i_psourceHandle * @param i_idx index into getConnected list to callout - * (i_idx = 0xffffffff means callout the first + * (i_idx = INVALID_INDEX means callout the first * valid target) * @param i_priority callout priority @see srci.H for priority * values @@ -73,12 +69,16 @@ class CalloutConnectedGard : public Resolution * @param i_trgtGardState gard policy associated with target callout * @note Don't use this class to callout clocks - use ClockResolution */ - CalloutConnectedGard( TARGETING::TYPE i_targetType, - uint32_t i_idx = 0xffffffff, - PRDpriority i_priority = MRU_MED, - Resolution * i_altResolution = NULL, - TARGETING::TYPE i_peerConnType = TARGETING::TYPE_NA, - GARD_POLICY i_trgtGardState = PRDF::GARD ); + CalloutConnectedGard( TARGETING::TYPE i_targetType = TARGETING::TYPE_NA, + uint32_t i_idx = INVALID_INDEX, + PRDpriority i_priority = MRU_MED, + Resolution * i_altResolution = nullptr, + TARGETING::TYPE i_peerConnType = TARGETING::TYPE_NA, + GARD_POLICY i_trgtGardState = PRDF::GARD ) : + iv_targetType(i_targetType), iv_idx(i_idx), iv_priority(i_priority), + iv_altResolution(i_altResolution), iv_peerConnType(i_peerConnType), + iv_gardState(i_trgtGardState) + {} // ~CalloutConnectedGard(); default dtor is sufficient @@ -96,7 +96,15 @@ class CalloutConnectedGard : public Resolution /** * @brief overloads operator == */ - virtual bool operator==(const CalloutConnectedGard & i_right ) const; + virtual bool operator==(const CalloutConnectedGard & i_right ) const + { + return ( iv_targetType == i_right.iv_targetType && + iv_idx == i_right.iv_idx && + iv_priority == i_right.iv_priority && + iv_altResolution == i_right.iv_altResolution && + iv_peerConnType == i_right.iv_peerConnType && + iv_gardState == i_right.iv_gardState ); + } protected: // Data @@ -106,40 +114,9 @@ class CalloutConnectedGard : public Resolution Resolution * iv_altResolution; TARGETING::TYPE iv_peerConnType; GARD_POLICY iv_gardState; ///< gard policy associated with resolution -}; -inline CalloutConnectedGard::CalloutConnectedGard( void ) : - iv_targetType( TARGETING::TYPE_NA ), - iv_idx( 0xffffffff ), - iv_priority( MRU_LOW ), - iv_altResolution( NULL ), - iv_peerConnType( TARGETING::TYPE_NA ), - iv_gardState( PRDF::GARD ) -{} - -inline CalloutConnectedGard::CalloutConnectedGard( TARGETING::TYPE i_targetType, - uint32_t i_idx, - PRDpriority i_priority, - Resolution * i_altResolution, - TARGETING::TYPE i_peerConnType, - GARD_POLICY i_trgtGardState ) : - iv_targetType( i_targetType ), - iv_idx( i_idx ), - iv_priority( i_priority ), - iv_altResolution( i_altResolution ), - iv_peerConnType( i_peerConnType ), - iv_gardState( i_trgtGardState ) -{ } - -inline bool CalloutConnectedGard::operator == - ( const CalloutConnectedGard & i_right ) const -{ - return ( iv_targetType == i_right.iv_targetType && - iv_idx == i_right.iv_idx && iv_priority == i_right.iv_priority && - iv_altResolution == i_right.iv_altResolution && - iv_peerConnType == i_right.iv_peerConnType && - iv_gardState == i_right.iv_gardState ); -} + static constexpr uint32_t INVALID_INDEX = 0xffffffff; +}; } // end namespace PRDF diff --git a/src/usr/diag/prdf/common/plat/p9/prdfP9Proc.C b/src/usr/diag/prdf/common/plat/p9/prdfP9Proc.C new file mode 100644 index 000000000..643180e70 --- /dev/null +++ b/src/usr/diag/prdf/common/plat/p9/prdfP9Proc.C @@ -0,0 +1,71 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/common/plat/p9/prdfP9Proc.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2016 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* IBM_PROLOG_END_TAG */ + +/** @file prdfP9Proc.C + * @brief Contains all the plugin code for the PRD P9 Proc + */ + +// Framework includes +#include <prdfPluginDef.H> +#include <iipServiceDataCollector.h> +#include <prdfExtensibleChip.H> +#include <prdfPluginMap.H> + +// Platform includes + +namespace PRDF +{ + +namespace Proc +{ + +//############################################################################## +// +// Special plugins +// +//############################################################################## + +/** + * @brief Used when the chip has a CHECK_STOP or UNIT_CS attention to check for + * the presence of recoverable attentions. + * @param i_chip A P9 chip. + * @param o_hasRecovered True if the chip has a recoverable attention. + * @return SUCCESS + */ +int32_t CheckForRecovered( ExtensibleChip * i_chip, + bool & o_hasRecovered ) +{ + o_hasRecovered = false; + + // TODO: RTC 152590 Will be implemented later. + + return SUCCESS; +} +PRDF_PLUGIN_DEFINE_NS( p9_nimbus, Proc, CheckForRecovered ); + +} // end namespace Proc + +} // end namespace PRDF + diff --git a/src/usr/diag/prdf/common/plat/p9/prdf_plat_p9.mk b/src/usr/diag/prdf/common/plat/p9/prdf_plat_p9.mk index a11d7c90e..cb628778b 100644 --- a/src/usr/diag/prdf/common/plat/p9/prdf_plat_p9.mk +++ b/src/usr/diag/prdf/common/plat/p9/prdf_plat_p9.mk @@ -37,6 +37,10 @@ prd_incpath += ${PRD_SRC_PATH}/common/plat/p9 # Object files common to both FSP and Hostboot ################################################################################ +# non-rule plugin related prd_obj += prdfP9Configurator.o prd_obj += prdfP9PllDomain.o +# rule plugin related +prd_rule_plugin += prdfP9Proc.o + diff --git a/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C b/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C index 5ca0f28e1..16853948c 100644 --- a/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C +++ b/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C @@ -160,32 +160,100 @@ void getTargetInfo( HUID i_chipId, TARGETING::TYPE & o_targetType, switch ( o_targetType ) { - case TYPE_MEMBUF: - snprintf( o_chipName, i_sz_chipName, "mb(n%dp%d)", - l_node, l_chip ); - break; case TYPE_PROC: snprintf( o_chipName, i_sz_chipName, "pu(n%dp%d)", l_node, l_chip ); break; + + case TYPE_EQ: + l_chip = l_chip / MAX_EQ_PER_PROC; + l_chiplet = l_chiplet % MAX_EQ_PER_PROC; + snprintf( o_chipName, i_sz_chipName, "eq(n%dp%dc%d)", + l_node, l_chip, l_chiplet ); + break; + case TYPE_EX: l_chip = l_chip / MAX_EX_PER_PROC; l_chiplet = l_chiplet % MAX_EX_PER_PROC; snprintf( o_chipName, i_sz_chipName, "ex(n%dp%dc%d)", l_node, l_chip, l_chiplet ); break; + + case TYPE_CORE: + l_chip = l_chip / MAX_EC_PER_PROC; + l_chiplet = l_chiplet % MAX_EC_PER_PROC; + snprintf( o_chipName, i_sz_chipName, "(ecn%dp%dc%d)", + l_node, l_chip, l_chiplet ); + break; + + case TYPE_CAPP: + l_chip = l_chip / MAX_CAPP_PER_PROC; + l_chiplet = l_chiplet % MAX_CAPP_PER_PROC; + snprintf( o_chipName, i_sz_chipName, "capp(n%dp%dc%d)", + l_node, l_chip, l_chiplet ); + break; + + case TYPE_PEC: + l_chip = l_chip / MAX_PEC_PER_PROC; + l_chiplet = l_chiplet % MAX_PEC_PER_PROC; + snprintf( o_chipName, i_sz_chipName, "pec(n%dp%dc%d)", + l_node, l_chip, l_chiplet ); + break; + + case TYPE_PHB: + l_chip = l_chip / MAX_PHB_PER_PROC; + l_chiplet = l_chiplet % MAX_PHB_PER_PROC; + snprintf( o_chipName, i_sz_chipName, "phb(n%dp%dc%d)", + l_node, l_chip, l_chiplet ); + break; + + case TYPE_OBUS: + l_chip = l_chip / MAX_OBUS_PER_PROC; + l_chiplet = l_chiplet % MAX_OBUS_PER_PROC; + snprintf( o_chipName, i_sz_chipName, "ob(n%dp%dc%d)", + l_node, l_chip, l_chiplet ); + break; + + case TYPE_XBUS: + l_chip = l_chip / MAX_XBUS_PER_PROC; + l_chiplet = l_chiplet % MAX_XBUS_PER_PROC; + snprintf( o_chipName, i_sz_chipName, "xb(n%dp%dc%d)", + l_node, l_chip, l_chiplet ); + break; + + case TYPE_MCBIST: + l_chip = l_chip / MAX_MCBIST_PER_PROC; + l_chiplet = l_chiplet % MAX_MCBIST_PER_PROC; + snprintf( o_chipName, i_sz_chipName, "mcb(n%dp%dc%d)", + l_node, l_chip, l_chiplet ); + break; + case TYPE_MCS: l_chip = l_chip / MAX_MCS_PER_PROC; l_chiplet = l_chiplet % MAX_MCS_PER_PROC; snprintf( o_chipName, i_sz_chipName, "mcs(n%dp%dc%d)", l_node, l_chip, l_chiplet ); break; + + case TYPE_MCA: + l_chip = l_chip / MAX_MCA_PER_PROC; + l_chiplet = l_chiplet % MAX_MCA_PER_PROC; + snprintf( o_chipName, i_sz_chipName, "mca(n%dp%dc%d)", + l_node, l_chip, l_chiplet ); + break; + + case TYPE_MEMBUF: + snprintf( o_chipName, i_sz_chipName, "mb(n%dp%d)", + l_node, l_chip ); + break; + case TYPE_MBA: l_chip = l_chip / MAX_MBA_PER_MEMBUF; l_chiplet = l_chiplet % MAX_MBA_PER_MEMBUF; snprintf( o_chipName, i_sz_chipName, "mba(n%dp%dc%d)", l_node, l_chip, l_chiplet ); break; + default: snprintf( o_chipName, i_sz_chipName, "????" ); } |