summaryrefslogtreecommitdiffstats
path: root/src/usr/diag
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2014-08-25 18:51:29 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-08-27 16:02:50 -0500
commita0fa16f1a2892a5db2382d7008033f11d3194f42 (patch)
tree3b0b7ad59aa3cd891b69549196f962ab4f30ac52 /src/usr/diag
parent072c84bc61fb5df6da5986e9ed7b136e01d6ab05 (diff)
downloadtalos-hostboot-a0fa16f1a2892a5db2382d7008033f11d3194f42.tar.gz
talos-hostboot-a0fa16f1a2892a5db2382d7008033f11d3194f42.zip
PRD: add support for raw card C
The raw card type is only needed for DRAM site location information in the error log parser. In addition to adding support for raw card C, I fixed and issue where the functional code will fail if a raw card type is not supported. Change-Id: I0bc2411d6ade118d48eaab33fdeeb54d1c9d2dba CQ: SW275115 Backport: release-fips811 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/13000 Reviewed-by: Christopher T. Phan <cphan@us.ibm.com> Tested-by: Jenkins Server 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/13021
Diffstat (limited to 'src/usr/diag')
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C74
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H9
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfCenLogParse.C224
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfParserEnums.H14
4 files changed, 285 insertions, 36 deletions
diff --git a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C
index dc2f2b15e..a564c8c5c 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C
+++ b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C
@@ -710,70 +710,96 @@ int32_t getMemBufRawCardType( TargetHandle_t i_mba,
{
#define PRDF_FUNC "[PlatServices::getMemBufRawCardType] "
+ int32_t o_rc = SUCCESS;
+
o_cardType = WIRING_INVALID;
- uint8_t l_cardType = WIRING_INVALID;
- int32_t o_rc = FAIL;
do
{
- if( TYPE_MBA != getTargetType( i_mba ) )
+ if ( TYPE_MBA != getTargetType(i_mba) )
{
- PRDF_ERR( PRDF_FUNC" Invalid target 0x%08x",getHuid( i_mba ) );
+ PRDF_ERR( PRDF_FUNC"Target 0x%08x is not an MBA", getHuid(i_mba) );
+ o_rc = FAIL; break;
+ }
+
+ bool isCenDimm = false;
+ o_rc = isMembufOnDimm( i_mba, isCenDimm );
+ if ( SUCCESS != o_rc )
+ {
+ PRDF_ERR( PRDF_FUNC"isMembufOnDimm() failed on MBA 0x%08x",
+ getHuid(i_mba) );
break;
}
- TargetHandleList l_dimmList = getConnected( i_mba, TYPE_DIMM );
+ if ( !isCenDimm )
+ {
+ PRDF_ERR( PRDF_FUNC"MBA 0x%08x is not on a buffered DIMM",
+ getHuid(i_mba) );
+ o_rc = FAIL; break;
+ }
- if( 0 == l_dimmList.size() )
+ TargetHandleList l_dimmList = getConnected( i_mba, TYPE_DIMM );
+ if ( 0 == l_dimmList.size() )
{
- PRDF_ERR( PRDF_FUNC " No DIMM connected with mba 0x%08x",
- getHuid( i_mba ) );
- break;
+ PRDF_ERR( PRDF_FUNC"No DIMMs connected to MBA 0x%08x",
+ getHuid(i_mba) );
+ o_rc = FAIL; break;
}
+ // All logical DIMMs connected to this MBA are on the same card as the
+ // MBA so we can use any connected DIMM to query for the raw card type.
+
errlHndl_t errl = NULL;
fapi::Target fapiDimm = getFapiTarget( l_dimmList[0] );
+ uint8_t l_cardType = WIRING_INVALID;
PRD_FAPI_TO_ERRL( errl,
fapi::platAttrSvc::fapiPlatGetSpdModspecComRefRawCard,
&fapiDimm,
l_cardType );
- if( NULL != errl )
+ if ( NULL != errl )
{
- PRDF_ERR( PRDF_FUNC" fapiPlatGetSpdModspecComRefRawCard failed for"
- "DIMM 0x%08X", getHuid( l_dimmList[0] ) );
+ PRDF_ERR( PRDF_FUNC"fapiPlatGetSpdModspecComRefRawCard() failed on"
+ "DIMM 0x%08X", getHuid(l_dimmList[0]) );
PRDF_COMMIT_ERRL( errl, ERRL_ACTION_REPORT );
- break;
+ o_rc = FAIL; break;
}
- switch( l_cardType )
+ // Centaur raw card types are only used for DRAM site locations. If an
+ // invalid wiring type is passed to the error log parser, the parser
+ // will simply print out the symbol and other data instead of
+ // translating it into a DRAM site location. Therefore, do not fail out
+ // if the raw card is currently not supported. Otherwise, there may be
+ // some downstream effects to the functional (non-parsing) code for
+ // data that is only needed for parsing.
+
+ switch ( l_cardType )
{
- case ENUM_ATTR_SPD_MODSPEC_COM_REF_RAW_CARD_A :
+ case ENUM_ATTR_SPD_MODSPEC_COM_REF_RAW_CARD_A:
o_cardType = CEN_TYPE_A;
break;
- case ENUM_ATTR_SPD_MODSPEC_COM_REF_RAW_CARD_B :
+ case ENUM_ATTR_SPD_MODSPEC_COM_REF_RAW_CARD_B:
o_cardType = CEN_TYPE_B;
break;
+ case ENUM_ATTR_SPD_MODSPEC_COM_REF_RAW_CARD_C:
+ o_cardType = CEN_TYPE_C;
+ break;
+
case ENUM_ATTR_SPD_MODSPEC_COM_REF_RAW_CARD_D:
o_cardType = CEN_TYPE_D;
break;
default:
- o_cardType = WIRING_INVALID;
- break;
+ o_cardType = WIRING_INVALID; // Anything unsupported
}
- }while(0);
-
- if( WIRING_INVALID != o_cardType )
- {
- o_rc = SUCCESS;
- }
+ } while(0);
return o_rc;
+
#undef PRDF_FUNC
}
diff --git a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H
index bfb18de9b..5b0f4f1e5 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H
+++ b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H
@@ -350,10 +350,11 @@ int32_t getDimmSpareConfig( TARGETING::TargetHandle_t i_mba, CenRank i_rank,
uint8_t i_ps, uint8_t & o_spareConfig );
/**
- * @brief Returns the memory buffer raw card type.
- * @param i_mbaTarget an MBA target.
- * @param o_wiringType Card Type/ Wiring type of DIMM
- * @return SUCCESS for a valid card type, FAIL otherwise.
+ * @brief Returns the raw card type of a buffered DIMM.
+ * @param i_mbaTarget An MBA target. This MBA must be on a buffered DIMM.
+ * @param o_wiringType The DIMM's raw card type. Will return WIRING_INVALID if
+ * the raw card type currently is not supported.
+ * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise.
*/
int32_t getMemBufRawCardType( TARGETING::TargetHandle_t i_mbaTarget,
CEN_SYMBOL::WiringType & o_wiringType );
diff --git a/src/usr/diag/prdf/common/plugins/prdfCenLogParse.C b/src/usr/diag/prdf/common/plugins/prdfCenLogParse.C
index 5314b9ff8..428850151 100644
--- a/src/usr/diag/prdf/common/plugins/prdfCenLogParse.C
+++ b/src/usr/diag/prdf/common/plugins/prdfCenLogParse.C
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2003,2014 */
+/* Contributors Listed Below - COPYRIGHT 2013,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. */
@@ -454,7 +456,6 @@ static const char ** dramSiteMap_rcA
//##############################################################################
static const char * dramSiteCardBPortARank02[] =
-
{
"DA07.d3", "DA07.d0", "DA07.d2", "DA07.d1",
"DA02.d2", "DA02.d0", "DA02.d3", "DA02.d1",
@@ -589,7 +590,7 @@ static const char * dramSiteCardBPortBRank46[] =
"DB37.d2", "DB37.d3", "DB37.d0", "DB37.d1",
"DB21.d0", "DB21.d2", "DB21.d1", "DB21.d3",
- "DB35.d3", "DB35.d0", "DB35.d1", "DB35.d2",
+ "DB35.d3", "DB35.d0", "DB35.d1", "DB35.d2",
"DB31.d1", "DB31.d3", "DB31.d0", "DB31.d2",
"DB39.d1", "DB39.d3", "DB39.d0", "DB39.d2",
@@ -857,6 +858,216 @@ static const char ** dramSiteMap_rcB
};
//##############################################################################
+// DRAM site tables for RAW CARD C
+//##############################################################################
+
+static const char * dramSiteCardCPortARank02[] =
+{
+ "DA12.d0", "DA12.d3", "DA12.d2", "DA12.d1",
+ "DA02.d3", "DA02.d2", "DA02.d1", "DA02.d0",
+ "DA05.d3", "DA05.d0", "DA05.d2", "DA05.d1",
+ "DA15.d3", "DA15.d0", "DA15.d1", "DA15.d2",
+ "DA17.d3", "DA17.d1", "DA17.d0", "DA17.d2",
+ "DA07.d0", "DA07.d2", "DA07.d3", "DA07.d1",
+ "DA18.d0", "DA18.d3", "DA18.d1", "DA18.d2",
+ "DA06.d3", "DA06.d0", "DA06.d1", "DA06.d2",
+ "DA03.d1", "DA03.d3", "DA03.d0", "DA03.d2",
+ "DA13.d1", "DA13.d2", "DA13.d3", "DA13.d0",
+ "DA16.d2", "DA16.d0", "DA16.d1", "DA16.d3",
+ "DA08.d0", "DA08.d1", "DA08.d2", "DA08.d3",
+ "DA14.d0", "DA14.d3", "DA14.d1", "DA14.d2",
+ "DA04.d1", "DA04.d0", "DA04.d3", "DA04.d2",
+ "DA09.d3", "DA09.d2", "DA09.d1", "DA09.d0",
+ "DA19.d0", "DA19.d3", "DA19.d2", "DA19.d1",
+ "DA01.d2", "DA01.d3", "DA01.d1", "DA01.d0",
+ "DA11.d3", "DA11.d1", "DA11.d0", "DA11.d2",
+ "DA1SP.d2", "DA1SP.d3", "DA1SP.d0", "DA1SP.d1",
+ "", "", "", "",
+};
+
+//------------------------------------------------------------------------------
+
+static const char * dramCardCPortARank02[] =
+{
+ "DA12", "DA02", "DA05", "DA15", "DA17", "DA07", "DA18", "DA06",
+ "DA03", "DA13", "DA16", "DA08", "DA14", "DA04", "DA09", "DA19",
+ "DA01", "DA11", "DA1SP", "",
+};
+
+//------------------------------------------------------------------------------
+
+static const char * dramSiteCardCPortBRank02[] =
+{
+ "DB08.d1", "DB08.d0", "DB08.d2", "DB08.d3",
+ "DB18.d3", "DB18.d2", "DB18.d0", "DB18.d1",
+ "DB12.d1", "DB12.d0", "DB12.d2", "DB12.d3",
+ "DB02.d2", "DB02.d3", "DB02.d0", "DB02.d1",
+ "DB04.d3", "DB04.d1", "DB04.d2", "DB04.d0",
+ "DB14.d2", "DB14.d0", "DB14.d1", "DB14.d3",
+ "DB13.d0", "DB13.d2", "DB13.d1", "DB13.d3",
+ "DB03.d2", "DB03.d1", "DB03.d0", "DB03.d3",
+ "DB17.d2", "DB17.d0", "DB17.d3", "DB17.d1",
+ "DB07.d3", "DB07.d2", "DB07.d1", "DB07.d0",
+ "DB05.d1", "DB05.d2", "DB05.d3", "DB05.d0",
+ "DB15.d2", "DB15.d0", "DB15.d3", "DB15.d1",
+ "DB09.d2", "DB09.d3", "DB09.d1", "DB09.d0",
+ "DB19.d0", "DB19.d2", "DB19.d1", "DB19.d3",
+ "DB01.d3", "DB01.d1", "DB01.d2", "DB01.d0",
+ "DB11.d2", "DB11.d1", "DB11.d0", "DB11.d3",
+ "DB06.d0", "DB06.d2", "DB06.d3", "DB06.d1",
+ "DB16.d1", "DB16.d3", "DB16.d2", "DB16.d0",
+ "DB1SP.d2", "DB1SP.d3", "DB1SP.d1", "DB1SP.d0",
+ "", "", "", "",
+};
+
+//------------------------------------------------------------------------------
+
+static const char * dramCardCPortBRank02[] =
+{
+ "DB08", "DB18", "DB12", "DB02", "DB04", "DB14", "DB13", "DB03",
+ "DB17", "DB07", "DB05", "DB15", "DB09", "DB19", "DB01", "DB11",
+ "DB06", "DB16", "DB1SP", "",
+};
+
+//------------------------------------------------------------------------------
+
+static const char * dramSiteCardCPortCRank02[] =
+{
+ "DC13.d3", "DC13.d1", "DC13.d0", "DC13.d2",
+ "DC03.d0", "DC03.d2", "DC03.d3", "DC03.d1",
+ "DC04.d3", "DC04.d0", "DC04.d1", "DC04.d2",
+ "DC14.d1", "DC14.d3", "DC14.d2", "DC14.d0",
+ "DC06.d2", "DC06.d1", "DC06.d3", "DC06.d0",
+ "DC16.d2", "DC16.d0", "DC16.d1", "DC16.d3",
+ "DC09.d1", "DC09.d2", "DC09.d3", "DC09.d0",
+ "DC19.d3", "DC19.d0", "DC19.d1", "DC19.d2",
+ "DC12.d2", "DC12.d0", "DC12.d1", "DC12.d3",
+ "DC02.d1", "DC02.d3", "DC02.d0", "DC02.d2",
+ "DC17.d2", "DC17.d0", "DC17.d3", "DC17.d1",
+ "DC07.d1", "DC07.d3", "DC07.d2", "DC07.d0",
+ "DC05.d1", "DC05.d3", "DC05.d0", "DC05.d2",
+ "DC15.d2", "DC15.d0", "DC15.d3", "DC15.d1",
+ "DC01.d0", "DC01.d1", "DC01.d2", "DC01.d3",
+ "DC11.d3", "DC11.d0", "DC11.d1", "DC11.d2",
+ "DC08.d3", "DC08.d1", "DC08.d2", "DC08.d0",
+ "DC18.d0", "DC18.d2", "DC18.d1", "DC18.d3",
+ "DC1SP.d3", "DC1SP.d0", "DC1SP.d1", "DC1SP.d2",
+ "", "", "", "",
+};
+
+//------------------------------------------------------------------------------
+
+static const char * dramCardCPortCRank02[] =
+{
+ "DC13", "DC03", "DC04", "DC14", "DC06", "DC16", "DC09", "DC19",
+ "DC12", "DC02", "DC17", "DC07", "DC05", "DC15", "DC01", "DC11",
+ "DC08", "DC18", "DC1SP", "",
+};
+
+//------------------------------------------------------------------------------
+
+static const char * dramSiteCardCPortDRank02[] =
+{
+ "DD06.d2", "DD06.d1", "DD06.d0", "DD06.d3",
+ "DD16.d3", "DD16.d0", "DD16.d2", "DD16.d1",
+ "DD05.d3", "DD05.d1", "DD05.d2", "DD05.d0",
+ "DD15.d0", "DD15.d2", "DD15.d3", "DD15.d1",
+ "DD13.d3", "DD13.d0", "DD13.d1", "DD13.d2",
+ "DD03.d1", "DD03.d3", "DD03.d2", "DD03.d0",
+ "DD09.d1", "DD09.d3", "DD09.d0", "DD09.d2",
+ "DD19.d2", "DD19.d0", "DD19.d3", "DD19.d1",
+ "DD12.d0", "DD12.d3", "DD12.d1", "DD12.d2",
+ "DD02.d2", "DD02.d0", "DD02.d1", "DD02.d3",
+ "DD18.d3", "DD18.d1", "DD18.d0", "DD18.d2",
+ "DD08.d2", "DD08.d0", "DD08.d3", "DD08.d1",
+ "DD04.d2", "DD04.d1", "DD04.d3", "DD04.d0",
+ "DD14.d2", "DD14.d0", "DD14.d3", "DD14.d1",
+ "DD11.d2", "DD11.d0", "DD11.d1", "DD11.d3",
+ "DD01.d3", "DD01.d1", "DD01.d0", "DD01.d2",
+ "DD17.d3", "DD17.d2", "DD17.d1", "DD17.d0",
+ "DD07.d0", "DD07.d3", "DD07.d1", "DD07.d2",
+ "DD1SP.d1", "DD1SP.d3", "DD1SP.d2", "DD1SP.d0",
+ "", "", "", "",
+};
+
+//------------------------------------------------------------------------------
+
+static const char * dramCardCPortDRank02[] =
+{
+ "DD06", "DD16", "DD05", "DD15", "DD13", "DD03", "DD09", "DD19",
+ "DD12", "DD02", "DD18", "DD08", "DD04", "DD14", "DD11", "DD01",
+ "DD17", "DD07", "DD1SP", "",
+};
+
+//------------------------------------------------------------------------------
+
+static const char ** dqSiteMap_rcC
+ [MAX_MBA_PER_MEMBUF][PORT_SLCT_PER_MBA][MASTER_RANKS_PER_MBA] =
+{
+ { // MBA 0
+ { // Port 0
+ dramSiteCardCPortARank02, NULL, // Ranks 0-1
+ dramSiteCardCPortARank02, NULL, // Ranks 2-3
+ NULL, NULL, // Ranks 4-5
+ NULL, NULL, // Ranks 6-7
+ },
+ { // Port 1
+ dramSiteCardCPortBRank02, NULL, // Ranks 0-1
+ dramSiteCardCPortBRank02, NULL, // Ranks 2-3
+ NULL, NULL, // Ranks 4-5
+ NULL, NULL, // Ranks 6-7
+ },
+ },
+ { // MBA 1
+ { // Port 0
+ dramSiteCardCPortCRank02, NULL, // Ranks 0-1
+ dramSiteCardCPortCRank02, NULL, // Ranks 2-3
+ NULL, NULL, // Ranks 4-5
+ NULL, NULL, // Ranks 6-7
+ },
+ { // Port 1
+ dramSiteCardCPortDRank02, NULL, // Ranks 0-1
+ dramSiteCardCPortDRank02, NULL, // Ranks 2-3
+ NULL, NULL, // Ranks 4-5
+ NULL, NULL, // Ranks 6-7
+ },
+ },
+};
+
+static const char ** dramSiteMap_rcC
+ [MAX_MBA_PER_MEMBUF][PORT_SLCT_PER_MBA][MASTER_RANKS_PER_MBA] =
+{
+ { // MBA 0
+ { // Port 0
+ dramCardCPortARank02, NULL, // Ranks 0-1
+ dramCardCPortARank02, NULL, // Ranks 2-3
+ NULL, NULL, // Ranks 4-5
+ NULL, NULL, // Ranks 6-7
+ },
+ { // Port 1
+ dramCardCPortBRank02, NULL, // Ranks 0-1
+ dramCardCPortBRank02, NULL, // Ranks 2-3
+ NULL, NULL, // Ranks 4-5
+ NULL, NULL, // Ranks 6-7
+ },
+ },
+ { // MBA 1
+ { // Port 0
+ dramCardCPortCRank02, NULL, // Ranks 0-1
+ dramCardCPortCRank02, NULL, // Ranks 2-3
+ NULL, NULL, // Ranks 4-5
+ NULL, NULL, // Ranks 6-7
+ },
+ { // Port 1
+ dramCardCPortDRank02, NULL, // Ranks 0-1
+ dramCardCPortDRank02, NULL, // Ranks 2-3
+ NULL, NULL, // Ranks 4-5
+ NULL, NULL, // Ranks 6-7
+ },
+ },
+};
+
+//##############################################################################
// DRAM site tables for RAW CARD D
//##############################################################################
@@ -1305,6 +1516,13 @@ int32_t getDramSiteInfo( uint8_t i_cardType, uint8_t i_mbaPos,
o_dramMap = dramSiteMap_rcB[i_mbaPos][i_ps][i_mrank];
break;
+ case CEN_TYPE_C:
+ o_x4Dram = true;
+ o_cardName = "RAW_CARD_C ";
+ o_dqMap = dqSiteMap_rcC[i_mbaPos][i_ps][i_mrank];
+ o_dramMap = dramSiteMap_rcC[i_mbaPos][i_ps][i_mrank];
+ break;
+
case CEN_TYPE_D:
o_x4Dram = true;
o_cardName = "RAW_CARD_D ";
diff --git a/src/usr/diag/prdf/common/plugins/prdfParserEnums.H b/src/usr/diag/prdf/common/plugins/prdfParserEnums.H
index ecf02ad2c..625c6dec8 100644
--- a/src/usr/diag/prdf/common/plugins/prdfParserEnums.H
+++ b/src/usr/diag/prdf/common/plugins/prdfParserEnums.H
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2013,2014 */
+/* Contributors Listed Below - COPYRIGHT 2013,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. */
@@ -149,15 +151,17 @@ namespace CEN_SYMBOL
BOTH_SYMBOL_DQS = EVEN_SYMBOL_DQ | ODD_SYMBOL_DQ,
};
- /** A four bit field in memory MRU. It describes the
- * card type in case of Centaur DIMM and wiring type
- * in case of ISDIMM */
-
+ /** A three bit field in memory MRU. It describes the raw card type for
+ * buffered DIMMs or the DIMM plug card type for IS DIMMs. These types are
+ * used for error log parsing which must be supported independent of the
+ * drivers (i.e. eblis tool) so enums can be added, but the values of the
+ * enums cannot be changed */
enum WiringType
{
CEN_TYPE_A = 0,
CEN_TYPE_B = 1,
CEN_TYPE_D = 2,
+ CEN_TYPE_C = 3,
WIRING_INVALID = 7, // An invalid card type
};
OpenPOWER on IntegriCloud