diff options
author | Prem Shanker Jha <premjha2@in.ibm.com> | 2015-01-28 23:37:53 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2015-02-16 14:29:06 -0600 |
commit | 8fcc72d4f487e90f5d9c5bc333a50a5d25703da6 (patch) | |
tree | 20fbc658e4720622923adb9cc24bc41e6a252645 /src/usr/diag/prdf | |
parent | 34c58e19162834ff5bb8d4ffb9975b50d5a0770a (diff) | |
download | talos-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-x | src/usr/diag/prdf/common/framework/service/prdfTargetServices.C | 35 | ||||
-rw-r--r-- | src/usr/diag/prdf/common/plugins/prdfLogParse_common.C | 4 | ||||
-rw-r--r-- | src/usr/diag/prdf/common/plugins/prdfParserEnums.H | 3 | ||||
-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.C | 85 | ||||
-rw-r--r-- | src/usr/diag/prdf/common/plugins/prdfProcLogParse.H | 5 |
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 |