summaryrefslogtreecommitdiffstats
path: root/src/usr/diag
diff options
context:
space:
mode:
authorPrem Shanker Jha <premjha2@in.ibm.com>2014-11-05 00:28:59 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2015-02-16 11:59:55 -0600
commit28253411cc210245e515edff5b166dd6114d711b (patch)
tree68885d83cc9359f0ca1016100d74fc8d1b12b542 /src/usr/diag
parent0e58a17ace081132941307bb348edde68dea5279 (diff)
downloadtalos-hostboot-28253411cc210245e515edff5b166dd6114d711b.tar.gz
talos-hostboot-28253411cc210245e515edff5b166dd6114d711b.zip
PRD: Added support for gard of individual target callout.
Change-Id: I42b94169ec85c31410f7e2c95adfd19857351f65 RTC: 103773 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/14322 Reviewed-by: Zane Shelley <zshelle@us.ibm.com> Tested-by: Jenkins Server Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/15739 Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/diag')
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/resolution/iipCalloutResolution.h157
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/resolution/iipCaptureResolution.h6
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/resolution/iipResolution.C59
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/resolution/iipResolution.h7
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/resolution/iipResolutionFactory.C46
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/resolution/iipResolutionFactory.h72
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/resolution/prdfCalloutConnected.H151
-rw-r--r--src/usr/diag/prdf/common/framework/resolution/prdfCalloutConnectedGard.H146
-rw-r--r--src/usr/diag/prdf/common/framework/resolution/prdfCalloutGard.H123
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/resolution/prdfResetThresholdResolution.H1
-rw-r--r--src/usr/diag/prdf/common/framework/rule/prdfRuleMetaData.C42
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/rule/prdrCommon.H10
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/rule/prdrCompile.C7
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/rule/prdrCompile.y31
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/rule/prdrExpr.H60
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/rule/prdrLoadChip.C10
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/rule/prdrLoadChip.H4
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/iipServiceDataCollector.h44
-rw-r--r--src/usr/diag/prdf/common/framework/service/prdfRasServices_common.C82
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfServiceDataCollector.C16
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/CommonActions.rule14
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule5
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Proc_acts_TP.rule7
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfLogParse_common.C18
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfPfa5Data.h9
25 files changed, 587 insertions, 540 deletions
diff --git a/src/usr/diag/prdf/common/framework/resolution/iipCalloutResolution.h b/src/usr/diag/prdf/common/framework/resolution/iipCalloutResolution.h
deleted file mode 100755
index f811b65dc..000000000
--- a/src/usr/diag/prdf/common/framework/resolution/iipCalloutResolution.h
+++ /dev/null
@@ -1,157 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/diag/prdf/common/framework/resolution/iipCalloutResolution.h $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2014 */
-/* [+] 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 */
-
-#ifndef iipCalloutResolution_h
-#define iipCalloutResolution_h
-
-// Class Description *************************************************
-//
-// Name: CalloutResolution
-// Base class: Resolution
-//
-// Description: Resolution makes a MRU Callout.
-//
-// Usage:
-//
-//
-// CalloutResolution r1(PU0,MRU_MED);
-// ResolutionMap rm(....) // see iipResolutionMap.h
-// rm.Add(BIT_LIST_STRING_31,&r1); // if bit 31 is on callout PU0 HIGH as
-// // the failing item
-//
-// ...
-//
-//
-// End Class Description *********************************************
-
-//--------------------------------------------------------------------
-// Includes
-//--------------------------------------------------------------------
-
-#include <prdfCallouts.H>
-#include <iipResolution.h>
-
-namespace PRDF
-{
-
-//--------------------------------------------------------------------
-// Forward References
-//--------------------------------------------------------------------
-
-/**
- A resolution that adds a MRU callout to the service data collector
- @version V4R5
- @author Douglas R. Gilbert
-*/
-
-class CalloutResolution: public Resolution
-{
-public:
-
- /**
- CTOR
- <ul>
- <br><b>Parameters: </b> a MruValues, a PriorityValues (see xspiiCallout.h)
- <br><b>Returns: </b> None.
- <br><b>Requirements:</b> None.
- <br><b>Promises: </b> Object created
- <br><b>Exceptions: </b> None.
- </ul><br>
- */
- CalloutResolution(PRDcallout callout, PRDpriority priority);
- CalloutResolution(void); // default
- CalloutResolution(const CalloutResolution & cr);
-
- // Function Specification ********************************************
- //
- // Purpose: Destruction
- // Parameters: None.
- // Returns: No value returned
- // Requirements: None.
- // Promises: None.
- // Exceptions: None.
- // Concurrency: Reentrant
- // Notes: Compiler default is sufficient
- //
- // End Function Specification ****************************************
- //~CalloutResolution();
-
- /**
- Resolve by adding a the MRU callout to the service data collector
- <ul>
- <br><b>Parameters: </b> ServiceDataCollector
- <br><b>Returns: </b> Return code [SUCCESS | nonZero]
- <br><b>Requirements:</b> none.
- <br><b>Promises: </b> serviceData::getMruList().GetCount()++
- <br><b>Exceptions: </b> None.
- </ul><br>
- */
- virtual int32_t Resolve(STEP_CODE_DATA_STRUCT & error);
-
- // dg00 start
- virtual bool operator==(const Resolution & r) const
- {
- return r.operator==(*this); // compare whatever r is with this
- }
-
- virtual bool operator==(const CalloutResolution & r) const
- {
- return((xMruCallout == r.xMruCallout) && (xPriority == r.xPriority));
- }
-
-// friend int operator==(const CalloutResolution& a, const CalloutResolution& b)
-// {
-// return((a.xMruCallout == b.xMruCallout) && (a.xPriority == b.xPriority));
-// }
- // dg00 end
-
-private: // functions
-private: // Data
-
- PRDcallout xMruCallout;
- PRDpriority xPriority;
-
-};
-
-
-inline
-CalloutResolution::CalloutResolution(PRDcallout callout,
- PRDpriority priority)
-: xMruCallout(callout), xPriority(priority)
-{}
-
-inline
-CalloutResolution::CalloutResolution() :
- xMruCallout(NULL), xPriority(MRU_MED)
-{}
-
-inline
-CalloutResolution::CalloutResolution(const CalloutResolution & cr)
-: xMruCallout(cr.xMruCallout), xPriority(cr.xPriority)
-{}
-
-} // end namespace PRDF
-
-#endif /* iipCalloutResolution_h */
diff --git a/src/usr/diag/prdf/common/framework/resolution/iipCaptureResolution.h b/src/usr/diag/prdf/common/framework/resolution/iipCaptureResolution.h
index afc4a253e..d05f503f4 100755
--- a/src/usr/diag/prdf/common/framework/resolution/iipCaptureResolution.h
+++ b/src/usr/diag/prdf/common/framework/resolution/iipCaptureResolution.h
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 1996,2014 */
+/* Contributors Listed Below - COPYRIGHT 2012,2015 */
+/* [+] 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. */
@@ -52,7 +54,7 @@ class SCAN_COMM_REGISTER_CLASS;
class SomeChipClass {
public:
CaptureResolution iv_captureScr;
- CalloutResolution calloutSomething;
+ CalloutGardResolution calloutSomething;
ResolutionMap someResolutionMap;
// ....
};
diff --git a/src/usr/diag/prdf/common/framework/resolution/iipResolution.C b/src/usr/diag/prdf/common/framework/resolution/iipResolution.C
index 3808b5759..bde13c9d2 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,2014 */
+/* Contributors Listed Below - COPYRIGHT 2012,2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -39,7 +39,6 @@
#include <iipSystem.h>
#include <prdfGlobal.H>
//#include <iipCalloutMap.h>
-#include <iipCalloutResolution.h>
#include <iipstep.h>
#include <iipCaptureData.h>
#include <iipServiceDataCollector.h>
@@ -52,7 +51,8 @@
#include <iipAnalyzeChipResolution.h>
#include <xspprdTryResolution.h>
#include <iipchip.h>
-#include <prdfCalloutConnected.H>
+#include <prdfCalloutGard.H>
+#include <prdfCalloutConnectedGard.H>
#include <prdfAnalyzeConnected.H>
#include <prdfPlatServices.H>
#undef iipResolution_C
@@ -101,37 +101,37 @@ int32_t EregResolution::Resolve( STEP_CODE_DATA_STRUCT & io_data )
return rc;
}
-
-//---------------------------------------------------------------------
-// CalloutResolution Member Function Specifications
-// using MruValues (xspiiCallout.h)
-//---------------------------------------------------------------------
-
-int32_t CalloutResolution::Resolve( STEP_CODE_DATA_STRUCT & io_serviceData )
+//--------------------------------------------------------------------
+// CalloutGardResolution Member Functions
+//--------------------------------------------------------------------
+int32_t CalloutGardResolution::Resolve( STEP_CODE_DATA_STRUCT & io_serviceData )
{
/*
- This resolution is only needed when we callout self.So during RuleChip
- creation,we create CalloutResolution passing NULL as target value.In Resolve
- function when we need to update SDC with target to be called out we get it
- from Service Data Collector.It is because target currently under analysis is
- the target that needs to be called out here.By instantiating Callout
- resolution with just priority info and NULL target , we are able to reduce
- CalloutResolution objects to one per priority instead of one per target per
- priority.So,this reduction in number of resolution objects shall eventually
- reduce memory utilization.
+ This resolution is only needed when we callout self. So, during RuleChip
+ creation, we create CalloutGardResolution passing NULL as target value. In
+ Resolve function when we need to update SDC with target to be called out, we
+ get it from Service Data Collector. It is because target currently under
+ analysis is the target that needs to be called out here. By instantiating
+ Callout resolution with just priority info and NULL target, we are able to
+ reduce CalloutGardResolution objects to one per priority instead of one per
+ target per priority. So, this reduction in number of resolution objects
+ shall eventually reduce memory utilization.
*/
- if ( PRDcalloutData::TYPE_TARGET == xMruCallout.getType() )
+ if ( PRDcalloutData::TYPE_TARGET == iv_callout.getType() )
{
PRDcallout l_targetCallout( ServiceDataCollector::getTargetAnalyzed() );
- io_serviceData.service_data->SetCallout( l_targetCallout, xPriority );
+ io_serviceData.service_data->SetCallout( l_targetCallout,
+ iv_calloutPriority,
+ iv_gardState );
}
else
{
- io_serviceData.service_data->SetCallout( xMruCallout,xPriority );
+ io_serviceData.service_data->SetCallout( iv_callout, iv_calloutPriority,
+ iv_gardState );
}
- return(SUCCESS);
+ return SUCCESS;
}
//--------------------------------------------------------------------
@@ -208,7 +208,10 @@ int32_t TryResolution::Resolve( STEP_CODE_DATA_STRUCT & io_serviceData )
return rc;
}
-int32_t CalloutConnected::Resolve( STEP_CODE_DATA_STRUCT & io_serviceData )
+//--------------------------------------------------------------------
+// CalloutConnectedGard Member Functions
+//--------------------------------------------------------------------
+int32_t CalloutConnectedGard::Resolve( STEP_CODE_DATA_STRUCT & io_serviceData )
{
using namespace TARGETING;
@@ -248,7 +251,9 @@ int32_t CalloutConnected::Resolve( STEP_CODE_DATA_STRUCT & io_serviceData )
}
if ( NULL != connTrgt )
- io_serviceData.service_data->SetCallout( connTrgt, iv_priority );
+ io_serviceData.service_data->SetCallout( connTrgt,
+ iv_priority,
+ iv_gardState);
else
{
if ( NULL != iv_altResolution )
@@ -259,7 +264,9 @@ int32_t CalloutConnected::Resolve( STEP_CODE_DATA_STRUCT & io_serviceData )
" sourceTrgt=0x%08x, iv_peerConnType=0x%x",
getHuid(sourceTrgt), iv_peerConnType);
- io_serviceData.service_data->SetCallout( sourceTrgt );
+ io_serviceData.service_data->SetCallout( sourceTrgt,
+ MRU_MED,
+ iv_gardState );
}
}
diff --git a/src/usr/diag/prdf/common/framework/resolution/iipResolution.h b/src/usr/diag/prdf/common/framework/resolution/iipResolution.h
index cd97dc3da..f3fb31d2e 100755
--- a/src/usr/diag/prdf/common/framework/resolution/iipResolution.h
+++ b/src/usr/diag/prdf/common/framework/resolution/iipResolution.h
@@ -65,7 +65,6 @@ namespace PRDF
//--------------------------------------------------------------------
// Forward References
//--------------------------------------------------------------------
-class CalloutResolution; //dg00
class Resolution
@@ -95,8 +94,7 @@ public:
// Parameters: Reference to the Step code data structure
// Returns: return code
// Requirements: None
- // Promises: if rc = SUCCESS then data filled with appropriate service
- // data
+ // Promises: if rc = SUCCESS then data filled with apropriate service data
// Exceptions: None
// Concurrency: synchronous
// Notes: if rc != SUCCESS then state of service data is unpredictable
@@ -122,9 +120,6 @@ public:
*/
virtual bool operator==(const Resolution & r) const
{ return false; } // default
- virtual bool operator==(const CalloutResolution & r) const
- { return false; }
- // dg00 end
protected:
diff --git a/src/usr/diag/prdf/common/framework/resolution/iipResolutionFactory.C b/src/usr/diag/prdf/common/framework/resolution/iipResolutionFactory.C
index b2a1109a3..e3eb70f65 100755
--- a/src/usr/diag/prdf/common/framework/resolution/iipResolutionFactory.C
+++ b/src/usr/diag/prdf/common/framework/resolution/iipResolutionFactory.C
@@ -42,6 +42,8 @@
#include <prdfFlyWeight.C> // dg01
#include <prdfFlyWeightS.C>
#include <prdfPlatServices.H>
+#include <prdfCalloutConnectedGard.H>
+#include <prdfCalloutGard.H>
#undef iipResolutionFactory_C
//----------------------------------------------------------------------
@@ -102,14 +104,13 @@ ResolutionFactory::~ResolutionFactory()
// ---------------------------------------------------------------------
-Resolution & ResolutionFactory::GetCalloutResolution(PRDcallout callout,
- PRDpriority p)
+Resolution & ResolutionFactory::getCalloutGardResol( PRDcallout callout,
+ PRDpriority p,
+ GARD_POLICY i_gardState )
{
// search for existing callout
- // dg01 start
- CalloutResolution key(callout,p);
- return iv_Callouts.get(key);
- // dg01 end
+ CalloutGardResolution key(callout, p, i_gardState );
+ return iv_calloutGardFW.get(key);
}
// ----------------------------------------------------------------------
@@ -185,22 +186,28 @@ MaskResolution & ResolutionFactory::GetThresholdResolution(uint32_t maskId)
return *r;
}
-Resolution & ResolutionFactory::GetConnectedCalloutResolution(
+// ---------------------------------------------------------------------
+
+Resolution & ResolutionFactory::getConnCalloutGardResol(
TARGETING::TYPE i_targetType,
uint32_t i_idx,
PRDpriority i_priority,
Resolution * i_altResolution,
- TARGETING::TYPE i_peerConnType )
+ TARGETING::TYPE i_peerConnType,
+ GARD_POLICY i_gardState )
{
- CalloutConnected key( i_targetType,
- i_idx,
- i_priority,
- i_altResolution,
- i_peerConnType );
-
- return iv_connectedCallouts.get(key);
+ CalloutConnectedGard key( i_targetType,
+ i_idx,
+ i_priority,
+ i_altResolution,
+ i_peerConnType,
+ i_gardState );
+
+ return iv_connCalloutGardFW.get(key);
}
+// ---------------------------------------------------------------------
+
Resolution & ResolutionFactory::GetAnalyzeConnectedResolution(
TARGETING::TYPE i_targetType,
uint32_t i_idx )
@@ -277,7 +284,6 @@ void ResolutionFactory::Reset()
iv_captureResolutionFW.clear();
/*Clear because the "alt resolution" could have be a link or other cleared
resolution.*/
- iv_connectedCallouts.clear();
iv_clockResolutionFW.clear();
}
@@ -286,16 +292,12 @@ void ResolutionFactory::Reset()
void ResolutionFactory::printStats()
{
- PRDF_TRAC("Callout");
- iv_Callouts.printStats( );
PRDF_TRAC("Link Resolution");
iv_Links.printStats( );
PRDF_TRAC("ThresholdResolutionList");
iv_thresholdResolutions.printStats( );
PRDF_TRAC("MaskResolution");
iv_maskResolutions.printStats( );
- PRDF_TRAC("ConnectedCallout");
- iv_connectedCallouts.printStats( );
PRDF_TRAC("AnalyzeConnectedCallout");
iv_analyzeConnected.printStats( );
PRDF_TRAC("pluginCallFW");
@@ -316,6 +318,10 @@ void ResolutionFactory::printStats()
iv_captureResolutionFW.printStats( );
PRDF_TRAC("clockResolution");
iv_clockResolutionFW.printStats( );
+ PRDF_TRAC("CalloutGardResolFW");
+ iv_calloutGardFW.printStats( );
+ PRDF_TRAC("CalloutConnectedGardResolFW");
+ iv_connCalloutGardFW.printStats( );
}
#endif
diff --git a/src/usr/diag/prdf/common/framework/resolution/iipResolutionFactory.h b/src/usr/diag/prdf/common/framework/resolution/iipResolutionFactory.h
index 3369330e9..629e52b05 100755
--- a/src/usr/diag/prdf/common/framework/resolution/iipResolutionFactory.h
+++ b/src/usr/diag/prdf/common/framework/resolution/iipResolutionFactory.h
@@ -41,7 +41,6 @@
// Usage:
//
// ResolutionFactory & resolutionPool = ResolutionFactory::Access();
-// FinalResolution & fr = resolutionPool.GetCalloutResolution(EAGLE0_HIGH);
//
//
// End Class Description *********************************************
@@ -56,9 +55,7 @@
#include <prdfGlobal.H>
#include <prdfFlyWeight.H>
#include <prdfFlyWeightS.H>
-#include <iipCalloutResolution.h>
#include <prdfThresholdResolutions.H>
-#include <prdfCalloutConnected.H>
#include <prdfAnalyzeConnected.H>
#include <prdfPluginCallResolution.H>
#include <iipEregResolution.h>
@@ -68,6 +65,8 @@
#include <xspprdGardResolution.h>
#include <prdfCaptureResolution.H>
#include <prdfClockResolution.H>
+#include <prdfCalloutGard.H>
+#include <prdfCalloutConnectedGard.H>
namespace PRDF
{
@@ -105,18 +104,18 @@ public:
* resolution list
*/
void Reset();
- // dg03a end
/**
- * @brief Get a resolution that makes a callout
- * @param [in] PRDcallout (see prdfCallouts.H)
- * @param [in] PRDpriority (see prdfCallouts.H)
+ * @brief Returns resolution that callouts target. But it may or
+ may not gard it.
+ * @param PRDcallout (see prdfCallouts.H)
+ * @param PRDpriority (see prdfCallouts.H)
+ * @param gard policy associated with target.
* @return Resolution &
- * @note Regatta CSP use only. Do not call this method from a static
- * object.
*/
- Resolution & GetCalloutResolution( PRDcallout callout,
- PRDpriority p = PRDF::MRU_MED);
+ Resolution & getCalloutGardResol( PRDcallout callout,
+ PRDpriority p = PRDF::MRU_MED,
+ GARD_POLICY i_gard = GARD );
/**
* @brief Get a threshold Resolution
@@ -140,28 +139,30 @@ public:
MaskResolution & GetThresholdResolution(uint32_t maskId,
const ThresholdResolution::ThresholdPolicy* policy);
- // dg04a - start
/**
- * @brief GetConnectedCalloutResolution
- * @param[in] i_targetType Type of target connected to i_source
- * @param[in] idx index in GetConnected list to use
- * @param[in] i_priority @see prdfCallouts.H
- * @param[in] i_altResolution resolution for failure scenarios
- * @param[in] i_peerConnType Type of target which connects to peer
- of i_targetType
- * @return reference to a resolution
- * @note Don't use this to callout clocks - use prdfClockResolution
+ * @brief Returns an instance of CalloutConnectedGard.
+ * @param i_targetType Type of target connected to i_source
+ * @param idx index in GetConnected list to use
+ * @param i_priority @see prdfCallouts.H
+ * @param i_altResolution resolution for failure scenarios
+ * @param i_peerConnType Type of target which connects to peer
+ of i_targetType
+ * @param i_gardState gard policy associated with callout target
+ * @return reference to a resolution
+ * @note This resolution callouts a connected target. There is an option
+ * to specify the gard policy for the callout target. Don't use
+ * this to callout clocks - use prdfClockResolution
+
*/
- Resolution & GetConnectedCalloutResolution(
- TARGETING::TYPE i_targetType,
- uint32_t i_idx = 0,
- PRDpriority i_priority = MRU_MED,
- Resolution * i_altResolution = NULL,
- TARGETING::TYPE i_peerConnType
- = TARGETING::TYPE_NA );
- // dg04a - end
-
- // dg05a - start
+ Resolution & getConnCalloutGardResol(
+ TARGETING::TYPE i_targetType,
+ uint32_t i_idx = 0,
+ PRDpriority i_priority = MRU_MED,
+ Resolution * i_altResolution = NULL,
+ TARGETING::TYPE i_peerConnType =
+ TARGETING::TYPE_NA,
+ GARD_POLICY i_gardState = GARD );
+
/**
* @brief GetAnalyzeConnectedResoltuion
* @param[in] i_targetType type of unit that's connected to the source
@@ -373,14 +374,11 @@ public:
private: // Data
- // dg01 - start
- typedef FlyWeight< CalloutResolution, 50> CalloutFW; // dg01a
typedef FlyWeightS< ResolutionLink, 50> ResolutionLinkFW; // dg01a
typedef FlyWeight< ThresholdResolution, 50 > ThresholdResolutionList; // dg02a
typedef FlyWeight< MaskResolution, 50 > MaskResolutionFW; // dg02a
- typedef FlyWeight< CalloutConnected, 25 > ConnectedFW; // dg04a
typedef FlyWeight< AnalyzeConnected, 20 > AnalyzeCFW; // dg05a
typedef FlyWeight< PluginCallResolution, 10 > PluginCallFW; // dg06a
typedef FlyWeight< ThresholdSigResolution, 10 > ThresholdSigFW; // dg06a
@@ -391,14 +389,14 @@ private: // Data
typedef FlyWeight< GardResolution, 5 > GardResolutionFW; // dg06a
typedef FlyWeight< CaptureResolution, 5> CaptureResolutionFW; // pw01
typedef FlyWeight< ClockResolution, 8 > ClockResolutionFW; // jl01a
+ typedef FlyWeight< CalloutGardResolution, 50 > CalloutGardResolFW;
+ typedef FlyWeight< CalloutConnectedGard, 25> CalloutConnectedGardResolFW;
- CalloutFW iv_Callouts; // dg01a
ResolutionLinkFW iv_Links; // dg01a
ThresholdResolutionList iv_thresholdResolutions; // dg02a
MaskResolutionFW iv_maskResolutions; // dg02a
// dg01 - end
- ConnectedFW iv_connectedCallouts; // dg04a
AnalyzeCFW iv_analyzeConnected; // dg05a
PluginCallFW iv_pluginCallFW; // dg06a
ThresholdSigFW iv_thresholdSigFW; // dg06a
@@ -409,6 +407,8 @@ private: // Data
GardResolutionFW iv_gardResolutionFW; // dg06a
CaptureResolutionFW iv_captureResolutionFW; // pw01
ClockResolutionFW iv_clockResolutionFW; // jl01a
+ CalloutGardResolFW iv_calloutGardFW; ///< stores CalloutGardResolution
+ CalloutConnectedGardResolFW iv_connCalloutGardFW; ///< CalloutConnectedGard
};
diff --git a/src/usr/diag/prdf/common/framework/resolution/prdfCalloutConnected.H b/src/usr/diag/prdf/common/framework/resolution/prdfCalloutConnected.H
deleted file mode 100755
index f306e04c0..000000000
--- a/src/usr/diag/prdf/common/framework/resolution/prdfCalloutConnected.H
+++ /dev/null
@@ -1,151 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/diag/prdf/common/framework/resolution/prdfCalloutConnected.H $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2015 */
-/* [+] 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 */
-
-#ifndef PRDFCALLOUTCONNECTED_H
-#define PRDFCALLOUTCONNECTED_H
-/**
- @file prdfCalloutConnected.H
- @brief A resolution to callout a connected MRU determined at the time of the error.
-*/
-
-
-//--------------------------------------------------------------------
-// Includes
-//--------------------------------------------------------------------
-
-#include <iipResolution.h>
-#include <prdfPlatServices.H>
-#include <prdfCallouts.H>
-
-namespace PRDF
-{
-
-//--------------------------------------------------------------------
-// Forward References
-//--------------------------------------------------------------------
-struct STEP_CODE_DATA_STRUCT;
-
-/**
- This resolution calls out a connected MRU.
- @author Doug Gilbert
- @par
- This resolution calls out a connected MRU, but waits until the time of the error
- to determine whats connected. This allows for runtime GARD, dynamic failover and concurrent
- maintenance - without having to call PRD to re-build itself.
- @code
- CalloutConnected iv_callout(PROC, TYPE_MCS ....);
- // ......
- // This will add the MCSs thats connected to this PROC to the callout list
- iv_callout.Resolve(serviceData);
- @endcode
- @note Don't use this class to callout clocks - use prdfClockResolution
-*/
-class CalloutConnected : public Resolution
-{
-public:
- /**
- default ctor
- */
- CalloutConnected(void);
-
- /**
- * @brief Constructor
- * @param[in] i_targetType type of desired unit that's connected to
- * i_psourceHandle
- * @param[in] i_idx index into getConnected list to callout
- * (i_idx = 0xffffffff means callout the first
- * valid target)
- * @param[in] i_priority callout priority @see srci.H for priority
- * values
- * @param[in] i_altResolution to use if the connection does not exist or
- * is invalid.
- * If NULL than source is called out
- * @param[i] i_peerConnType type of unit that is peer connected to
- * i_targetType
- * @note Don't use this class to callout clocks - use ClockResolution
- */
- CalloutConnected( 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 );
-
- // ~CalloutConnected(); default dtor is sufficient
-
- /**
- * @brief calls out the target connected to target under analysis.
- * @param[io] io_service_data Reference to STEP_CODE_DATA_STRUCT
- * @post service_data is complete
- * @return SUCCESS | non-zero
- * @note if the call to getConnected yields an invalid target then
- * 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 CalloutConnected & r) const;
-
-private: // functions
-private: // Data
-
- TARGETING::TYPE iv_targetType;
- uint32_t iv_idx;
- PRDF::PRDpriority iv_priority;
- Resolution * iv_altResolution;
- TARGETING::TYPE iv_peerConnType;
-};
-
-inline CalloutConnected::CalloutConnected(void)
-: iv_targetType(TARGETING::TYPE_NA),
- iv_idx(0xffffffff ),
- iv_priority(MRU_LOW),
- iv_altResolution(NULL),
- iv_peerConnType(TARGETING::TYPE_NA)
-{}
-
-inline CalloutConnected::CalloutConnected( TARGETING::TYPE i_targetType,
- uint32_t i_idx,
- PRDpriority i_priority,
- Resolution * i_altResolution,
- TARGETING::TYPE i_peerConnType ):
- iv_targetType( i_targetType ),
- iv_idx( i_idx ),
- iv_priority( i_priority ),
- iv_altResolution( i_altResolution ),
- iv_peerConnType(i_peerConnType)
-{ }
-
-inline bool CalloutConnected::operator == ( const CalloutConnected & r ) const
-{
- return ( ( iv_targetType == r.iv_targetType ) && ( iv_idx == r.iv_idx ) &&
- ( iv_priority == r.iv_priority ) &&
- ( ( iv_altResolution == r.iv_altResolution ) ||
- ( &iv_altResolution == &r.iv_altResolution ) ) &&
- ( iv_peerConnType == r.iv_peerConnType) );
-}
-
-} // end namespace PRDF
-
-#endif /* PRDFCALLOUTCONNECTED_H */
diff --git a/src/usr/diag/prdf/common/framework/resolution/prdfCalloutConnectedGard.H b/src/usr/diag/prdf/common/framework/resolution/prdfCalloutConnectedGard.H
new file mode 100644
index 000000000..776ab9bd5
--- /dev/null
+++ b/src/usr/diag/prdf/common/framework/resolution/prdfCalloutConnectedGard.H
@@ -0,0 +1,146 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/diag/prdf/common/framework/resolution/prdfCalloutConnectedGard.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2014,2015 */
+/* [+] 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 */
+
+#ifndef PRDFCALLOUTCONNECTED_GARD_H
+#define PRDFCALLOUTCONNECTED_GARD_H
+/**
+ * @file prdfCalloutConnectedGard.H
+ * @brief A resolution to callout and gard connected MRU determined at the
+ * time of the error.
+ */
+
+
+//--------------------------------------------------------------------
+// Includes
+//--------------------------------------------------------------------
+
+#include <prdfPlatServices.H>
+#include <prdfCallouts.H>
+#include <iipResolution.h>
+
+namespace PRDF
+{
+
+//--------------------------------------------------------------------
+// Forward References
+//--------------------------------------------------------------------
+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
+ * valid target)
+ * @param i_priority callout priority @see srci.H for priority
+ * values
+ * @param i_altResolution to use if the connection does not exist or
+ * is invalid.
+ * If NULL than source is called out
+ * @param i_peerConnType type of unit that is peer connected to
+ * i_targetType
+ * @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(); default dtor is sufficient
+
+ /**
+ * @brief callout and gard target connected to target under analysis.
+ * @param io_service_data Reference to STEP_CODE_DATA_STRUCT
+ * @post service_data is complete
+ * @return SUCCESS | non-zero
+ * @note if the call to getConnected yields an invalid target then
+ * 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 );
+
+ /**
+ * @brief overloads operator ==
+ */
+ virtual bool operator==(const CalloutConnectedGard & i_right ) const;
+
+ protected: // Data
+
+ TARGETING::TYPE iv_targetType;
+ uint32_t iv_idx;
+ PRDF::PRDpriority iv_priority;
+ 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 );
+}
+
+} // end namespace PRDF
+
+#endif /* PRDFCALLOUTCONNECTED_GARD_H */
diff --git a/src/usr/diag/prdf/common/framework/resolution/prdfCalloutGard.H b/src/usr/diag/prdf/common/framework/resolution/prdfCalloutGard.H
new file mode 100644
index 000000000..34b27650e
--- /dev/null
+++ b/src/usr/diag/prdf/common/framework/resolution/prdfCalloutGard.H
@@ -0,0 +1,123 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/diag/prdf/common/framework/resolution/prdfCalloutGard.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2014,2015 */
+/* [+] 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 */
+
+#ifndef PRDF_CALLOUT_GARD_H
+#define PRDF_CALLOUT_GARD_H
+/**
+ * @file prdfCalloutGard.H
+ * @brief A resolution to callout and gard MRU reporting attention.
+ */
+
+//--------------------------------------------------------------------
+// Includes
+//--------------------------------------------------------------------
+
+#include <prdfCallouts.H>
+#include <iipResolution.h>
+#include <iipServiceDataCollector.h>
+
+namespace PRDF
+{
+
+//--------------------------------------------------------------------
+// Forward References
+//--------------------------------------------------------------------
+
+
+class CalloutGardResolution: public Resolution
+{
+ public:
+ /**
+ * @brief constructor
+ * @param i_callout callout instance
+ * @param i_priority i_priority associated with callout.
+ * @param i_gardState gard policy associated with callout.
+ */
+ CalloutGardResolution( PRDcallout i_callout, PRDpriority i_priority,
+ GARD_POLICY i_gardState );
+ /**
+ * @brief constructor
+ */
+ CalloutGardResolution(void); // default
+
+ /**
+ * @brief constructor
+ */
+ CalloutGardResolution(const CalloutGardResolution & i_cr);
+
+ //~CalloutGardResolution();
+
+ /**
+ * @brief Executes the callout and enforces gard policy.
+ * @param error step code data struct.
+ */
+ virtual int32_t Resolve(STEP_CODE_DATA_STRUCT & error);
+
+ /**
+ * @brief compares if two CalloutGardResolution are identical.
+ */
+ virtual bool operator==(const CalloutGardResolution & i_right ) const
+ {
+ return(( iv_callout == i_right.iv_callout) &&
+ ( iv_calloutPriority == i_right.iv_calloutPriority) &&
+ ( iv_gardState == i_right.iv_gardState ));
+ }
+
+ protected: // Data
+
+ PRDcallout iv_callout; ///< MRU associated with callout action
+ PRDpriority iv_calloutPriority; ///< Priority associated with callout
+ GARD_POLICY iv_gardState; ///< gard policy associated with resolution
+
+};
+
+
+inline CalloutGardResolution::CalloutGardResolution(
+ PRDcallout i_callout,
+ PRDpriority i_priority,
+ GARD_POLICY i_gardState ) :
+ iv_callout( i_callout ),
+ iv_calloutPriority( i_priority ),
+ iv_gardState( i_gardState )
+{}
+
+inline
+CalloutGardResolution::CalloutGardResolution() :
+ iv_callout( NULL ),
+ iv_calloutPriority( MRU_MED ),
+ iv_gardState( GARD )
+{}
+
+inline
+CalloutGardResolution::CalloutGardResolution(
+ const CalloutGardResolution & i_cr) :
+ iv_callout( i_cr.iv_callout ),
+ iv_calloutPriority( i_cr.iv_calloutPriority ),
+ iv_gardState( i_cr.iv_gardState )
+{}
+
+} // end namespace PRDF
+
+#endif /* PRDF_CALLOUT_GARD_H */
diff --git a/src/usr/diag/prdf/common/framework/resolution/prdfResetThresholdResolution.H b/src/usr/diag/prdf/common/framework/resolution/prdfResetThresholdResolution.H
index 3af6e7bae..845f8e9e1 100755
--- a/src/usr/diag/prdf/common/framework/resolution/prdfResetThresholdResolution.H
+++ b/src/usr/diag/prdf/common/framework/resolution/prdfResetThresholdResolution.H
@@ -57,7 +57,6 @@
@code
enum { thresholdValue = 32, MaskId = 05 };
ResetThresholdResolution rtr(thresholdValue,MaskId);
- Resolution & fr = ResolutionFactory::Access().GetCalloutResolution(HOM_IOHUBCHIP0,MRU_HIGH);
ResolutionMap rm(...); // see ResolutionMap
rm.Add(BIT_LIST_STRING_05,&rtr,&ftr); // Resolution invoked when bit 5
// is on - callsout callout and
diff --git a/src/usr/diag/prdf/common/framework/rule/prdfRuleMetaData.C b/src/usr/diag/prdf/common/framework/rule/prdfRuleMetaData.C
index 7133e23fe..de390469e 100644
--- a/src/usr/diag/prdf/common/framework/rule/prdfRuleMetaData.C
+++ b/src/usr/diag/prdf/common/framework/rule/prdfRuleMetaData.C
@@ -338,8 +338,8 @@ errlHndl_t RuleMetaData::loadRuleFile( ScanFacility & i_scanFactory ,
// initialize all the pointers for the groups, but don't construct their
// data yet.
Resolution & l_defaultResolution =
- i_reslFactory.GetCalloutResolution( NULL,
- MRU_MED );
+ i_reslFactory.getCalloutGardResol( NULL,
+ MRU_MED, GARD );
for (int i = 0; i < l_chip->cv_groupCount; i++)
{
iv_groupList.push_back( new Group( l_defaultResolution ) );
@@ -888,40 +888,46 @@ Resolution * RuleMetaData::createResolution( Prdr::Expr * i_action,
case Prdr::ACT_CALL: // CALLOUT
- switch ((char)i_action->cv_value[0].i)
+ switch (i_action->cv_value[0].i)
{
- case 'c': // connected chip.
- l_rc = &i_data.cv_reslFactory.GetConnectedCalloutResolution(
+ case Prdr::CALLOUT_GARD_CHIP: // connected callout with gard
+ l_rc = &i_data.cv_reslFactory.getConnCalloutGardResol(
(TARGETING::TYPE) i_action->cv_value[2].i,
i_action->cv_value[3].i,
(CalloutPriorityEnum) i_action->cv_value[1].i,
( NULL == i_action->cv_value[4].p ? NULL :
( this->createResolution(
- i_action->cv_value[4].p, i_data ) ) ) );
- break;
-
- case 'p': // Procedure.
- l_rc = &i_data.cv_reslFactory.GetCalloutResolution(
- (SymbolicFru) i_action->cv_value[2].i,
- (CalloutPriorityEnum) i_action->cv_value[1].i );
+ i_action->cv_value[4].p, i_data ) ) ),
+ TARGETING::TYPE_NA,
+ (GARD_POLICY) i_action->cv_value[6].i );
break;
- case 'r': // PEER
- l_rc = &i_data.cv_reslFactory.GetConnectedCalloutResolution(
+ // connected callout and gard with connection type
+ case Prdr::CALLOUT_GARD_PEER:
+ l_rc = &i_data.cv_reslFactory.getConnCalloutGardResol(
(TARGETING::TYPE) i_action->cv_value[2].i,
i_action->cv_value[3].i,
(CalloutPriorityEnum) i_action->cv_value[1].i,
( NULL == i_action->cv_value[4].p ? NULL :
( this->createResolution(
i_action->cv_value[4].p, i_data ) ) ),
- (TARGETING::TYPE) i_action->cv_value[5].i);
+ (TARGETING::TYPE) i_action->cv_value[5].i,
+ (GARD_POLICY) i_action->cv_value[6].i );
+
break;
- case 's': // SELF
+ case Prdr::CALLOUT_PROC: // Procedure callout
+ l_rc = &i_data.cv_reslFactory.getCalloutGardResol(
+ (SymbolicFru) i_action->cv_value[2].i,
+ (CalloutPriorityEnum) i_action->cv_value[1].i );
+ break;
+
+ case Prdr::CALLOUT_GARD_SELF: // self callout with gard option
default:
- l_rc = &i_data.cv_reslFactory.GetCalloutResolution(
+ l_rc = &i_data.cv_reslFactory.getCalloutGardResol(
NULL ,
- (CalloutPriorityEnum) i_action->cv_value[1].i );
+ (CalloutPriorityEnum) i_action->cv_value[1].i,
+ (GARD_POLICY) i_action->cv_value[6].i );
break;
};
diff --git a/src/usr/diag/prdf/common/framework/rule/prdrCommon.H b/src/usr/diag/prdf/common/framework/rule/prdrCommon.H
index 6e1b1d7e4..a09871a40 100755
--- a/src/usr/diag/prdf/common/framework/rule/prdrCommon.H
+++ b/src/usr/diag/prdf/common/framework/rule/prdrCommon.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2014 */
+/* Contributors Listed Below - COPYRIGHT 2012,2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -143,6 +143,14 @@ namespace Prdr
ACT_CAPT = 'C',
};
+ enum Callout_type
+ {
+ CALLOUT_PROC = 0x00000001, // for procedure callout
+ CALLOUT_GARD_SELF = 0x00000002, // for self callout and gard
+ CALLOUT_GARD_CHIP = 0x00000003, // for connected callout and gard
+ CALLOUT_GARD_PEER = 0x00000004, // for callout and gard of connected
+ // peer
+ };
class SignatureOp
{
public:
diff --git a/src/usr/diag/prdf/common/framework/rule/prdrCompile.C b/src/usr/diag/prdf/common/framework/rule/prdrCompile.C
index f4da5bf20..67844c403 100755
--- a/src/usr/diag/prdf/common/framework/rule/prdrCompile.C
+++ b/src/usr/diag/prdf/common/framework/rule/prdrCompile.C
@@ -40,6 +40,7 @@
#include <prdrToken.H>
#include <UtilHash.H>
#include <xspprdGardResolution.h>
+#include <prdfEnums.H>
using namespace PRDR_COMPILER;
@@ -463,6 +464,12 @@ uint32_t prdrActionArgMap(const std::string & i_arg)
#define PRDF_SDC_FLAG(name, value) \
g_ActionArgMap[#name] = value;
#define PRDF_SDC_FLAGS_MAP_END
+
+ #define PRDF_GARD_POLICY_MAP_ONLY
+ #define PRDF_GARD_POLICY_MAP
+ #define PRDF_GARD_POLICY(name, value) \
+ g_ActionArgMap[#name] = value;
+ #define PRDF_GARD_POLICY_MAP_END
#undef iipServiceDataCollector_h
#include <iipServiceDataCollector.h>
diff --git a/src/usr/diag/prdf/common/framework/rule/prdrCompile.y b/src/usr/diag/prdf/common/framework/rule/prdrCompile.y
index 78736643d..581f35ce2 100755
--- a/src/usr/diag/prdf/common/framework/rule/prdrCompile.y
+++ b/src/usr/diag/prdf/common/framework/rule/prdrCompile.y
@@ -156,8 +156,8 @@ using namespace PRDR_COMPILER;
%token PRDR_TIME_MIN
%token PRDR_TIME_HOUR
%token PRDR_TIME_DAY
-
%token PRDR_FILTER
+
%token PRDR_FILTER_SINGLE_BIT
%token PRDR_FILTER_PRIORITY
%token PRDR_FILTER_SECONDARY
@@ -946,23 +946,40 @@ action_callout: PRDR_ACT_CALLOUT '(' PRDR_ID ')'
}
| PRDR_ACT_CALLOUT '(' PRDR_CONNECTED '(' PRDR_ID action_callout_alt ')' ',' PRDR_ID ')'
{
- $$ = new ExprAct_Callout($9, $5, ExprAct_Callout::CALLOUT_CHIP, 0xffffffff, $6);
+ $$ = new ExprAct_Callout($9, $5, Prdr::CALLOUT_GARD_CHIP, 0xffffffff, $6 );
}
| PRDR_ACT_CALLOUT '(' PRDR_CONNECTED '(' PRDR_ID ',' PRDR_INTEGER action_callout_alt ')' ',' PRDR_ID ')'
{
- $$ = new ExprAct_Callout($11, $5, ExprAct_Callout::CALLOUT_CHIP, $7, $8);
+ $$ = new ExprAct_Callout($11, $5, Prdr::CALLOUT_GARD_CHIP, $7, $8);
}
-
| PRDR_ACT_CALLOUT '(' PRDR_PROCEDURE '(' PRDR_ID ')' ',' PRDR_ID ')'
{
- $$ = new ExprAct_Callout($8, $5, ExprAct_Callout::CALLOUT_PROC);
+ $$ = new ExprAct_Callout($8, $5, Prdr::CALLOUT_PROC );
}
- | PRDR_ACT_CALLOUT '(' PRDR_CONNECTED_PEER '(' PRDR_ID ',' PRDR_INTEGER action_callout_alt ')' ',' PRDR_ID ')'
+ | PRDR_ACT_CALLOUT '(' PRDR_CONNECTED_PEER '(' PRDR_ID ',' PRDR_INTEGER action_callout_alt ')' ',' PRDR_ID ')'
{
- $$ = new ExprAct_Callout($11, $5, ExprAct_Callout::CALLOUT_PEER, $7, $8);
+ $$ = new ExprAct_Callout($11, $5, Prdr::CALLOUT_GARD_PEER, $7, $8 );
+ }
+ | PRDR_ACT_CALLOUT '(' PRDR_ID ',' PRDR_ID ')'
+ {
+ $$ = new ExprAct_Callout($3, NULL, Prdr::CALLOUT_GARD_SELF, 0xffffffff, NULL, $5);
}
+ | PRDR_ACT_CALLOUT '(' PRDR_CONNECTED '(' PRDR_ID action_callout_alt')' ',' PRDR_ID ',' PRDR_ID ')'
+ {
+ $$ = new ExprAct_Callout($9, $5, Prdr::CALLOUT_GARD_CHIP, 0xffffffff, $6, $11 );
+ }
+
+ | PRDR_ACT_CALLOUT '(' PRDR_CONNECTED '(' PRDR_ID ',' PRDR_INTEGER action_callout_alt ')' ',' PRDR_ID ',' PRDR_ID ')'
+ {
+ $$ = new ExprAct_Callout($11, $5, Prdr::CALLOUT_GARD_CHIP, $7, $8, $13 );
+ }
+
+ | PRDR_ACT_CALLOUT '(' PRDR_CONNECTED_PEER '(' PRDR_ID ',' PRDR_INTEGER action_callout_alt ')' ',' PRDR_ID ',' PRDR_ID ')'
+ {
+ $$ = new ExprAct_Callout($11, $5, Prdr::CALLOUT_GARD_PEER, $7, $8, $13 );
+ }
;
action_callout_alt:
diff --git a/src/usr/diag/prdf/common/framework/rule/prdrExpr.H b/src/usr/diag/prdf/common/framework/rule/prdrExpr.H
index 79da66918..56cda4d49 100755
--- a/src/usr/diag/prdf/common/framework/rule/prdrExpr.H
+++ b/src/usr/diag/prdf/common/framework/rule/prdrExpr.H
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2004,2014 */
+/* Contributors Listed Below - COPYRIGHT 2012,2015 */
+/* [+] 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. */
@@ -860,24 +862,19 @@ class ExprAct_Callout : public Expr
Expr * cv_alt;
- enum Callout_type
- {
- CALLOUT_SELF = 's',
- CALLOUT_CHIP = 'c',
- CALLOUT_PROC = 'p',
- CALLOUT_PEER = 'r',
- };
-
- Callout_type cv_type;
+ Prdr::Callout_type cv_type;
+ std::string * cv_4;
ExprAct_Callout(std::string * i_1,
std::string * i_2 = NULL,
- Callout_type i_t = CALLOUT_SELF,
+ Prdr::Callout_type i_t = Prdr::CALLOUT_GARD_SELF,
uint32_t i_3 = 0xffffffff,
- Expr * i_alt = NULL):
+ Expr * i_alt = NULL,
+ std::string * i_4 = NULL ):
cv_1(i_1), cv_2(i_2),
cv_3(i_3), cv_alt(i_alt),
- cv_type(i_t)
+ cv_type(i_t),
+ cv_4( i_4 )
{}
int output(FILE * i_file)
@@ -893,7 +890,7 @@ class ExprAct_Callout : public Expr
uint32_t l_priority = htonl(prdrActionArgMap(*cv_1));
PRDR_FWRITE(&l_priority, sizeof(l_priority), 1, i_file);
- if (CALLOUT_SELF != cv_type)
+ if ( Prdr::CALLOUT_GARD_SELF != cv_type )
{
uint32_t l_arg = htonl(prdrActionArgMap(*cv_2));
PRDR_FWRITE(&l_arg, sizeof(l_arg), 1, i_file);
@@ -909,15 +906,28 @@ class ExprAct_Callout : public Expr
cv_alt->output(i_file);
// Write peer connection type
- if(CALLOUT_PEER == cv_type)
+ if(Prdr::CALLOUT_GARD_PEER == cv_type)
l_arg = htonl(prdrActionArgMap(*cv_2));
else
l_arg = htonl(prdrActionArgMap("TYPE_NA"));
PRDR_FWRITE(&l_arg, sizeof(l_arg), 1, i_file);
}
+ // Write gard state
+ if( NULL == cv_4 )
+ {
+ // if no policy for gard has been specified, assume it to be
+ // GARD.
+ l_op = prdrActionArgMap("GARD");
+ }
+ else
+ {
+ l_op = prdrActionArgMap(*cv_4);
+ }
+ PRDR_FWRITE(&l_op, 1, 1, i_file);
return 0;
+
};
void generateDoxygen(std::ostream & o_stream,
@@ -925,17 +935,24 @@ class ExprAct_Callout : public Expr
std::ostream & o_errFile = std::cerr)
{
o_stream << "callout ( ";
- if (CALLOUT_SELF == cv_type)
+ std::string tmpGard("GARD");
+ if( NULL != cv_4 )
{
- o_stream << "SELF, " << *cv_1 << " )";
+ tmpGard.assign( *cv_4 );
}
- else if (CALLOUT_PROC == cv_type)
+
+ if ( Prdr::CALLOUT_GARD_SELF == cv_type )
{
- o_stream << "procedure ( " << *cv_2 << " ), " << *cv_1 << " ) ";
+ o_stream << "SELF, " << *cv_1 << tmpGard << " )";
+ }
+ else if ( Prdr::CALLOUT_PROC == cv_type )
+ {
+ o_stream << "procedure ( " << *cv_2 << " ), " << *cv_1
+ << "NO GARD" << " ) ";
}
else
{
- if(CALLOUT_PEER == cv_type)
+ if(Prdr::CALLOUT_GARD_PEER == cv_type)
{
o_stream << "connected_peer ( " << *cv_2 ;
}
@@ -946,10 +963,9 @@ class ExprAct_Callout : public Expr
if ( 0xffffffff != cv_3 )
o_stream << ", " << cv_3;
- o_stream << " ), " << *cv_1 << " ) ";
+ o_stream << " ), " << *cv_1 << tmpGard << " ) ";
}
}
-
};
class ExprAct_Funccall : public Expr
diff --git a/src/usr/diag/prdf/common/framework/rule/prdrLoadChip.C b/src/usr/diag/prdf/common/framework/rule/prdrLoadChip.C
index 0e24abe35..de6737b80 100755
--- a/src/usr/diag/prdf/common/framework/rule/prdrLoadChip.C
+++ b/src/usr/diag/prdf/common/framework/rule/prdrLoadChip.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2014 */
+/* Contributors Listed Below - COPYRIGHT 2012,2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -437,7 +437,8 @@ void ReadExpr(UtilStream & i_stream, Expr & o_expr)
i_stream >> l_tmpChar;
o_expr.cv_value[0].i = l_tmpChar;
i_stream >> o_expr.cv_value[1].i;
- if ('s' != o_expr.cv_value[0].i)
+
+ if( Prdr::CALLOUT_GARD_SELF != o_expr.cv_value[0].i )
{
i_stream >> o_expr.cv_value[2].i;
i_stream >> o_expr.cv_value[3].i;
@@ -456,6 +457,11 @@ void ReadExpr(UtilStream & i_stream, Expr & o_expr)
// Read peer connection type
i_stream >> o_expr.cv_value[5].i;
}
+ //Read gard state associated with callout
+ i_stream >> l_tmp8;
+ o_expr.cv_value[6].i = l_tmp8;
+
+
break;
case ACT_DUMP: //@ecdf
diff --git a/src/usr/diag/prdf/common/framework/rule/prdrLoadChip.H b/src/usr/diag/prdf/common/framework/rule/prdrLoadChip.H
index 2fc998377..44feebfbb 100755
--- a/src/usr/diag/prdf/common/framework/rule/prdrLoadChip.H
+++ b/src/usr/diag/prdf/common/framework/rule/prdrLoadChip.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2014 */
+/* Contributors Listed Below - COPYRIGHT 2012,2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -151,7 +151,7 @@ namespace Prdr
union value { uint32_t i; Expr * p; };
/** Maximum number of entries a expression can have. */
- static const uint32_t MAX_VALUES = 6;
+ static const uint32_t MAX_VALUES = 7;
unsigned char cv_op; /** Type of expr this is. */
diff --git a/src/usr/diag/prdf/common/framework/service/iipServiceDataCollector.h b/src/usr/diag/prdf/common/framework/service/iipServiceDataCollector.h
index 4cbc27e76..91d16b348 100755
--- a/src/usr/diag/prdf/common/framework/service/iipServiceDataCollector.h
+++ b/src/usr/diag/prdf/common/framework/service/iipServiceDataCollector.h
@@ -44,6 +44,30 @@
};
#endif
+#ifndef PRDF_GARD_POLICY_MAP_ONLY
+ #define PRDF_GARD_POLICY_MAP \
+ enum GARD_POLICY {
+ #define PRDF_GARD_POLICY(name, value) \
+ name = value,
+ #define PRDF_GARD_POLICY_MAP_END \
+ };
+ #define NOT_FROM_RULE_CODE
+#endif
+
+#ifdef NOT_FROM_RULE_CODE
+namespace PRDF
+{
+#endif
+
+PRDF_GARD_POLICY_MAP
+ PRDF_GARD_POLICY(NO_GARD, 0x00000001 )
+ PRDF_GARD_POLICY(GARD, 0x00000002 )
+PRDF_GARD_POLICY_MAP_END
+
+#ifdef NOT_FROM_RULE_CODE
+}
+#endif
+
#ifndef PRDF_SDC_FLAGS_MAP_ONLY
#include <prdfErrorSignature.H>
@@ -76,13 +100,20 @@ namespace PRDF
struct SdcCallout {
PRDcallout callout;
PRDpriority priority;
+ GARD_POLICY gardState;
+
//bool gard;
- SdcCallout() : callout(NULL), priority(MRU_LOW) {}
- SdcCallout(PRDcallout & mru, PRDpriority p)
- : callout(mru), priority(p)
+ SdcCallout() :
+ callout(NULL), priority(MRU_LOW), gardState( NO_GARD )
{}
- SdcCallout(TARGETING::TargetHandle_t i_pcalloutHandle , PRDpriority p)
- : callout(i_pcalloutHandle), priority(p)
+
+ SdcCallout(PRDcallout & mru, PRDpriority p, GARD_POLICY i_gardState )
+ : callout(mru), priority(p), gardState( i_gardState )
+ {}
+
+ SdcCallout( TARGETING::TargetHandle_t i_calloutTgt,
+ PRDpriority p, GARD_POLICY i_gardState )
+ : callout( i_calloutTgt ), priority( p ), gardState( i_gardState )
{}
};
@@ -234,7 +265,8 @@ public:
<br><b>Notes: </b> No implementation for Apache or Northstar
</ul><br>
*/
- void SetCallout( PRDcallout mru, PRDpriority priority = MRU_MED );
+ void SetCallout( PRDcallout mru, PRDpriority priority = MRU_MED,
+ GARD_POLICY i_gardState = GARD );
/**
Add a change to the prd signature List
diff --git a/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.C b/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.C
index 94995a5af..f7e436da6 100644
--- a/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.C
+++ b/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.C
@@ -493,70 +493,25 @@ errlHndl_t ErrDataService::GenerateSrcPfa( ATTENTION_TYPE i_attnType,
prdGardErrType = GardAction::NoGard;
}
- bool noGardForTodErr = false;
- for( SDC_MRU_LIST::const_iterator it = mruList.begin();
- it < mruList.end(); ++it )
- {
- if( PRDcalloutData::TYPE_TARGET == it->callout.getType() &&
- TYPE_OSC == getTargetType( it->callout.getTarget() ))
- {
- // FIXME Below is a part of workaround due to design limitation
- // of hwsv in fips820. It shall be removed once RTC 103773,
- // RTC 116192 and RTC 116134 gets integrated in to fips830.
-
- // We shall not gard TOD OSC or MDMT due to master path errors.
- // There are problems associated with garding of TOD clock end
- // points on proc and OSC side. Garding entire Proc or TOD OSC for
- // a mere bad pin doesn't look appropriate. So, we callout FRUs
- // on both ends of TOD OSC connection but don't gard it.
-
- noGardForTodErr = true;
- break;
- }
- }
-
for ( SDC_MRU_LIST::const_iterator it = mruList.begin();
it < mruList.end(); ++it )
{
thispriority = it->priority;
thiscallout = it->callout;
+ HWAS::GARD_ErrorType tmpGard = gardErrType;
+ HWAS::DeconfigEnum tmpDeconfig = deconfigState;
- if( PRDcalloutData::TYPE_TARGET == thiscallout.getType() )
+ if( HWAS::GARD_NULL != gardErrType )
{
- // FIXME Below is a part of workaround due to design limitation
- // of hwsv in fips820. It shall be removed once RTC 103773,
- // RTC 116192 and RTC 116134 gets integrated in to fips830.
-
- // We shall not gard TOD OSC or MDMT due to master path errors.
- // There are problems associated with garding of TOD clock end
- // points on proc and OSC side. Garding entire Proc or TOD OSC for
- // a mere bad pin doesn't look appropriate. So, we callout FRUs
- // on both ends of TOD OSC connection but don't gard it.
-
- HWAS::GARD_ErrorType tmpGard = gardErrType;
- HWAS::DeconfigEnum tmpDeconfig = deconfigState;
-
- if( true == noGardForTodErr )
+ if( NO_GARD == it->gardState )
{
- TYPE targetType = getTargetType( thiscallout.getTarget());
-
- //Due to design limitation in fips820, TOD OSC and MDMT should
- //not be garded in case of error in master path. For an error in
- //master path, we callout TOD OSC with high priority and MDMT
- //with low priority. For an error in slave or internal path,
- //a processor callout is done with medium level priority. TOD
- //OSC is not blamed of those category of errors.
- //So, in the code below, we try to find out if it is a case of
- //an error in master path by looking at callout target type
- //and priority.
-
- if(( TYPE_OSC == targetType ) ||
- ( TYPE_PROC == targetType && MRU_LOW == thispriority ))
- {
- tmpGard = HWAS::GARD_NULL;
- tmpDeconfig = HWAS::NO_DECONFIG;
- }
+ tmpGard = HWAS::GARD_NULL;
+ tmpDeconfig = HWAS::NO_DECONFIG;
}
+ }
+
+ if( PRDcalloutData::TYPE_TARGET == thiscallout.getType() )
+ {
PRDF_HW_ADD_CALLOUT(thiscallout.getTarget(),
thispriority,
@@ -573,8 +528,8 @@ errlHndl_t ErrDataService::GenerateSrcPfa( ATTENTION_TYPE i_attnType,
thiscallout.getTarget(),
thiscallout.getType(),
thispriority,
- deconfigState,
- gardErrType);
+ tmpDeconfig,
+ tmpGard);
}
else if ( PRDcalloutData::TYPE_MEMMRU == thiscallout.getType() )
{
@@ -586,9 +541,9 @@ errlHndl_t ErrDataService::GenerateSrcPfa( ATTENTION_TYPE i_attnType,
{
PRDF_HW_ADD_CALLOUT( *it,
thispriority,
- deconfigState,
+ tmpDeconfig,
iv_errl,
- gardErrType,
+ tmpGard,
severityParm,
l_diagUpdate );
}
@@ -857,6 +812,15 @@ void ErrDataService::initPfaData( const ServiceDataCollector & i_sdc,
o_pfa.mruList[i].callout = mruList[i].callout.flatten();
o_pfa.mruList[i].type = mruList[i].callout.getType();
o_pfa.mruList[i].priority = (uint8_t)mruList[i].priority;
+
+ if( NO_GARD == mruList[i].gardState )
+ {
+ o_pfa.mruList[i].gardState = GardAction::NoGard;
+ }
+ else
+ {
+ o_pfa.mruList[i].gardState = i_prdGardType;
+ }
}
o_pfa.mruListCount = i;
diff --git a/src/usr/diag/prdf/common/framework/service/prdfServiceDataCollector.C b/src/usr/diag/prdf/common/framework/service/prdfServiceDataCollector.C
index f4a66616d..963227971 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfServiceDataCollector.C
+++ b/src/usr/diag/prdf/common/framework/service/prdfServiceDataCollector.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2014 */
+/* Contributors Listed Below - COPYRIGHT 2012,2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -124,7 +124,8 @@ inline TARGETING::TargetHandle_t buffer_getTarget( const uint8_t *&ptr )
//------------------------------------------------------------------------------
void ServiceDataCollector::SetCallout( PRDcallout mru,
- PRDpriority priority )
+ PRDpriority priority,
+ GARD_POLICY i_gardState )
{
bool found = false;
@@ -149,12 +150,17 @@ void ServiceDataCollector::SetCallout( PRDcallout mru,
{
i->priority = priority;
}
+
+ if( i_gardState > i->gardState )
+ {
+ i->gardState = i_gardState;
+ }
}
}
if ( found == false )
{
- xMruList.push_back( SdcCallout(mru, priority) );
+ xMruList.push_back( SdcCallout(mru, priority, i_gardState) );
}
}
@@ -259,6 +265,7 @@ uint32_t ServiceDataCollector::Flatten(uint8_t * i_buffer, uint32_t & io_size) c
buffer_append( current_ptr, (uint32_t)i->callout.getType() );
buffer_append( current_ptr, i->callout.flatten() );
buffer_append( current_ptr, (uint32_t)i->priority );
+ buffer_append( current_ptr, (uint32_t)i->gardState );
}
buffer_append(current_ptr, iv_SignatureList.size());
@@ -331,9 +338,10 @@ ServiceDataCollector & ServiceDataCollector::operator=(
MruType mt = (MruType) buffer_get32(i_flatdata);
uint32_t mru = buffer_get32(i_flatdata);
PRDpriority priority = (PRDpriority) buffer_get32(i_flatdata);
+ GARD_POLICY gardState = (GARD_POLICY) buffer_get32(i_flatdata);
PRDcallout callout( mru, mt );
- xMruList.push_back( SdcCallout(callout, priority) );
+ xMruList.push_back( SdcCallout(callout, priority, gardState) );
}
ClearSignatureList();
diff --git a/src/usr/diag/prdf/common/plat/pegasus/CommonActions.rule b/src/usr/diag/prdf/common/plat/pegasus/CommonActions.rule
index f93e6c00d..fa2b987b3 100755
--- a/src/usr/diag/prdf/common/plat/pegasus/CommonActions.rule
+++ b/src/usr/diag/prdf/common/plat/pegasus/CommonActions.rule
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2012,2014
+# Contributors Listed Below - COPYRIGHT 2012,2015
# [+] International Business Machines Corp.
#
#
@@ -151,6 +151,10 @@ actionclass callout2ndLvlLow
actionclass calloutDmiBusSymFru
{ callout(procedure(MEMBUS_ERROR_ENUM), MRU_LOW); };
+/** Callout self with medium priority but don't gard it */
+actionclass calloutSelfMedNoGard
+{ callout(MRU_MED, NO_GARD); };
+
################################################################################
# Callouts with thresholds #
################################################################################
@@ -163,7 +167,7 @@ actionclass calloutParentProcMedThr1
actionclass calloutParentProcHighThr1
{
- callout(connected(TYPE_PROC),MRU_HIGH);
+ callout(connected(TYPE_PROC),MRU_HIGH );
threshold1;
};
@@ -179,6 +183,12 @@ actionclass SelfMedThr1
threshold1;
};
+actionclass SelfMedThr1NoGard
+{
+ calloutSelfMedNoGard;
+ threshold1;
+};
+
actionclass SelfHighThr1
{
calloutSelfHigh;
diff --git a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule
index e9ee54c04..85acc0b4f 100755
--- a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule
+++ b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2012,2014
+# Contributors Listed Below - COPYRIGHT 2012,2015
# [+] International Business Machines Corp.
#
#
@@ -2947,9 +2947,8 @@ actionclass calloutConnPci0Th1NoGard
/** Callout the connected PCI 1 controller, threshold 1, no garding */
actionclass calloutConnPci1Th1NoGard
{
- calloutConnPci1;
+ callout(connected(TYPE_PCI,1), MRU_MED, NO_GARD);
threshold1;
- gard(NoGard);
};
/** Callout the connected PCI 2 controller, threshold 1, no garding */
diff --git a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_TP.rule b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_TP.rule
index 4ffe84e59..db6dfa77a 100755
--- a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_TP.rule
+++ b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_TP.rule
@@ -1272,10 +1272,3 @@ actionclass selfCapThr32TopReConfig
selfCaptThr32;
funccall("requestTopologySwitch");
};
-
-/** callouts Proc on first instance, but doesn't gard */
-actionclass SelfMedThr1NoGard
-{
- SelfMedThr1;
- gard(NoGard);
-};
diff --git a/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C b/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C
index 8ca90f038..689431bcc 100644
--- a/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C
+++ b/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2013,2014 */
+/* Contributors Listed Below - COPYRIGHT 2013,2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -537,32 +537,38 @@ bool parsePfaData( void * i_buffer, uint32_t i_buflen,
snprintf( header, 25, " #%d %s", i+1, tmpStr );
snprintf( data, 50, "0x%08x ", pfa.mruList[i].callout );
+ tmpStr = GardAction::ToString( pfa.mruList[i].gardState );
switch ( pfa.mruList[i].type )
{
case PRDcalloutData::TYPE_MEMMRU:
- strcat( data, "(MemoryMru)" );
+ strcat( data, "(MemoryMru) " );
+ strcat( data, tmpStr );
i_parser.PrintString( header, data );
parseMemMruData( i_parser, pfa.mruList[i].callout );
break;
case PRDcalloutData::TYPE_SYMFRU:
- strcat( data, "(SymbolicFru)" );
+ strcat( data, "(SymbolicFru) " );
+ strcat( data, tmpStr );
i_parser.PrintString( header, data );
break;
case PRDcalloutData::TYPE_TARGET:
- strcat( data, "(HUID)" );
+ strcat( data, "(HUID) " );
+ strcat( data, tmpStr );
i_parser.PrintString( header, data );
break;
case PRDcalloutData::TYPE_PROCCLK:
- strcat( data, "(PROCCLK)" );
+ strcat( data, "(PROCCLK) " );
+ strcat( data, tmpStr );
i_parser.PrintString( header, data );
break;
case PRDcalloutData::TYPE_PCICLK:
- strcat( data, "(PCICLK)" );
+ strcat( data, "(PCICLK) " );
+ strcat( data, tmpStr );
i_parser.PrintString( header, data );
break;
diff --git a/src/usr/diag/prdf/common/plugins/prdfPfa5Data.h b/src/usr/diag/prdf/common/plugins/prdfPfa5Data.h
index b5dd8d34b..a5ebf5d1d 100644
--- a/src/usr/diag/prdf/common/plugins/prdfPfa5Data.h
+++ b/src/usr/diag/prdf/common/plugins/prdfPfa5Data.h
@@ -98,18 +98,23 @@ struct PfaMruListStruct
uint32_t callout; // 32-bit representation of HUID, MemoryMru, symbolic FRU
uint8_t type; // See enum PRDcallout::MruType
uint8_t priority; // See enum srciPriority (in srci/fsp/srci.H)
+ uint8_t gardState;
friend UtilStream& operator<<( UtilStream& i_left,
PfaMruListStruct& i_right )
{
- i_left << i_right.callout << i_right.type << i_right.priority;
+ i_left << i_right.callout << i_right.type << i_right.priority
+ << i_right.gardState;
+
return i_left;
};
friend UtilStream& operator>>( UtilStream& i_left,
PfaMruListStruct& i_right )
{
- i_left >> i_right.callout >> i_right.type >> i_right.priority;
+ i_left >> i_right.callout >> i_right.type >> i_right.priority
+ >> i_right.gardState;
+
return i_left;
};
};
OpenPOWER on IntegriCloud