summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2016-06-10 11:28:48 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2016-07-03 22:39:40 -0400
commit3abbc2756991593bee3e2ad88f36f9eb26e6bf00 (patch)
tree816322d70dbd7b5045de55e6e4c0e8078741f7f9
parent0b65db2f12b9d51f0ed6120b8ed0115f911dafb3 (diff)
downloadtalos-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>
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/resolution/iipResolution.C74
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/resolution/prdfAnalyzeConnected.H96
-rw-r--r--src/usr/diag/prdf/common/framework/resolution/prdfCalloutConnectedGard.H69
-rw-r--r--src/usr/diag/prdf/common/plat/p9/prdfP9Proc.C71
-rw-r--r--src/usr/diag/prdf/common/plat/p9/prdf_plat_p9.mk4
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfLogParse_common.C76
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, "????" );
}
OpenPOWER on IntegriCloud