summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2013-07-29 12:52:29 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-08-19 08:56:05 -0500
commit8efaa82ce48d80d3bf134cdd6832aa798cbfa4c9 (patch)
treee3e60035195791b12bd34382dcc189ca1d765c85 /src/usr
parentaa5d43c3ac6da6dd2bbee883e17ff9b0d1d8ff15 (diff)
downloadtalos-hostboot-8efaa82ce48d80d3bf134cdd6832aa798cbfa4c9.tar.gz
talos-hostboot-8efaa82ce48d80d3bf134cdd6832aa798cbfa4c9.zip
PRD: RasServices refactoring part 2
Cleaned up PFA data. Change-Id: I02033c9357f421f649c08b47a3b7e89f8fcf3825 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/5702 Reviewed-by: Zane Shelley <zshelle@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com> Reviewed-by: Christopher T. Phan <cphan@us.ibm.com> Tested-by: Jenkins Server Squashed: I2f78af8f7c351cb208667f92acd9eff5c001905c Squashed: I87ae14d3e579eb25b46c416d74eabf5a6cdb629b Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/5750
Diffstat (limited to 'src/usr')
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/resolution/xspprdGardResolution.h4
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/iipServiceDataCollector.h176
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/iipServiceDataCollector.inl1
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfPfa5Data.h530
-rw-r--r--src/usr/diag/prdf/common/framework/service/prdfRasServices_common.C497
-rw-r--r--src/usr/diag/prdf/common/framework/service/prdfRasServices_common.H31
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfServiceDataCollector.C112
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/xspprdsdbug.C2
-rw-r--r--src/usr/diag/prdf/prdfErrlUtil.H1
9 files changed, 538 insertions, 816 deletions
diff --git a/src/usr/diag/prdf/common/framework/resolution/xspprdGardResolution.h b/src/usr/diag/prdf/common/framework/resolution/xspprdGardResolution.h
index 5ef17ec06..05750444b 100755
--- a/src/usr/diag/prdf/common/framework/resolution/xspprdGardResolution.h
+++ b/src/usr/diag/prdf/common/framework/resolution/xspprdGardResolution.h
@@ -69,7 +69,7 @@ public:
DeconfigNoGard = 4
};
- inline static const char* ToString(ErrorType i_type)
+ inline static const char* ToString( uint32_t i_type )
{
switch (i_type)
{
@@ -78,7 +78,7 @@ public:
case Fatal: return "Fatal";
case CheckStopOnlyGard: return "CheckStopOnlyGard";
case DeconfigNoGard: return "DeconfigNoGard";
- default: return "Unknown_ErrorType";
+ default: return "Undefined";
}
}
diff --git a/src/usr/diag/prdf/common/framework/service/iipServiceDataCollector.h b/src/usr/diag/prdf/common/framework/service/iipServiceDataCollector.h
index d183cf11f..debf5e7ee 100755
--- a/src/usr/diag/prdf/common/framework/service/iipServiceDataCollector.h
+++ b/src/usr/diag/prdf/common/framework/service/iipServiceDataCollector.h
@@ -94,25 +94,36 @@ typedef std::vector<SdcCallout> SDC_MRU_LIST;
#ifndef __HOSTBOOT_MODULE
-struct HcdbChangeItem {
- TARGETING::TargetHandle_t iv_phcdbtargetHandle ;
- hcdb::comp_subtype_t iv_compSubType;
- comp_id_t iv_compType;
- HcdbChangeItem() : iv_phcdbtargetHandle(NULL), iv_compSubType(hcdb::LBST_ABIST) {}
- HcdbChangeItem(TARGETING::TargetHandle_t i_pTargetHandle, hcdb::comp_subtype_t i_compSubType, comp_id_t i_compType)
- : iv_phcdbtargetHandle(i_pTargetHandle), iv_compSubType(i_compSubType), iv_compType(i_compType){}
+struct HcdbChangeItem
+{
+ TARGETING::TargetHandle_t target;
+ hcdb::comp_subtype_t compSubType;
+ comp_id_t compType;
+
+ HcdbChangeItem() :
+ target(NULL), compSubType(hcdb::LBST_ABIST)
+ {}
+
+ HcdbChangeItem( TARGETING::TargetHandle_t i_target,
+ hcdb::comp_subtype_t i_compSubType, comp_id_t i_compType ) :
+ target(i_target), compSubType(i_compSubType), compType(i_compType)
+ {}
};
typedef std::vector<HcdbChangeItem> HCDB_CHANGE_LIST;
#endif
-struct SignatureList {
- TARGETING::TargetHandle_t iv_pSignatureHandle;
- uint32_t iv_signature;
- SignatureList() : iv_pSignatureHandle(NULL), iv_signature(0) {}
- SignatureList(TARGETING::TargetHandle_t i_pTargetHandle , uint32_t i_signature)
- : iv_pSignatureHandle(i_pTargetHandle), iv_signature(i_signature){}
+struct SignatureList
+{
+ TARGETING::TargetHandle_t target;
+ uint32_t signature;
+
+ SignatureList() : target(NULL), signature(0) {}
+
+ SignatureList( TARGETING::TargetHandle_t i_target, uint32_t i_signature ) :
+ target(i_target), signature(i_signature)
+ {}
};
typedef std::vector<SignatureList> PRDF_SIGNATURES;
@@ -134,26 +145,20 @@ public:
//mk03c
PRDF_SDC_FLAGS_MAP // flag positions
- PRDF_SDC_FLAG(FORCE_LATENT_CS, 0x80000) // mp07
PRDF_SDC_FLAG(USING_SAVED_SDC, 0x40000) // mp05
PRDF_SDC_FLAG(PROC_CORE_CS, 0x20000) // mp03
PRDF_SDC_FLAG(UNIT_CS, 0x20000) // mp06 a (Note this is intentionally the same value as PROC_CORE_CS)
PRDF_SDC_FLAG(THERMAL_EVENT, 0x10000) // pw01
- PRDF_SDC_FLAG(MP_DUMP_REQ, 0x08000) // rc09
- PRDF_SDC_FLAG(MP_RESET_REQ, 0x04000) // dg08
- PRDF_SDC_FLAG(MP_FATAL, 0x02000) // dg08
PRDF_SDC_FLAG(DONT_COMMIT_ERRL, 0x01000) // mp02
PRDF_SDC_FLAG(DUMP, 0x00800) // dg04
PRDF_SDC_FLAG(UERE, 0x00400) // dg02
PRDF_SDC_FLAG(SUE, 0x00200) // dg02
- PRDF_SDC_FLAG(CRUMB, 0x00100)
PRDF_SDC_FLAG(AT_THRESHOLD, 0x00080)
PRDF_SDC_FLAG(DEGRADED, 0x00040)
PRDF_SDC_FLAG(SERVICE_CALL, 0x00020)
PRDF_SDC_FLAG(TRACKIT, 0x00010)
PRDF_SDC_FLAG(TERMINATE, 0x00008)
PRDF_SDC_FLAG(LOGIT, 0x00004)
- PRDF_SDC_FLAG(MEMORY_STEERED, 0x00002)
PRDF_SDC_FLAG(FLOODING, 0x00001)
PRDF_SDC_FLAGS_MAP_END
@@ -172,7 +177,6 @@ public:
<li> terminate() == false
<li> IsDegraded() == false
<li> IsServiceCall() == false
- <li> IsMemorySteered == false
<li> IsMfgTracking() == true
<li> IsLogging() == true
</ul>
@@ -476,51 +480,6 @@ public:
*/
bool IsServiceCall(void) const { return (flags & SERVICE_CALL)!=0 ? true:false; }
-// dg12d - start
- /*
- Indicate that mainstore has had redundent memory steered in
- <ul>
- <br><b>Parameter: </b> offset: offset in card vpd to write bitPos
- <br><b>Parameter: </b> bitPos: bit position steered in this extent
- <br><b>Returns: </b> None.
- <br><b>Requirements:</b> None.
- <br><b>Promises: </b> IsMemorySteered() == true, this object contains
- VPD data that needs to be transferred to VPD
- <br><b>Exceptions: </b> None.
- </ul><br>
- */
-// void SetMemorySteered(uint32_t offset, uint32_t bitPos);
-
- /**
- Query for mainstore redundent steering
- <ul>
- <br><b>Parameters: </b> None.
- <br><b>Returns: </b> [true | false]
- <br><b>Requirements:</b> None.
- <br><b>Promises: </b> GetRbsVpdData() returns new data to be
- transfered to VPD
- <br><b>Notes: </b> Depreciated - always returns false
- </ul><br>
- */
- bool IsMemorySteered(void) const { return (flags & MEMORY_STEERED)!=0 ? true:false; }
-
- /*
- Get the latest RBS vpd data
- <ul>
- <br><b>Parameters: </b> None.
- <br><b>Returns: </b> Bitstring
- <br><b>Requirements:</b> None.
- <br><b>Promises: </b> None.
- <br><b>Exceptions: </b> None.
- <br><b>Notes: </b> if SetMemorySteered() has not been called or
- IsMemorySteered() == false then this
- returns data that indicates that nothing has
- been steered
- </ul><br>
- */
-// const BIT_STRING_CLASS & GetRbsVpdData(void) const { return rbsVpd; }
-// dg12d - end
-
/**
Indicate the chip where analysis begain
<ul>
@@ -597,33 +556,6 @@ public:
*/
uint8_t GetThreshold(void) const { return threshold; }
- //mp04 a Start
- /**
- Indicate the Reason Code (for the SRC) for this error
- <ul>
- <br><b>Parameters: </b> reasonCode
- <br><b>Returns: </b> None.
- <br><b>Requirements:</b> None.
- <br><b>Promises: </b> GetReasonCode() == i_reasonCode
- <br><b>Exceptions: </b> None.
- </ul><br>
- */
- void SetReasonCode(uint16_t i_reasonCode) { reasonCode = i_reasonCode; }
-
- /**
- Get the Reason Code value for this error
- <ul>
- <br><b>Parameters: </b> None.
- <br><b>Returns: </b> reasonCode value
- <br><b>Requirements:</b> SetReasonCode()
- <br><b>Promises: </b> None.
- <br><b>Exceptions: </b> None.
- <br><b>Notes: </b> optional
- </ul><br>
- */
- uint16_t GetReasonCode(void) const { return reasonCode; }
- //mp04 a Stop
-
/**
Indicate that PRD is being called faster than SP can send error logs
<ul>
@@ -673,31 +605,6 @@ public:
GardResolution::ErrorType QueryGard(void);
/**
- Indicate that there may be a valid "Cookie Crumb" from I/O initialization
- <ul>
- <br><b>Parameters: </b> None
- <br><b>Returns: </b> None
- <br><b>Requirements:</b> None
- <br><b>Promises: </b> MaybeCrumb() == true
- <br><b>Exceptions: </b> None.
- </ul><br>
- */
- void SeekCrumb(void) { flags |= CRUMB; }
-
- /**
- Indicates wether service should look for a "cookie crumb" from I/O init
- <ul>
- <br><b>Parameters: </b> None
- <br><b>Returns: </b> [true(1)|false(0)]
- <br><b>Requirements:</b> None
- <br><b>Promises: </b> None
- <br><b>Exceptions: </b> None.
- </ul><br>
- */
- bool MaybeCrumb(void) const { return (flags & CRUMB)!=0 ? true:false;}
-
- // dg02 - start
- /**
Set Error type as Special Uncorrectable Error SUE
<ul>
<br><b>Parameters: </b> None
@@ -745,8 +652,6 @@ public:
*/
bool IsUERE(void) const { return (flags & UERE)!=0 ? true:false;}
- // dg02 - end
-
/**
Set a flag
<ul>
@@ -770,7 +675,6 @@ public:
*/
bool GetFlag(Flag flag) { return ((flags & flag)!=0);}
-
/**
Clear a flag
<ul>
@@ -803,36 +707,6 @@ public:
*/
void SetTOE(Timer& theTime) { ivCurrentEventTime = theTime; }
- /**
- Is this an MP Fatal error
- <ul>
- <br><b>Paramter: </b> None
- <br><b>Returns: </b> [true | false]
- <br><b>Requirments: </b> None.
- <br><b>Promises: </b> None.
- <br><b>Exceptions: </b> None.
- </ul><br>
- */
- bool IsMpFatal(void) const { return (flags & MP_FATAL)!=0 ? true:false; }
-
- /**
- Is an MP Reset requested?
- <ul>
- <br><b>Paramter: </b> None
- <br><b>Returns: </b> [true | false]
- <br><b>Requirments: </b> None.
- <br><b>Promises: </b> None.
- <br><b>Exceptions: </b> None.
- </ul><br>
- */
- bool IsMpResetReq(void) const { return (flags & MP_RESET_REQ)!=0 ? true:false; }
- // dg08 end
-
- /**
- Is an MP Dump requested?
- */
- bool IsMpDumpReq(void) const { return (flags & MP_DUMP_REQ) != 0 ? true:false; } // rc09a
-
/** Is an Thermal Event Flag on? */
bool IsThermalEvent(void) const { return (flags & THERMAL_EVENT) != 0 ? true:false; }
@@ -846,7 +720,6 @@ public:
bool IsUsingSavedSdc (void) const { return (flags & USING_SAVED_SDC) != 0 ? true:false; }
/** Is a Force Lantent Check Stop flag on? */
- bool IsForceLatentCS (void) const { return (flags & FORCE_LATENT_CS) != 0 ? true:false; }
#ifndef __HOSTBOOT_MODULE
@@ -920,7 +793,6 @@ private: // Data
uint32_t flags; //mp01 c from uint16_t
uint8_t hitCount;
uint8_t threshold;
- uint16_t reasonCode; //mp04
TARGETING::TargetHandle_t startingPoint;
// dg12d BIT_STRING_BUFFER_CLASS rbsVpd;
GardResolution::ErrorType errorType;
diff --git a/src/usr/diag/prdf/common/framework/service/iipServiceDataCollector.inl b/src/usr/diag/prdf/common/framework/service/iipServiceDataCollector.inl
index 2cd10def4..0a65d537a 100755
--- a/src/usr/diag/prdf/common/framework/service/iipServiceDataCollector.inl
+++ b/src/usr/diag/prdf/common/framework/service/iipServiceDataCollector.inl
@@ -37,7 +37,6 @@ ServiceDataCollector::ServiceDataCollector() :
flags(TRACKIT | LOGIT),
hitCount(0),
threshold(0),
- reasonCode(0),
startingPoint(NULL),
errorType(GardResolution::NoGard),
ivpDumpRequestChipHandle(NULL),
diff --git a/src/usr/diag/prdf/common/framework/service/prdfPfa5Data.h b/src/usr/diag/prdf/common/framework/service/prdfPfa5Data.h
index 94eb66fd0..2407abd4f 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfPfa5Data.h
+++ b/src/usr/diag/prdf/common/framework/service/prdfPfa5Data.h
@@ -35,9 +35,10 @@ namespace PRDF
{
const uint32_t PFA5_Format = 0x50464135;
-const uint32_t MruListLIMIT = 8;
+
+const uint32_t MruListLIMIT = 8;
const uint32_t HcdbListLIMIT = 8;
-const uint32_t SignatureListLIMIT = 8;
+const uint32_t SigListLIMIT = 8;
// Size of PRD Capture Data
#ifdef __HOSTBOOT_MODULE
@@ -68,363 +69,250 @@ enum ErrlSubsect
struct MsDumpStruct
{
- int32_t DumpContent;
- HUID DumpId;
-
- friend UtilStream& operator<<(UtilStream& i_left, MsDumpStruct& i_right)
- {
- i_left << i_right.DumpContent << i_right.DumpId;
+ int32_t content;
+ HUID id;
- return i_left;
- };
-
- friend UtilStream& operator>>(UtilStream& i_left, MsDumpStruct& i_right)
- {
- i_left >> i_right.DumpContent >>i_right.DumpId;
+ friend UtilStream& operator<<( UtilStream& i_left, MsDumpStruct& i_right )
+ {
+ i_left << i_right.content << i_right.id;
+ return i_left;
+ };
- return i_left;
- };
+ friend UtilStream& operator>>( UtilStream& i_left, MsDumpStruct& i_right )
+ {
+ i_left >> i_right.content >>i_right.id;
+ return i_left;
+ };
};
-struct PfaCalloutListStruct
+struct PfaMruListStruct
{
- uint32_t Callout;
- uint8_t MRUtype; // See enum PRDcallout::MruType
- uint8_t MRUpriority; // in srci/fsp/srci.H
- // SRCI_PRIORITY_LOW = 1
- // SRCI_PRIORITY_MEDC = 2
- // SRCI_PRIORITY_MEDB = 3
- // SRCI_PRIORITY_MEDA = 4
- // SRCI_PRIORITY_MED = 5
- // SRCI_PRIORITY_HIGH = 6
- uint8_t Reserved_3;
- uint8_t Reserved_4;
-
- friend UtilStream& operator<<(UtilStream& i_left,
- PfaCalloutListStruct& i_right)
- {
- i_left << i_right.Callout << i_right.MRUtype << i_right.MRUpriority
- << i_right.Reserved_3 << i_right.Reserved_4;
-
- return i_left;
- };
-
- friend UtilStream& operator>>(UtilStream& i_left,
- PfaCalloutListStruct& i_right)
- {
- i_left >> i_right.Callout >> i_right.MRUtype >> i_right.MRUpriority
- >> i_right.Reserved_3 >> i_right.Reserved_4;
- return i_left;
- };
+ 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)
+ friend UtilStream& operator<<( UtilStream& i_left,
+ PfaMruListStruct& i_right )
+ {
+ i_left << i_right.callout << i_right.type << i_right.priority;
+ return i_left;
+ };
+
+ friend UtilStream& operator>>( UtilStream& i_left,
+ PfaMruListStruct& i_right )
+ {
+ i_left >> i_right.callout >> i_right.type >> i_right.priority;
+ return i_left;
+ };
};
-//NOTE: The addition of the hcdb data requires additonal PFA data and
-// error log parsing. This is triggered / indicated by a new
-// PFA data bit,HCDB_SUPPORT. Support is for fips720 and beyond.
struct PfaHcdbListStruct
{
- HUID hcdbId ;
+ HUID hcdbId;
uint32_t compSubType;
uint32_t compType;
- uint32_t hcdbReserved1;
- uint32_t hcdbReserved2;
- friend UtilStream& operator<<(UtilStream& i_left,
- PfaHcdbListStruct& i_right)
+ friend UtilStream& operator<<( UtilStream& i_left,
+ PfaHcdbListStruct& i_right )
{
- i_left << i_right.hcdbId << i_right.compSubType << i_right.compType
- << i_right.hcdbReserved1 << i_right.hcdbReserved2;
+ i_left << i_right.hcdbId << i_right.compSubType << i_right.compType;
return i_left;
};
- friend UtilStream& operator>>(UtilStream& i_left,
- PfaHcdbListStruct& i_right)
+ friend UtilStream& operator>>( UtilStream& i_left,
+ PfaHcdbListStruct& i_right )
{
- i_left >> i_right.hcdbId >> i_right.compSubType >> i_right.compType
- >> i_right.hcdbReserved1 >> i_right.hcdbReserved2;
+ i_left >> i_right.hcdbId >> i_right.compSubType >> i_right.compType;
return i_left;
};
};
-struct PfaSignatureListStruct
+struct PfaSigListStruct
{
- HUID chipId ;
+ HUID chipId;
uint32_t signature;
- friend UtilStream& operator<<(UtilStream& i_left,
- PfaSignatureListStruct& i_right)
+ friend UtilStream& operator<<( UtilStream& i_left,
+ PfaSigListStruct& i_right )
{
i_left << i_right.chipId << i_right.signature;
return i_left;
};
- friend UtilStream& operator>>(UtilStream& i_left,
- PfaSignatureListStruct& i_right)
+ friend UtilStream& operator>>( UtilStream& i_left,
+ PfaSigListStruct& i_right )
{
i_left >> i_right.chipId >> i_right.signature;
return i_left;
};
};
-/*********************************************************************
- * NOTE: the MsDumpLabel and its information must be first in this
- * structure. Attn handling is dependent on this ordering.
- **********************************************************************/
struct PfaData
{
- //0x0000
- uint32_t MsDumpLabel[2];
- MsDumpStruct MsDumpInfo;
-
- uint32_t PFA_errlActions :16,// Error Log Actions Parm
- // ERRL_ACTION_NONE = 0x0000
- // ERRL_ACTION_SA = 0x8000
- // ERRL_ACTION_HIDDEN = 0x4000
- // ERRL_ACTION_REPORT = 0x2000
- // ERRL_ACTION_REPORT_HMC_ONLY = 0x1000
- // ERRL_ACTION_CALL_HOME = 0x0800
- // ERRL_ACTION_FNM_REQ = 0x0400
- // ERRL_ACTION_HYP_GARD = 0x0200
- // ERRL_ACTION_OS_RECONFIG = 0x0100
- PFA_errlSeverity :8,// Error Log Severity Parm
- // See errlSeverity in errltypes.H
- // ERRL_SEV_INFORMATIONAL = 0,
- // ERRL_SEV_RECOVERED = 0x10
- // ERRL_SEV_PREDICTIVE = 0x20
- // ERRL_SEV_PREDICTIVE_DEGRADED = 0x21
- // ERRL_SEV_PREDICTIVE_CORRECTABLE = 0x22
- // ERRL_SEV_PREDICTIVE_CORRECTABLE2 = 0x23
- // ERRL_SEV_PREDICTIVE_REDUNDANCY_LOST = 0x24
- // ERRL_SEV_UNRECOVERABLE1 = 0x41
- // ERRL_SEV_UNRECOVERABLE2 = 0x44
- // ERRL_SEV_UNRECOVERABLE3 = 0x45
- // ERRL_SEV_UNRECOVERABLE4 = 0x48
- // ERRL_SEV_DIAGNOSTIC_ERROR1 = 0x60
- // ERRL_SEV_DIAGNOSTIC_ERROR2 = 0x61
- // ERRL_SEV_UNRECOVERABLE = 0x70
- // ERRL_SEV_UNRECOVERABLE_REIPL = 0x71
- // ERRL_SEV_RESERVED = 0xFF
-
-
- Reserved_2 :8;
-
- // PRD Service Data Collector Flags
- uint32_t MP_DUMP_REQ :1,
- MP_RESET_REQ :1,
- MP_FATAL :1,
- REBOOT_MSG :1,
- DUMP :1,
- UERE :1,
- SUE :1,
- CRUMB :1,
- AT_THRESHOLD :1,
- DEGRADED :1,
- SERVICE_CALL :1,
- TRACKIT :1,
- TERMINATE :1,
- LOGIT :1,
- MEMORY_STEERED :1,
- FLOODING :1,
- THERMAL_EVENT :1,
- UNIT_CHECKSTOP :1,
- USING_SAVED_SDC :1,
- LAST_CORE_TERMINATE :1,
- FORCE_LATENT_CS :1,
- Reserved_0 :1,
- DEFER_DECONFIG :1,
- CM_MODE :1,
- TERMINATE_ON_CS :1,
- HCDB_SUPPORT :1,
- SIGNATURE_SUPPORT :1,
- Reserved :5;
- // 1 TRUE
- // 0 FALSE
- //
- //0x00xx
- //uint32_t ComponentDataLabel[2];// Label to show start of Component data.
- uint32_t ErrorCount :16,
- // PRD Hits on this Error since IPL.
- Threshold :16;
- // PRD Threshold for this error (MAKMAK how represent interval?)
-
- uint32_t PRDServiceActionCounter :8,
- // PRD Service Action Counter
- ErrorType :8,
- // Error type gard was called with (see xspprdGardResolution.h)
- homGardState :8,
- // homGardEnum in src/hwsv/server/hwsvTypes.H
- // HOM_NO_GARD = 0
- // HOM_DECONFIG_GARD =1
- // HOM_BYPASS_GARD = 2
- Reserved_5 :8; //MP01 c - SystemType not needed
-
- uint32_t PRD_AttnTypes :8,
- // 0x00 NULL
- // 0x01 CheckStop Attn
- // 0x02 Recoverable Attn
- // 0x03 Special Attn
- PRD_SecondAttnTypes :8,
- // 0x00 NULL
- // 0x01 CheckStop Attn
- // 0x02 Recoverable Attn
- // 0x03 Special Attn
-
- reasonCode :16; //MP06 a
-
- uint32_t PfaCalloutCount; // The number of MRUs below.
- PfaCalloutListStruct PfaCalloutList[MruListLIMIT]; //full list of MRUs and flags.
- uint32_t hcdbListCount; //mp15 a
- PfaHcdbListStruct PfaHcdbList[HcdbListLIMIT];
- uint32_t signatureCount;
- PfaSignatureListStruct PfaSignatureList[SignatureListLIMIT];
- //pw01
- friend UtilStream& operator<<(UtilStream& i_left, PfaData& i_right)
- {
- i_left << i_right.MsDumpLabel[0] << i_right.MsDumpLabel[1]
- << i_right.MsDumpInfo
- <<
- ( (i_right.PFA_errlActions << 16) |
- (i_right.PFA_errlSeverity << 8) |
- (i_right.Reserved_2)
- )
- <<
- ( (i_right.MP_DUMP_REQ << 31) |
- (i_right.MP_RESET_REQ << 30) |
- (i_right.MP_FATAL << 29) |
- (i_right.REBOOT_MSG << 28) |
- (i_right.DUMP << 27) |
- (i_right.UERE << 26) |
- (i_right.SUE << 25) |
- (i_right.CRUMB << 24) |
- (i_right.AT_THRESHOLD << 23) |
- (i_right.DEGRADED << 22) |
- (i_right.SERVICE_CALL << 21) |
- (i_right.TRACKIT << 20) |
- (i_right.TERMINATE << 19) |
- (i_right.LOGIT << 18) |
- (i_right.MEMORY_STEERED << 17) |
- (i_right.FLOODING << 16) |
- (i_right.THERMAL_EVENT << 15) |
- (i_right.UNIT_CHECKSTOP << 14) |
- (i_right.USING_SAVED_SDC << 13) |
- (i_right.LAST_CORE_TERMINATE << 12) |
- (i_right.FORCE_LATENT_CS << 11) |
- (i_right.Reserved_0 << 10) |
- (i_right.DEFER_DECONFIG << 9) |
- (i_right.CM_MODE << 8) |
- (i_right.TERMINATE_ON_CS << 7) |
- (i_right.HCDB_SUPPORT << 6) |
- (i_right.SIGNATURE_SUPPORT << 5) |
- (i_right.Reserved )
- )
- //<< i_right.ComponentDataLabel[0] << i_right.ComponentDataLabel[1]
- <<
- ( (i_right.ErrorCount << 16) |
- (i_right.Threshold)
- )
- <<
- ( (i_right.PRDServiceActionCounter << 24) |
- (i_right.ErrorType << 16) |
- (i_right.homGardState << 8) |
- (i_right.Reserved_5)
- )
- <<
- ( (i_right.PRD_AttnTypes << 24) |
- (i_right.PRD_SecondAttnTypes << 16) |
- (i_right.reasonCode)
- )
- << i_right.PfaCalloutCount;
- for (uint32_t i = 0; i < i_right.PfaCalloutCount; i++)
- i_left << i_right.PfaCalloutList[i];
-
- if ( 0 != i_right.HCDB_SUPPORT ) //mp16 a
- {
- i_left << i_right.hcdbListCount; //mp15 a
- for (uint32_t i = 0; i < i_right.hcdbListCount; i++) //mp15 a
- i_left << i_right.PfaHcdbList[i]; //mp15 a
- }
-
- if ( 0 != i_right.SIGNATURE_SUPPORT ) //mp16 a
- {
- i_left << i_right.signatureCount;
- for (uint32_t i = 0; i < i_right.signatureCount; i++)
- i_left << i_right.PfaSignatureList[i];
- }
-
- return i_left;
- };
-
- friend UtilStream& operator>>(UtilStream& i_left, PfaData& i_right)
- {
- uint32_t l_tmp[6];
- i_left >> i_right.MsDumpLabel[0] >> i_right.MsDumpLabel[1]
- >> i_right.MsDumpInfo
- >> l_tmp[1]
- >> l_tmp[2]
- >> l_tmp[3]
- >> l_tmp[4]
- >> l_tmp[5];
-
- i_right.PFA_errlActions = (l_tmp[1] >> 16) & 0xFFFF;
- i_right.PFA_errlSeverity = (l_tmp[1] >> 8) & 0xFF;
- i_right.MP_DUMP_REQ = (l_tmp[2] >> 31) & 0x01;
- i_right.MP_RESET_REQ = (l_tmp[2] >> 30) & 0x01;
- i_right.MP_FATAL = (l_tmp[2] >> 29) & 0x01;
- i_right.REBOOT_MSG = (l_tmp[2] >> 28) & 0x01;
- i_right.DUMP = (l_tmp[2] >> 27) & 0x01;
- i_right.UERE = (l_tmp[2] >> 26) & 0x01;
- i_right.SUE = (l_tmp[2] >> 25) & 0x01;
- i_right.CRUMB = (l_tmp[2] >> 24) & 0x01;
- i_right.AT_THRESHOLD = (l_tmp[2] >> 23) & 0x01;
- i_right.DEGRADED = (l_tmp[2] >> 22) & 0x01;
- i_right.SERVICE_CALL = (l_tmp[2] >> 21) & 0x01;
- i_right.TRACKIT = (l_tmp[2] >> 20) & 0x01;
- i_right.TERMINATE = (l_tmp[2] >> 19) & 0x01;
- i_right.LOGIT = (l_tmp[2] >> 18) & 0x01;
- i_right.MEMORY_STEERED = (l_tmp[2] >> 17) & 0x01;
- i_right.FLOODING = (l_tmp[2] >> 16) & 0x01;
- i_right.THERMAL_EVENT = (l_tmp[2] >> 15) & 0x01;
- i_right.UNIT_CHECKSTOP = (l_tmp[2] >> 14) & 0x01;
- i_right.USING_SAVED_SDC = (l_tmp[2] >> 13) & 0x01;
- i_right.LAST_CORE_TERMINATE = (l_tmp[2] >> 12) & 0x01;
- i_right.FORCE_LATENT_CS = (l_tmp[2] >> 11) & 0x01;
- i_right.Reserved_0 = (l_tmp[2] >> 10) & 0x01;
- i_right.DEFER_DECONFIG = (l_tmp[2] >> 9) & 0x01;
- i_right.CM_MODE = (l_tmp[2] >> 8) & 0x01;
- i_right.TERMINATE_ON_CS = (l_tmp[2] >> 7) & 0x01;
- i_right.HCDB_SUPPORT = (l_tmp[2] >> 6) & 0x01;
- i_right.SIGNATURE_SUPPORT = (l_tmp[2] >> 5) & 0x01;
- i_right.ErrorCount = (l_tmp[3] >> 16) & 0xFFFF;
- i_right.Threshold = (l_tmp[3] ) & 0xFFFF;
- i_right.PRDServiceActionCounter = (l_tmp[4] >> 24) & 0xFF;
- i_right.ErrorType = (l_tmp[4] >> 16) & 0xFF;
- i_right.homGardState = (l_tmp[4] >> 8) & 0xFF;
- i_right.PRD_AttnTypes = (l_tmp[5] >> 24) & 0xFF;
- i_right.PRD_SecondAttnTypes = (l_tmp[5] >> 16) & 0xFF;
- i_right.reasonCode = (l_tmp[5] ) & 0xFFFF;
-
- i_left >> i_right.PfaCalloutCount; //mp16 m
- for (uint32_t i = 0; i < i_right.PfaCalloutCount; i++)
- i_left >> i_right.PfaCalloutList[i];
-
- if ( 0 != i_right.HCDB_SUPPORT ) //mp16 a
- {
- i_left >> i_right.hcdbListCount; //mp15 a
- for (uint32_t i = 0; i < i_right.hcdbListCount; i++) //mp15 a
- i_left >> i_right.PfaHcdbList[i]; //mp15 a
- }
-
- if ( 0 != i_right.SIGNATURE_SUPPORT ) //mp16 a
- {
- i_left >> i_right.signatureCount;
- for (uint32_t i = 0; i < i_right.signatureCount; i++)
- i_left >> i_right.PfaSignatureList[i];
- }
-
- return i_left;
- };
- //--pw01
+ // Dump info
+ // NOTE: The msDumpLabel and its information must be first in this
+ // structure. ATTN handling is dependent on this ordering.
+ uint32_t msDumpLabel[2];
+ MsDumpStruct msDumpInfo;
+
+ // Error log actions and severity
+ uint32_t errlActions :16, // See enum errlActions (in errltypes.H)
+ errlSeverity : 8, // See enum errlSeverity (in errltypes.H)
+ serviceActionCounter : 8; // Number of service actions requested
+ // by PRD.
+
+ // PRD Service Data Collector Flags (1:true, 0:false)
+ uint32_t DUMP :1,
+ UERE :1,
+ SUE :1,
+ AT_THRESHOLD :1,
+ DEGRADED :1,
+ SERVICE_CALL :1,
+ TRACKIT :1,
+ TERMINATE :1,
+ LOGIT :1,
+ FLOODING :1,
+ THERMAL_EVENT :1,
+ UNIT_CHECKSTOP :1,
+ USING_SAVED_SDC :1,
+ LAST_CORE_TERMINATE :1,
+ DEFER_DECONFIG :1,
+ CM_MODE :1,
+ Reserved :16;
+
+ // Thresholding
+ uint32_t errorCount :16, // Number of occurrences of this attention
+ threshold :16; // Theshold for this attention
+
+ // Attention types and GARD state.
+ uint32_t priAttnType : 8, // primary attention type
+ secAttnType : 8, // secondary attention type
+ prdGardErrType : 8, // See enum GardResolution::ErrorType
+ hwasGardState : 8; // See enum hwsvGardEnum (in hwsvTypes.H)
+
+ uint32_t mruListCount; // Total number of MRUs.
+ PfaMruListStruct mruList[MruListLIMIT]; // Full list of MRUs.
+
+ uint32_t hcdbListCount; // Total number of MRUs.
+ PfaHcdbListStruct hcdbList[HcdbListLIMIT]; // Full list of HCDB changes.
+
+ uint32_t sigListCount; // Total number of multi-signatures.
+ PfaSigListStruct sigList[SigListLIMIT]; // Full list of multi-signatures.
+
+ /**
+ * @brief Default constructor
+ */
+ PfaData()
+ {
+ memset( &mruList[0], 0x00, sizeof(PfaMruListStruct) * MruListLIMIT );
+ memset( &hcdbList[0], 0x00, sizeof(PfaHcdbListStruct) * HcdbListLIMIT );
+ memset( &sigList[0], 0x00, sizeof(PfaSigListStruct) * SigListLIMIT );
+ }
+
+ friend UtilStream& operator<<(UtilStream& i_left, PfaData& i_right)
+ {
+ i_left << i_right.msDumpLabel[0] << i_right.msDumpLabel[1]
+ << i_right.msDumpInfo;
+
+ i_left << ( (i_right.errlActions << 16) |
+ (i_right.errlSeverity << 8) |
+ (i_right.serviceActionCounter ) );
+
+ i_left << ( (i_right.DUMP << 31) |
+ (i_right.UERE << 30) |
+ (i_right.SUE << 29) |
+ (i_right.AT_THRESHOLD << 28) |
+ (i_right.DEGRADED << 27) |
+ (i_right.SERVICE_CALL << 26) |
+ (i_right.TRACKIT << 25) |
+ (i_right.TERMINATE << 24) |
+ (i_right.LOGIT << 23) |
+ (i_right.FLOODING << 22) |
+ (i_right.THERMAL_EVENT << 21) |
+ (i_right.UNIT_CHECKSTOP << 20) |
+ (i_right.USING_SAVED_SDC << 19) |
+ (i_right.LAST_CORE_TERMINATE << 18) |
+ (i_right.DEFER_DECONFIG << 17) |
+ (i_right.CM_MODE << 16) |
+ (i_right.Reserved ) );
+
+ i_left << ( (i_right.errorCount << 16) |
+ (i_right.threshold ) );
+
+ i_left << ( (i_right.priAttnType << 24) |
+ (i_right.secAttnType << 16) |
+ (i_right.prdGardErrType << 8) |
+ (i_right.hwasGardState ) );
+
+ i_left << i_right.mruListCount;
+ for ( uint32_t i = 0; i < i_right.mruListCount; i++ )
+ i_left << i_right.mruList[i];
+
+ i_left << i_right.hcdbListCount;
+ for ( uint32_t i = 0; i < i_right.hcdbListCount; i++ )
+ i_left << i_right.hcdbList[i];
+
+ i_left << i_right.sigListCount;
+ for ( uint32_t i = 0; i < i_right.sigListCount; i++ )
+ i_left << i_right.sigList[i];
+
+ return i_left;
+ };
+
+ friend UtilStream& operator>>(UtilStream& i_left, PfaData& i_right)
+ {
+ uint32_t l_tmp[5];
+ i_left >> i_right.msDumpLabel[0] >> i_right.msDumpLabel[1]
+ >> i_right.msDumpInfo
+ >> l_tmp[1]
+ >> l_tmp[2]
+ >> l_tmp[3]
+ >> l_tmp[4];
+
+ i_right.errlActions = (l_tmp[1] >> 16) & 0xFFFF;
+ i_right.errlSeverity = (l_tmp[1] >> 8) & 0xFF;
+ i_right.serviceActionCounter = (l_tmp[1] ) & 0xFF;
+
+ i_right.DUMP = (l_tmp[2] >> 31) & 0x01;
+ i_right.UERE = (l_tmp[2] >> 30) & 0x01;
+ i_right.SUE = (l_tmp[2] >> 29) & 0x01;
+ i_right.AT_THRESHOLD = (l_tmp[2] >> 28) & 0x01;
+ i_right.DEGRADED = (l_tmp[2] >> 27) & 0x01;
+ i_right.SERVICE_CALL = (l_tmp[2] >> 26) & 0x01;
+ i_right.TRACKIT = (l_tmp[2] >> 25) & 0x01;
+ i_right.TERMINATE = (l_tmp[2] >> 24) & 0x01;
+ i_right.LOGIT = (l_tmp[2] >> 23) & 0x01;
+ i_right.FLOODING = (l_tmp[2] >> 22) & 0x01;
+ i_right.THERMAL_EVENT = (l_tmp[2] >> 21) & 0x01;
+ i_right.UNIT_CHECKSTOP = (l_tmp[2] >> 20) & 0x01;
+ i_right.USING_SAVED_SDC = (l_tmp[2] >> 19) & 0x01;
+ i_right.LAST_CORE_TERMINATE = (l_tmp[2] >> 18) & 0x01;
+ i_right.DEFER_DECONFIG = (l_tmp[2] >> 17) & 0x01;
+ i_right.CM_MODE = (l_tmp[2] >> 16) & 0x01;
+
+ i_right.errorCount = (l_tmp[3] >> 16) & 0xFFFF;
+ i_right.threshold = (l_tmp[3] ) & 0xFFFF;
+
+ i_right.priAttnType = (l_tmp[4] >> 24) & 0xFF;
+ i_right.secAttnType = (l_tmp[4] >> 16) & 0xFF;
+ i_right.prdGardErrType = (l_tmp[4] >> 8) & 0xFF;
+ i_right.hwasGardState = (l_tmp[4] ) & 0xFF;
+
+ i_left >> i_right.mruListCount;
+ for ( uint32_t i = 0; i < i_right.mruListCount; i++ )
+ i_left >> i_right.mruList[i];
+
+ i_left >> i_right.hcdbListCount;
+ for ( uint32_t i = 0; i < i_right.hcdbListCount; i++ )
+ i_left >> i_right.hcdbList[i];
+
+ i_left >> i_right.sigListCount;
+ for ( uint32_t i = 0; i < i_right.sigListCount; i++ )
+ i_left >> i_right.sigList[i];
+
+ return i_left;
+ };
+
};
struct CaptureDataClass
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 421d4fa4b..e1e1358ef 100644
--- a/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.C
+++ b/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.C
@@ -74,7 +74,6 @@ char * ThermalFilename = NULL;
#endif
-PfaData pfaData;
bool ErrDataService::terminateOnCheckstop = true;
bool previousWasRecovered = false;
Timer previousEventTime;
@@ -115,7 +114,7 @@ RasServices::~RasServices()
void ErrDataService::Initialize()
{
savedLatentSdc = false;
- serviceActionCounter = 0;
+ iv_serviceActionCounter = 0;
}
void RasServices::Initialize()
@@ -271,7 +270,7 @@ errlHndl_t ErrDataService::GenerateSrcPfa( ATTENTION_TYPE i_attnType,
bool iplDiagMode = false;
bool deferDeconfig = false;
- ++serviceActionCounter;
+ ++iv_serviceActionCounter;
uint16_t PRD_Reason_Code = 0;
uint32_t dumpPlid = 0;
@@ -306,9 +305,8 @@ errlHndl_t ErrDataService::GenerateSrcPfa( ATTENTION_TYPE i_attnType,
((!sdc.IsUERE() ) &&
(!sdc.IsSUE() ) )
{
- if //if LtntMck and last recoverable Stored use it.
- ((latentMachineCheck || sdc.IsForceLatentCS() ) &&
- (savedLatentSdc ) )
+ // If LtntMck and last recoverable Stored use it.
+ if ( latentMachineCheck && savedLatentSdc )
{
gardErrType = GARD_Func;
sdc = latentSdc;
@@ -408,8 +406,8 @@ errlHndl_t ErrDataService::GenerateSrcPfa( ATTENTION_TYPE i_attnType,
severityParm = ERRL_SEV_INFORMATIONAL;
actionFlag = (actionFlag | ERRL_ACTION_HIDDEN);
}
- else if (sdc.IsServiceCall() || //At Thresold
- (sdc.IsMpFatal() && sdc.GetCauseAttentionType() != SPECIAL) )
+ else if ( sdc.IsServiceCall() || //At Thresold
+ (sdc.GetCauseAttentionType() != SPECIAL) )
{
severityParm = ERRL_SEV_PREDICTIVE;
}
@@ -432,7 +430,7 @@ errlHndl_t ErrDataService::GenerateSrcPfa( ATTENTION_TYPE i_attnType,
else if (i_attnType == SPECIAL)
{
//SMA path on Special attn
- if (sdc.IsMpFatal() && (sdc.IsLogging() || sdc.IsServiceCall() ) )
+ if ( sdc.IsLogging() || sdc.IsServiceCall() )
{
severityParm = ERRL_SEV_UNRECOVERABLE;
savedLatentSdc = true; //Save this SDC as Latent SDC
@@ -579,37 +577,29 @@ errlHndl_t ErrDataService::GenerateSrcPfa( ATTENTION_TYPE i_attnType,
////////////////////////////////////////////////////////////////
//Set the PRD Reason Code based on the flags set in the above callout loop.
////////////////////////////////////////////////////////////////
- uint16_t SDC_Reason_Code = sdc.GetReasonCode();
- if (SDC_Reason_Code == 0) // If the analysis code has not set its own
- // Reason Code.
+
+ if (HW == true && SW == true)
{
- if (HW == true && SW == true)
- {
- if (SW_High == true)
- PRD_Reason_Code = PRDF_DETECTED_FAIL_SOFTWARE_PROBABLE;
- else
- PRD_Reason_Code = PRDF_DETECTED_FAIL_HARDWARE_PROBABLE;
- }
- else if (HW == true && SW == false && SecondLevel == true)
- PRD_Reason_Code = PRDF_DETECTED_FAIL_HARDWARE_PROBABLE;
- else if (HW == true && SW == false && SecondLevel == false)
- PRD_Reason_Code = PRDF_DETECTED_FAIL_HARDWARE;
- else if (HW == false && SW == true)
- PRD_Reason_Code = PRDF_DETECTED_FAIL_SOFTWARE;
+ if (SW_High == true)
+ PRD_Reason_Code = PRDF_DETECTED_FAIL_SOFTWARE_PROBABLE;
else
- {
- // If we get here both HW and SW flags were false. Callout may be
- // Second Level Support only, or a procedure not checked in the SW
- // flag code.
PRD_Reason_Code = PRDF_DETECTED_FAIL_HARDWARE_PROBABLE;
- }
}
+ else if (HW == true && SW == false && SecondLevel == true)
+ PRD_Reason_Code = PRDF_DETECTED_FAIL_HARDWARE_PROBABLE;
+ else if (HW == true && SW == false && SecondLevel == false)
+ PRD_Reason_Code = PRDF_DETECTED_FAIL_HARDWARE;
+ else if (HW == false && SW == true)
+ PRD_Reason_Code = PRDF_DETECTED_FAIL_SOFTWARE;
else
- { //Set to Reason Code in SDC, set by the chip analysis code.
- PRD_Reason_Code = SDC_Reason_Code;
+ {
+ // If we get here both HW and SW flags were false. Callout may be
+ // Second Level Support only, or a procedure not checked in the SW
+ // flag code.
+ PRD_Reason_Code = PRDF_DETECTED_FAIL_HARDWARE_PROBABLE;
}
- SrcWord7 = i_sdc.GetAttentionType() << 8;
+ SrcWord7 = i_sdc.GetAttentionType() << 8;
SrcWord7 |= i_sdc.GetCauseAttentionType();
//--------------------------------------------------------------------------
@@ -678,7 +668,6 @@ errlHndl_t ErrDataService::GenerateSrcPfa( ATTENTION_TYPE i_attnType,
// Add each mru/callout to the error log.
//**************************************************************
fspmrulist = sdc.GetMruList();
- uint32_t calloutcount = fspmrulist.size();
for ( SDC_MRU_LIST::iterator i = fspmrulist.begin();
i < fspmrulist.end(); ++i )
{
@@ -757,7 +746,7 @@ errlHndl_t ErrDataService::GenerateSrcPfa( ATTENTION_TYPE i_attnType,
}
#ifndef __HOSTBOOT_MODULE
- // FIXME: need to investigate whether or not to add HCDB to Hostboot
+ // FIXME: RTC 51618 Need to add HCDB to Hostboot
//**************************************************************
// setChangeState for HomIds in the HCDB change list
@@ -768,7 +757,7 @@ errlHndl_t ErrDataService::GenerateSrcPfa( ATTENTION_TYPE i_attnType,
//FIXME comp_id_t, l_pchipHandle commented to avoid warning
//TargetHandle_t l_pchipHandle = (*i).iv_phcdbtargetHandle;
// comp_id_t thisCompId = (*i).iv_compType;
- hcdb::comp_subtype_t thisCompSubType = (*i).iv_compSubType;
+ hcdb::comp_subtype_t thisCompSubType = i->compSubType;
if (hcdb::SUBTYPE_ANY == thisCompSubType)
{
//PlatServices::setHcdbChangeState(l_pchipHandle);//FIXME functions commneted for now in wrapper
@@ -796,182 +785,39 @@ errlHndl_t ErrDataService::GenerateSrcPfa( ATTENTION_TYPE i_attnType,
//**************************************************************
// Build Dump Flags and PFA5 data
//**************************************************************
- //MP01 a Start
- pfaData.MsDumpLabel[0] = 0x4D532020; //start of MS Dump flags
- pfaData.MsDumpLabel[1] = 0x44554D50; // 'MS DUMP'
-
- TargetHandle_t l_dumpHandle = NULL;
-#ifdef __HOSTBOOT_MODULE
- sdc.GetDumpRequest( l_dumpHandle );
-#else
- hwTableContent l_dumpRequestContent; //not used but needed to call GetDumpRequest
- sdc.GetDumpRequest( l_dumpRequestContent, l_dumpHandle );
- pfaData.MsDumpInfo.DumpContent = l_dumpRequestContent;
-#endif
-
- pfaData.MsDumpInfo.DumpId = PlatServices::getHuid(l_dumpHandle);
- TYPE l_targetType = PlatServices::getTargetType(l_dumpHandle);
-
- if (i_sdc.IsMpDumpReq())
- {
- pfaData.MP_DUMP_REQ = 1;
- }
- else
- {
- pfaData.MP_DUMP_REQ = 0;
- }
- if (i_sdc.IsMpResetReq())
- {
- pfaData.MP_RESET_REQ = 1;
- }
- else
- {
- pfaData.MP_RESET_REQ = 0;
- }
- //Pass Error Log Action Flag to attn handling, so it know what actions to commit
-
- pfaData.MP_FATAL = (i_sdc.IsMpFatal()==true)? 1:0;
-
- pfaData.PFA_errlActions = actionFlag;
- pfaData.PFA_errlSeverity = severityParm;
-
- pfaData.REBOOT_MSG = 0; // Not supported??
- pfaData.DUMP = (sdc.IsDump()==true)? 1:0;
- pfaData.UERE = (sdc.IsUERE()==true)? 1:0;
- pfaData.SUE = (sdc.IsSUE()==true)? 1:0;
- pfaData.CRUMB = (sdc.MaybeCrumb()==true)? 1:0;
- pfaData.AT_THRESHOLD = (sdc.IsAtThreshold()==true)? 1:0;
- pfaData.DEGRADED = (sdc.IsDegraded()==true)? 1:0;
- pfaData.SERVICE_CALL = (sdc.IsServiceCall()==true)? 1:0;
- pfaData.TRACKIT = (sdc.IsMfgTracking()==true)? 1:0;
- pfaData.TERMINATE = (sdc.Terminate()==true)? 1:0;
- pfaData.LOGIT = (sdc.IsLogging()==true)? 1:0;
- pfaData.MEMORY_STEERED = (sdc.IsMemorySteered()==true)? 1:0;
- pfaData.FLOODING = (sdc.IsFlooding()==true)? 1:0;
-
- pfaData.ErrorCount = sdc.GetHits();
- pfaData.PRDServiceActionCounter = serviceActionCounter;
- pfaData.Threshold = sdc.GetThreshold();
- pfaData.ErrorType = prdGardErrType;
- pfaData.homGardState = gardState;
- pfaData.PRD_AttnTypes = i_attnType;
- pfaData.PRD_SecondAttnTypes = i_sdc.GetCauseAttentionType();
- pfaData.THERMAL_EVENT = (sdc.IsThermalEvent()==true)? 1:0;
- pfaData.UNIT_CHECKSTOP = (sdc.IsUnitCS()==true)? 1:0;
- pfaData.USING_SAVED_SDC = (sdc.IsUsingSavedSdc()==true)? 1:0;
- pfaData.FORCE_LATENT_CS = (i_sdc.IsForceLatentCS()==true)? 1:0;
- pfaData.DEFER_DECONFIG = (deferDeconfig==true)? 1:0;
- pfaData.CM_MODE = 0; //FIXME RTC 50063
- pfaData.TERMINATE_ON_CS = (terminateOnCheckstop==true)? 1:0;
- pfaData.reasonCode = sdc.GetReasonCode();
- pfaData.PfaCalloutCount = calloutcount;
-
- // First clear out the PFA Callout list from previous SRC
- for (uint32_t j = 0; j < MruListLIMIT; ++j)
- {
- pfaData.PfaCalloutList[j].Callout = 0;
- pfaData.PfaCalloutList[j].MRUtype = 0;
- pfaData.PfaCalloutList[j].MRUpriority = 0;
- }
-
- // Build the mru list into PFA data Callout list
- uint32_t n = 0;
- fspmrulist = sdc.GetMruList();
- for ( SDC_MRU_LIST::iterator i = fspmrulist.begin();
- i < fspmrulist.end(); ++i )
- {
- if ( n < MruListLIMIT )
- {
- pfaData.PfaCalloutList[n].MRUpriority = (uint8_t)(*i).priority;
- pfaData.PfaCalloutList[n].Callout = i->callout.flatten();
- pfaData.PfaCalloutList[n].MRUtype = i->callout.getType();
-
- ++n;
- }
- }
-#ifndef __HOSTBOOT_MODULE
- // FIXME: need to investigate whether or not we need to add HCDB support in Hostboot
- // First clear out the HCDB from previous SRC
- for (uint32_t j = 0; j < HcdbListLIMIT; ++j)
- {
- pfaData.PfaHcdbList[j].hcdbId = 0;//Resetting entity path
- pfaData.PfaHcdbList[j].compSubType = 0;
- pfaData.PfaHcdbList[j].compType = 0;
- pfaData.PfaHcdbList[j].hcdbReserved1 = 0;
- pfaData.PfaHcdbList[j].hcdbReserved2 = 0;
- }
-
- // Build the HCDB list into PFA data
- n = 0;
- hcdbList = sdc.GetHcdbList();
- pfaData.hcdbListCount = hcdbList.size();
- for (HCDB_CHANGE_LIST::iterator i = hcdbList.begin(); i < hcdbList.end(); ++i)
- {
- if (n < HcdbListLIMIT)
- {
- pfaData.PfaHcdbList[n].hcdbId = PlatServices::getHuid((*i).iv_phcdbtargetHandle);
- pfaData.PfaHcdbList[n].compSubType = (*i).iv_compSubType;
- pfaData.PfaHcdbList[n].compType = (*i).iv_compType;
- ++n;
- }
- else
- break;
- }
- // Set flag so we know to parse the hcdb data
- pfaData.HCDB_SUPPORT = 1;
-#endif // if not __HOSTBOOT_MODULE
+ PfaData pfaData;
+ TargetHandle_t dumpTrgt = NULL;
- PRDF_SIGNATURES signatureList = sdc.GetSignatureList();
- // First clear out the HCDB from previous SRC
- for (uint32_t j = 0; j < SignatureListLIMIT; ++j)
- {
- pfaData.PfaSignatureList[j].chipId = 0;//Resetting the chipPath
- pfaData.PfaSignatureList[j].signature = 0;
- }
+ initPfaData( sdc, i_attnType, deferDeconfig, actionFlag, severityParm,
+ prdGardErrType, gardState, pfaData, dumpTrgt );
- // Build the signature list into PFA data
- n = 0;
- signatureList = sdc.GetSignatureList();
- pfaData.signatureCount = signatureList.size();
- for (PRDF_SIGNATURES::iterator i = signatureList.begin(); i < signatureList.end(); ++i)
- {
- if (n < SignatureListLIMIT)
- {
- pfaData.PfaSignatureList[n].chipId = PlatServices::getHuid((*i).iv_pSignatureHandle);
- pfaData.PfaSignatureList[n].signature = (*i).iv_signature;
- ++n;
- }
- else
- break;
- }
- // Set flag so we know to parse the hcdb data
- pfaData.SIGNATURE_SUPPORT = 1;
+ HUID dumpId = pfaData.msDumpInfo.id;
+ TYPE dumpTrgtType = getTargetType( dumpTrgt );
//**************************************************************
// Check for Unit CheckStop.
// Check for Last Functional Core.
// PFA data updates for these item.
//**************************************************************
- pfaData.LAST_CORE_TERMINATE = false;
+
// Now the check is for Unit Check Stop and Dump ID for Processor
// Skip the termination on Last Core if this is a Saved SDC
- if (sdc.IsUnitCS() && (!sdc.IsUsingSavedSdc() ) )
+ if ( sdc.IsUnitCS() && !sdc.IsUsingSavedSdc() )
{
- PRDF_TRAC( PRDF_FUNC"Unit CS, Func HUID: %x, TargetType: %x",
- pfaData.MsDumpInfo.DumpId, l_targetType );
- if (TYPE_CORE == l_targetType)
+ PRDF_TRAC( PRDF_FUNC"Unit CS on HUID: 0x%08x", dumpId );
+
+ if ( TYPE_CORE == dumpTrgtType )
{
- //Check if this is last functional core
- if ( PlatServices::checkLastFuncCore(l_dumpHandle) )
+ // Check if this is last functional core
+ if ( PlatServices::checkLastFuncCore(dumpTrgt) )
{
- PRDF_TRAC( PRDF_FUNC"Last Func Core: %x was true.",
- PlatServices::getHuid(l_dumpHandle) );
+ PRDF_TRAC(PRDF_FUNC"Last Functional Core HUID: 0x%08x", dumpId);
+
ForceTerminate = true;
pfaData.LAST_CORE_TERMINATE = true;
- o_errl->setSev(ERRL_SEV_UNRECOVERABLE); //Update Errl Severity
- //Update PFA data
- pfaData.PFA_errlSeverity = ERRL_SEV_UNRECOVERABLE;
+ o_errl->setSev(ERRL_SEV_UNRECOVERABLE);
+ pfaData.errlSeverity = ERRL_SEV_UNRECOVERABLE;
}
}
}
@@ -1023,7 +869,7 @@ errlHndl_t ErrDataService::GenerateSrcPfa( ATTENTION_TYPE i_attnType,
{ //For Manufacturing Mode terminate, change the action flags for Thermal Event.
actionFlag = (ERRL_ACTION_SA | ERRL_ACTION_REPORT | ERRL_ACTION_CALL_HOME);
}
- pfaData.PFA_errlActions = actionFlag;
+ pfaData.errlActions = actionFlag;
}
@@ -1126,13 +972,12 @@ will also be removed. Need to confirm if this code is required anymore.
delete o_errl;
o_errl = NULL;
}
- else if ( !ReturnELog && !ForceTerminate &&
- !i_sdc.IsMpFatal() && !i_sdc.Terminate() )
+ else if ( !ReturnELog && !ForceTerminate && !i_sdc.Terminate() )
{
// Check to see if we need to do a Proc Core dump
if ( sdc.IsUnitCS() && !sdc.IsUsingSavedSdc() )
{
- if ( l_targetType == TYPE_PROC )
+ if ( dumpTrgtType == TYPE_PROC )
{
// NX Unit Checktop - runtime deconfig each accelerator
int32_t l_rc = SUCCESS;
@@ -1154,23 +999,23 @@ will also be removed. Need to confirm if this code is required anymore.
if ( SUCCESS == l_rc )
{
l_rc = PRDF_HWUDUMP( o_errl, CONTENT_HWNXLCL,
- pfaData.MsDumpInfo.DumpId );
+ dumpId );
}
}
- else if (l_targetType == TYPE_MEMBUF ||
- l_targetType == TYPE_MBA ||
- l_targetType == TYPE_MCS)
+ else if (dumpTrgtType == TYPE_MEMBUF ||
+ dumpTrgtType == TYPE_MBA ||
+ dumpTrgtType == TYPE_MCS)
{
// Centaur Checkstop
- TargetHandle_t centaurHandle = l_dumpHandle;
- if ( TYPE_MCS == l_targetType )
+ TargetHandle_t centaurHandle = dumpTrgt;
+ if ( TYPE_MCS == dumpTrgtType )
{
- centaurHandle = getConnectedChild( l_dumpHandle,
+ centaurHandle = getConnectedChild( dumpTrgt,
TYPE_MEMBUF, 0 );
}
- else if ( TYPE_MBA == l_targetType )
+ else if ( TYPE_MBA == dumpTrgtType )
{
- centaurHandle = getConnectedParent( l_dumpHandle,
+ centaurHandle = getConnectedParent( dumpTrgt,
TYPE_MEMBUF );
}
@@ -1180,29 +1025,29 @@ will also be removed. Need to confirm if this code is required anymore.
if ( SUCCESS != l_rc )
{
PRDF_ERR( PRDF_FUNC"runtime deconfig failed 0x%08x",
- pfaData.MsDumpInfo.DumpId );
+ dumpId );
}
// No unit dump for Centaur checkstop
}
}
else
{
- int32_t l_rc = PRDF_RUNTIME_DECONFIG( l_dumpHandle );
+ int32_t l_rc = PRDF_RUNTIME_DECONFIG( dumpTrgt );
if ( SUCCESS == l_rc )
{
// Call Dump for Proc Core CS
- if ( TYPE_CORE == l_targetType )
+ if ( TYPE_CORE == dumpTrgtType )
{
l_rc = PRDF_HWUDUMP( o_errl,
CONTENT_SINGLE_CORE_CHECKSTOP,
- pfaData.MsDumpInfo.DumpId );
+ dumpId );
}
// FIXME: Will need to add Centaur DMI channel checkstop
// support later.
else
{
PRDF_ERR( PRDF_FUNC"Unsupported dump for target 0x%08x",
- pfaData.MsDumpInfo.DumpId );
+ dumpId );
}
}
}
@@ -1212,9 +1057,7 @@ will also be removed. Need to confirm if this code is required anymore.
// Need to move below here since we'll need
// to pass o_errl to PRDF_HWUDUMP
// for FSP specific SRC handling in the future
-#ifndef __HOSTBOOT_MODULE
- MnfgTrace(esig);
-#endif
+ MnfgTrace( esig, pfaData );
PRDF_GET_PLID(o_errl, dumpPlid);
@@ -1251,9 +1094,7 @@ will also be removed. Need to confirm if this code is required anymore.
else
{
-#ifndef __HOSTBOOT_MODULE
- MnfgTrace(esig);
-#endif
+ MnfgTrace( esig, pfaData );
PRDF_DTRAC( PRDF_FUNC"generating a terminating, or MP Fatal SRC" );
if (ForceTerminate && sdc.IsThermalEvent() ) //MP42 a Start
@@ -1346,7 +1187,6 @@ will also be removed. Need to confirm if this code is required anymore.
PRDF_DTRAC( "PRDTRACE: Flag Values" );
if ( sdc.IsSUE() ) PRDF_DTRAC( "PRDTRACE: SUE Flag Set" );
if ( sdc.IsUERE() ) PRDF_DTRAC( "PRDTRACE: UERE Flag Set" );
- if ( sdc.MaybeCrumb() ) PRDF_DTRAC( "PRDTRACE: Check for PCI Crumb" );
if ( sdc.IsAtThreshold() ) PRDF_DTRAC( "PRDTRACE: AT_THRESHOLD" );
if ( sdc.IsDegraded() ) PRDF_DTRAC( "PRDTRACE: Performance is degraded" );
@@ -1359,7 +1199,6 @@ will also be removed. Need to confirm if this code is required anymore.
if ( sdc.Terminate() ) PRDF_DTRAC( "PRDTRACE: BRING DOWN MACHINE" );
if ( sdc.IsLogging() ) PRDF_DTRAC( "PRDTRACE: Create history log entry" );
if ( sdc.IsFlooding() ) PRDF_DTRAC( "PRDTRACE: Flooding detected" );
- if ( sdc.IsMemorySteered() ) PRDF_DTRAC( "PRDTRACE: Memory steered" );
return o_errl;
@@ -1368,78 +1207,178 @@ will also be removed. Need to confirm if this code is required anymore.
//------------------------------------------------------------------------------
-#ifndef __HOSTBOOT_MODULE
-void ErrDataService::MnfgTrace(ErrorSignature * l_esig )
+void ErrDataService::initPfaData( ServiceDataCollector & i_sdc,
+ uint32_t i_attnType, bool i_deferDeconfig,
+ uint32_t i_errlAct, uint32_t i_errlSev,
+ uint32_t i_prdGardType, uint32_t i_gardState,
+ PfaData & o_pfa, TargetHandle_t & o_dumpTrgt )
{
- char * MnfgFilename = NULL;
- uint32_t l_size = 0;
- const char * MnfgKey[] = {"fstp/P0_Root"};
+ // Dump info
+ o_pfa.msDumpLabel[0] = 0x4D532020; // Start of MS Dump flags
+ o_pfa.msDumpLabel[1] = 0x44554D50; // 'MS DUMP'
- if ( PlatServices::mfgMode() )
+ // FIXME: RTC 51618 Need add DUMP support in Hostboot
+#ifdef __HOSTBOOT_MODULE
+ i_sdc.GetDumpRequest( o_dumpTrgt );
+#else
+ hwTableContent dumpContent;
+ i_sdc.GetDumpRequest( dumpContent, o_dumpTrgt );
+ o_pfa.msDumpInfo.content = dumpContent;
+#endif
+
+ o_pfa.msDumpInfo.id = getHuid(o_dumpTrgt);
+
+ // Error log actions and severity
+ o_pfa.errlActions = i_errlAct;
+ o_pfa.errlSeverity = i_errlSev;
+
+ // PRD Service Data Collector Flags (1:true, 0:false)
+ o_pfa.DUMP = i_sdc.IsDump() ? 1 : 0;
+ o_pfa.UERE = i_sdc.IsUERE() ? 1 : 0;
+ o_pfa.SUE = i_sdc.IsSUE() ? 1 : 0;
+ o_pfa.AT_THRESHOLD = i_sdc.IsAtThreshold() ? 1 : 0;
+ o_pfa.DEGRADED = i_sdc.IsDegraded() ? 1 : 0;
+ o_pfa.SERVICE_CALL = i_sdc.IsServiceCall() ? 1 : 0;
+ o_pfa.TRACKIT = i_sdc.IsMfgTracking() ? 1 : 0;
+ o_pfa.TERMINATE = i_sdc.Terminate() ? 1 : 0;
+ o_pfa.LOGIT = i_sdc.IsLogging() ? 1 : 0;
+ o_pfa.FLOODING = i_sdc.IsFlooding() ? 1 : 0;
+ o_pfa.THERMAL_EVENT = i_sdc.IsThermalEvent() ? 1 : 0;
+ o_pfa.UNIT_CHECKSTOP = i_sdc.IsUnitCS() ? 1 : 0;
+ o_pfa.LAST_CORE_TERMINATE = false; // Will be set later, if needed.
+ o_pfa.USING_SAVED_SDC = i_sdc.IsUsingSavedSdc() ? 1 : 0;
+ o_pfa.DEFER_DECONFIG = i_deferDeconfig ? 1 : 0;
+ o_pfa.CM_MODE = 0; //FIXME RTC 50063
+
+ // Thresholding
+ o_pfa.errorCount = i_sdc.GetHits();
+ o_pfa.threshold = i_sdc.GetThreshold();
+
+ // Misc
+ o_pfa.serviceActionCounter = iv_serviceActionCounter;
+ o_pfa.prdGardErrType = i_prdGardType;
+ o_pfa.hwasGardState = i_gardState;
+
+ // Attention types
+ o_pfa.priAttnType = i_attnType;
+ o_pfa.secAttnType = i_sdc.GetCauseAttentionType();
+
+ // Build the MRU list into PFA data.
+ SDC_MRU_LIST fspmrulist = i_sdc.GetMruList();
+ uint32_t i; // Iterator used to set limited list count.
+ for ( i = 0; i < fspmrulist.size() && i < MruListLIMIT; i++ )
{
- errlHndl_t errorLog = UtilReg::path(MnfgKey, 1, "prdfMfgErrors",
- MnfgFilename, l_size);
- if (errorLog == NULL)
- {
- UtilFile l_mfgFile;
- l_mfgFile.Open(MnfgFilename,"a+");
-
- char l_string[100];
- uint32_t signature = l_esig->getSigId();
- HUID sigChip = l_esig->getChipId();
-
- // Get Entity Path String
- TargetHandle_t l_ptempHandle = PlatServices::getTarget(sigChip);
- TARGETING::EntityPath path;
- PlatServices::getEntityPath(l_ptempHandle, path,
- EntityPath::PATH_PHYSICAL);
- char *epStr = path.toString();
- if (epStr)
- {
- snprintf(l_string, 100, "%s, ", path.toString());
- free(epStr);
- }
+ o_pfa.mruList[i].callout = fspmrulist[i].callout.flatten();
+ o_pfa.mruList[i].type = fspmrulist[i].callout.getType();
+ o_pfa.mruList[i].priority = (uint8_t)fspmrulist[i].priority;
+ }
+ o_pfa.mruListCount = i;
- l_mfgFile.write(l_string, strlen(l_string));
+ // FIXME: RTC 51618 Need add HCDB support in Hostboot
+#ifdef __HOSTBOOT_MODULE
+ o_pfa.hcdbListCount = 0;
+#else
- // Write Signature
- snprintf(l_string, 100, "0x%08x, 0x%08x, ", sigChip, signature);
- l_mfgFile.write(l_string, strlen(l_string));
+ // Build the HCDB list into PFA data
+ HCDB_CHANGE_LIST hcdbList = i_sdc.GetHcdbList();
+ for ( i = 0; i < hcdbList.size() && i < HcdbListLIMIT; i++ )
+ {
+ o_pfa.hcdbList[i].hcdbId = getHuid(hcdbList[i].target);
+ o_pfa.hcdbList[i].compSubType = hcdbList[i].compSubType;
+ o_pfa.hcdbList[i].compType = hcdbList[i].compType;
+ }
+ o_pfa.hcdbListCount = i;
- // Write chip ECID data
- PlatServices::getECIDString(l_ptempHandle, l_string);
- l_mfgFile.write(l_string, strlen(l_string));
+#endif // __HOSTBOOT_MODULE
- // Write MRU list
- uint32_t n = 0;
- while ( (n < MruListLIMIT ) && (n < pfaData.PfaCalloutCount) )
- {
- snprintf(l_string, 100, " , %08x", pfaData.PfaCalloutList[n].Callout);
- l_mfgFile.write(l_string, strlen(l_string));
- ++n;
- }
- snprintf(l_string, 100, "\n");
- l_mfgFile.write(l_string, 1);
+ // Build the signature list into PFA data
+ PRDF_SIGNATURES sigList = i_sdc.GetSignatureList();
+ for ( i = 0; i < sigList.size() && i < SigListLIMIT; i++ )
+ {
+ o_pfa.sigList[i].chipId = getHuid(sigList[i].target);
+ o_pfa.sigList[i].signature = sigList[i].signature;
+ }
+ o_pfa.sigListCount = i;
- l_mfgFile.Close();
+}
+
+//------------------------------------------------------------------------------
+
+void ErrDataService::MnfgTrace( ErrorSignature * i_esig,
+ const PfaData & i_pfaData )
+{
+#ifndef __HOSTBOOT_MODULE
+ // TODO: RTC 79440 Need to add Hostboot support for this function.
+
+ do
+ {
+ if ( !PlatServices::mfgMode() ) break; // Nothing to do
+
+ char * MnfgFilename = NULL;
+ uint32_t l_size = 0;
+ const char * MnfgKey[] = {"fstp/P0_Root"};
+
+ errlHndl_t errl = UtilReg::path( MnfgKey, 1, "prdfMfgErrors",
+ MnfgFilename, l_size );
+ if ( NULL != errl )
+ {
+ PRDF_ERR( "[ErrDataService::MnfgTrace] UtilReg::path() failed" );
+ PRDF_COMMIT_ERRL( errl, ERRL_ACTION_REPORT );
+ break;
}
- else
+
+ UtilFile l_mfgFile;
+ l_mfgFile.Open(MnfgFilename,"a+");
+
+ char l_string[100];
+ uint32_t signature = i_esig->getSigId();
+ HUID sigChip = i_esig->getChipId();
+
+ // Get Entity Path String
+ TargetHandle_t l_ptempHandle = PlatServices::getTarget(sigChip);
+ TARGETING::EntityPath path;
+ PlatServices::getEntityPath(l_ptempHandle, path,
+ EntityPath::PATH_PHYSICAL);
+ char *epStr = path.toString();
+ if (epStr)
{
- PRDF_ERR( "PRDTRACE: MnfgTrace Failure in getting file path" );
- PRDF_COMMIT_ERRL(errorLog, ERRL_ACTION_REPORT);
+ snprintf(l_string, 100, "%s, ", path.toString());
+ free(epStr);
}
- }
- if (MnfgFilename != NULL)
- { //need to free the pathname
- free(MnfgFilename);
- MnfgFilename = NULL;
- }
+ l_mfgFile.write(l_string, strlen(l_string));
- return;
+ // Write Signature
+ snprintf(l_string, 100, "0x%08x, 0x%08x, ", sigChip, signature);
+ l_mfgFile.write(l_string, strlen(l_string));
+
+ // Write chip ECID data
+ PlatServices::getECIDString(l_ptempHandle, l_string);
+ l_mfgFile.write(l_string, strlen(l_string));
+
+ // Write MRU list
+ uint32_t n = 0;
+ while ( (n < MruListLIMIT ) && (n < i_pfaData.mruListCount) )
+ {
+ snprintf( l_string, 100, " , %08x", i_pfaData.mruList[n].callout );
+ l_mfgFile.write( l_string, strlen(l_string) );
+ ++n;
+ }
+ snprintf(l_string, 100, "\n");
+ l_mfgFile.write(l_string, 1);
+
+ l_mfgFile.Close();
+
+ if (MnfgFilename != NULL)
+ { //need to free the pathname
+ free(MnfgFilename);
+ MnfgFilename = NULL;
+ }
+
+ } while (0);
-}
#endif // if not __HOSTBOOT_MODULE
+}
//------------------------------------------------------------------------------
diff --git a/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.H b/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.H
index 8f98e48e4..349f7ac6a 100644
--- a/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.H
+++ b/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.H
@@ -31,10 +31,10 @@
#include <xspprdService.h>
#include <errlentry.H>
#include <iipServiceDataCollector.h>
+#include <prdfPfa5Data.h>
#ifndef __HOSTBOOT_MODULE
#include <tmgt.H>
- #include <prdfPfa5Data.h> //for PfaCalloutListStruct
#endif
namespace PRDF
@@ -64,7 +64,7 @@ class ErrDataService
inline ErrDataService() :
loggingBufferFull(false),
savedLatentSdc(false),
- serviceActionCounter(0),
+ iv_serviceActionCounter(0),
savedPrdReturnCode(0)
{}
@@ -175,17 +175,26 @@ class ErrDataService
*/
bool SdcRetrieve(sdcSaveFlagsEnum i_saveFlag, void * o_buffer);
+ #endif // end if not __HOSTBOOT_MODULE
+
/**
- @brief Add Trace Data to File for Manufacturing.
- @param[in] ErrorSignature
- @return None.
- @pre None.
- @post None.
- @exception None.
+ * @brief Add trace data to file for Manufacturing.
+ * @param i_esig Error signature.
+ * @param i_pfaData The PFA data.
*/
- void MnfgTrace(ErrorSignature * l_esig);
+ void MnfgTrace( ErrorSignature * i_esig, const PfaData & i_pfaData );
- #endif // end if not __HOSTBOOT_MODULE
+ /**
+ * @brief Initializes the PFA data.
+ * @param i_sdc The service data collector.
+ * @param o_pfa The PFA data struct.
+ * @param o_dumpTrgt The DUMP target.
+ */
+ void initPfaData( ServiceDataCollector & i_sdc,
+ uint32_t i_attnType, bool i_deferDeconfig,
+ uint32_t i_errlAct, uint32_t i_errlSev,
+ uint32_t i_prdGardType, uint32_t i_gardState,
+ PfaData & o_pfa, TARGETING::TargetHandle_t & o_dumpTrgt );
private:
@@ -193,7 +202,7 @@ class ErrDataService
bool latentMachineCheck;
bool savedLatentSdc;
- uint32_t serviceActionCounter;
+ uint32_t iv_serviceActionCounter;
int32_t savedPrdReturnCode;
diff --git a/src/usr/diag/prdf/common/framework/service/prdfServiceDataCollector.C b/src/usr/diag/prdf/common/framework/service/prdfServiceDataCollector.C
index f822fb992..625e6aa15 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfServiceDataCollector.C
+++ b/src/usr/diag/prdf/common/framework/service/prdfServiceDataCollector.C
@@ -35,6 +35,7 @@
#include <prdfTrace.H>
#undef prdfServiceDataCollector_C
+using namespace TARGETING;
//------------------------------------------------------------------------------
// User Types, Constants, macros, prototypes, globals
@@ -157,29 +158,38 @@ void ServiceDataCollector::SetCallout( PRDcallout mru,
//------------------------------------------------------------------------------
-void ServiceDataCollector::AddSignatureList(TARGETING::TargetHandle_t i_pTargetHandle,
- uint32_t i_signature)
+void ServiceDataCollector::AddSignatureList( TargetHandle_t i_target,
+ uint32_t i_signature )
{
- bool found = false;
- if(NULL == i_pTargetHandle)
- {
- PRDF_ERR(" ServiceDataCollector::AddSignatureList could not add invalid target ");
- return;
- }
- for(PRDF_SIGNATURES::iterator i = iv_SignatureList.begin();
- i != iv_SignatureList.end(); i++)
+ #define PRDF_FUNC "[ServiceDataCollector::AddSignatureList] "
+
+ do
{
- if((i->iv_pSignatureHandle == i_pTargetHandle) &&
- (i->iv_signature == i_signature))
+ if ( NULL == i_target )
{
- found = true;
+ PRDF_ERR( PRDF_FUNC"Given target is NULL" );
break;
}
- }
- if(found == false)
- {
- iv_SignatureList.push_back(SignatureList(i_pTargetHandle, i_signature));
- }
+
+ bool found = false;
+ for ( PRDF_SIGNATURES::iterator i = iv_SignatureList.begin();
+ i != iv_SignatureList.end(); i++ )
+ {
+ if ( (i->target == i_target) && (i->signature == i_signature) )
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if ( !found )
+ {
+ iv_SignatureList.push_back( SignatureList(i_target, i_signature) );
+ }
+
+ } while (0);
+
+ #undef PRDF_FUNC
}
//------------------------------------------------------------------------------
@@ -232,23 +242,22 @@ uint32_t ServiceDataCollector::Flatten(uint8_t * i_buffer, uint32_t & io_size) c
for(HCDB_CHANGE_LIST::const_iterator i = iv_HcdbChangeList.begin();
i != iv_HcdbChangeList.end(); ++i)
{
- buffer_append(current_ptr,(TARGETING::TargetHandle_t)i->iv_phcdbtargetHandle);
- buffer_append(current_ptr,(uint32_t)i->iv_compSubType);
- buffer_append(current_ptr,(uint32_t)i->iv_compType);
+ buffer_append( current_ptr, i->target );
+ buffer_append( current_ptr, (uint32_t)i->compSubType );
+ buffer_append( current_ptr, (uint32_t)i->compType );
}
buffer_append(current_ptr, iv_SignatureList.size());
for(PRDF_SIGNATURES::const_iterator i = iv_SignatureList.begin();
i != iv_SignatureList.end(); ++i)
{
- buffer_append(current_ptr,(TARGETING::TargetHandle_t)i->iv_pSignatureHandle);
- buffer_append(current_ptr,(uint32_t)i->iv_signature);
+ buffer_append( current_ptr, i->target );
+ buffer_append( current_ptr, i->signature );
}
buffer_append(current_ptr,maskId);
buffer_append(current_ptr,(uint32_t)attentionType);
buffer_append(current_ptr,flags);
buffer_append(current_ptr,hitCount);
buffer_append(current_ptr,threshold);
- buffer_append(current_ptr,reasonCode);
buffer_append(current_ptr,startingPoint);
buffer_append(current_ptr,(uint32_t)errorType);
//@ecdf - Removed ivDumpRequestType.
@@ -334,7 +343,6 @@ ServiceDataCollector & ServiceDataCollector::operator=(
flags = buffer_get32(i_flatdata); //mp02 c from buffer_get16
hitCount = buffer_get8(i_flatdata);
threshold = buffer_get8(i_flatdata);
- reasonCode = buffer_get16(i_flatdata); //mp04 a
startingPoint = buffer_getTarget(i_flatdata);
errorType = (GardResolution::ErrorType)buffer_get32(i_flatdata);
ivDumpRequestContent = (hwTableContent) buffer_get32(i_flatdata); //@ecdf
@@ -360,37 +368,45 @@ ServiceDataCollector & ServiceDataCollector::operator=(
//------------------------------------------------------------------------------
-void ServiceDataCollector::AddChangeForHcdb(TARGETING::TargetHandle_t i_pTargetHandle ,
- hcdb::comp_subtype_t i_testType,
- comp_id_t i_compType)
+void ServiceDataCollector::AddChangeForHcdb( TargetHandle_t i_target,
+ hcdb::comp_subtype_t i_testType,
+ comp_id_t i_compType )
{
- bool found = false;
- //Ensuring the handles are valid before pushing to the list
- if(NULL == i_pTargetHandle)
- {
- PRDF_ERR(" ServiceDataCollector::AddChangeForHcdb could not add invalid target ");
- return;
- }
+ #define PRDF_FUNC "[ServiceDataCollector::AddChangeForHcdb] "
- for(HCDB_CHANGE_LIST::iterator i = iv_HcdbChangeList.begin();
- i != iv_HcdbChangeList.end(); i++)
+ do
{
- if((i->iv_phcdbtargetHandle ==i_pTargetHandle) &&
- (i->iv_compSubType == i_testType) &&
- (i->iv_compType == i_compType))
+ if ( NULL == i_target )
{
- found = true;
+ PRDF_ERR( PRDF_FUNC"Given target is NULL" );
break;
}
- }
- if(found == false)
- {
- iv_HcdbChangeList.push_back( HcdbChangeItem(i_pTargetHandle, i_testType,
- i_compType) );
- }
+
+ bool found = false;
+ for ( HCDB_CHANGE_LIST::iterator i = iv_HcdbChangeList.begin();
+ i != iv_HcdbChangeList.end(); i++ )
+ {
+ if ( (i->target == i_target ) &&
+ (i->compSubType == i_testType) &&
+ (i->compType == i_compType) )
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if ( !found )
+ {
+ iv_HcdbChangeList.push_back( HcdbChangeItem(i_target, i_testType,
+ i_compType) );
+ }
+
+ } while (0);
+
+ #undef PRDF_FUNC
}
+
#endif // #ifndef __HOSTBOOT_MODULE
-//------------------------------------------------------------------------------
} // end namespace PRDF
diff --git a/src/usr/diag/prdf/common/framework/service/xspprdsdbug.C b/src/usr/diag/prdf/common/framework/service/xspprdsdbug.C
index 8cc851ff1..02e56715e 100755
--- a/src/usr/diag/prdf/common/framework/service/xspprdsdbug.C
+++ b/src/usr/diag/prdf/common/framework/service/xspprdsdbug.C
@@ -115,7 +115,7 @@ uint32_t SYSTEM_DEBUG_CLASS::Reinitialize(const AttnList & i_attnList)
* @procedure EPUB_PRC_SP_CODE
*/
PRDF_CREATE_ERRL( g_prd_errlHndl,
- ERRL_SEV_DIAGNOSTIC_ERROR1, // error on diagnostic
+ ERRL_SEV_UNRECOVERABLE, // error on diagnostic
ERRL_ETYPE_NOT_APPLICABLE,
SRCI_MACH_CHECK,
SRCI_NO_ATTR,
diff --git a/src/usr/diag/prdf/prdfErrlUtil.H b/src/usr/diag/prdf/prdfErrlUtil.H
index 8089cabfb..b402545c5 100644
--- a/src/usr/diag/prdf/prdfErrlUtil.H
+++ b/src/usr/diag/prdf/prdfErrlUtil.H
@@ -159,7 +159,6 @@
// defines for enums that are not available in hostboot
// these ERRL sevs are currently not supported in HB
#define ERRL_SEV_PREDICTIVE ERRL_SEV_UNRECOVERABLE
-#define ERRL_SEV_DIAGNOSTIC_ERROR1 ERRL_SEV_UNRECOVERABLE
#define ERRL_SEV_RECOVERED ERRL_SEV_INFORMATIONAL
/**
OpenPOWER on IntegriCloud