summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf
diff options
context:
space:
mode:
authorPrem Shanker Jha <premjha2@in.ibm.com>2015-01-28 23:37:53 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2015-02-16 14:29:06 -0600
commit8fcc72d4f487e90f5d9c5bc333a50a5d25703da6 (patch)
tree20fbc658e4720622923adb9cc24bc41e6a252645 /src/usr/diag/prdf
parent34c58e19162834ff5bb8d4ffb9975b50d5a0770a (diff)
downloadtalos-hostboot-8fcc72d4f487e90f5d9c5bc333a50a5d25703da6.tar.gz
talos-hostboot-8fcc72d4f487e90f5d9c5bc333a50a5d25703da6.zip
PRD: Changed callout for master path errors in TOD.
- For master path errors callout and gard TOD OSC. - Callout and gard TOD Clk endpoint of MDMT. - Enhanced FFDC for TOD step errors. Change-Id: Iaa461d3c2fbf0d051159ef7c6690cb18acd9d465 Squashed: I2ffb0b578ea3c9ccf936f23d92fdadaaa37289b1 RTC: 116192 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/15365 Tested-by: Jenkins Server Reviewed-by: Bilicon Patil <bilpatil@in.ibm.com> Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com> Reviewed-by: Christopher T. Phan <cphan@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com> Reviewed-by: Zane Shelley <zshelle@us.ibm.com> Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/15741
Diffstat (limited to 'src/usr/diag/prdf')
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfTargetServices.C35
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfLogParse_common.C4
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfParserEnums.H3
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfPlatProcConst.H (renamed from src/usr/diag/prdf/common/plat/pegasus/prdfPlatProcConst.H)64
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfProcLogParse.C85
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfProcLogParse.H5
6 files changed, 178 insertions, 18 deletions
diff --git a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C
index 0c3b4e49a..ec43fa445 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C
+++ b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C
@@ -423,19 +423,20 @@ struct conn_t
case TYPE_NODE: order = 1; break;
case TYPE_OSC: order = 2; break;
case TYPE_PROC: order = 3; break;
- case TYPE_PORE: order = 4; break;
- case TYPE_NX: order = 5; break;
- case TYPE_OCC: order = 6; break;
- case TYPE_PSI: order = 7; break;
- case TYPE_EX: order = 8; break;
- case TYPE_XBUS: order = 9; break;
- case TYPE_ABUS: order = 10; break;
- case TYPE_PCI: order = 11; break;
- case TYPE_MCS: order = 12; break;
- case TYPE_MEMBUF: order = 13; break;
- case TYPE_L4: order = 14; break;
- case TYPE_MBA: order = 15; break;
- case TYPE_DIMM: order = 16; break;
+ case TYPE_TODCLK: order = 4; break;
+ case TYPE_PORE: order = 5; break;
+ case TYPE_NX: order = 6; break;
+ case TYPE_OCC: order = 7; break;
+ case TYPE_PSI: order = 8; break;
+ case TYPE_EX: order = 9; break;
+ case TYPE_XBUS: order = 10; break;
+ case TYPE_ABUS: order = 11; break;
+ case TYPE_PCI: order = 12; break;
+ case TYPE_MCS: order = 13; break;
+ case TYPE_MEMBUF: order = 14; break;
+ case TYPE_L4: order = 15; break;
+ case TYPE_MBA: order = 16; break;
+ case TYPE_DIMM: order = 17; break;
default: ;
}
@@ -471,6 +472,7 @@ int32_t getAssociationType( TARGETING::TargetHandle_t i_target,
{ TYPE_NODE, TYPE_SYS, TargetService::PARENT_BY_AFFINITY },
{ TYPE_NODE, TYPE_OSC, TargetService::CHILD_BY_AFFINITY },
{ TYPE_NODE, TYPE_PROC, TargetService::CHILD_BY_AFFINITY },
+ { TYPE_NODE, TYPE_TODCLK, TargetService::CHILD_BY_AFFINITY },
{ TYPE_NODE, TYPE_OCC, TargetService::CHILD_BY_AFFINITY },
{ TYPE_NODE, TYPE_PSI, TargetService::CHILD_BY_AFFINITY },
{ TYPE_NODE, TYPE_EX, TargetService::CHILD_BY_AFFINITY },
@@ -485,8 +487,10 @@ int32_t getAssociationType( TARGETING::TargetHandle_t i_target,
{ TYPE_OSC, TYPE_SYS, TargetService::PARENT_BY_AFFINITY },
{ TYPE_OSC, TYPE_NODE, TargetService::PARENT_BY_AFFINITY },
+ { TYPE_OSC, TYPE_TODCLK, TargetService::CHILD_BY_AFFINITY },
{ TYPE_PROC, TYPE_NODE, TargetService::PARENT_BY_AFFINITY },
+ { TYPE_PROC, TYPE_TODCLK, TargetService::CHILD_BY_AFFINITY },
{ TYPE_PROC, TYPE_PORE, TargetService::CHILD_BY_AFFINITY },
{ TYPE_PROC, TYPE_NX, TargetService::CHILD_BY_AFFINITY },
{ TYPE_PROC, TYPE_OCC, TargetService::CHILD_BY_AFFINITY },
@@ -501,6 +505,10 @@ int32_t getAssociationType( TARGETING::TargetHandle_t i_target,
{ TYPE_PROC, TYPE_MBA, TargetService::CHILD_BY_AFFINITY },
{ TYPE_PROC, TYPE_DIMM, TargetService::CHILD_BY_AFFINITY },
+ { TYPE_TODCLK, TYPE_NODE, TargetService::PARENT_BY_AFFINITY },
+ { TYPE_TODCLK, TYPE_PROC, TargetService::PARENT_BY_AFFINITY },
+ { TYPE_TODCLK, TYPE_OSC, TargetService::PARENT_BY_AFFINITY },
+
{ TYPE_PORE, TYPE_PROC, TargetService::PARENT_BY_AFFINITY },
{ TYPE_NX, TYPE_PROC, TargetService::PARENT_BY_AFFINITY },
@@ -553,6 +561,7 @@ int32_t getAssociationType( TARGETING::TargetHandle_t i_target,
{ TYPE_DIMM, TYPE_MCS, TargetService::PARENT_BY_AFFINITY },
{ TYPE_DIMM, TYPE_MEMBUF, TargetService::PARENT_BY_AFFINITY },
{ TYPE_DIMM, TYPE_MBA, TargetService::PARENT_BY_AFFINITY },
+
};
do
diff --git a/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C b/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C
index 689431bcc..c24e1e3ae 100644
--- a/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C
+++ b/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C
@@ -381,6 +381,10 @@ bool parseCaptureData( void * i_buffer, uint32_t i_buflen,
{
parseSlwFfdcData( sigData, sigDataSize, i_parser );
}
+ else if ( Util::hashString("TOD_ERROR_DATA") == sigId)
+ {
+ parseTodFfdcData( sigData, sigDataSize, i_parser );
+ }
else if ( (0 != sigDataSize) && (sizeof(uint64_t) >= sigDataSize) )
{
// Print one reg/line if the data size <= 8 bytes
diff --git a/src/usr/diag/prdf/common/plugins/prdfParserEnums.H b/src/usr/diag/prdf/common/plugins/prdfParserEnums.H
index bcab4da4c..94ae251b6 100644
--- a/src/usr/diag/prdf/common/plugins/prdfParserEnums.H
+++ b/src/usr/diag/prdf/common/plugins/prdfParserEnums.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2013,2014 */
+/* Contributors Listed Below - COPYRIGHT 2013,2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -68,6 +68,7 @@ enum PositionBounds
MAX_L4_PER_MEMBUF = 1,
MAX_PCIE_OSC_PER_NODE = 2,
+ MAX_TOD_OSC_PER_NODE = 2,
INVALID_POSITION_BOUND = 0xffffffff,
};
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfPlatProcConst.H b/src/usr/diag/prdf/common/plugins/prdfPlatProcConst.H
index c759fe4c5..de8c6fa81 100644
--- a/src/usr/diag/prdf/common/plat/pegasus/prdfPlatProcConst.H
+++ b/src/usr/diag/prdf/common/plugins/prdfPlatProcConst.H
@@ -1,11 +1,13 @@
/* IBM_PROLOG_BEGIN_TAG */
/* This is an automatically generated prolog. */
/* */
-/* $Source: src/usr/diag/prdf/common/plat/pegasus/prdfPlatProcConst.H $ */
+/* $Source: src/usr/diag/prdf/common/plugins/prdfPlatProcConst.H $ */
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2013,2014 */
+/* Contributors Listed Below - COPYRIGHT 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. */
@@ -55,6 +57,64 @@ enum Register
LAST_TOD_REG = 8,
};
+/**
+ * @brief summarizes error analysis for a TOD topology.
+ */
+enum
+{
+ NO_TOD_ERROR = 0,
+ MASTER_PATH_ERROR = 1,
+ INTERNAL_PATH_ERROR = 2,
+ SLAVE_PATH_NETWORK_ERROR = 3,
+ UNKNOWN_TOD_ERROR = 4,
+ LAST_TOD_ERROR = 5,
+};
+
+/**
+ * @brief TOD error analysis data to be added to special user section of e-log.
+ */
+struct TodErrorSummary
+{
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+
+ uint32_t reserved :13;
+ uint32_t backUpTopologyMastPath :2; //master path for backup topology
+ uint32_t activeTopologyMastPath :2; // master path for active topology
+ uint32_t backUpTopologySummary :3; // backup topology error status
+ uint32_t activeTopologySummary :3; // active topology error status
+ uint32_t todOscCnt :4; // functional TOD OSC count in system
+ uint32_t activeTopology :1; // Topology acting as Active
+ uint32_t topologyResetRequested :1; // topology reset request status
+ uint32_t topologySwitchByPhyp :1; // topology switch event detected
+ uint32_t phypDetectedTodError :1; // TOD error detected by Phyp
+ uint32_t hardwareSwitchFlip :1; // Master Path Failover by Hw
+
+#else
+
+ uint32_t hardwareSwitchFlip :1; // Master Path Failover by Hw
+ uint32_t phypDetectedTodError :1; // TOD error detected by Phyp
+ uint32_t topologySwitchByPhyp :1; // topology switch event detected
+ uint32_t topologyResetRequested :1; // topology reset request status
+ uint32_t activeTopology :1; // Topology acting as Active
+ uint32_t todOscCnt :4; // functional TOD OSC count in system
+ uint32_t activeTopologySummary :3; // active topology error status
+ uint32_t backUpTopologySummary :3; // backup topology error status
+ uint32_t activeTopologyMastPath :2; // master path for active topology
+ uint32_t backUpTopologyMastPath :2; //master path for backup topology
+ uint32_t reserved :13;
+
+#endif
+ uint32_t activeMdmt; // HUID of active mdmt
+ uint32_t backUpMdmt; // HUID of backup MDMT
+
+ TodErrorSummary():
+ activeMdmt(0),
+ backUpMdmt(0)
+ {};
+
+};
+
+
}//end namespace TOD
} // end namespace PRDF
diff --git a/src/usr/diag/prdf/common/plugins/prdfProcLogParse.C b/src/usr/diag/prdf/common/plugins/prdfProcLogParse.C
index b4be8490a..b377e4917 100644
--- a/src/usr/diag/prdf/common/plugins/prdfProcLogParse.C
+++ b/src/usr/diag/prdf/common/plugins/prdfProcLogParse.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2014 */
+/* Contributors Listed Below - COPYRIGHT 2014,2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -34,6 +34,7 @@
#include <iipconst.h>
#include <prdfParserEnums.H>
#include <netinet/in.h>
+#include <prdfPlatProcConst.H>
namespace PRDF
{
@@ -46,6 +47,7 @@ namespace FSP
{
using namespace PARSER;
+using namespace TOD;
//------------------------------------------------------------------------------
@@ -86,6 +88,87 @@ bool parseSlwFfdcData( uint8_t * i_buffer, uint32_t i_buflen,
//------------------------------------------------------------------------------
+bool parseTodFfdcData( uint8_t * i_buffer, uint32_t i_buflen,
+ ErrlUsrParser & i_parser )
+{
+ char data[DATA_SIZE] = "";
+ bool o_rc = true;
+ i_parser.PrintString("TOD Error Data", "" );
+ TodErrorSummary errorData;
+ size_t szData = sizeof(TodErrorSummary);
+
+ do
+ {
+ if( NULL == i_buffer )
+ {
+ o_rc = false;
+ break;
+ }
+
+ if( i_buflen < szData )
+ {
+ o_rc = false;
+ i_parser.PrintHexDump(i_buffer, i_buflen);
+ break;
+ }
+
+ memcpy( &errorData, i_buffer, szData );
+
+ i_parser.PrintBool( "Master Path Switch by HW",
+ errorData.hardwareSwitchFlip );
+
+ i_parser.PrintBool( "Host Detected TOD Error",
+ errorData.phypDetectedTodError );
+
+ i_parser.PrintBool( "Host Switched Topology",
+ errorData.topologySwitchByPhyp );
+
+ i_parser.PrintBool( "Topology Reset Requested",
+ errorData.topologyResetRequested );
+
+ i_parser.PrintString( "Active Topology",
+ errorData.activeTopology ?
+ "Primary Config" : "Secondary Config" );
+
+ i_parser.PrintNumber( "Functional TOD Osc", "0x%08x",
+ errorData.todOscCnt );
+
+ snprintf(data, DATA_SIZE, "0x%08x", errorData.activeMdmt );
+ i_parser.PrintString( "Active MDMT", data );
+
+ snprintf(data, DATA_SIZE, "0x%08x", errorData.backUpMdmt );
+ i_parser.PrintString( "Backup MDMT", data );
+
+ char calloutSummary[LAST_TOD_ERROR][HEADER_SIZE] =
+ { "No Error",
+ "Master Path Error",
+ "Internal Path Error",
+ "Slave Path Network Error",
+ "Unknown TOD Error" };
+
+ errorData.activeTopologySummary =
+ errorData.activeTopologySummary % LAST_TOD_ERROR;
+ errorData.backUpTopologySummary =
+ errorData.backUpTopologySummary % LAST_TOD_ERROR;
+
+ i_parser.PrintString( "Active Topology Summary",
+ calloutSummary[errorData.activeTopologySummary] );
+
+ i_parser.PrintString( "Active Topology M Path",
+ errorData.activeTopologyMastPath == 0 ?
+ "Path 0" : "Path 1" );
+
+ i_parser.PrintString( "Backup Topology Summary",
+ calloutSummary[errorData.backUpTopologySummary] );
+
+ i_parser.PrintString( "Backup Topology M Path",
+ errorData.backUpTopologyMastPath == 0 ?
+ "Path 0" : "Path 1" );
+ }while(0);
+
+ return o_rc;
+}
+
} // namespace FSP/HOSTBBOT
} // end namespace PRDF
diff --git a/src/usr/diag/prdf/common/plugins/prdfProcLogParse.H b/src/usr/diag/prdf/common/plugins/prdfProcLogParse.H
index cc1fa3d14..b6d8f0cb6 100644
--- a/src/usr/diag/prdf/common/plugins/prdfProcLogParse.H
+++ b/src/usr/diag/prdf/common/plugins/prdfProcLogParse.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2014 */
+/* Contributors Listed Below - COPYRIGHT 2014,2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -52,6 +52,9 @@ namespace FSP
bool parseSlwFfdcData( uint8_t * i_buffer, uint32_t i_buflen,
ErrlUsrParser & i_parser );
+bool parseTodFfdcData( uint8_t * i_buffer, uint32_t i_buflen,
+ ErrlUsrParser & i_parser );
+
} // namespace FSP/HOSTBBOT
} // end namespace PRDF
OpenPOWER on IntegriCloud