/* IBM_PROLOG_BEGIN_TAG */ /* This is an automatically generated prolog. */ /* */ /* $Source: src/usr/diag/prdf/common/plugins/prdfMemLogParse.C $ */ /* */ /* OpenPOWER HostBoot Project */ /* */ /* Contributors Listed Below - COPYRIGHT 2013,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ /* Licensed under the Apache License, Version 2.0 (the "License"); */ /* you may not use this file except in compliance with the License. */ /* You may obtain a copy of the License at */ /* */ /* http://www.apache.org/licenses/LICENSE-2.0 */ /* */ /* Unless required by applicable law or agreed to in writing, software */ /* distributed under the License is distributed on an "AS IS" BASIS, */ /* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ /* implied. See the License for the specific language governing */ /* permissions and limitations under the License. */ /* */ /* IBM_PROLOG_END_TAG */ /** @file prdfMemLogParse.C * @brief Error log parsing code specific to the memory subsystem. */ #include #include #include #include #include #include #include #include #include #include namespace PRDF { #if defined(PRDF_HOSTBOOT_ERRL_PLUGIN) namespace HOSTBOOT { #elif defined(PRDF_FSP_ERRL_PLUGIN) namespace FSP { #endif using namespace PARSER; using namespace PARSERUTILS; using namespace MemoryMruData; using namespace CEN_SYMBOL; using namespace TARGETING; //############################################################################## // DRAM site tables for RAW CARD A //############################################################################## static const char * dramSiteCardAPortARank0[] = { "DA01.d3", "DA01.d0", "DA01.d2", "DA01.d7", "DA01.d1", "DA01.d6", "DA01.d5", "DA01.d4", "DA04.d3", "DA04.d6", "DA04.d0", "DA04.d2", "DA04.d1", "DA04.d7", "DA04.d4", "DA04.d5", "DA07.d3", "DA07.d1", "DA07.d4", "DA07.d6", "DA07.d7", "DA07.d5", "DA07.d0", "DA07.d2", "DA06.d6", "DA06.d2", "DA06.d0", "DA06.d4", "DA06.d3", "DA06.d5", "DA06.d1", "DA06.d7", "DA02.d1", "DA02.d5", "DA02.d0", "DA02.d6", "DA02.d7", "DA02.d3", "DA02.d4", "DA02.d2", "DA05.d5", "DA05.d1", "DA05.d4", "DA05.d0", "DA05.d7", "DA05.d3", "DA05.d6", "DA05.d2", "DA03.d7", "DA03.d0", "DA03.d6", "DA03.d4", "DA03.d5", "DA03.d3", "DA03.d1", "DA03.d2", "DA08.d6", "DA08.d4", "DA08.d5", "DA08.d1", "DA08.d0", "DA08.d2", "DA08.d7", "DA08.d3", "DA09.d6", "DA09.d1", "DA09.d2", "DA09.d4", "DA09.d3", "DA09.d0", "DA09.d5", "DA09.d7", "DA0SP.d2", "DA0SP.d6", "DA0SP.d0", "DA0SP.d7", "DA0SP.d3", "DA0SP.d4", "DA0SP.d5", "DA0SP.d1" }; static const char * dramCardAPortARank0[] = { "DA01", "DA04", "DA07", "DA06", "DA02", "DA05", "DA03", "DA08", "DA09", "DA0SP" }; //------------------------------------------------------------------------------ static const char * dramSiteCardAPortARank4[] = { "DA11.d2", "DA11.d1", "DA11.d3", "DA11.d4", "DA11.d0", "DA11.d5", "DA11.d6", "DA11.d7", "DA14.d2", "DA14.d5", "DA14.d1", "DA14.d3", "DA14.d0", "DA14.d4", "DA14.d7", "DA14.d6", "DA17.d2", "DA17.d0", "DA17.d7", "DA17.d5", "DA17.d4", "DA17.d6", "DA17.d1", "DA17.d3", "DA16.d5", "DA16.d3", "DA16.d1", "DA16.d7", "DA16.d2", "DA16.d6", "DA16.d0", "DA16.d4", "DA12.d0", "DA12.d6", "DA12.d1", "DA12.d5", "DA12.d4", "DA12.d2", "DA12.d7", "DA12.d3", "DA15.d6", "DA15.d0", "DA15.d7", "DA15.d1", "DA15.d4", "DA15.d2", "DA15.d5", "DA15.d3", "DA13.d4", "DA13.d1", "DA13.d5", "DA13.d7", "DA13.d6", "DA13.d2", "DA13.d0", "DA13.d3", "DA18.d5", "DA18.d7", "DA18.d6", "DA18.d0", "DA18.d1", "DA18.d3", "DA18.d4", "DA18.d2", "DA19.d5", "DA19.d0", "DA19.d3", "DA19.d7", "DA19.d2", "DA19.d1", "DA19.d6", "DA19.d4", "DA1SP.d3", "DA1SP.d5", "DA1SP.d1", "DA1SP.d4", "DA1SP.d2", "DA1SP.d7", "DA1SP.d6", "DA1SP.d0" }; static const char * dramCardAPortARank4[] = { "DA11", "DA14","DA17","DA16", "DA12", "DA15", "DA13", "DA18", "DA19","DA1SP" }; //------------------------------------------------------------------------------ static const char * dramSiteCardAPortBRank0[] = { "DB07.d4", "DB07.d6", "DB07.d0", "DB07.d1", "DB07.d5", "DB07.d3", "DB07.d2", "DB07.d7", "DB01.d6", "DB01.d2", "DB01.d1", "DB01.d0", "DB01.d4", "DB01.d3", "DB01.d7", "DB01.d5", "DB03.d5", "DB03.d1", "DB03.d4", "DB03.d2", "DB03.d3", "DB03.d7", "DB03.d6", "DB03.d0", "DB02.d7", "DB02.d1", "DB02.d5", "DB02.d4", "DB02.d6", "DB02.d3", "DB02.d2", "DB02.d0", "DB06.d3", "DB06.d4", "DB06.d6", "DB06.d2", "DB06.d5", "DB06.d7", "DB06.d1", "DB06.d0", "DB05.d4", "DB05.d7", "DB05.d2", "DB05.d0", "DB05.d3", "DB05.d5", "DB05.d1", "DB05.d6", "DB08.d4", "DB08.d3", "DB08.d7", "DB08.d6", "DB08.d1", "DB08.d5", "DB08.d0", "DB08.d2", "DB04.d7", "DB04.d1", "DB04.d6", "DB04.d5", "DB04.d3", "DB04.d4", "DB04.d0", "DB04.d2", "DB09.d4", "DB09.d6", "DB09.d7", "DB09.d1", "DB09.d2", "DB09.d0", "DB09.d5", "DB09.d3", "DB0SP.d1", "DB0SP.d5", "DB0SP.d7", "DB0SP.d0", "DB0SP.d4", "DB0SP.d6", "DB0SP.d2", "DB0SP.d3", }; static const char * dramCardAPortBRank0[] = { "DB07", "DB01", "DB03", "DB02", "DB06", "DB05", "DB08", "DB04", "DB09", "DB0SP" }; //------------------------------------------------------------------------------ static const char * dramSiteCardAPortBRank4[] = { "DB17.d7", "DB17.d5", "DB17.d1", "DB17.d0", "DB17.d6", "DB17.d2", "DB17.d3", "DB17.d4", "DB11.d5", "DB11.d3", "DB11.d0", "DB11.d1", "DB11.d7", "DB11.d2", "DB11.d4", "DB11.d6", "DB13.d6", "DB13.d0", "DB13.d7", "DB13.d3", "DB13.d2", "DB13.d4", "DB13.d5", "DB13.d1", "DB12.d4", "DB12.d0", "DB12.d6", "DB12.d7", "DB12.d5", "DB12.d2", "DB12.d3", "DB12.d1", "DB16.d2", "DB16.d7", "DB16.d5", "DB16.d3", "DB16.d6", "DB16.d4", "DB16.d0", "DB16.d1", "DB15.d7", "DB15.d4", "DB15.d3", "DB15.d1", "DB15.d2", "DB15.d6", "DB15.d0", "DB15.d5", "DB18.d7", "DB18.d2", "DB18.d4", "DB18.d5", "DB18.d0", "DB18.d6", "DB18.d1", "DB18.d3", "DB14.d4", "DB14.d0", "DB14.d5", "DB14.d6", "DB14.d2", "DB14.d7", "DB14.d1", "DB14.d3", "DB19.d7", "DB19.d5", "DB19.d4", "DB19.d0", "DB19.d3", "DB19.d1", "DB19.d6", "DB19.d2", "DB1SP.d0", "DB1SP.d6", "DB1SP.d4", "DB1SP.d1", "DB1SP.d7", "DB1SP.d5", "DB1SP.d3", "DB1SP.d2", }; static const char * dramCardAPortBRank4[] = { "DB17", "DB11","DB13","DB12", "DB16", "DB15", "DB18", "DB14", "DB19","DB1SP" }; //------------------------------------------------------------------------------ static const char * dramSiteCardAPortCRank0[] = { "DC02.d2", "DC02.d0", "DC02.d7", "DC02.d5", "DC02.d4", "DC02.d6", "DC02.d1", "DC02.d3", "DC03.d3", "DC03.d6", "DC03.d7", "DC03.d1", "DC03.d2", "DC03.d0", "DC03.d5", "DC03.d4", "DC05.d6", "DC05.d0", "DC05.d5", "DC05.d2", "DC05.d4", "DC05.d1", "DC05.d7", "DC05.d3", "DC08.d5", "DC08.d0", "DC08.d1", "DC08.d6", "DC08.d2", "DC08.d7", "DC08.d3", "DC08.d4", "DC01.d7", "DC01.d3", "DC01.d6", "DC01.d2", "DC01.d5", "DC01.d1", "DC01.d4", "DC01.d0", "DC06.d1", "DC06.d5", "DC06.d4", "DC06.d7", "DC06.d3", "DC06.d6", "DC06.d2", "DC06.d0", "DC04.d5", "DC04.d3", "DC04.d0", "DC04.d2", "DC04.d7", "DC04.d1", "DC04.d4", "DC04.d6", "DC09.d0", "DC09.d1", "DC09.d5", "DC09.d3", "DC09.d2", "DC09.d4", "DC09.d6", "DC09.d7", "DC07.d3", "DC07.d1", "DC07.d0", "DC07.d7", "DC07.d5", "DC07.d4", "DC07.d6", "DC07.d2", "DC0SP.d2", "DC0SP.d0", "DC0SP.d6", "DC0SP.d1", "DC0SP.d4", "DC0SP.d7", "DC0SP.d5", "DC0SP.d3", }; static const char * dramCardAPortCRank0[] = { "DC02", "DC03", "DC05", "DC08", "DC01", "DC06", "DC04", "DC09", "DC07", "DC0SP" }; //------------------------------------------------------------------------------ static const char * dramSiteCardAPortCRank4[] = { "DC12.d3", "DC12.d1", "DC12.d4", "DC12.d6", "DC12.d7", "DC12.d5", "DC12.d0", "DC12.d2", "DC13.d2", "DC13.d5", "DC13.d4", "DC13.d0", "DC13.d3", "DC13.d1", "DC13.d6", "DC13.d7", "DC15.d5", "DC15.d1", "DC15.d6", "DC15.d3", "DC15.d7", "DC15.d0", "DC15.d4", "DC15.d2", "DC18.d6", "DC18.d1", "DC18.d0", "DC18.d5", "DC18.d3", "DC18.d4", "DC18.d2", "DC18.d7", "DC11.d4", "DC11.d2", "DC11.d5", "DC11.d3", "DC11.d6", "DC11.d0", "DC11.d7", "DC11.d1", "DC16.d0", "DC16.d6", "DC16.d7", "DC16.d4", "DC16.d2", "DC16.d5", "DC16.d3", "DC16.d1", "DC14.d6", "DC14.d2", "DC14.d1", "DC14.d3", "DC14.d4", "DC14.d0", "DC14.d7", "DC14.d5", "DC19.d1", "DC19.d0", "DC19.d6", "DC19.d2", "DC19.d3", "DC19.d7", "DC19.d5", "DC19.d4", "DC17.d2", "DC17.d0", "DC17.d1", "DC17.d4", "DC17.d6", "DC17.d7", "DC17.d5", "DC17.d3", "DC1SP.d3", "DC1SP.d1", "DC1SP.d5", "DC1SP.d0", "DC1SP.d7", "DC1SP.d4", "DC1SP.d6", "DC1SP.d2", }; static const char * dramCardAPortCRank4[] = { "DC12", "DC13", "DC15", "DC18", "DC11", "DC16", "DC14", "DC19", "DC17", "DC1SP" }; //------------------------------------------------------------------------------ static const char * dramSiteCardAPortDRank0[] = { "DD05.d5", "DD05.d3", "DD05.d2", "DD05.d6", "DD05.d1", "DD05.d7", "DD05.d0", "DD05.d4", "DD04.d7", "DD04.d5", "DD04.d6", "DD04.d2", "DD04.d1", "DD04.d3", "DD04.d0", "DD04.d4", "DD02.d1", "DD02.d4", "DD02.d3", "DD02.d7", "DD02.d6", "DD02.d5", "DD02.d0", "DD02.d2", "DD08.d7", "DD08.d1", "DD08.d4", "DD08.d2", "DD08.d3", "DD08.d5", "DD08.d6", "DD08.d0", "DD01.d4", "DD01.d2", "DD01.d5", "DD01.d1", "DD01.d0", "DD01.d6", "DD01.d7", "DD01.d3", "DD09.d2", "DD09.d6", "DD09.d3", "DD09.d1", "DD09.d0", "DD09.d4", "DD09.d5", "DD09.d7", "DD03.d2", "DD03.d7", "DD03.d4", "DD03.d6", "DD03.d1", "DD03.d3", "DD03.d0", "DD03.d5", "DD07.d7", "DD07.d3", "DD07.d0", "DD07.d2", "DD07.d5", "DD07.d1", "DD07.d4", "DD07.d6", "DD06.d3", "DD06.d5", "DD06.d0", "DD06.d1", "DD06.d6", "DD06.d7", "DD06.d4", "DD06.d2", "DD0SP.d7", "DD0SP.d1", "DD0SP.d2", "DD0SP.d0", "DD0SP.d6", "DD0SP.d5", "DD0SP.d4", "DD0SP.d3", }; static const char * dramCardAPortDRank0[] = { "DD05", "DD04", "DD02", "DD08", "DD01", "DD09", "DD03", "DD07", "DD06", "DD0SP" }; //------------------------------------------------------------------------------ static const char * dramSiteCardAPortDRank4[] = { "DD15.d6", "DD15.d2", "DD15.d3", "DD15.d5", "DD15.d0", "DD15.d4", "DD15.d1", "DD15.d7", "DD14.d4", "DD14.d6", "DD14.d5", "DD14.d3", "DD14.d0", "DD14.d2", "DD14.d1", "DD14.d7", "DD12.d0", "DD12.d7", "DD12.d2", "DD12.d4", "DD12.d5", "DD12.d6", "DD12.d1", "DD12.d3", "DD18.d4", "DD18.d0", "DD18.d7", "DD18.d3", "DD18.d2", "DD18.d6", "DD18.d5", "DD18.d1", "DD11.d7", "DD11.d3", "DD11.d6", "DD11.d0", "DD11.d1", "DD11.d5", "DD11.d4", "DD11.d2", "DD19.d3", "DD19.d5", "DD19.d2", "DD19.d0", "DD19.d1", "DD19.d7", "DD19.d6", "DD19.d4", "DD13.d3", "DD13.d4", "DD13.d7", "DD13.d5", "DD13.d0", "DD13.d2", "DD13.d1", "DD13.d6", "DD17.d4", "DD17.d2", "DD17.d1", "DD17.d3", "DD17.d6", "DD17.d0", "DD17.d7", "DD17.d5", "DD16.d2", "DD16.d6", "DD16.d1", "DD16.d0", "DD16.d5", "DD16.d4", "DD16.d7", "DD16.d3", "DD1SP.d4", "DD1SP.d0", "DD1SP.d3", "DD1SP.d1", "DD1SP.d5", "DD1SP.d6", "DD1SP.d7", "DD1SP.d2", }; static const char * dramCardAPortDRank4[] = { "DD15", "DD14", "DD12", "DD18", "DD11", "DD19", "DD13", "DD17", "DD16", "DD1SP" }; //------------------------------------------------------------------------------ static const char ** dqSiteMap_rcA [MAX_MBA_PER_MEMBUF][MBA_DIMMS_PER_RANK][MASTER_RANKS_PER_PORT] = { { // MBA 0 { // Port 0 dramSiteCardAPortARank0, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardAPortARank4, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramSiteCardAPortBRank0, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardAPortBRank4, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, { // MBA 1 { // Port 0 dramSiteCardAPortCRank0, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardAPortCRank4, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramSiteCardAPortDRank0, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardAPortDRank4, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, }; static const char ** dramSiteMap_rcA [MAX_MBA_PER_MEMBUF][MBA_DIMMS_PER_RANK][MASTER_RANKS_PER_PORT] = { { // MBA 0 { // Port 0 dramCardAPortARank0, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramCardAPortARank4, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramCardAPortBRank0, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramCardAPortBRank4, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, { // MBA 1 { // Port 0 dramCardAPortCRank0, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramCardAPortCRank4, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramCardAPortDRank0, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramCardAPortDRank4, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, }; //############################################################################## // DRAM site tables for RAW CARD B //############################################################################## static const char * dramSiteCardBPortARank01[] = { "DA07.d3", "DA07.d0", "DA07.d2", "DA07.d1", "DA02.d2", "DA02.d0", "DA02.d3", "DA02.d1", "DA03.d2", "DA03.d1", "DA03.d3", "DA03.d0", "DA04.d3", "DA04.d1", "DA04.d2", "DA04.d0", "DA12.d3", "DA12.d1", "DA12.d2", "DA12.d0", "DA06.d1", "DA06.d3", "DA06.d2", "DA06.d0", "DA11.d2", "DA11.d0", "DA11.d3", "DA11.d1", "DA05.d2", "DA05.d1", "DA05.d0", "DA05.d3", "DA14.d1", "DA14.d3", "DA14.d0", "DA14.d2", "DA18.d1", "DA18.d3", "DA18.d2", "DA18.d0", "DA13.d3", "DA13.d1", "DA13.d0", "DA13.d2", "DA19.d3", "DA19.d1", "DA19.d0", "DA19.d2", "DA09.d2", "DA09.d3", "DA09.d1", "DA09.d0", "DA16.d0", "DA16.d3", "DA16.d1", "DA16.d2", "DA08.d1", "DA08.d3", "DA08.d2", "DA08.d0", "DA15.d0", "DA15.d2", "DA15.d3", "DA15.d1", "DA01.d3", "DA01.d2", "DA01.d0", "DA01.d1", "DA17.d0", "DA17.d2", "DA17.d1", "DA17.d3", "DA1SP.d3", "DA1SP.d1", "DA1SP.d2", "DA1SP.d0", "", "", "", "", }; static const char * dramCardBPortARank01[] = { "DA07", "DA02", "DA03", "DA04", "DA12", "DA06", "DA11", "DA05", "DA14", "DA18", "DA13", "DA19", "DA09", "DA16", "DA08", "DA15", "DA01", "DA17", "DA1SP","", }; //------------------------------------------------------------------------------ static const char * dramSiteCardBPortARank45[] = { "DA27.d2", "DA27.d1", "DA27.d3", "DA27.d0", "DA22.d3", "DA22.d1", "DA22.d2", "DA22.d0", "DA23.d3", "DA23.d0", "DA23.d2", "DA23.d1", "DA24.d2", "DA24.d0", "DA24.d3", "DA24.d1", "DA32.d2", "DA32.d0", "DA32.d3", "DA32.d1", "DA26.d0", "DA26.d2", "DA26.d3", "DA26.d1", "DA31.d3", "DA31.d1", "DA31.d2", "DA31.d0", "DA25.d3", "DA25.d0", "DA25.d1", "DA25.d2", "DA34.d0", "DA34.d2", "DA34.d1", "DA34.d3", "DA38.d0", "DA38.d2", "DA38.d3", "DA38.d1", "DA33.d2", "DA33.d0", "DA33.d1", "DA33.d3", "DA39.d2", "DA39.d0", "DA39.d1", "DA39.d3", "DA29.d3", "DA29.d2", "DA29.d0", "DA29.d1", "DA36.d1", "DA36.d2", "DA36.d0", "DA36.d3", "DA28.d0", "DA28.d2", "DA28.d3", "DA28.d1", "DA35.d1", "DA35.d3", "DA35.d2", "DA35.d0", "DA21.d2", "DA21.d3", "DA21.d1", "DA21.d0", "DA37.d1", "DA37.d3", "DA37.d0", "DA37.d2", "DA3SP.d2", "DA3SP.d0", "DA3SP.d3", "DA3SP.d1", "", "", "", "", }; static const char * dramCardBPortARank45[] = { "DA27", "DA22", "DA23", "DA24", "DA32", "DA26", "DA31", "DA25", "DA34", "DA38", "DA33", "DA39", "DA29", "DA36", "DA28", "DA35", "DA21", "DA37", "DA3SP","", }; //------------------------------------------------------------------------------ static const char * dramSiteCardBPortBRank01[] = { "DB13.d0", "DB13.d2", "DB13.d3", "DB13.d1", "DB16.d3", "DB16.d2", "DB16.d1", "DB16.d0", "DB14.d3", "DB14.d0", "DB14.d1", "DB14.d2", "DB17.d3", "DB17.d2", "DB17.d1", "DB17.d0", "DB01.d1", "DB01.d3", "DB01.d0", "DB01.d2", "DB15.d2", "DB15.d1", "DB15.d0", "DB15.d3", "DB11.d0", "DB11.d2", "DB11.d1", "DB11.d3", "DB19.d0", "DB19.d2", "DB19.d1", "DB19.d3", "DB04.d3", "DB04.d2", "DB04.d0", "DB04.d1", "DB03.d2", "DB03.d0", "DB03.d3", "DB03.d1", "DB05.d0", "DB05.d3", "DB05.d2", "DB05.d1", "DB07.d1", "DB07.d3", "DB07.d2", "DB07.d0", "DB06.d0", "DB06.d3", "DB06.d1", "DB06.d2", "DB09.d1", "DB09.d3", "DB09.d0", "DB09.d2", "DB08.d1", "DB08.d3", "DB08.d2", "DB08.d0", "DB18.d2", "DB18.d3", "DB18.d0", "DB18.d1", "DB02.d3", "DB02.d1", "DB02.d2", "DB02.d0", "DB12.d0", "DB12.d2", "DB12.d1", "DB12.d3", "DB1SP.d2", "DB1SP.d1", "DB1SP.d3", "DB1SP.d0", "", "", "", "", }; static const char * dramCardBPortBRank01[] = { "DB13", "DB16", "DB14", "DB17", "DB01", "DB15", "DB11", "DB19", "DB04", "DB03", "DB05", "DB07", "DB06", "DB09", "DB08", "DB18", "DB02", "DB12", "DB1SP", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardBPortBRank45[] = { "DB33.d1", "DB33.d3", "DB33.d2", "DB33.d0", "DB36.d2", "DB36.d3", "DB36.d0", "DB36.d1", "DB34.d2", "DB34.d1", "DB34.d0", "DB34.d3", "DB37.d2", "DB37.d3", "DB37.d0", "DB37.d1", "DB21.d0", "DB21.d2", "DB21.d1", "DB21.d3", "DB35.d3", "DB35.d0", "DB35.d1", "DB35.d2", "DB31.d1", "DB31.d3", "DB31.d0", "DB31.d2", "DB39.d1", "DB39.d3", "DB39.d0", "DB39.d2", "DB24.d2", "DB24.d3", "DB24.d1", "DB24.d0", "DB23.d3", "DB23.d1", "DB23.d2", "DB23.d0", "DB25.d1", "DB25.d2", "DB25.d3", "DB25.d0", "DB27.d0", "DB27.d2", "DB27.d3", "DB27.d1", "DB26.d1", "DB26.d2", "DB26.d0", "DB26.d3", "DB29.d0", "DB29.d2", "DB29.d1", "DB29.d3", "DB28.d0", "DB28.d2", "DB28.d3", "DB28.d1", "DB38.d3", "DB38.d2", "DB38.d1", "DB38.d0", "DB22.d2", "DB22.d0", "DB22.d3", "DB22.d1", "DB32.d1", "DB32.d3","DB32.d0", "DB32.d2", "DB3SP.d3", "DB3SP.d0", "DB3SP.d2", "DB3SP.d1", "", "", "", "", }; static const char * dramCardBPortBRank45[] = { "DB33", "DB36", "DB34", "DB37", "DB21", "DB35", "DB31", "DB39", "DB24", "DB23", "DB25", "DB27", "DB26", "DB29", "DB28", "DB38", "DB22", "DB32", "DB3SP", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardBPortCRank01[] = { "DC18.d3", "DC18.d1", "DC18.d0", "DC18.d2", "DC09.d2", "DC09.d1", "DC09.d0", "DC09.d3", "DC08.d3", "DC08.d1", "DC08.d0", "DC08.d2", "DC07.d3", "DC07.d1", "DC07.d2", "DC07.d0", "DC16.d0", "DC16.d1", "DC16.d2", "DC16.d3", "DC17.d3", "DC17.d2", "DC17.d1", "DC17.d0", "DC19.d0", "DC19.d3", "DC19.d2", "DC19.d1", "DC01.d3", "DC01.d2", "DC01.d1", "DC01.d0", "DC12.d3", "DC12.d1", "DC12.d0", "DC12.d2", "DC02.d3", "DC02.d1", "DC02.d0", "DC02.d2", "DC13.d2", "DC13.d0", "DC13.d3", "DC13.d1", "DC14.d2", "DC14.d0", "DC14.d3", "DC14.d1", "DC11.d2", "DC11.d0", "DC11.d1", "DC11.d3", "DC03.d3", "DC03.d1", "DC03.d2", "DC03.d0", "DC04.d2", "DC04.d1", "DC04.d3", "DC04.d0", "DC15.d3", "DC15.d1", "DC15.d0", "DC15.d2", "DC05.d3", "DC05.d1", "DC05.d2", "DC05.d0", "DC06.d0", "DC06.d1", "DC06.d3", "DC06.d2", "DC1SP.d3", "DC1SP.d1", "DC1SP.d0", "DC1SP.d2", "", "", "", "", }; static const char * dramCardBPortCRank01[] = { "DC18", "DC09", "DC08", "DC07", "DC16", "DC17", "DC19", "DC01", "DC12", "DC02", "DC13", "DC14", "DC11", "DC03", "DC04", "DC15", "DC05", "DC06", "DC1SP", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardBPortCRank45[] = { "DC38.d2", "DC38.d0", "DC38.d1", "DC38.d3", "DC29.d3", "DC29.d0", "DC29.d1", "DC29.d2", "DC28.d2", "DC28.d0", "DC28.d1", "DC28.d3", "DC27.d2", "DC27.d0", "DC27.d3", "DC27.d1", "DC36.d1", "DC36.d0", "DC36.d3", "DC36.d2", "DC37.d2", "DC37.d3", "DC37.d0", "DC37.d1", "DC39.d1", "DC39.d2", "DC39.d3", "DC39.d0", "DC21.d2", "DC21.d3", "DC21.d0", "DC21.d1", "DC32.d2", "DC32.d0", "DC32.d1", "DC32.d3", "DC22.d2", "DC22.d0", "DC22.d1", "DC22.d3", "DC33.d3", "DC33.d1", "DC33.d2", "DC33.d0", "DC34.d3", "DC34.d1", "DC34.d2", "DC34.d0", "DC31.d3", "DC31.d1", "DC31.d0", "DC31.d2", "DC23.d2", "DC23.d0", "DC23.d3", "DC23.d1", "DC24.d3", "DC24.d0", "DC24.d2", "DC24.d1", "DC35.d2", "DC35.d0", "DC35.d1", "DC35.d3", "DC25.d2", "DC25.d0", "DC25.d3", "DC25.d1", "DC26.d1", "DC26.d0", "DC26.d2", "DC26.d3", "DC3SP.d2", "DC3SP.d0", "DC3SP.d1", "DC3SP.d3", "", "", "", "", }; static const char * dramCardBPortCRank45[] = { "DC38", "DC29", "DC28", "DC27", "DC36", "DC37", "DC39", "DC21", "DC32", "DC22", "DC33", "DC34", "DC31", "DC23", "DC24", "DC35", "DC25", "DC26", "DC3SP", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardBPortDRank01[] = { "DD13.d0", "DD13.d2", "DD13.d1", "DD13.d3", "DD16.d2", "DD16.d0", "DD16.d1", "DD16.d3", "DD19.d1", "DD19.d3", "DD19.d0", "DD19.d2", "DD15.d1", "DD15.d3", "DD15.d2", "DD15.d0", "DD14.d0", "DD14.d3", "DD14.d2", "DD14.d1", "DD12.d2", "DD12.d0", "DD12.d1", "DD12.d3", "DD11.d2", "DD11.d3", "DD11.d1", "DD11.d0", "DD18.d1", "DD18.d3", "DD18.d2", "DD18.d0", "DD08.d2", "DD08.d3", "DD08.d1", "DD08.d0", "DD03.d3", "DD03.d1", "DD03.d0", "DD03.d2", "DD04.d2", "DD04.d0", "DD04.d3", "DD04.d1", "DD01.d3", "DD01.d1", "DD01.d2", "DD01.d0", "DD05.d3", "DD05.d2", "DD05.d0", "DD05.d1", "DD02.d0", "DD02.d1", "DD02.d2", "DD02.d3", "DD06.d2", "DD06.d0", "DD06.d1", "DD06.d3", "DD07.d2", "DD07.d0", "DD07.d1", "DD07.d3", "DD09.d2", "DD09.d0", "DD09.d3", "DD09.d1", "DD17.d0", "DD17.d3", "DD17.d1", "DD17.d2", "DD1SP.d2", "DD1SP.d0", "DD1SP.d3", "DD1SP.d1", "", "", "", "", }; static const char * dramCardBPortDRank01[] = { "DD13", "DD16", "DD19", "DD15", "DD14", "DD12", "DD11", "DD18", "DD08", "DD03", "DD04", "DD01", "DD05", "DD02", "DD06", "DD07", "DD09", "DD17", "DD1SP", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardBPortDRank45[] = { "DD33.d1", "DD33.d3", "DD33.d0", "DD33.d2", "DD36.d3", "DD36.d1", "DD36.d0", "DD36.d2", "DD39.d0", "DD39.d2", "DD39.d1", "DD39.d3", "DD35.d0", "DD35.d2", "DD35.d3", "DD35.d1", "DD34.d1", "DD34.d2", "DD34.d3", "DD34.d0", "DD32.d3", "DD32.d1", "DD32.d0", "DD32.d2", "DD31.d3", "DD31.d2", "DD31.d0", "DD31.d1", "DD38.d0", "DD38.d2", "DD38.d3", "DD38.d1", "DD28.d3", "DD28.d2", "DD28.d0", "DD28.d1", "DD23.d2", "DD23.d0", "DD23.d1", "DD23.d3", "DD24.d3", "DD24.d1", "DD24.d2", "DD24.d0", "DD21.d2", "DD21.d0", "DD21.d3", "DD21.d1", "DD25.d2", "DD25.d3", "DD25.d1", "DD25.d0", "DD22.d1", "DD22.d0", "DD22.d3", "DD22.d2", "DD26.d3", "DD26.d1", "DD26.d0", "DD26.d2", "DD27.d3", "DD27.d1", "DD27.d0", "DD27.d2", "DD29.d3", "DD29.d1", "DD29.d2", "DD29.d0", "DD37.d1", "DD37.d2", "DD37.d0", "DD37.d3", "DD3SP.d3", "DD3SP.d1", "DD3SP.d2", "DD3SP.d0", "", "", "", "", }; static const char * dramCardBPortDRank45[] = { "DD33", "DD36", "DD39", "DD35", "DD34", "DD32", "DD31", "DD38", "DD28", "DD23", "DD24", "DD21", "DD25", "DD22", "DD26", "DD27", "DD29", "DD37", "DD3SP", "", }; //------------------------------------------------------------------------------ static const char ** dqSiteMap_rcB [MAX_MBA_PER_MEMBUF][MBA_DIMMS_PER_RANK][MASTER_RANKS_PER_PORT] = { { // MBA 0 { // Port 0 dramSiteCardBPortARank01, dramSiteCardBPortARank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardBPortARank45, dramSiteCardBPortARank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramSiteCardBPortBRank01, dramSiteCardBPortBRank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardBPortBRank45, dramSiteCardBPortBRank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, { // MBA 1 { // Port 0 dramSiteCardBPortCRank01, dramSiteCardBPortCRank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardBPortCRank45, dramSiteCardBPortCRank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramSiteCardBPortDRank01, dramSiteCardBPortDRank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardBPortDRank45, dramSiteCardBPortDRank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, }; static const char ** dramSiteMap_rcB [MAX_MBA_PER_MEMBUF][MBA_DIMMS_PER_RANK][MASTER_RANKS_PER_PORT] = { { // MBA 0 { // Port 0 dramCardBPortARank01, dramCardBPortARank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramCardBPortARank45, dramCardBPortARank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramCardBPortBRank01, dramCardBPortBRank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramCardBPortBRank45, dramCardBPortBRank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, { // MBA 1 { // Port 0 dramCardBPortCRank01, dramCardBPortCRank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramCardBPortCRank45, dramCardBPortCRank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramCardBPortDRank01, dramCardBPortDRank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramCardBPortDRank45, dramCardBPortDRank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, }; //############################################################################## // DRAM site tables for RAW CARD C //############################################################################## static const char * dramSiteCardCPortARank04[] = { "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 * dramCardCPortARank04[] = { "DA12", "DA02", "DA05", "DA15", "DA17", "DA07", "DA18", "DA06", "DA03", "DA13", "DA16", "DA08", "DA14", "DA04", "DA09", "DA19", "DA01", "DA11", "DA1SP", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardCPortBRank04[] = { "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 * dramCardCPortBRank04[] = { "DB08", "DB18", "DB12", "DB02", "DB04", "DB14", "DB13", "DB03", "DB17", "DB07", "DB05", "DB15", "DB09", "DB19", "DB01", "DB11", "DB06", "DB16", "DB1SP", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardCPortCRank04[] = { "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 * dramCardCPortCRank04[] = { "DC13", "DC03", "DC04", "DC14", "DC06", "DC16", "DC09", "DC19", "DC12", "DC02", "DC17", "DC07", "DC05", "DC15", "DC01", "DC11", "DC08", "DC18", "DC1SP", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardCPortDRank04[] = { "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 * dramCardCPortDRank04[] = { "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][MBA_DIMMS_PER_RANK][MASTER_RANKS_PER_PORT] = { { // MBA 0 { // Port 0 dramSiteCardCPortARank04, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardCPortARank04, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramSiteCardCPortBRank04, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardCPortBRank04, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, { // MBA 1 { // Port 0 dramSiteCardCPortCRank04, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardCPortCRank04, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramSiteCardCPortDRank04, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardCPortDRank04, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, }; static const char ** dramSiteMap_rcC [MAX_MBA_PER_MEMBUF][MBA_DIMMS_PER_RANK][MASTER_RANKS_PER_PORT] = { { // MBA 0 { // Port 0 dramCardCPortARank04, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramCardCPortARank04, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramCardCPortBRank04, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramCardCPortBRank04, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, { // MBA 1 { // Port 0 dramCardCPortCRank04, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramCardCPortCRank04, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramCardCPortDRank04, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramCardCPortDRank04, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, }; //############################################################################## // DRAM site tables for RAW CARD D //############################################################################## static const char * dramSiteCardDPortARank01[] = { "DA07.d3", "DA07.d0", "DA07.d2", "DA07.d1", "DA02.d2", "DA02.d0", "DA02.d3", "DA02.d1", "DA03.d2", "DA03.d1", "DA03.d3", "DA03.d0", "DA04.d3", "DA04.d1", "DA04.d2", "DA04.d0", "DA11.d0", "DA11.d2", "DA11.d1", "DA11.d3", "DA12.d3", "DA12.d1", "DA12.d0", "DA12.d2", "DA17.d0", "DA17.d3", "DA17.d1", "DA17.d2", "DA05.d2", "DA05.d1", "DA05.d0", "DA05.d3", "DA01.d2", "DA01.d0", "DA01.d1", "DA01.d3", "DA18.d1", "DA18.d3", "DA18.d2", "DA18.d0", "DA16.d1", "DA16.d0", "DA16.d3", "DA16.d2", "DA19.d3", "DA19.d1", "DA19.d0", "DA19.d2", "DA09.d2", "DA09.d3", "DA09.d1", "DA09.d0", "DA14.d2", "DA14.d0", "DA14.d3", "DA14.d1", "DA08.d1", "DA08.d3", "DA08.d2", "DA08.d0", "DA15.d0", "DA15.d2", "DA15.d3", "DA15.d1", "DA13.d2", "DA13.d1", "DA13.d3", "DA13.d0", "DA06.d3", "DA06.d1", "DA06.d0", "DA06.d2", "DA1SP.d3", "DA1SP.d2", "DA1SP.d1", "DA1SP.d0", "", "", "", "", }; static const char * dramCardDPortARank01[] = { "DA07", "DA02", "DA03", "DA04", "DA11", "DA12", "DA17", "DA05", "DA01", "DA18", "DA16", "DA19", "DA09", "DA14", "DA08", "DA15", "DA13", "DA06", "DA1SP", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardDPortARank45[] = { "DA27.d2", "DA27.d1", "DA27.d3", "DA27.d0", "DA22.d3", "DA22.d1", "DA22.d2", "DA22.d0", "DA23.d3", "DA23.d0", "DA23.d2", "DA23.d1", "DA24.d2", "DA24.d0", "DA24.d3", "DA24.d1", "DA31.d1", "DA31.d3", "DA31.d0", "DA31.d2", "DA32.d2", "DA32.d0", "DA32.d1", "DA32.d3", "DA37.d1", "DA37.d2", "DA37.d0", "DA37.d3", "DA25.d3", "DA25.d0", "DA25.d1", "DA25.d2", "DA21.d3", "DA21.d1", "DA21.d0", "DA21.d2", "DA38.d0", "DA38.d2", "DA38.d3", "DA38.d1", "DA36.d0", "DA36.d1", "DA36.d2", "DA36.d3", "DA39.d2", "DA39.d0", "DA39.d1", "DA39.d3", "DA29.d3", "DA29.d2", "DA29.d0", "DA29.d1", "DA34.d3", "DA34.d1", "DA34.d2", "DA34.d0", "DA28.d0", "DA28.d2", "DA28.d3", "DA28.d1", "DA35.d1", "DA35.d3", "DA35.d2", "DA35.d0", "DA33.d3", "DA33.d0", "DA33.d2", "DA33.d1", "DA26.d2", "DA26.d0", "DA26.d1", "DA26.d3", "DA3SP.d2", "DA3SP.d3", "DA3SP.d0", "DA3SP.d1", "", "", "", "", }; static const char * dramCardDPortARank45[] = { "DA27", "DA22", "DA23", "DA24", "DA31", "DA32", "DA37", "DA25", "DA21", "DA38", "DA36", "DA39", "DA29", "DA34", "DA28", "DA35", "DA33", "DA26", "DA3SP", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardDPortBRank01[] = { "DB13.d0", "DB13.d2", "DB13.d3", "DB13.d1", "DB16.d3", "DB16.d2", "DB16.d1", "DB16.d0", "DB14.d3", "DB14.d0", "DB14.d1", "DB14.d2", "DB17.d3", "DB17.d2", "DB17.d1", "DB17.d0", "DB01.d1", "DB01.d3", "DB01.d0", "DB01.d2", "DB15.d2", "DB15.d1", "DB15.d0", "DB15.d3", "DB11.d0", "DB11.d2", "DB11.d1", "DB11.d3", "DB19.d0", "DB19.d2", "DB19.d1", "DB19.d3", "DB04.d3", "DB04.d2", "DB04.d0", "DB04.d1", "DB03.d2", "DB03.d0", "DB03.d3", "DB03.d1", "DB05.d0", "DB05.d3", "DB05.d2", "DB05.d1", "DB07.d1", "DB07.d3", "DB07.d2", "DB07.d0", "DB06.d0", "DB06.d3", "DB06.d1", "DB06.d2", "DB09.d1", "DB09.d3", "DB09.d0", "DB09.d2", "DB08.d1", "DB08.d3", "DB08.d2", "DB08.d0", "DB18.d2", "DB18.d3", "DB18.d0", "DB18.d1", "DB02.d3", "DB02.d1", "DB02.d2", "DB02.d0", "DB12.d0", "DB12.d2", "DB12.d1", "DB12.d3", "DB1SP.d2", "DB1SP.d1", "DB1SP.d3", "DB1SP.d0", "", "", "", "", }; static const char * dramCardDPortBRank01[] = { "DB13", "DB16", "DB14", "DB17", "DB01", "DB15", "DB11", "DB19", "DB04", "DB03", "DB05", "DB07", "DB06", "DB09", "DB08", "DB18", "DB02", "DB12", "DB1SP", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardDPortBRank45[] = { "DB33.d1", "DB33.d3", "DB33.d2", "DB33.d0", "DB36.d2", "DB36.d3", "DB36.d0", "DB36.d1", "DB34.d2", "DB34.d1", "DB34.d0", "DB34.d3", "DB37.d2", "DB37.d3", "DB37.d0", "DB37.d1", "DB21.d0", "DB21.d2", "DB21.d1", "DB21.d3", "DB35.d3", "DB35.d0", "DB35.d1", "DB35.d2", "DB31.d1", "DB31.d3", "DB31.d0", "DB31.d2", "DB39.d1", "DB39.d3", "DB39.d0", "DB39.d2", "DB24.d2", "DB24.d3", "DB24.d1", "DB24.d0", "DB23.d3", "DB23.d1", "DB23.d2", "DB23.d0", "DB25.d1", "DB25.d2", "DB25.d3", "DB25.d0", "DB27.d0", "DB27.d2", "DB27.d3", "DB27.d1", "DB26.d1", "DB26.d2", "DB26.d0", "DB26.d3", "DB29.d0", "DB29.d2", "DB29.d1", "DB29.d3", "DB28.d0", "DB28.d2", "DB28.d3", "DB28.d1", "DB38.d3", "DB38.d2", "DB38.d1", "DB38.d0", "DB22.d2", "DB22.d0", "DB22.d3", "DB22.d1", "DB32.d1", "DB32.d3", "DB32.d0", "DB32.d2", "DB3SP.d3", "DB3SP.d0", "DB3SP.d2", "DB3SP.d1", "", "", "", "", }; static const char * dramCardDPortBRank45[] = { "DB33", "DB36", "DB34", "DB37", "DB21", "DB35", "DB31", "DB39", "DB24", "DB23", "DB25", "DB27", "DB26", "DB29", "DB28", "DB38", "DB22", "DB32", "DB3SP", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardDPortCRank01[] = { "DC18.d3", "DC18.d1", "DC18.d0", "DC18.d2", "DC09.d2", "DC09.d1", "DC09.d0", "DC09.d3", "DC08.d3", "DC08.d1", "DC08.d0", "DC08.d2", "DC07.d3", "DC07.d1", "DC07.d2", "DC07.d0", "DC16.d0", "DC16.d1", "DC16.d2", "DC16.d3", "DC17.d3", "DC17.d2", "DC17.d1", "DC17.d0", "DC19.d0", "DC19.d3", "DC19.d2", "DC19.d1", "DC01.d3", "DC01.d2", "DC01.d1", "DC01.d0", "DC12.d3", "DC12.d1", "DC12.d0", "DC12.d2", "DC02.d3", "DC02.d1", "DC02.d0", "DC02.d2", "DC13.d2", "DC13.d0", "DC13.d3", "DC13.d1", "DC14.d2", "DC14.d0", "DC14.d3", "DC14.d1", "DC11.d2", "DC11.d0", "DC11.d1", "DC11.d3", "DC03.d3", "DC03.d1", "DC03.d2", "DC03.d0", "DC04.d2", "DC04.d1", "DC04.d3", "DC04.d0", "DC15.d3", "DC15.d1", "DC15.d0", "DC15.d2", "DC05.d3", "DC05.d1", "DC05.d2", "DC05.d0", "DC06.d0", "DC06.d1", "DC06.d3", "DC06.d2", "DC1SP.d3", "DC1SP.d1", "DC1SP.d0", "DC1SP.d2", "", "", "", "", }; static const char * dramCardDPortCRank01[] = { "DC18", "DC09", "DC08", "DC07", "DC16", "DC17", "DC19", "DC01", "DC12", "DC02", "DC13", "DC14", "DC11", "DC03", "DC04", "DC15", "DC05", "DC06", "DC1SP", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardDPortCRank45[] = { "DC38.d2", "DC38.d0", "DC38.d1", "DC38.d3", "DC29.d3", "DC29.d0", "DC29.d1", "DC29.d2", "DC28.d2", "DC28.d0", "DC28.d1", "DC28.d3", "DC27.d2", "DC27.d0", "DC27.d3", "DC27.d1", "DC36.d1", "DC36.d0", "DC36.d3", "DC36.d2", "DC37.d2", "DC37.d3", "DC37.d0", "DC37.d1", "DC39.d1", "DC39.d2", "DC39.d3", "DC39.d0", "DC21.d2", "DC21.d3", "DC21.d0", "DC21.d1", "DC32.d2", "DC32.d0", "DC32.d1", "DC32.d3", "DC22.d2", "DC22.d0", "DC22.d1", "DC22.d3", "DC33.d3", "DC33.d1", "DC33.d2", "DC33.d0", "DC34.d3", "DC34.d1", "DC34.d2", "DC34.d0", "DC31.d3", "DC31.d1", "DC31.d0", "DC31.d2", "DC23.d2", "DC23.d0", "DC23.d3", "DC23.d1", "DC24.d3", "DC24.d0", "DC24.d2", "DC24.d1", "DC35.d2", "DC35.d0", "DC35.d1", "DC35.d3", "DC25.d2", "DC25.d0", "DC25.d3", "DC25.d1", "DC26.d1", "DC26.d0", "DC26.d2", "DC26.d3", "DC3SP.d2", "DC3SP.d0", "DC3SP.d1", "DC3SP.d3", "", "", "", "", }; static const char * dramCardDPortCRank45[] = { "DC38", "DC29", "DC28", "DC27", "DC36", "DC37", "DC39", "DC21", "DC32", "DC22", "DC33", "DC34", "DC31", "DC23", "DC24", "DC35", "DC25", "DC26", "DC3SP", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardDPortDRank01[] = { "DD13.d0", "DD13.d2", "DD13.d1", "DD13.d3", "DD16.d2", "DD16.d0", "DD16.d1", "DD16.d3", "DD19.d1", "DD19.d3", "DD19.d0", "DD19.d2", "DD15.d1", "DD15.d3", "DD15.d2", "DD15.d0", "DD14.d0", "DD14.d3", "DD14.d2", "DD14.d1", "DD12.d2", "DD12.d0", "DD12.d1", "DD12.d3", "DD11.d2", "DD11.d3", "DD11.d1", "DD11.d0", "DD18.d2", "DD18.d0", "DD18.d1", "DD18.d3", "DD08.d2", "DD08.d3", "DD08.d1", "DD08.d0", "DD03.d3", "DD03.d1", "DD03.d0", "DD03.d2", "DD05.d2", "DD05.d0", "DD05.d3", "DD05.d1", "DD01.d3", "DD01.d1", "DD01.d2", "DD01.d0", "DD04.d3", "DD04.d2", "DD04.d0", "DD04.d1", "DD02.d0", "DD02.d1", "DD02.d2", "DD02.d3", "DD06.d2", "DD06.d0", "DD06.d1", "DD06.d3", "DD07.d2", "DD07.d0", "DD07.d1", "DD07.d3", "DD09.d2", "DD09.d0", "DD09.d3", "DD09.d1", "DD17.d0", "DD17.d3", "DD17.d1", "DD17.d2", "DD1SP.d2", "DD1SP.d0", "DD1SP.d3", "DD1SP.d1", "", "", "", "", }; static const char * dramCardDPortDRank01[] = { "DD13", "DD16", "DD19", "DD15", "DD14", "DD12", "DD11", "DD18", "DD08", "DD03", "DD05", "DD01", "DD04", "DD02", "DD06", "DD07", "DD09", "DD17", "DD1SP", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardDPortDRank45[] = { "DD33.d1", "DD33.d3", "DD33.d0", "DD33.d2", "DD36.d3", "DD36.d1", "DD36.d0", "DD36.d2", "DD39.d0", "DD39.d2", "DD39.d1", "DD39.d3", "DD35.d0", "DD35.d2", "DD35.d3", "DD35.d1", "DD34.d1", "DD34.d2", "DD34.d3", "DD34.d0", "DD32.d3", "DD32.d1", "DD32.d0", "DD32.d2", "DD31.d3", "DD31.d2", "DD31.d0", "DD31.d1", "DD38.d3", "DD38.d1", "DD38.d0", "DD38.d2", "DD28.d3", "DD28.d2", "DD28.d0", "DD28.d1", "DD23.d2", "DD23.d0", "DD23.d1", "DD23.d3", "DD25.d3", "DD25.d1", "DD25.d2", "DD25.d0", "DD21.d2", "DD21.d0", "DD21.d3", "DD21.d1", "DD24.d2", "DD24.d3", "DD24.d1", "DD24.d0", "DD22.d1", "DD22.d0", "DD22.d3", "DD22.d2", "DD26.d3", "DD26.d1", "DD26.d0", "DD26.d2", "DD27.d3", "DD27.d1", "DD27.d0", "DD27.d2", "DD29.d3", "DD29.d1", "DD29.d2", "DD29.d0", "DD37.d1", "DD37.d2", "DD37.d0", "DD37.d3", "DD3SP.d3", "DD3SP.d1", "DD3SP.d2", "DD3SP.d0", "", "", "", "", }; static const char * dramCardDPortDRank45[] = { "DD33", "DD36", "DD39", "DD35", "DD34", "DD32", "DD31", "DD38", "DD28", "DD23", "DD25", "DD21", "DD24", "DD22", "DD26", "DD27", "DD29", "DD37", "DD3SP", "", }; //------------------------------------------------------------------------------ static const char ** dqSiteMap_rcD [MAX_MBA_PER_MEMBUF][MBA_DIMMS_PER_RANK][MASTER_RANKS_PER_PORT] = { { // MBA 0 { // Port 0 dramSiteCardDPortARank01, dramSiteCardDPortARank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardDPortARank45, dramSiteCardDPortARank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramSiteCardDPortBRank01, dramSiteCardDPortBRank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardDPortBRank45, dramSiteCardDPortBRank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, { // MBA 1 { // Port 0 dramSiteCardDPortCRank01, dramSiteCardDPortCRank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardDPortCRank45, dramSiteCardDPortCRank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramSiteCardDPortDRank01, dramSiteCardDPortDRank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardDPortDRank45, dramSiteCardDPortDRank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, }; static const char ** dramSiteMap_rcD [MAX_MBA_PER_MEMBUF][MBA_DIMMS_PER_RANK][MASTER_RANKS_PER_PORT] = { { // MBA 0 { // Port 0 dramCardDPortARank01, dramCardDPortARank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramCardDPortARank45, dramCardDPortARank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramCardDPortBRank01, dramCardDPortBRank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramCardDPortBRank45, dramCardDPortBRank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, { // MBA 1 { // Port 0 dramCardDPortCRank01, dramCardDPortCRank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramCardDPortCRank45, dramCardDPortCRank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramCardDPortDRank01, dramCardDPortDRank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramCardDPortDRank45, dramCardDPortDRank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, }; //############################################################################## // DRAM site tables for RAW CARD A4 //############################################################################## static const char * dramSiteCardA4PortARank0[] = { "DA01.d5", "DA01.d4", "DA01.d0", "DA01.d7", "DA01.d1", "DA01.d6", "DA01.d3", "DA01.d2", "DA04.d3", "DA04.d6", "DA04.d4", "DA04.d0", "DA04.d1", "DA04.d7", "DA04.d2", "DA04.d5", "DA07.d6", "DA07.d2", "DA07.d5", "DA07.d7", "DA07.d4", "DA07.d0", "DA07.d3", "DA07.d1", "DA06.d2", "DA06.d0", "DA06.d4", "DA06.d6", "DA06.d1", "DA06.d5", "DA06.d3", "DA06.d7", "DA02.d5", "DA02.d6", "DA02.d7", "DA02.d2", "DA02.d3", "DA02.d1", "DA02.d4", "DA02.d0", "DA05.d3", "DA05.d1", "DA05.d6", "DA05.d0", "DA05.d7", "DA05.d5", "DA05.d2", "DA05.d4", "DA03.d7", "DA03.d4", "DA03.d6", "DA03.d2", "DA03.d3", "DA03.d1", "DA03.d5", "DA03.d0", "DA08.d2", "DA08.d6", "DA08.d7", "DA08.d1", "DA08.d0", "DA08.d4", "DA08.d5", "DA08.d3", "DA09.d1", "DA09.d2", "DA09.d0", "DA09.d5", "DA09.d4", "DA09.d3", "DA09.d6", "DA09.d7", "DA0SP.d0", "DA0SP.d2", "DA0SP.d4", "DA0SP.d5", "DA0SP.d1", "DA0SP.d6", "DA0SP.d3", "DA0SP.d7", }; //------------------------------------------------------------------------------ static const char * dramSiteCardA4PortARank4[] = { "DA11.d4", "DA11.d5", "DA11.d1", "DA11.d6", "DA11.d0", "DA11.d7", "DA11.d2", "DA11.d3", "DA14.d2", "DA14.d7", "DA14.d5", "DA14.d1", "DA14.d0", "DA14.d6", "DA14.d3", "DA14.d4", "DA17.d7", "DA17.d3", "DA17.d4", "DA17.d6", "DA17.d5", "DA17.d1", "DA17.d2", "DA17.d0", "DA16.d3", "DA16.d1", "DA16.d5", "DA16.d7", "DA16.d0", "DA16.d4", "DA16.d2", "DA16.d6", "DA12.d4", "DA12.d7", "DA12.d6", "DA12.d3", "DA12.d2", "DA12.d0", "DA12.d5", "DA12.d1", "DA15.d2", "DA15.d0", "DA15.d7", "DA15.d1", "DA15.d6", "DA15.d4", "DA15.d3", "DA15.d5", "DA13.d6", "DA13.d5", "DA13.d7", "DA13.d3", "DA13.d2", "DA13.d0", "DA13.d4", "DA13.d1", "DA18.d3", "DA18.d7", "DA18.d6", "DA18.d0", "DA18.d1", "DA18.d5", "DA18.d4", "DA18.d2", "DA19.d0", "DA19.d3", "DA19.d1", "DA19.d4", "DA19.d5", "DA19.d2", "DA19.d7", "DA19.d6", "DA1SP.d1", "DA1SP.d3", "DA1SP.d5", "DA1SP.d4", "DA1SP.d0", "DA1SP.d7", "DA1SP.d2", "DA1SP.d6", }; //------------------------------------------------------------------------------ static const char * dramSiteCardA4PortBRank0[] = { "DB07.d6", "DB07.d4", "DB07.d0", "DB07.d7", "DB07.d5", "DB07.d1", "DB07.d2", "DB07.d3", "DB01.d2", "DB01.d0", "DB01.d7", "DB01.d4", "DB01.d6", "DB01.d1", "DB01.d3", "DB01.d5", "DB03.d7", "DB03.d5", "DB03.d2", "DB03.d4", "DB03.d1", "DB03.d3", "DB03.d6", "DB03.d0", "DB02.d7", "DB02.d5", "DB02.d3", "DB02.d6", "DB02.d4", "DB02.d1", "DB02.d2", "DB02.d0", "DB06.d1", "DB06.d6", "DB06.d2", "DB06.d0", "DB06.d5", "DB06.d3", "DB06.d7", "DB06.d4", "DB05.d6", "DB05.d3", "DB05.d0", "DB05.d2", "DB05.d1", "DB05.d5", "DB05.d7", "DB05.d4", "DB08.d6", "DB08.d1", "DB08.d3", "DB08.d4", "DB08.d5", "DB08.d7", "DB08.d2", "DB08.d0", "DB04.d3", "DB04.d7", "DB04.d2", "DB04.d5", "DB04.d1", "DB04.d6", "DB04.d4", "DB04.d0", "DB09.d4", "DB09.d2", "DB09.d3", "DB09.d7", "DB09.d6", "DB09.d0", "DB09.d5", "DB09.d1", "DB0SP.d7", "DB0SP.d1", "DB0SP.d5", "DB0SP.d4", "DB0SP.d6", "DB0SP.d2", "DB0SP.d0", "DB0SP.d3", }; //------------------------------------------------------------------------------ static const char * dramSiteCardA4PortBRank4[] = { "DB17.d7", "DB17.d5", "DB17.d1", "DB17.d6", "DB17.d4", "DB17.d0", "DB17.d3", "DB17.d2", "DB11.d3", "DB11.d1", "DB11.d6", "DB11.d5", "DB11.d7", "DB11.d0", "DB11.d2", "DB11.d4", "DB13.d6", "DB13.d4", "DB13.d3", "DB13.d5", "DB13.d0", "DB13.d2", "DB13.d7", "DB13.d1", "DB12.d6", "DB12.d4", "DB12.d2", "DB12.d7", "DB12.d5", "DB12.d0", "DB12.d3", "DB12.d1", "DB16.d0", "DB16.d7", "DB16.d3", "DB16.d1", "DB16.d4", "DB16.d2", "DB16.d6", "DB16.d5", "DB15.d7", "DB15.d2", "DB15.d1", "DB15.d3", "DB15.d0", "DB15.d4", "DB15.d6", "DB15.d5", "DB18.d7", "DB18.d0", "DB18.d2", "DB18.d5", "DB18.d4", "DB18.d6", "DB18.d3", "DB18.d1", "DB14.d2", "DB14.d6", "DB14.d3", "DB14.d4", "DB14.d0", "DB14.d7", "DB14.d5", "DB14.d1", "DB19.d5", "DB19.d3", "DB19.d2", "DB19.d6", "DB19.d7", "DB19.d1", "DB19.d4", "DB19.d0", "DB1SP.d6", "DB1SP.d0", "DB1SP.d4", "DB1SP.d5", "DB1SP.d7", "DB1SP.d3", "DB1SP.d1", "DB1SP.d2", }; //------------------------------------------------------------------------------ static const char * dramSiteCardA4PortCRank0[] = { "DC02.d0", "DC02.d4", "DC02.d7", "DC02.d3", "DC02.d2", "DC02.d6", "DC02.d5", "DC02.d1", "DC03.d1", "DC03.d2", "DC03.d5", "DC03.d3", "DC03.d4", "DC03.d0", "DC03.d7", "DC03.d6", "DC05.d2", "DC05.d4", "DC05.d5", "DC05.d0", "DC05.d6", "DC05.d1", "DC05.d7", "DC05.d3", "DC08.d3", "DC08.d4", "DC08.d5", "DC08.d2", "DC08.d0", "DC08.d7", "DC08.d1", "DC08.d6", "DC01.d7", "DC01.d5", "DC01.d0", "DC01.d6", "DC01.d3", "DC01.d1", "DC01.d2", "DC01.d4", "DC06.d1", "DC06.d3", "DC06.d6", "DC06.d7", "DC06.d5", "DC06.d2", "DC06.d4", "DC06.d0", "DC04.d7", "DC04.d1", "DC04.d0", "DC04.d4", "DC04.d5", "DC04.d3", "DC04.d6", "DC04.d2", "DC09.d0", "DC09.d1", "DC09.d5", "DC09.d3", "DC09.d4", "DC09.d2", "DC09.d6", "DC09.d7", "DC07.d1", "DC07.d5", "DC07.d4", "DC07.d7", "DC07.d3", "DC07.d2", "DC07.d6", "DC07.d0", "DC0SP.d4", "DC0SP.d0", "DC0SP.d6", "DC0SP.d1", "DC0SP.d2", "DC0SP.d3", "DC0SP.d7", "DC0SP.d5", }; //------------------------------------------------------------------------------ static const char * dramSiteCardA4PortCRank4[] = { "DC12.d1", "DC12.d5", "DC12.d6", "DC12.d2", "DC12.d3", "DC12.d7", "DC12.d4", "DC12.d0", "DC13.d0", "DC13.d3", "DC13.d4", "DC13.d2", "DC13.d5", "DC13.d1", "DC13.d6", "DC13.d7", "DC15.d3", "DC15.d5", "DC15.d4", "DC15.d1", "DC15.d7", "DC15.d0", "DC15.d6", "DC15.d2", "DC18.d2", "DC18.d5", "DC18.d4", "DC18.d3", "DC18.d1", "DC18.d6", "DC18.d0", "DC18.d7", "DC11.d6", "DC11.d4", "DC11.d1", "DC11.d7", "DC11.d2", "DC11.d0", "DC11.d3", "DC11.d5", "DC16.d0", "DC16.d2", "DC16.d7", "DC16.d6", "DC16.d4", "DC16.d3", "DC16.d5", "DC16.d1", "DC14.d6", "DC14.d0", "DC14.d1", "DC14.d5", "DC14.d4", "DC14.d2", "DC14.d7", "DC14.d3", "DC19.d1", "DC19.d0", "DC19.d4", "DC19.d2", "DC19.d5", "DC19.d3", "DC19.d7", "DC19.d6", "DC17.d0", "DC17.d4", "DC17.d5", "DC17.d6", "DC17.d2", "DC17.d3", "DC17.d7", "DC17.d1", "DC1SP.d5", "DC1SP.d1", "DC1SP.d7", "DC1SP.d0", "DC1SP.d3", "DC1SP.d2", "DC1SP.d6", "DC1SP.d4", }; //------------------------------------------------------------------------------ static const char * dramSiteCardA4PortDRank0[] = { "DD05.d7", "DD05.d5", "DD05.d2", "DD05.d4", "DD05.d3", "DD05.d1", "DD05.d6", "DD05.d0", "DD04.d7", "DD04.d3", "DD04.d2", "DD04.d0", "DD04.d5", "DD04.d1", "DD04.d4", "DD04.d6", "DD02.d5", "DD02.d6", "DD02.d1", "DD02.d7", "DD02.d4", "DD02.d3", "DD02.d0", "DD02.d2", "DD08.d3", "DD08.d1", "DD08.d6", "DD08.d4", "DD08.d5", "DD08.d7", "DD08.d2", "DD08.d0", "DD01.d6", "DD01.d0", "DD01.d7", "DD01.d5", "DD01.d4", "DD01.d2", "DD01.d3", "DD01.d1", "DD09.d0", "DD09.d2", "DD09.d1", "DD09.d5", "DD09.d4", "DD09.d6", "DD09.d7", "DD09.d3", "DD03.d2", "DD03.d3", "DD03.d6", "DD03.d4", "DD03.d5", "DD03.d1", "DD03.d0", "DD03.d7", "DD07.d7", "DD07.d1", "DD07.d4", "DD07.d0", "DD07.d3", "DD07.d5", "DD07.d2", "DD07.d6", "DD06.d5", "DD06.d7", "DD06.d4", "DD06.d1", "DD06.d2", "DD06.d6", "DD06.d3", "DD06.d0", "DD0SP.d7", "DD0SP.d5", "DD0SP.d0", "DD0SP.d4", "DD0SP.d6", "DD0SP.d3", "DD0SP.d2", "DD0SP.d1", }; //------------------------------------------------------------------------------ static const char * dramSiteCardA4PortDRank4[] = { "DD15.d6", "DD15.d4", "DD15.d3", "DD15.d5", "DD15.d2", "DD15.d0", "DD15.d7", "DD15.d1", "DD14.d6", "DD14.d2", "DD14.d3", "DD14.d1", "DD14.d4", "DD14.d0", "DD14.d5", "DD14.d7", "DD12.d4", "DD12.d7", "DD12.d0", "DD12.d6", "DD12.d5", "DD12.d2", "DD12.d1", "DD12.d3", "DD18.d2", "DD18.d0", "DD18.d7", "DD18.d5", "DD18.d4", "DD18.d6", "DD18.d3", "DD18.d1", "DD11.d7", "DD11.d1", "DD11.d6", "DD11.d4", "DD11.d5", "DD11.d3", "DD11.d2", "DD11.d0", "DD19.d1", "DD19.d3", "DD19.d0", "DD19.d4", "DD19.d5", "DD19.d7", "DD19.d6", "DD19.d2", "DD13.d3", "DD13.d2", "DD13.d7", "DD13.d5", "DD13.d4", "DD13.d0", "DD13.d1", "DD13.d6", "DD17.d6", "DD17.d0", "DD17.d5", "DD17.d1", "DD17.d2", "DD17.d4", "DD17.d3", "DD17.d7", "DD16.d4", "DD16.d6", "DD16.d5", "DD16.d0", "DD16.d3", "DD16.d7", "DD16.d2", "DD16.d1", "DD1SP.d6", "DD1SP.d4", "DD1SP.d1", "DD1SP.d5", "DD1SP.d7", "DD1SP.d2", "DD1SP.d3", "DD1SP.d0", }; //------------------------------------------------------------------------------ static const char ** dqSiteMap_rcA4 [MAX_MBA_PER_MEMBUF][MBA_DIMMS_PER_RANK][MASTER_RANKS_PER_PORT] = { { // MBA 0 { // Port 0 dramSiteCardA4PortARank0, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardA4PortARank4, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramSiteCardA4PortBRank0, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardA4PortBRank4, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, { // MBA 1 { // Port 0 dramSiteCardA4PortCRank0, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardA4PortCRank4, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramSiteCardA4PortDRank0, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardA4PortDRank4, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, }; //############################################################################## // DRAM site tables for RAW CARD B4 //############################################################################## static const char * dramSiteCardB4PortARank0[] = { "DA07.d3", "DA07.d0", "DA07.d2", "DA07.d1", "DA02.d0", "DA02.d2", "DA02.d3", "DA02.d1", "DA03.d0", "DA03.d1", "DA03.d3", "DA03.d2", "DA04.d3", "DA04.d1", "DA04.d0", "DA04.d2", "DA12.d3", "DA12.d1", "DA12.d2", "DA12.d0", "DA06.d1", "DA06.d3", "DA06.d2", "DA06.d0", "DA11.d2", "DA11.d0", "DA11.d3", "DA11.d1", "DA05.d2", "DA05.d3", "DA05.d0", "DA05.d1", "DA14.d3", "DA14.d1", "DA14.d2", "DA14.d0", "DA18.d3", "DA18.d1", "DA18.d2", "DA18.d0", "DA13.d3", "DA13.d1", "DA13.d2", "DA13.d0", "DA19.d3", "DA19.d1", "DA19.d0", "DA19.d2", "DA09.d0", "DA09.d3", "DA09.d1", "DA09.d2", "DA16.d2", "DA16.d1", "DA16.d3", "DA16.d0", "DA08.d1", "DA08.d3", "DA08.d0", "DA08.d2", "DA15.d0", "DA15.d2", "DA15.d3", "DA15.d1", "DA01.d1", "DA01.d2", "DA01.d0", "DA01.d3", "DA17.d0", "DA17.d2", "DA17.d3", "DA17.d1", "DA1SP.d0", "DA1SP.d1", "DA1SP.d2", "DA1SP.d3", "", "", "", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardB4PortARank4[] = { "DA27.d2", "DA27.d1", "DA27.d3", "DA27.d0", "DA22.d1", "DA22.d3", "DA22.d2", "DA22.d0", "DA23.d1", "DA23.d0", "DA23.d2", "DA23.d3", "DA24.d2", "DA24.d0", "DA24.d1", "DA24.d3", "DA32.d2", "DA32.d0", "DA32.d3", "DA32.d1", "DA26.d0", "DA26.d2", "DA26.d3", "DA26.d1", "DA31.d3", "DA31.d1", "DA31.d2", "DA31.d0", "DA25.d3", "DA25.d2", "DA25.d1", "DA25.d0", "DA34.d2", "DA34.d0", "DA34.d3", "DA34.d1", "DA38.d2", "DA38.d0", "DA38.d3", "DA38.d1", "DA33.d2", "DA33.d0", "DA33.d3", "DA33.d1", "DA39.d2", "DA39.d0", "DA39.d1", "DA39.d3", "DA29.d1", "DA29.d2", "DA29.d0", "DA29.d3", "DA36.d3", "DA36.d0", "DA36.d2", "DA36.d1", "DA28.d0", "DA28.d2", "DA28.d1", "DA28.d3", "DA35.d1", "DA35.d3", "DA35.d2", "DA35.d0", "DA21.d0", "DA21.d3", "DA21.d1", "DA21.d2", "DA37.d1", "DA37.d3", "DA37.d2", "DA37.d0", "DA3SP.d1", "DA3SP.d0", "DA3SP.d3", "DA3SP.d2", "", "", "", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardB4PortBRank0[] = { "DB13.d2", "DB13.d0", "DB13.d1", "DB13.d3", "DB16.d1", "DB16.d2", "DB16.d3", "DB16.d0", "DB14.d3", "DB14.d0", "DB14.d1", "DB14.d2", "DB17.d1", "DB17.d2", "DB17.d3", "DB17.d0", "DB01.d3", "DB01.d1", "DB01.d0", "DB01.d2", "DB15.d2", "DB15.d3", "DB15.d0", "DB15.d1", "DB11.d0", "DB11.d2", "DB11.d1", "DB11.d3", "DB19.d2", "DB19.d0", "DB19.d1", "DB19.d3", "DB04.d1", "DB04.d0", "DB04.d2", "DB04.d3", "DB03.d0", "DB03.d2", "DB03.d1", "DB03.d3", "DB05.d0", "DB05.d3", "DB05.d2", "DB05.d1", "DB07.d1", "DB07.d3", "DB07.d0", "DB07.d2", "DB06.d2", "DB06.d1", "DB06.d3", "DB06.d0", "DB09.d3", "DB09.d1", "DB09.d0", "DB09.d2", "DB08.d3", "DB08.d1", "DB08.d2", "DB08.d0", "DB18.d2", "DB18.d3", "DB18.d0", "DB18.d1", "DB02.d1", "DB02.d3", "DB02.d2", "DB02.d0", "DB12.d2", "DB12.d0", "DB12.d1", "DB12.d3", "DB1SP.d0", "DB1SP.d1", "DB1SP.d2", "DB1SP.d3", "", "", "", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardB4PortBRank4[] = { "DB33.d3", "DB33.d1", "DB33.d0", "DB33.d2", "DB36.d0", "DB36.d3", "DB36.d2", "DB36.d1", "DB34.d2", "DB34.d1", "DB34.d0", "DB34.d3", "DB37.d0", "DB37.d3", "DB37.d2", "DB37.d1", "DB21.d2", "DB21.d0", "DB21.d1", "DB21.d3", "DB35.d3", "DB35.d2", "DB35.d1", "DB35.d0", "DB31.d1", "DB31.d3", "DB31.d0", "DB31.d2", "DB39.d3", "DB39.d1", "DB39.d0", "DB39.d2", "DB24.d0", "DB24.d1", "DB24.d3", "DB24.d2", "DB23.d1", "DB23.d3", "DB23.d0", "DB23.d2", "DB25.d1", "DB25.d2", "DB25.d3", "DB25.d0", "DB27.d0", "DB27.d2", "DB27.d1", "DB27.d3", "DB26.d3", "DB26.d0", "DB26.d2", "DB26.d1", "DB29.d2", "DB29.d0", "DB29.d1", "DB29.d3", "DB28.d2", "DB28.d0", "DB28.d3", "DB28.d1", "DB38.d3", "DB38.d2", "DB38.d1", "DB38.d0", "DB22.d0", "DB22.d2", "DB22.d3", "DB22.d1", "DB32.d3", "DB32.d1", "DB32.d0", "DB32.d2", "DB3SP.d1", "DB3SP.d0", "DB3SP.d3", "DB3SP.d2", "", "", "", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardB4PortCRank0[] = { "DC18.d3", "DC18.d1", "DC18.d0", "DC18.d2", "DC09.d2", "DC09.d3", "DC09.d0", "DC09.d1", "DC08.d1", "DC08.d3", "DC08.d0", "DC08.d2", "DC07.d3", "DC07.d1", "DC07.d2", "DC07.d0", "DC16.d0", "DC16.d1", "DC16.d2", "DC16.d3", "DC17.d3", "DC17.d2", "DC17.d1", "DC17.d0", "DC19.d0", "DC19.d3", "DC19.d2", "DC19.d1", "DC01.d3", "DC01.d0", "DC01.d1", "DC01.d2", "DC12.d3", "DC12.d1", "DC12.d0", "DC12.d2", "DC02.d3", "DC02.d1", "DC02.d2", "DC02.d0", "DC13.d0", "DC13.d2", "DC13.d3", "DC13.d1", "DC14.d2", "DC14.d0", "DC14.d3", "DC14.d1", "DC11.d0", "DC11.d2", "DC11.d1", "DC11.d3", "DC03.d3", "DC03.d1", "DC03.d0", "DC03.d2", "DC04.d2", "DC04.d3", "DC04.d1", "DC04.d0", "DC15.d3", "DC15.d1", "DC15.d0", "DC15.d2", "DC05.d1", "DC05.d3", "DC05.d2", "DC05.d0", "DC06.d2", "DC06.d3", "DC06.d1", "DC06.d0", "DC1SP.d1", "DC1SP.d0", "DC1SP.d2", "DC1SP.d3", "", "", "", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardB4PortCRank4[] = { "DC38.d2", "DC38.d0", "DC38.d1", "DC38.d3", "DC29.d3", "DC29.d2", "DC29.d1", "DC29.d0", "DC28.d0", "DC28.d2", "DC28.d1", "DC28.d3", "DC27.d2", "DC27.d0", "DC27.d3", "DC27.d1", "DC36.d1", "DC36.d0", "DC36.d3", "DC36.d2", "DC37.d2", "DC37.d3", "DC37.d0", "DC37.d1", "DC39.d1", "DC39.d2", "DC39.d3", "DC39.d0", "DC21.d2", "DC21.d1", "DC21.d0", "DC21.d3", "DC32.d2", "DC32.d0", "DC32.d1", "DC32.d3", "DC22.d2", "DC22.d0", "DC22.d3", "DC22.d1", "DC33.d1", "DC33.d3", "DC33.d2", "DC33.d0", "DC34.d3", "DC34.d1", "DC34.d2", "DC34.d0", "DC31.d1", "DC31.d3", "DC31.d0", "DC31.d2", "DC23.d2", "DC23.d0", "DC23.d1", "DC23.d3", "DC24.d3", "DC24.d2", "DC24.d0", "DC24.d1", "DC35.d2", "DC35.d0", "DC35.d1", "DC35.d3", "DC25.d0", "DC25.d2", "DC25.d3", "DC25.d1", "DC26.d3", "DC26.d2", "DC26.d0", "DC26.d1", "DC3SP.d0", "DC3SP.d1", "DC3SP.d3", "DC3SP.d2", "", "", "", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardB4PortDRank0[] = { "DD13.d0", "DD13.d2", "DD13.d3", "DD13.d1", "DD16.d2", "DD16.d0", "DD16.d3", "DD16.d1", "DD19.d3", "DD19.d1", "DD19.d0", "DD19.d2", "DD15.d3", "DD15.d1", "DD15.d2", "DD15.d0", "DD14.d0", "DD14.d1", "DD14.d2", "DD14.d3", "DD12.d0", "DD12.d2", "DD12.d3", "DD12.d1", "DD11.d2", "DD11.d1", "DD11.d3", "DD11.d0", "DD18.d1", "DD18.d3", "DD18.d2", "DD18.d0", "DD08.d0", "DD08.d3", "DD08.d1", "DD08.d2", "DD03.d3", "DD03.d1", "DD03.d0", "DD03.d2", "DD04.d2", "DD04.d0", "DD04.d3", "DD04.d1", "DD01.d3", "DD01.d1", "DD01.d2", "DD01.d0", "DD05.d3", "DD05.d2", "DD05.d0", "DD05.d1", "DD02.d2", "DD02.d1", "DD02.d0", "DD02.d3", "DD06.d2", "DD06.d0", "DD06.d1", "DD06.d3", "DD07.d2", "DD07.d0", "DD07.d1", "DD07.d3", "DD09.d2", "DD09.d0", "DD09.d3", "DD09.d1", "DD17.d2", "DD17.d3", "DD17.d1", "DD17.d0", "DD1SP.d0", "DD1SP.d2", "DD1SP.d3", "DD1SP.d1", "", "", "", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardB4PortDRank4[] = { "DD33.d1", "DD33.d3", "DD33.d2", "DD33.d0", "DD36.d3", "DD36.d1", "DD36.d2", "DD36.d0", "DD39.d2", "DD39.d0", "DD39.d1", "DD39.d3", "DD35.d2", "DD35.d0", "DD35.d3", "DD35.d1", "DD34.d1", "DD34.d0", "DD34.d3", "DD34.d2", "DD32.d1", "DD32.d3", "DD32.d2", "DD32.d0", "DD31.d3", "DD31.d0", "DD31.d2", "DD31.d1", "DD38.d0", "DD38.d2", "DD38.d3", "DD38.d1", "DD28.d1", "DD28.d2", "DD28.d0", "DD28.d3", "DD23.d2", "DD23.d0", "DD23.d1", "DD23.d3", "DD24.d3", "DD24.d1", "DD24.d2", "DD24.d0", "DD21.d2", "DD21.d0", "DD21.d3", "DD21.d1", "DD25.d2", "DD25.d3", "DD25.d1", "DD25.d0", "DD22.d3", "DD22.d0", "DD22.d1", "DD22.d2", "DD26.d3", "DD26.d1", "DD26.d0", "DD26.d2", "DD27.d3", "DD27.d1", "DD27.d0", "DD27.d2", "DD29.d3", "DD29.d1", "DD29.d2", "DD29.d0", "DD37.d3", "DD37.d2", "DD37.d0", "DD37.d1", "DD3SP.d1", "DD3SP.d3", "DD3SP.d2", "DD3SP.d0", "", "", "", "", }; //------------------------------------------------------------------------------ static const char ** dqSiteMap_rcB4 [MAX_MBA_PER_MEMBUF][MBA_DIMMS_PER_RANK][MASTER_RANKS_PER_PORT] = { { // MBA 0 { // Port 0 dramSiteCardB4PortARank0, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardB4PortARank4, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramSiteCardB4PortBRank0, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardB4PortBRank4, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, { // MBA 1 { // Port 0 dramSiteCardB4PortCRank0, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardB4PortCRank4, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramSiteCardB4PortDRank0, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardB4PortDRank4, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, }; //############################################################################## // DRAM site tables for RAW CARD C4 //############################################################################## static const char * dramSiteCardC4PortARank04[] = { "DA12.d0", "DA12.d1", "DA12.d2", "DA12.d3", "DA02.d1", "DA02.d0", "DA02.d3", "DA02.d2", "DA05.d1", "DA05.d0", "DA05.d2", "DA05.d3", "DA15.d1", "DA15.d2", "DA15.d3", "DA15.d0", "DA17.d3", "DA17.d1", "DA17.d2", "DA17.d0", "DA07.d0", "DA07.d2", "DA07.d1", "DA07.d3", "DA18.d2", "DA18.d1", "DA18.d3", "DA18.d0", "DA06.d1", "DA06.d2", "DA06.d3", "DA06.d0", "DA03.d1", "DA03.d3", "DA03.d2", "DA03.d0", "DA13.d3", "DA13.d2", "DA13.d1", "DA13.d0", "DA16.d0", "DA16.d2", "DA16.d1", "DA16.d3", "DA08.d2", "DA08.d3", "DA08.d0", "DA08.d1", "DA14.d3", "DA14.d0", "DA14.d2", "DA14.d1", "DA04.d0", "DA04.d3", "DA04.d2", "DA04.d1", "DA09.d1", "DA09.d2", "DA09.d3", "DA09.d0", "DA19.d0", "DA19.d3", "DA19.d2", "DA19.d1", "DA01.d2", "DA01.d1", "DA01.d3", "DA01.d0", "DA11.d1", "DA11.d3", "DA11.d0", "DA11.d2", "DA1SP.d2", "DA1SP.d3", "DA1SP.d0", "DA1SP.d1", "", "", "", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardC4PortBRank04[] = { "DB08.d1", "DB08.d0", "DB08.d2", "DB08.d3", "DB18.d3", "DB18.d2", "DB18.d0", "DB18.d1", "DB12.d3", "DB12.d0", "DB12.d2", "DB12.d1", "DB02.d0", "DB02.d3", "DB02.d2", "DB02.d1", "DB04.d1", "DB04.d3", "DB04.d2", "DB04.d0", "DB14.d0", "DB14.d2", "DB14.d1", "DB14.d3", "DB13.d2", "DB13.d0", "DB13.d3", "DB13.d1", "DB03.d0", "DB03.d1", "DB03.d2", "DB03.d3", "DB17.d0", "DB17.d2", "DB17.d1", "DB17.d3", "DB07.d1", "DB07.d0", "DB07.d3", "DB07.d2", "DB05.d1", "DB05.d0", "DB05.d3", "DB05.d2", "DB15.d0", "DB15.d2", "DB15.d1", "DB15.d3", "DB09.d2", "DB09.d1", "DB09.d3", "DB09.d0", "DB19.d2", "DB19.d0", "DB19.d1", "DB19.d3", "DB01.d1", "DB01.d3", "DB01.d0", "DB01.d2", "DB11.d0", "DB11.d3", "DB11.d2", "DB11.d1", "DB06.d2", "DB06.d0", "DB06.d1", "DB06.d3", "DB16.d3", "DB16.d1", "DB16.d2", "DB16.d0", "DB1SP.d2", "DB1SP.d3", "DB1SP.d1", "DB1SP.d0", "", "", "", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardC4PortCRank04[] = { "DC13.d1", "DC13.d3", "DC13.d0", "DC13.d2", "DC03.d0", "DC03.d2", "DC03.d3", "DC03.d1", "DC04.d1", "DC04.d2", "DC04.d3", "DC04.d0", "DC14.d1", "DC14.d3", "DC14.d0", "DC14.d2", "DC06.d0", "DC06.d3", "DC06.d1", "DC06.d2", "DC16.d2", "DC16.d0", "DC16.d3", "DC16.d1", "DC09.d3", "DC09.d2", "DC09.d1", "DC09.d0", "DC19.d1", "DC19.d0", "DC19.d3", "DC19.d2", "DC12.d2", "DC12.d0", "DC12.d3", "DC12.d1", "DC02.d3", "DC02.d1", "DC02.d2", "DC02.d0", "DC17.d2", "DC17.d0", "DC17.d1", "DC17.d3", "DC07.d3", "DC07.d1", "DC07.d0", "DC07.d2", "DC05.d1", "DC05.d3", "DC05.d2", "DC05.d0", "DC15.d2", "DC15.d0", "DC15.d3", "DC15.d1", "DC01.d0", "DC01.d3", "DC01.d2", "DC01.d1", "DC11.d3", "DC11.d0", "DC11.d1", "DC11.d2", "DC08.d1", "DC08.d3", "DC08.d2", "DC08.d0", "DC18.d0", "DC18.d2", "DC18.d1", "DC18.d3", "DC1SP.d3", "DC1SP.d0", "DC1SP.d1", "DC1SP.d2", "", "", "", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardC4PortDRank04[] = { "DD06.d2", "DD06.d1", "DD06.d0", "DD06.d3", "DD16.d3", "DD16.d2", "DD16.d0", "DD16.d1", "DD05.d1", "DD05.d3", "DD05.d2", "DD05.d0", "DD15.d2", "DD15.d0", "DD15.d3", "DD15.d1", "DD13.d3", "DD13.d0", "DD13.d1", "DD13.d2", "DD03.d1", "DD03.d3", "DD03.d2", "DD03.d0", "DD09.d3", "DD09.d1", "DD09.d2", "DD09.d0", "DD19.d0", "DD19.d2", "DD19.d1", "DD19.d3", "DD12.d2", "DD12.d1", "DD12.d3", "DD12.d0", "DD02.d0", "DD02.d2", "DD02.d3", "DD02.d1", "DD18.d1", "DD18.d3", "DD18.d0", "DD18.d2", "DD08.d0", "DD08.d2", "DD08.d3", "DD08.d1", "DD04.d0", "DD04.d1", "DD04.d3", "DD04.d2", "DD14.d2", "DD14.d0", "DD14.d3", "DD14.d1", "DD11.d0", "DD11.d2", "DD11.d1", "DD11.d3", "DD01.d1", "DD01.d3", "DD01.d0", "DD01.d2", "DD17.d3", "DD17.d0", "DD17.d1", "DD17.d2", "DD07.d2", "DD07.d1", "DD07.d3", "DD07.d0", "DD1SP.d1", "DD1SP.d3", "DD1SP.d2", "DD1SP.d0", "", "", "", "", }; //------------------------------------------------------------------------------ static const char ** dqSiteMap_rcC4 [MAX_MBA_PER_MEMBUF][MBA_DIMMS_PER_RANK][MASTER_RANKS_PER_PORT] = { { // MBA 0 { // Port 0 dramSiteCardC4PortARank04, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardC4PortARank04, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramSiteCardC4PortBRank04, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardC4PortBRank04, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, { // MBA 1 { // Port 0 dramSiteCardC4PortCRank04, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardC4PortCRank04, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramSiteCardC4PortDRank04, NULL, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardC4PortDRank04, NULL, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, }; //############################################################################## // DRAM site tables for RAW CARD D4 //############################################################################## static const char * dramSiteCardD4PortARank01[] = { "DA07.d3", "DA07.d0", "DA07.d2", "DA07.d1", "DA02.d0", "DA02.d2", "DA02.d3", "DA02.d1", "DA03.d0", "DA03.d1", "DA03.d3", "DA03.d2", "DA04.d3", "DA04.d1", "DA04.d0", "DA04.d2", "DA12.d3", "DA12.d1", "DA12.d2", "DA12.d0", "DA06.d1", "DA06.d3", "DA06.d2", "DA06.d0", "DA05.d1", "DA05.d0", "DA05.d3", "DA05.d2", "DA11.d1", "DA11.d0", "DA11.d3", "DA11.d2", "DA14.d3", "DA14.d1", "DA14.d2", "DA14.d0", "DA18.d3", "DA18.d1", "DA18.d2", "DA18.d0", "DA13.d3", "DA13.d1", "DA13.d2", "DA13.d0", "DA19.d3", "DA19.d1", "DA19.d0", "DA19.d2", "DA09.d0", "DA09.d3", "DA09.d1", "DA09.d2", "DA16.d2", "DA16.d1", "DA16.d3", "DA16.d0", "DA08.d1", "DA08.d3", "DA08.d0", "DA08.d2", "DA15.d0", "DA15.d2", "DA15.d3", "DA15.d1", "DA01.d1", "DA01.d2", "DA01.d0", "DA01.d3", "DA17.d0", "DA17.d2", "DA17.d3", "DA17.d1", "DA1SP.d0", "DA1SP.d1", "DA1SP.d2", "DA1SP.d3", "", "", "", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardD4PortARank45[] = { "DA27.d2", "DA27.d1", "DA27.d3", "DA27.d0", "DA22.d1", "DA22.d3", "DA22.d2", "DA22.d0", "DA23.d1", "DA23.d0", "DA23.d2", "DA23.d3", "DA24.d2", "DA24.d0", "DA24.d1", "DA24.d3", "DA32.d2", "DA32.d0", "DA32.d3", "DA32.d1", "DA26.d0", "DA26.d2", "DA26.d3", "DA26.d1", "DA25.d0", "DA25.d1", "DA25.d2", "DA25.d3", "DA31.d0", "DA31.d1", "DA31.d2", "DA31.d3", "DA34.d2", "DA34.d0", "DA34.d3", "DA34.d1", "DA38.d2", "DA38.d0", "DA38.d3", "DA38.d1", "DA33.d2", "DA33.d0", "DA33.d3", "DA33.d1", "DA39.d2", "DA39.d0", "DA39.d1", "DA39.d3", "DA29.d1", "DA29.d2", "DA29.d0", "DA29.d3", "DA36.d3", "DA36.d0", "DA36.d2", "DA36.d1", "DA28.d0", "DA28.d2", "DA28.d1", "DA28.d3", "DA35.d1", "DA35.d3", "DA35.d2", "DA35.d0", "DA21.d0", "DA21.d3", "DA21.d1", "DA21.d2", "DA37.d1", "DA37.d3", "DA37.d2", "DA37.d0", "DA3SP.d1", "DA3SP.d0", "DA3SP.d3", "DA3SP.d2", "", "", "", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardD4PortBRank01[] = { "DB13.d2", "DB13.d0", "DB13.d1", "DB13.d3", "DB16.d1", "DB16.d2", "DB16.d3", "DB16.d0", "DB14.d3", "DB14.d0", "DB14.d1", "DB14.d2", "DB17.d1", "DB17.d2", "DB17.d3", "DB17.d0", "DB01.d3", "DB01.d1", "DB01.d0", "DB01.d2", "DB15.d2", "DB15.d3", "DB15.d0", "DB15.d1", "DB11.d0", "DB11.d2", "DB11.d1", "DB11.d3", "DB19.d2", "DB19.d0", "DB19.d1", "DB19.d3", "DB04.d1", "DB04.d0", "DB04.d2", "DB04.d3", "DB03.d0", "DB03.d2", "DB03.d1", "DB03.d3", "DB05.d0", "DB05.d3", "DB05.d2", "DB05.d1", "DB07.d1", "DB07.d3", "DB07.d0", "DB07.d2", "DB06.d2", "DB06.d1", "DB06.d3", "DB06.d0", "DB09.d3", "DB09.d1", "DB09.d0", "DB09.d2", "DB08.d3", "DB08.d1", "DB08.d2", "DB08.d0", "DB18.d2", "DB18.d3", "DB18.d0", "DB18.d1", "DB02.d1", "DB02.d3", "DB02.d2", "DB02.d0", "DB12.d2", "DB12.d0", "DB12.d1", "DB12.d3", "DBSP1.d1", "DBSP1.d2", "DBSP1.d0", "DBSP1.d3", "", "", "", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardD4PortBRank45[] = { "DB33.d3", "DB33.d1", "DB33.d0", "DB33.d2", "DB36.d0", "DB36.d3", "DB36.d2", "DB36.d1", "DB34.d2", "DB34.d1", "DB34.d0", "DB34.d3", "DB37.d0", "DB37.d3", "DB37.d2", "DB37.d1", "DB21.d2", "DB21.d0", "DB21.d1", "DB21.d3", "DB35.d3", "DB35.d2", "DB35.d1", "DB35.d0", "DB31.d1", "DB31.d3", "DB31.d0", "DB31.d2", "DB39.d3", "DB39.d1", "DB39.d0", "DB39.d2", "DB24.d0", "DB24.d1", "DB24.d3", "DB24.d2", "DB23.d1", "DB23.d3", "DB23.d0", "DB23.d2", "DB25.d1", "DB25.d2", "DB25.d3", "DB25.d0", "DB27.d0", "DB27.d2", "DB27.d1", "DB27.d3", "DB26.d3", "DB26.d0", "DB26.d2", "DB26.d1", "DB29.d2", "DB29.d0", "DB29.d1", "DB29.d3", "DB28.d2", "DB28.d0", "DB28.d3", "DB28.d1", "DB38.d3", "DB38.d2", "DB38.d1", "DB38.d0", "DB22.d0", "DB22.d2", "DB22.d3", "DB22.d1", "DB32.d3", "DB32.d1", "DB32.d0", "DB32.d2", "DBSP3.d0", "DBSP3.d3", "DBSP3.d1", "DBSP3.d2", "", "", "", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardD4PortCRank01[] = { "DC18.d3", "DC18.d1", "DC18.d0", "DC18.d2", "DC09.d2", "DC09.d3", "DC09.d0", "DC09.d1", "DC08.d1", "DC08.d3", "DC08.d0", "DC08.d2", "DC07.d3", "DC07.d1", "DC07.d2", "DC07.d0", "DC16.d0", "DC16.d1", "DC16.d2", "DC16.d3", "DC17.d3", "DC17.d2", "DC17.d1", "DC17.d0", "DC19.d0", "DC19.d3", "DC19.d2", "DC19.d1", "DC01.d3", "DC01.d0", "DC01.d1", "DC01.d2", "DC12.d3", "DC12.d1", "DC12.d0", "DC12.d2", "DC02.d3", "DC02.d1", "DC02.d2", "DC02.d0", "DC13.d0", "DC13.d2", "DC13.d3", "DC13.d1", "DC14.d2", "DC14.d0", "DC14.d3", "DC14.d1", "DC11.d0", "DC11.d2", "DC11.d1", "DC11.d3", "DC03.d3", "DC03.d1", "DC03.d0", "DC03.d2", "DC04.d2", "DC04.d3", "DC04.d1", "DC04.d0", "DC15.d3", "DC15.d1", "DC15.d0", "DC15.d2", "DC05.d1", "DC05.d3", "DC05.d2", "DC05.d0", "DC06.d2", "DC06.d3", "DC06.d1", "DC06.d0", "DC1SP.d1", "DC1SP.d0", "DC1SP.d2", "DC1SP.d3", "", "", "", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardD4PortCRank45[] = { "DC38.d2", "DC38.d0", "DC38.d1", "DC38.d3", "DC29.d3", "DC29.d2", "DC29.d1", "DC29.d0", "DC28.d0", "DC28.d2", "DC28.d1", "DC28.d3", "DC27.d2", "DC27.d0", "DC27.d3", "DC27.d1", "DC36.d1", "DC36.d0", "DC36.d3", "DC36.d2", "DC37.d2", "DC37.d3", "DC37.d0", "DC37.d1", "DC39.d1", "DC39.d2", "DC39.d3", "DC39.d0", "DC21.d2", "DC21.d1", "DC21.d0", "DC21.d3", "DC32.d2", "DC32.d0", "DC32.d1", "DC32.d3", "DC22.d2", "DC22.d0", "DC22.d3", "DC22.d1", "DC33.d1", "DC33.d3", "DC33.d2", "DC33.d0", "DC34.d3", "DC34.d1", "DC34.d2", "DC34.d0", "DC31.d1", "DC31.d3", "DC31.d0", "DC31.d2", "DC23.d2", "DC23.d0", "DC23.d1", "DC23.d3", "DC24.d3", "DC24.d2", "DC24.d0", "DC24.d1", "DC35.d2", "DC35.d0", "DC35.d1", "DC35.d3", "DC25.d0", "DC25.d2", "DC25.d3", "DC25.d1", "DC26.d3", "DC26.d2", "DC26.d0", "DC26.d1", "DC3SP.d0", "DC3SP.d1", "DC3SP.d3", "DC3SP.d2", "", "", "", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardD4PortDRank01[] = { "DD13.d0", "DD13.d2", "DD13.d3", "DD13.d1", "DD16.d2", "DD16.d0", "DD16.d3", "DD16.d1", "DD19.d3", "DD19.d1", "DD19.d0", "DD19.d2", "DD15.d3", "DD15.d1", "DD15.d2", "DD15.d0", "DD14.d0", "DD14.d1", "DD14.d2", "DD14.d3", "DD12.d0", "DD12.d2", "DD12.d3", "DD12.d1", "DD11.d2", "DD11.d1", "DD11.d3", "DD11.d0", "DD18.d1", "DD18.d3", "DD18.d2", "DD18.d0", "DD08.d0", "DD08.d3", "DD08.d1", "DD08.d2", "DD03.d3", "DD03.d1", "DD03.d0", "DD03.d2", "DD04.d2", "DD04.d0", "DD04.d3", "DD04.d1", "DD01.d3", "DD01.d1", "DD01.d2", "DD01.d0", "DD05.d3", "DD05.d2", "DD05.d0", "DD05.d1", "DD02.d2", "DD02.d1", "DD02.d0", "DD02.d3", "DD06.d2", "DD06.d0", "DD06.d1", "DD06.d3", "DD07.d2", "DD07.d0", "DD07.d1", "DD07.d3", "DD09.d2", "DD09.d0", "DD09.d3", "DD09.d1", "DD17.d2", "DD17.d3", "DD17.d1", "DD17.d0", "DDSP1.d0", "DDSP1.d2", "DDSP1.d3", "DDSP1.d1", "", "", "", "", }; //------------------------------------------------------------------------------ static const char * dramSiteCardD4PortDRank45[] = { "DD33.d1", "DD33.d3", "DD33.d2", "DD33.d0", "DD36.d3", "DD36.d1", "DD36.d2", "DD36.d0", "DD39.d2", "DD39.d0", "DD39.d1", "DD39.d3", "DD35.d2", "DD35.d0", "DD35.d3", "DD35.d1", "DD34.d1", "DD34.d0", "DD34.d3", "DD34.d2", "DD32.d1", "DD32.d3", "DD32.d2", "DD32.d0", "DD31.d3", "DD31.d0", "DD31.d2", "DD31.d1", "DD38.d0", "DD38.d2", "DD38.d3", "DD38.d1", "DD28.d1", "DD28.d2", "DD28.d0", "DD28.d3", "DD23.d2", "DD23.d0", "DD23.d1", "DD23.d3", "DD24.d3", "DD24.d1", "DD24.d2", "DD24.d0", "DD21.d2", "DD21.d0", "DD21.d3", "DD21.d1", "DD25.d2", "DD25.d3", "DD25.d1", "DD25.d0", "DD22.d3", "DD22.d0", "DD22.d1", "DD22.d2", "DD26.d3", "DD26.d1", "DD26.d0", "DD26.d2", "DD27.d3", "DD27.d1", "DD27.d0", "DD27.d2", "DD29.d3", "DD29.d1", "DD29.d2", "DD29.d0", "DD37.d3", "DD37.d2", "DD37.d0", "DD37.d1", "DDSP3.d1", "DDSP3.d3", "DDSP3.d2", "DDSP3.d0", "", "", "", "", }; //------------------------------------------------------------------------------ static const char ** dqSiteMap_rcD4 [MAX_MBA_PER_MEMBUF][MBA_DIMMS_PER_RANK][MASTER_RANKS_PER_PORT] = { { // MBA 0 { // Port 0 dramSiteCardD4PortARank01, dramSiteCardD4PortARank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardD4PortARank45, dramSiteCardD4PortARank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramSiteCardD4PortBRank01, dramSiteCardD4PortBRank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardD4PortBRank45, dramSiteCardD4PortBRank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, { // MBA 1 { // Port 0 dramSiteCardD4PortCRank01, dramSiteCardD4PortCRank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardD4PortCRank45, dramSiteCardD4PortCRank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, { // Port 1 dramSiteCardD4PortDRank01, dramSiteCardD4PortDRank01, // Ranks 0-1 NULL, NULL, // Ranks 2-3 dramSiteCardD4PortDRank45, dramSiteCardD4PortDRank45, // Ranks 4-5 NULL, NULL, // Ranks 6-7 }, }, }; //############################################################################## // Support functions for looking up DRAM site locations //############################################################################## int32_t isX4Dram( uint8_t i_cardType, bool & o_x4Dram ) { int32_t o_rc = SUCCESS; o_x4Dram = false; switch ( i_cardType ) { case CEN_TYPE_A: o_x4Dram = false; break; case CEN_TYPE_B: o_x4Dram = true; break; case CEN_TYPE_C: o_x4Dram = true; break; case CEN_TYPE_D: o_x4Dram = true; break; case CEN_TYPE_A4: o_x4Dram = false; break; case CEN_TYPE_B4: o_x4Dram = true; break; case CEN_TYPE_C4: o_x4Dram = true; break; case CEN_TYPE_D4: o_x4Dram = true; break; default: o_rc = FAIL; } return o_rc; } //------------------------------------------------------------------------------ // NOTE: o_cardName will always return a non-NULL string of exactly 2 // characters, regardless if this function gave a bad return code. int32_t getDramSiteInfo( uint8_t i_cardType, uint8_t i_mbaPos, uint8_t i_ps, uint8_t i_mrank, const char * & o_cardName, const char ** & o_dqMap, const char ** & o_dramMap ) { int32_t o_rc = SUCCESS; o_cardName = " "; o_dqMap = NULL; o_dramMap = NULL; do { if ( (MAX_MBA_PER_MEMBUF <= i_mbaPos) || (MBA_DIMMS_PER_RANK <= i_ps ) || (MASTER_RANKS_PER_PORT <= i_mrank ) ) { o_rc = FAIL; break; } switch ( i_cardType ) { case CEN_TYPE_A: o_cardName = "A "; o_dqMap = dqSiteMap_rcA[i_mbaPos][i_ps][i_mrank]; o_dramMap = dramSiteMap_rcA[i_mbaPos][i_ps][i_mrank]; break; case CEN_TYPE_B: o_cardName = "B "; o_dqMap = dqSiteMap_rcB[i_mbaPos][i_ps][i_mrank]; o_dramMap = dramSiteMap_rcB[i_mbaPos][i_ps][i_mrank]; break; case CEN_TYPE_C: o_cardName = "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_cardName = "D "; o_dqMap = dqSiteMap_rcD[i_mbaPos][i_ps][i_mrank]; o_dramMap = dramSiteMap_rcD[i_mbaPos][i_ps][i_mrank]; break; case CEN_TYPE_A4: o_cardName = "A4"; o_dqMap = dqSiteMap_rcA4[i_mbaPos][i_ps][i_mrank]; // We can use the same dram Mapping as a similar card o_dramMap = dramSiteMap_rcA[i_mbaPos][i_ps][i_mrank]; break; case CEN_TYPE_B4: o_cardName = "B4"; o_dqMap = dqSiteMap_rcB4[i_mbaPos][i_ps][i_mrank]; // We can use the same dram Mapping as a similar card o_dramMap = dramSiteMap_rcB[i_mbaPos][i_ps][i_mrank]; break; case CEN_TYPE_C4: o_cardName = "C4"; o_dqMap = dqSiteMap_rcC4[i_mbaPos][i_ps][i_mrank]; // We can use the same dram Mapping as a similar card o_dramMap = dramSiteMap_rcC[i_mbaPos][i_ps][i_mrank]; break; case CEN_TYPE_D4: o_cardName = "D4"; o_dqMap = dqSiteMap_rcD4[i_mbaPos][i_ps][i_mrank]; // We can use the same dram Mapping as a similar card o_dramMap = dramSiteMap_rcD[i_mbaPos][i_ps][i_mrank]; break; default: o_rc = FAIL; } if ( SUCCESS != o_rc ) break; if ( (NULL == o_dqMap) || (NULL == o_dramMap) ) { o_rc = FAIL; break; } } while (0); return o_rc; } //------------------------------------------------------------------------------ // Returns the symbol 0-71, or 0-1 if ECC spared. uint8_t transEccSpare( uint8_t i_symbol, bool i_isEccSpared ) { uint8_t sym = i_symbol; if ( i_isEccSpared ) { // The ECC spare is on symbols 0 and 1, so adjust this symbol to match. sym %= MBA_SYMBOLS_PER_NIBBLE; } return sym; } //------------------------------------------------------------------------------ // Returns the DQ site index 0-71, or 72-79 if spared to DRAM uint8_t transDramSpare( uint8_t i_dq, bool i_isDramSpared ) { uint8_t dqIdx = i_dq; if ( i_isDramSpared ) { // The DRAM spare indexes are 72-79, so adjust this DQ to match. dqIdx = DQS_PER_DIMM + (i_dq % DQS_PER_BYTE); } return dqIdx; } //------------------------------------------------------------------------------ // The DRAM site index is different than the DRAM number used in symbol2Dram() // or dram2Symbol(). This index is solely used for accessing the DRAM site // tables above. uint8_t dqSiteIdx2DramSiteIdx( uint8_t i_dqSiteIdx, bool i_isX4Dram ) { const uint8_t dqsPerDram = i_isX4Dram ? DQS_PER_NIBBLE : DQS_PER_BYTE; return i_dqSiteIdx / dqsPerDram; } //------------------------------------------------------------------------------ // Helper functions //------------------------------------------------------------------------------ // Displays symbol value. If symbol is not valid, will display '--' in output. void getDramRepairSymbolStr( uint8_t i_value, char * o_str, uint32_t i_strSize ) { if ( SYMBOLS_PER_RANK <= i_value ) { snprintf( o_str, i_strSize, "--" ); } else { snprintf( o_str, i_strSize, "%2u", i_value ); } } // Gets the string representation for a single bad DQ bitmap entry. void getBadDqBitmapEntry( uint8_t * i_buffer, char * o_str, TYPE i_type ) { uint32_t entrySize = DQ_BITMAP::ENTRY_SIZE; UtilMem membuf( i_buffer, entrySize ); uint8_t rank; membuf >> rank; snprintf( o_str, DATA_SIZE, "R:%1d", rank ); char temp[DATA_SIZE]; uint8_t port; membuf >> port; snprintf( temp, DATA_SIZE, "P:%1d", port ); strcat( o_str, temp ); strcat( o_str, " " ); for ( int32_t b = 0; b < DQ_BITMAP::BITMAP_SIZE; b++ ) { uint8_t byte; membuf >> byte; snprintf( temp, DATA_SIZE, "%02x", byte ); strcat( o_str, temp ); } } // Gets the string representation for a single row repair entry. void getRowRepairEntry( uint8_t * i_buffer, char * o_str ) { uint32_t entrySize = ROW_REPAIR::ENTRY_SIZE; UtilMem membuf( i_buffer, entrySize ); uint8_t rank; membuf >> rank; snprintf( o_str, DATA_SIZE, "R:%1d ", rank ); char temp[DATA_SIZE]; uint8_t port; membuf >> port; snprintf( temp, DATA_SIZE, "P:%1d", port ); strcat( o_str, temp ); strcat( o_str, " " ); for ( int32_t b = 0; b < ROW_REPAIR::ROW_REPAIR_SIZE; b++ ) { uint8_t byte; membuf >> byte; snprintf( temp, DATA_SIZE, "%02x", byte ); strcat( o_str, temp ); } } //------------------------------------------------------------------------------ // Function definitions //------------------------------------------------------------------------------ // Helper function for parseMemMruData() void initMemMruStrings( MemoryMruData::MemMruMeld i_mm, bool & o_addDramSite, char * o_header, char * o_data ) { o_addDramSite = false; memset( o_header, '\0', HEADER_SIZE ); memset( o_data, '\0', DATA_SIZE ); // Get the position info (default MBA). const char * compStr = "mba"; uint8_t nodePos = i_mm.s.nodePos; uint8_t chipPos = (i_mm.s.procPos << 3) | i_mm.s.chnlPos; uint8_t compPos = i_mm.s.mbaPos; if ( i_mm.s.isMca ) // MCA { compStr = "mca"; chipPos = i_mm.s.procPos; compPos = i_mm.s.chnlPos; } else if ( i_mm.s.isOcmb ) // OCMB { compStr = "ocmb"; } // Build the header string. snprintf( o_header, HEADER_SIZE, " %s(n%dp%dc%d) Rank:m%ds%d", compStr, nodePos, chipPos, compPos, i_mm.s.mrank, i_mm.s.srank ); // Build the generic data string (no DRAM site info). switch ( i_mm.s.symbol ) { case MemoryMruData::CALLOUT_RANK: snprintf( o_data, DATA_SIZE, "Special: CALLOUT_RANK" ); break; case MemoryMruData::CALLOUT_ALL_MEM: snprintf( o_data, DATA_SIZE, "Special: CALLOUT_ALL_MEM" ); break; default: if ( SYMBOLS_PER_RANK > i_mm.s.symbol ) { o_addDramSite = true; // Only condition where a DRAM site // location is relevant. snprintf( o_data, DATA_SIZE, "Sym:%d Pins:%d S:%c E:%c ", i_mm.s.symbol, i_mm.s.pins, (1 == i_mm.s.dramSpared) ? 'Y' : 'N', (1 == i_mm.s.eccSpared) ? 'Y' : 'N' ); } } // Output should look like: // | mba(n0p0c0) Rank:M7 : Special: CALLOUT_RANK | // | mba(n7p63c1) Rank:M0S7 : Symbol:71 Pins:3 S:Y E:N | // DRAM site info will be added later. } //------------------------------------------------------------------------------ // Helper function for parseMemMruData() void addDramSiteString( const MemoryMruData::ExtendedData & i_extMemMru, char * io_data ) { MemoryMruData::MemMruMeld mm = i_extMemMru.mmMeld; // Get the symbol and adjust for ECC spare, if needed. This must be done to // ensure the symbol is on the correct port. uint8_t symbol = transEccSpare( mm.s.symbol, mm.s.eccSpared ); // Get the DQ indexes for site location tables, adjusting for spare DRAM, if // needed. uint8_t dqIdx = mm.s.isMca ? symbol2Dq(symbol) : symbol2Dq(symbol); dqIdx = transDramSpare( dqIdx, mm.s.dramSpared ); // Add the DRAM site info to the current data. if ( i_extMemMru.isBufDimm ) // Centaur DIMMs only { // Get the DRAM site location information. const char * cardName; const char ** dramMap; const char ** dqMap; uint8_t ps = symbol2PortSlct( symbol ); if ( SUCCESS == getDramSiteInfo(i_extMemMru.cardType, mm.s.mbaPos, ps, mm.s.mrank, cardName, dqMap, dramMap) ) { // Add raw card name. strcat( io_data, "RC:" ); strcat( io_data, cardName ); // Add DRAM site info. strcat( io_data, " Site:" ); switch ( mm.s.pins ) { case EVEN_SYMBOL_DQ: strcat( io_data, dqMap[dqIdx] ); break; case ODD_SYMBOL_DQ: strcat( io_data, dqMap[dqIdx+1] ); break; case BOTH_SYMBOL_DQS: strcat( io_data, dqMap[dqIdx] ); strcat( io_data, "," ); strcat( io_data, dqMap[dqIdx+1] ); break; case NO_SYMBOL_DQS: { uint8_t dramIdx = dqSiteIdx2DramSiteIdx( dqIdx, i_extMemMru.isX4Dram ); strcat( io_data, dramMap[dramIdx] ); break; } } } } else // Dram site locations not supported { // Add DQ info. char tmp[DATA_SIZE] = { '\0' }; strcat( io_data, "DQ:" ); if ( mm.s.isMca || mm.s.isOcmb ) // MCA, OCMB { // There is only one DQ per symbol. snprintf( tmp, DATA_SIZE, "%d", i_extMemMru.dqMapping[dqIdx] ); } else // MBA { switch ( mm.s.pins ) { case EVEN_SYMBOL_DQ: snprintf( tmp, DATA_SIZE, "%d", i_extMemMru.dqMapping[dqIdx] ); break; case ODD_SYMBOL_DQ: snprintf( tmp, DATA_SIZE, "%d", i_extMemMru.dqMapping[dqIdx+1]); break; case BOTH_SYMBOL_DQS: case NO_SYMBOL_DQS: snprintf( tmp, DATA_SIZE, "%d,%d", i_extMemMru.dqMapping[dqIdx], i_extMemMru.dqMapping[dqIdx+1] ); break; } } strcat( io_data, tmp ); } } //------------------------------------------------------------------------------ void parseMemMruData( ErrlUsrParser & i_parser, uint32_t i_memMru ) { MemoryMruData::MemMruMeld mm; mm.u = i_memMru; bool addDramSite; char header[HEADER_SIZE]; char data[DATA_SIZE]; initMemMruStrings( mm, addDramSite, header, data ); // No DRAM site location data available. i_parser.PrintString( header, data ); } //------------------------------------------------------------------------------ void parseMemMruData( ErrlUsrParser & i_parser, const MemoryMruData::ExtendedData & i_extMemMru ) { bool addDramSite; char header[HEADER_SIZE]; char data[DATA_SIZE]; initMemMruStrings( i_extMemMru.mmMeld, addDramSite, header, data ); if ( addDramSite ) { // Get the DRAM site location information from the extended data. addDramSiteString( i_extMemMru, data ); } i_parser.PrintString( header, data ); } //------------------------------------------------------------------------------ bool parseMemUeTable( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) { using namespace UE_TABLE; bool rc = true; if ( NULL == i_buffer ) return false; // Something failed in parser. const uint32_t entries = i_buflen / ENTRY_SIZE; i_parser.PrintNumber( " MEM_UE_TABLE", "%d", entries ); const char * hh = " Count Type"; const char * hd = "Rank Bank Row Column"; i_parser.PrintString( hh, hd ); hh = " ----- -------------"; hd = "---- ---- ------- ------"; i_parser.PrintString( hh, hd ); for ( uint32_t i = 0; i < entries; i++ ) { uint32_t idx = i * ENTRY_SIZE; uint32_t count = i_buffer[idx ]; // 8-bit uint32_t type = i_buffer[idx+1] >> 4; // 4-bit // 4 spare bits // 4-bit uint32_t mrnk = (i_buffer[idx+2] >> 5) & 0x7; // 3-bit uint32_t srnk = (i_buffer[idx+2] >> 2) & 0x7; // 3-bit uint32_t row0_1 = i_buffer[idx+2] & 0x3; // 2-bit uint32_t row2_9 = i_buffer[idx+3]; // 8-bit uint32_t row10_17 = i_buffer[idx+4]; // 8-bit uint32_t bnk = (i_buffer[idx+5] >> 3) & 0x1f; // 5-bit // 2 spare bits // 2-bit uint32_t col0 = i_buffer[idx+5] & 0x1; // 1-bit uint32_t col1_8 = i_buffer[idx+6]; // 8-bit uint32_t row = (row0_1 << 16) | (row2_9 << 8) | row10_17; uint32_t col = (col0 << 8) | col1_8; const char * type_str = "UNKNOWN "; // 13 characters switch ( type ) { case SCRUB_MPE: type_str = "SCRUB_MPE "; break; case FETCH_MPE: type_str = "FETCH_MPE "; break; case SCRUB_UE: type_str = "SCRUB_UE "; break; case FETCH_UE: type_str = "FETCH_UE "; break; } char header[HEADER_SIZE] = { '\0' }; snprintf( header, HEADER_SIZE, " %3d %s", count, type_str ); char data[DATA_SIZE] = { '\0' }; snprintf( data, DATA_SIZE, "m%ds%d 0x%02x 0x%05x 0x%03x", mrnk, srnk, bnk, row, col ); i_parser.PrintString( header, data ); } return rc; } //------------------------------------------------------------------------------ bool parseMemCeTable( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) { using namespace CE_TABLE; bool o_rc = true; if ( NULL == i_buffer ) return false; // Something failed in parser. if ( i_buflen < METADATA_SIZE ) return false; // Something failed in parser. const uint32_t entries = (i_buflen - METADATA_SIZE ) / ENTRY_SIZE; i_parser.PrintNumber( " MEM_CE_TABLE", "%d", entries ); const char * hh = " A H Count RC"; const char * hd = "Rank P Bank Row Column DRAM Pins S E Site"; i_parser.PrintString( hh, hd ); hh = " - - ----- ----"; hd = "---- - ---- ------- ------ ---- ---- - - ------"; i_parser.PrintString( hh, hd ); // Get the metadata info. uint8_t isMba = (i_buffer[0] >> 7) & 0x1; // 1-bit uint8_t mbaPos = (i_buffer[0] >> 6) & 0x1; // 1-bit // 6 spare bits // 6-bit uint8_t rcType = i_buffer[1]; // 8-bit // Bytes 2-7 are currently unused. // Get the entry info. for ( uint32_t idx = METADATA_SIZE, entry = 0; idx < i_buflen && entry < entries; idx += CE_TABLE::ENTRY_SIZE, entry++ ) { uint32_t count = i_buffer[idx ]; // 8-bit // 5 spare bits // 5-bit uint32_t isSp = (i_buffer[idx+1] >> 2) & 0x1; // 1-bit uint32_t isEcc = (i_buffer[idx+1] >> 1) & 0x1; // 1-bit uint32_t ps = i_buffer[idx+1] & 0x1; // 1-bit uint32_t isHard = (i_buffer[idx+2] >> 7) & 0x1; // 1-bit uint32_t active = (i_buffer[idx+2] >> 6) & 0x1; // 1-bit uint32_t dram = i_buffer[idx+2] & 0x3f; // 6-bit uint32_t dramPins = i_buffer[idx+3]; // 8-bit uint32_t mrnk = (i_buffer[idx+4] >> 5) & 0x7; // 3-bit uint32_t srnk = (i_buffer[idx+4] >> 2) & 0x7; // 3-bit uint32_t row0_1 = i_buffer[idx+4] & 0x3; // 2-bit uint32_t row2_9 = i_buffer[idx+5]; // 8-bit uint32_t row10_17 = i_buffer[idx+6]; // 8-bit uint32_t bnk = (i_buffer[idx+7] >> 3) & 0x1f; // 5-bit // 2 spare bits // 2-bit uint32_t col0 = i_buffer[idx+7] & 0x1; // 1-bit uint32_t col1_8 = i_buffer[idx+8]; // 8-bit uint32_t row = (row0_1 << 16) | (row2_9 << 8) | row10_17; uint32_t col = (col0 << 8) | col1_8; char active_char = ( 1 == active ) ? 'Y':'N'; char isHard_char = ( 1 == isHard ) ? 'Y':'N'; char isSp_char = ( 1 == isSp ) ? 'Y':'N'; char isEcc_char = ( 1 == isEcc ) ? 'Y':'N'; const char * cardName_str = ""; const char * portSlct_str = " "; // intentionally an empty space. const char * dramSite_str = ""; if ( 1 == isMba ) { // Get the DRAM site location information. const char ** dqMap; const char ** dramMap; int32_t l_rc = getDramSiteInfo( rcType, mbaPos, ps, mrnk, cardName_str, dqMap, dramMap ); // Check if DIMM has x4 DRAMs. bool x4Dram; l_rc |= isX4Dram( rcType, x4Dram ); // Get the DRAM site string. if ( (SUCCESS == l_rc) && (dram < (x4Dram ? MBA_NIBBLES_PER_RANK : MBA_BYTES_PER_RANK)) ) { uint8_t tmp = x4Dram ? nibble2Symbol(dram) : byte2Symbol (dram); // Get the DRAM index for site location table. uint8_t symbol = transEccSpare( tmp, (1 == isEcc) ); uint8_t dqIdx = transDramSpare( symbol2Dq(symbol), (1 == isSp) ); uint8_t dramIdx = dqSiteIdx2DramSiteIdx( dqIdx, x4Dram ); dramSite_str = dramMap[dramIdx]; } // Get the port select string. char tmp[DATA_SIZE] = { '\0' }; snprintf( tmp, DATA_SIZE, "%1d", ps ); portSlct_str = tmp; } // Build the header string. char header[HEADER_SIZE] = { '\0' }; snprintf( header, HEADER_SIZE, " %c %c %3d %s ", active_char, isHard_char, count, cardName_str ); // Build the data string. char data[DATA_SIZE] = { '\0' }; snprintf( data, DATA_SIZE, "m%ds%d %s 0x%02x 0x%05x 0x%03x %2d 0x%02x %c %c %s", mrnk, srnk, portSlct_str, bnk, row, col, dram, dramPins, isSp_char, isEcc_char, dramSite_str ); // Print the line. i_parser.PrintString( header, data ); } return o_rc; } //------------------------------------------------------------------------------ bool parseIueCounts( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) { bool rc = true; // 2 bytes per entry const uint32_t entries = i_buflen / 2; i_parser.PrintNumber( " IUE COUNTS", "%d", entries ); const char * hh = "Rank "; const char * hd = "Count"; i_parser.PrintString( hh, hd ); hh = "---- "; hd = "-----"; i_parser.PrintString( hh, hd ); for ( uint32_t i = 0; i < entries; i++ ) { uint8_t idx = i*2; uint8_t rank = i_buffer[idx]; uint8_t count = i_buffer[idx+1]; char header[HEADER_SIZE] = { '\0' }; snprintf( header, DATA_SIZE, "%d ", rank ); char data[DATA_SIZE] = { '\0' }; snprintf( header, DATA_SIZE, "%d", count ); i_parser.PrintString( header, data ); } return rc; } //------------------------------------------------------------------------------ bool parseMemRceTable( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) { using namespace RCE_TABLE; bool rc = true; // Check if something failed in parser. if ( ( NULL == i_buffer ) || ( 0 == i_buflen) ) return false; const uint32_t entries = i_buffer[0]; i_parser.PrintNumber( " MEM_RCE_TABLE", "%d", entries ); for ( uint32_t i = 0; i < entries; i++ ) { uint32_t idx = 1 + i * ENTRY_SIZE; uint32_t mrnk = (i_buffer[idx ] >> 5) & 0x7; // 3-bit uint32_t srnk = (i_buffer[idx ] >> 2) & 0x7; // 3-bit uint32_t count = i_buffer[idx+1]; // 8-bit // Build the data string. char data[DATA_SIZE] = ""; snprintf( data, DATA_SIZE, "rank = m%ds%d count = %d", mrnk, srnk, count ); // Print the line. i_parser.PrintString( "", data ); } return rc; } //------------------------------------------------------------------------------ bool parseDramRepairsData( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) { bool rc = true; if ( NULL != i_buffer ) { UtilMem l_membuf( i_buffer, i_buflen ); DramRepairUsrData usrData; l_membuf >> usrData; uint8_t rankCount = usrData.header.rankCount; i_parser.PrintNumber( " DRAM_REPAIRS_DATA", "%d", rankCount ); // Iterate over all ranks for ( uint8_t rankIdx = 0; rankIdx < rankCount; rankIdx++ ) { char data[64]; char temp[64]; char symbolStr[10]; DramRepairRankData rankEntry = usrData.rankDataList[rankIdx]; snprintf(temp, 64, "Rank: %d", rankEntry.rank); snprintf(data, 64, temp); getDramRepairSymbolStr(rankEntry.chipMark, symbolStr, 10); snprintf(temp, 64, "%s CM: %s", data, symbolStr); snprintf(data, 64, temp); getDramRepairSymbolStr(rankEntry.symbolMark, symbolStr, 10); snprintf(temp, 64, "%s SM: %s", data, symbolStr); snprintf(data, 64, temp); // Display DRAM spare information if spare DRAM is supported. if ( usrData.header.isSpareDram ) { getDramRepairSymbolStr(rankEntry.port0Spare, symbolStr, 10); snprintf(temp, 64, "%s Sp0: %s", data, symbolStr); snprintf(data, 64, temp); getDramRepairSymbolStr(rankEntry.port1Spare, symbolStr, 10); snprintf(temp, 64, "%s Sp1: %s", data, symbolStr); snprintf(data, 64, temp); } // Display ECC spare information for X4 DRAMs if ( usrData.header.isEccSp ) { getDramRepairSymbolStr( rankEntry.eccSpare, symbolStr, 10 ); snprintf(temp, 64, "%s EccSp: %s", data, symbolStr); snprintf(data, 64, temp); } i_parser.PrintString( "", data ); } } else { rc = false; } return rc; } //------------------------------------------------------------------------------ bool parseDramRepairsVpd( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser, TARGETING::TYPE i_type ) { bool rc = true; if ( NULL == i_buffer ) return false; // Something failed in parser. uint32_t entrySize = DQ_BITMAP::ENTRY_SIZE; const uint32_t entries = i_buflen / entrySize; i_parser.PrintNumber( " DRAM_REPAIRS_VPD", "%d", entries ); for ( uint32_t i = 0; i < entries; i++ ) { char data[DATA_SIZE]; getBadDqBitmapEntry( &i_buffer[i*entrySize], data, i_type ); i_parser.PrintString( "", data ); } return rc; } //------------------------------------------------------------------------------ bool parseBadDqBitmap( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser, TARGETING::TYPE i_type ) { bool rc = true; if ( NULL == i_buffer ) return false; // Something failed in parser. uint32_t entrySize = DQ_BITMAP::ENTRY_SIZE; if ( entrySize > i_buflen ) // Data is expected to be one entry. { i_parser.PrintString( " BAD_DQ_BITMAP", "" ); i_parser.PrintHexDump(i_buffer, i_buflen); } else { char data[DATA_SIZE]; getBadDqBitmapEntry( i_buffer, data, i_type ); i_parser.PrintString( " BAD_DQ_BITMAP", data ); } return rc; } //------------------------------------------------------------------------------ bool parseRowRepairVpd( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) { bool rc = true; if ( NULL == i_buffer ) return false; // Something failed in parser. uint32_t entrySize = ROW_REPAIR::ENTRY_SIZE; const uint32_t entries = i_buflen / entrySize; i_parser.PrintNumber( " ROW_REPAIR_VPD", "%d", entries ); for ( uint32_t i = 0; i < entries; i++ ) { char data[DATA_SIZE]; getRowRepairEntry( &i_buffer[i*entrySize], data ); i_parser.PrintString( "", data ); } return rc; } //------------------------------------------------------------------------------ bool parseTdCtlrStateData( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser, uint32_t i_sigId ) { bool o_rc = true; // Make sure we have a valid buffer. if ( (NULL == i_buffer) || (0 == i_buflen) ) return false; // This is a copy of the enum in prdfMemTdQueue.H. enum TdType { VCM_EVENT = 0, DSD_EVENT, TPS_EVENT, INVALID_EVENT = 0xf, }; do { const uint32_t bitLen = i_buflen * 8; BitString bs ( bitLen, (CPU_WORD*)i_buffer ); uint32_t pos = 0; //###################################################################### // Header data //###################################################################### // Get the data state and version. if ( bitLen < 4 ) { o_rc = false; break; } uint8_t state = bs.getFieldJustify( pos, 1 ); pos+=1; uint8_t version = bs.getFieldJustify( pos, 3 ); pos+=3; if ( (TD_CTLR_DATA::VERSION_1 != version) && (TD_CTLR_DATA::VERSION_2 != version) ) { o_rc = false; break; } uint32_t hdrLen = TD_CTLR_DATA::v1_HEADER; uint32_t entLen = TD_CTLR_DATA::v1_ENTRY; if ( TD_CTLR_DATA::VERSION_2 == version ) { hdrLen = TD_CTLR_DATA::v2_HEADER; entLen = TD_CTLR_DATA::v2_ENTRY; } // Print the title and state. const char * state_str = ( TD_CTLR_DATA::RT == state ) ? "RT" : "IPL"; if ( Util::hashString(TD_CTLR_DATA::START) == i_sigId ) i_parser.PrintString( " TDCTLR_STATE_DATA_START", state_str ); else if ( Util::hashString(TD_CTLR_DATA::END) == i_sigId ) i_parser.PrintString( " TDCTLR_STATE_DATA_END", state_str ); // Get the rest of the header data. if ( bitLen < hdrLen ) { o_rc = false; break; } uint8_t curMrnk = bs.getFieldJustify( pos, 3 ); pos+=3; uint8_t curSrnk = bs.getFieldJustify( pos, 3 ); pos+=3; uint8_t curPhase = bs.getFieldJustify( pos, 4 ); pos+=4; uint8_t curType = bs.getFieldJustify( pos, 4 ); pos+=4; uint8_t queueCount = bs.getFieldJustify( pos, 4 ); pos+=4; uint8_t curPort = 0; if ( TD_CTLR_DATA::VERSION_2 == version ) { curPort = bs.getFieldJustify( pos, 2 ); pos+=2; } // Print the current procedure, if needed. if ( INVALID_EVENT != curType ) { const char * curType_str = ""; switch ( curType ) { case VCM_EVENT: curType_str = "VCM"; break; case DSD_EVENT: curType_str = "DSD"; break; case TPS_EVENT: curType_str = "TPS"; break; default : curType_str = "???"; break; } char curPort_str[DATA_SIZE] = ""; if ( TD_CTLR_DATA::VERSION_2 == version ) { snprintf( curPort_str, DATA_SIZE, "port %d", curPort ); } char curData_str[DATA_SIZE] = ""; snprintf( curData_str, DATA_SIZE, "%s phase %d on m%ds%d %s", curType_str, curPhase, curMrnk, curSrnk, curPort_str ); i_parser.PrintString( " Current procedure", curData_str ); } //###################################################################### // TD Queue entries //###################################################################### for ( uint8_t n = 0; n < queueCount; n++ ) { // Get the entry data. if ( bitLen < hdrLen + (n+1) * entLen ) { o_rc = false; break; } uint8_t itMrnk = bs.getFieldJustify( pos, 3 ); pos+=3; uint8_t itSrnk = bs.getFieldJustify( pos, 3 ); pos+=3; uint8_t itType = bs.getFieldJustify( pos, 4 ); pos+=4; uint8_t itPort = 0; if ( TD_CTLR_DATA::VERSION_2 == version ) { itPort = bs.getFieldJustify( pos, 2 ); pos+=2; } // Print the entry. const char * itType_str = ""; switch ( itType ) { case VCM_EVENT: itType_str = "VCM"; break; case DSD_EVENT: itType_str = "DSD"; break; case TPS_EVENT: itType_str = "TPS"; break; default : itType_str = "???"; break; } char itPort_str[DATA_SIZE] = ""; if ( TD_CTLR_DATA::VERSION_2 == version ) { snprintf( itPort_str, DATA_SIZE, "port %d", itPort ); } char itData_str[DATA_SIZE] = ""; snprintf( itData_str, DATA_SIZE, "%s on m%ds%d %s", itType_str, itMrnk, itSrnk, itPort_str ); i_parser.PrintString( " TD queue entry", itData_str ); } } while (0); if ( !o_rc ) { i_parser.PrintHexDump(i_buffer, i_buflen); } return o_rc; } //------------------------------------------------------------------------------ #if defined(PRDF_HOSTBOOT_ERRL_PLUGIN) || defined(PRDF_FSP_ERRL_PLUGIN) } // end namespace FSP/HOSTBOOT #endif } // end namespace PRDF