diff options
author | Matt Ploetz <maploetz@us.ibm.com> | 2015-07-19 15:38:27 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2015-09-11 13:18:00 -0500 |
commit | 2b0eccd26fe5e8f9516b14f4af689bbb085a43c0 (patch) | |
tree | 9e0f293a0031140ff3d9b331a1fa0b2b5440ef3a /src | |
parent | 2512b458dc679c86538f366126d2dab6c722fb75 (diff) | |
download | talos-hostboot-2b0eccd26fe5e8f9516b14f4af689bbb085a43c0.tar.gz talos-hostboot-2b0eccd26fe5e8f9516b14f4af689bbb085a43c0.zip |
Add support for Naples PCIE/IOP configs
Change-Id: Ifa545d748324bf1a4feadd13e5d855439da4c1ca
RTC:109249
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/19160
Tested-by: Jenkins Server
Tested-by: Jenkins OP Build CI
Tested-by: Jenkins OP HW
Tested-by: FSP CI Jenkins
Reviewed-by: WILLIAM G. HOFFA <wghoffa@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/include/usr/hwpf/istepreasoncodes.H | 3 | ||||
-rw-r--r-- | src/usr/devtree/bld_devtree.C | 2 | ||||
-rw-r--r-- | src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.C | 247 | ||||
-rw-r--r-- | src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.H | 22 | ||||
-rw-r--r-- | src/usr/hwpf/plat/fapiPlatAttributeService.C | 7 | ||||
-rw-r--r-- | src/usr/hwpf/plat/plat.mk | 3 | ||||
-rw-r--r-- | src/usr/targeting/common/xmltohb/attribute_types.xml | 20 |
7 files changed, 237 insertions, 67 deletions
diff --git a/src/include/usr/hwpf/istepreasoncodes.H b/src/include/usr/hwpf/istepreasoncodes.H index b433701cb..8dfe568ce 100644 --- a/src/include/usr/hwpf/istepreasoncodes.H +++ b/src/include/usr/hwpf/istepreasoncodes.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2012,2014 */ +/* Contributors Listed Below - COPYRIGHT 2012,2015 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -81,6 +81,7 @@ enum istepReasonCode ISTEP_INVALID_TARGET_TYPE = ISTEP_COMP_ID | 0x0A, ISTEP_INVALID_ATTR_VALUE = ISTEP_COMP_ID | 0x0B, ISTEP_INVALID_CONFIGURATION = ISTEP_COMP_ID | 0x0C, + ISTEP_INVALID_PCIE_IOP_LANE_CONFIG = ISTEP_COMP_ID | 0x0D, }; // end ISTEP } diff --git a/src/usr/devtree/bld_devtree.C b/src/usr/devtree/bld_devtree.C index f094238d9..f5523ca4c 100644 --- a/src/usr/devtree/bld_devtree.C +++ b/src/usr/devtree/bld_devtree.C @@ -74,7 +74,7 @@ enum BuildConstants CHIPID_NODE_SHIFT =3, /*CHIPID is NNNCCC, shift 3*/ CHIPID_PROC_MASK =0x7, /*CHIPID is NNNCCC, shift 3*/ PHB0_MASK =0x80, - MAX_PHBs =3, /*Max PHBs per chip is 3*/ + MAX_PHBs =4, /*Max PHBs per chip is 4*/ THREADPERCORE =8, /*8 threads per core*/ MHZ =1000000, diff --git a/src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.C b/src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.C index d02902071..c69c50a52 100644 --- a/src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.C +++ b/src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.C @@ -1011,10 +1011,11 @@ void _deconfigPhbsBasedOnPciState( // PCI-0 => PHB0 // PCI-1 => PHB1 // PCI-2 => PHB2 + // PCI-3 => PHB3 // // Further, io_phbActiveMask and activePciMask are bitmasks whose - // leftmost bit corresponds to PHB0, followed by bits for PHB1 and PHB2. - // The remaining bits are ignored. + // leftmost bit corresponds to PHB0, followed by bits for PHB1, PHB2 + // and PHB3. The remaining bits are ignored. // Compensate for the fact that PHB mask bits start on left side of the // mask @@ -1133,110 +1134,138 @@ errlHndl_t computeProcPcieConfigAttrs( i_pProcChipTarget ? i_pProcChipTarget->getAttr<TARGETING::ATTR_HUID>() : 0); - // TODO: - // RTC 109249: Update comments for 40 lanes in Naples - - // Currently there are two IOP config tables, one for procs with 24 usable - // PCIE lanes and one for proces with 32 usable PCIE lanes. In general, the - // code accumulates the current configuration of the IOPs from the MRW and - // other dynamic information (such as bifurcation, etc.), then matches that - // config to one of the rows in the table. Once a match is discovered, the - // IOP config value is pulled from the matching row and set in the - // attributes. + // Currently there are three IOP config tables, one for procs with 24, 32 + // or 40 usable PCIE lanes. In general, the code accumulates the current + // configuration of the IOPs from the MRW and other dynamic information + // (such as bifurcation, etc.), then matches that config to one of the + // rows in the table. Once a match is discovered, the IOP config value is + // pulled from the matching row and set in the attributes. const laneConfigRow x24_laneConfigTable[] = {{{{{LANE_WIDTH_16X,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}, {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x0,PHB0_MASK|PHB1_MASK}, {{{{LANE_WIDTH_16X,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}, {{LANE_WIDTH_NC,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x0,PHB0_MASK}, {{{{LANE_WIDTH_16X,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}, {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x1,PHB0_MASK|PHB1_MASK}, {{{{LANE_WIDTH_16X,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}, {{LANE_WIDTH_NC,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x1,PHB0_MASK}, {{{{LANE_WIDTH_8X,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}, {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x2,PHB0_MASK|PHB1_MASK}, {{{{LANE_WIDTH_8X,DSMP_DISABLE}, {LANE_WIDTH_8X,DSMP_DISABLE}}, {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x3,PHB0_MASK|PHB1_MASK|PHB2_MASK}, {{{{LANE_WIDTH_8X,DSMP_DISABLE}, {LANE_WIDTH_8X,DSMP_DISABLE}}, {{LANE_WIDTH_NC,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x3,PHB0_MASK|PHB2_MASK}, {{{{LANE_WIDTH_8X,DSMP_DISABLE}, {LANE_WIDTH_8X,DSMP_ENABLE}}, {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x4,PHB0_MASK|PHB1_MASK}, {{{{LANE_WIDTH_8X,DSMP_DISABLE}, {LANE_WIDTH_8X,DSMP_ENABLE}}, {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x5,PHB0_MASK|PHB1_MASK}, {{{{LANE_WIDTH_16X,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}, {{LANE_WIDTH_8X,DSMP_ENABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x6,PHB1_MASK}, {{{{LANE_WIDTH_8X,DSMP_DISABLE}, {LANE_WIDTH_8X,DSMP_DISABLE}}, {{LANE_WIDTH_8X,DSMP_ENABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x7,PHB1_MASK|PHB2_MASK}, {{{{LANE_WIDTH_8X,DSMP_ENABLE}, {LANE_WIDTH_8X,DSMP_ENABLE}}, {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x8,PHB1_MASK}, {{{{LANE_WIDTH_8X,DSMP_ENABLE}, {LANE_WIDTH_8X,DSMP_ENABLE}}, {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x9,PHB1_MASK}, {{{{LANE_WIDTH_8X,DSMP_ENABLE}, {LANE_WIDTH_8X,DSMP_DISABLE}}, {{LANE_WIDTH_8X,DSMP_ENABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0xA,PHB2_MASK}, {{{{LANE_WIDTH_8X,DSMP_DISABLE}, {LANE_WIDTH_8X,DSMP_ENABLE}}, {{LANE_WIDTH_8X,DSMP_ENABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0xB,PHB1_MASK}, {{{{LANE_WIDTH_8X,DSMP_ENABLE}, {LANE_WIDTH_8X,DSMP_DISABLE}}, {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0xC,PHB1_MASK|PHB2_MASK}, }; @@ -1249,61 +1278,81 @@ errlHndl_t computeProcPcieConfigAttrs( {{{{{LANE_WIDTH_16X,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}, {{LANE_WIDTH_16X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x0,PHB0_MASK|PHB1_MASK}, {{{{LANE_WIDTH_16X,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}, {{LANE_WIDTH_8X,DSMP_DISABLE}, - {LANE_WIDTH_8X,DSMP_DISABLE}}}, + {LANE_WIDTH_8X,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x1,PHB0_MASK|PHB1_MASK|PHB2_MASK}, {{{{LANE_WIDTH_8X,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}, {{LANE_WIDTH_16X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x2,PHB0_MASK|PHB1_MASK}, {{{{LANE_WIDTH_8X,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}, {{LANE_WIDTH_8X,DSMP_DISABLE}, - {LANE_WIDTH_8X,DSMP_DISABLE}}}, + {LANE_WIDTH_8X,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x3,PHB0_MASK|PHB1_MASK|PHB2_MASK}, {{{{LANE_WIDTH_8X,DSMP_DISABLE}, {LANE_WIDTH_8X,DSMP_ENABLE}}, {{LANE_WIDTH_16X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x4,PHB0_MASK|PHB1_MASK}, {{{{LANE_WIDTH_8X,DSMP_DISABLE}, {LANE_WIDTH_8X,DSMP_ENABLE}}, {{LANE_WIDTH_8X,DSMP_DISABLE}, - {LANE_WIDTH_8X,DSMP_DISABLE}}}, + {LANE_WIDTH_8X,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x5,PHB0_MASK|PHB1_MASK|PHB2_MASK}, {{{{LANE_WIDTH_8X,DSMP_ENABLE}, {LANE_WIDTH_8X,DSMP_DISABLE}}, {{LANE_WIDTH_16X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x6,PHB0_MASK|PHB1_MASK}, {{{{LANE_WIDTH_8X,DSMP_ENABLE}, {LANE_WIDTH_8X,DSMP_DISABLE}}, {{LANE_WIDTH_8X,DSMP_DISABLE}, - {LANE_WIDTH_8X,DSMP_DISABLE}}}, + {LANE_WIDTH_8X,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x7,PHB0_MASK|PHB1_MASK|PHB2_MASK}, {{{{LANE_WIDTH_8X,DSMP_ENABLE}, {LANE_WIDTH_8X,DSMP_ENABLE}}, {{LANE_WIDTH_16X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x8,PHB1_MASK}, {{{{LANE_WIDTH_8X,DSMP_ENABLE}, {LANE_WIDTH_8X,DSMP_ENABLE}}, {{LANE_WIDTH_8X,DSMP_DISABLE}, - {LANE_WIDTH_8X,DSMP_DISABLE}}}, + {LANE_WIDTH_8X,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x9,PHB1_MASK|PHB2_MASK}, }; @@ -1311,6 +1360,60 @@ errlHndl_t computeProcPcieConfigAttrs( ( sizeof(x32_laneConfigTable) / sizeof(x32_laneConfigTable[0])); + const laneConfigRow x40_laneConfigTable[] = + {{{{{LANE_WIDTH_16X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_16X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}}, + 0x0,PHB0_MASK|PHB1_MASK|PHB3_MASK}, + + {{{{LANE_WIDTH_16X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_8X,DSMP_DISABLE}}, + {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}}, + 0x1,PHB0_MASK|PHB1_MASK|PHB2_MASK|PHB3_MASK}, + + {{{{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_16X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}}, + 0x2,PHB0_MASK|PHB1_MASK|PHB3_MASK}, + + {{{{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_8X,DSMP_DISABLE}}, + {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}}, + 0x3,PHB0_MASK|PHB1_MASK|PHB2_MASK|PHB3_MASK}, + + {{{{LANE_WIDTH_NC,DSMP_DISABLE}, + {LANE_WIDTH_8X,DSMP_DISABLE}}, + {{LANE_WIDTH_16X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}}, + 0x6,PHB0_MASK|PHB1_MASK|PHB3_MASK}, + + {{{{LANE_WIDTH_NC,DSMP_DISABLE}, + {LANE_WIDTH_8X,DSMP_DISABLE}}, + {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_8X,DSMP_DISABLE}}, + {{LANE_WIDTH_8X,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}}, + 0x7,PHB0_MASK|PHB1_MASK|PHB2_MASK|PHB3_MASK}, + }; + + const laneConfigRow* x40_end = x40_laneConfigTable + + ( sizeof(x40_laneConfigTable) + / sizeof(x40_laneConfigTable[0])); + errlHndl_t pError = NULL; const laneConfigRow* pLaneConfigTableBegin = NULL; const laneConfigRow* pLaneConfigTableEnd = NULL; @@ -1408,17 +1511,66 @@ errlHndl_t computeProcPcieConfigAttrs( pLaneConfigTableBegin = x24_laneConfigTable; pLaneConfigTableEnd = x24_end; } - - // TODO: - // RTC 109249: Support Naples with 40 lanes - + else if( i_pProcChipTarget->getAttr< + TARGETING::ATTR_PROC_PCIE_NUM_LANES>() + == IOP_LANES_PER_PROC_40X) + { + // Only certain IOP lane configs are supported for 40 lanes + // Error out if they are selected + uint8_t mrwIopConfig = i_pProcChipTarget->getAttr< + TARGETING::ATTR_PROC_PCIE_IOP_CONFIG>(); + for (uint8_t i=0; i<sizeof(UnsupportedLanesx40); i++) + { + if (mrwIopConfig == UnsupportedLanesx40[i]) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + ERR_MRK "computeProcPcieConfigAttrs> Code bug!" + "Input IOP lane config is not supported. " + "IOP config = 0x%08X, HUID = 0x%08X", + i_pProcChipTarget->getAttr< + TARGETING::ATTR_PROC_PCIE_IOP_CONFIG>(), + i_pProcChipTarget->getAttr<TARGETING::ATTR_HUID>()); + + /*@ + * @errortype + * @moduleid ISTEP_COMPUTE_PCIE_CONFIG_ATTRS + * @reasoncode ISTEP_INVALID_PCIE_IOP_LANE_CONFIG + * @userdata1[0:31] Target's HUID + * @userdata1[32:63] ATTR_PROC_PCIE_IOP_CONFIG attribute + * value + * @devdesc Illegal ATTR_PROC_PCIE_IOP_CONFIG attr + * read from a processor chip target. + * @custdesc A problem isolated to firmware or + * firmware customization occurred during + * the IPL of the system. + */ + pError = new ERRORLOG::ErrlEntry( + ERRORLOG::ERRL_SEV_UNRECOVERABLE, + ISTEP_COMPUTE_PCIE_CONFIG_ATTRS, + ISTEP_INVALID_PCIE_IOP_LANE_CONFIG, + TWO_UINT32_TO_UINT64( + i_pProcChipTarget->getAttr<TARGETING::ATTR_HUID>(), + i_pProcChipTarget->getAttr< + TARGETING::ATTR_PROC_PCIE_IOP_CONFIG>()), + 0, + true); + ERRORLOG::ErrlUserDetailsTarget + (i_pProcChipTarget).addToLog(pError); + pError->collectTrace(ISTEP_COMP_NAME); + break; + } + + pLaneConfigTableBegin = x40_laneConfigTable; + pLaneConfigTableEnd = x40_end; + } + } else { TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, ERR_MRK "computeProcPcieConfigAttrs> " "Code bug! Unsupported ATTR_PROC_PCIE_NUM_LANES attribute for " - "processor with HUID of 0x%08X. Expected 24 or 32, but read " - "value of %d.", + "processor with HUID of 0x%08X. Expected 24, 32 or 40, but " + "read a value of %d.", i_pProcChipTarget->getAttr<TARGETING::ATTR_HUID>(), i_pProcChipTarget->getAttr< TARGETING::ATTR_PROC_PCIE_NUM_LANES>()); @@ -1506,8 +1658,12 @@ errlHndl_t computeProcPcieConfigAttrs( TARGETING::ATTR_PROC_PCIE_IOP_SWAP_type effectiveLaneSwap = {0}; + // Get the actual number of IOPs for this proc + size_t iopsPerProc = (i_pProcChipTarget->getAttr< + TARGETING::ATTR_PROC_PCIE_NUM_IOP>()); + // Apply the non-bifurcated lane swap - for(size_t iop = 0; iop<MAX_IOPS_PER_PROC; ++iop) + for(size_t iop = 0; iop<iopsPerProc; ++iop) { uint8_t laneSwap = 0; for(size_t laneGroup = 0; @@ -1555,12 +1711,12 @@ errlHndl_t computeProcPcieConfigAttrs( memcpy( &effectiveLaneReversal[iop][0], &laneReversalBifurcated[iop][0], - sizeof(effectiveLaneReversal)/MAX_IOPS_PER_PROC); + sizeof(effectiveLaneReversal)/iopsPerProc); memcpy( &effectiveLaneMask[iop][0], &laneMaskBifurcated[iop][0], - sizeof(effectiveLaneMask)/MAX_IOPS_PER_PROC); + sizeof(effectiveLaneMask)/iopsPerProc); uint8_t laneSwap = 0; for(size_t laneGroup=0; @@ -1601,12 +1757,14 @@ errlHndl_t computeProcPcieConfigAttrs( {{{{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}, {{LANE_WIDTH_NC,DSMP_DISABLE}, + {LANE_WIDTH_NC,DSMP_DISABLE}}, + {{LANE_WIDTH_NC,DSMP_DISABLE}, {LANE_WIDTH_NC,DSMP_DISABLE}}}, 0x0,PHB_MASK_NA}; // Transform effective config to match lane config table format for(size_t iop = 0; - iop < MAX_IOPS_PER_PROC; + iop < iopsPerProc; ++iop) { for(size_t laneGroup = 0; @@ -1642,7 +1800,7 @@ errlHndl_t computeProcPcieConfigAttrs( TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, ERR_MRK "computeProcPcieConfigAttrs> " "Code bug! Proc PCIE IOP configuration not found. Continuing " - "with no PHBs active. " + "with no PHBs active. " "IOP0 Lane set 0: Lane mask = 0x%04X, DSMP enable = 0x%02X. " "IOP0 Lane set 1: Lane mask = 0x%04X, DSMP enable = 0x%02X. ", effectiveLaneMask[0][0],dsmpCapable[0][0], @@ -1653,6 +1811,11 @@ errlHndl_t computeProcPcieConfigAttrs( effectiveLaneMask[1][0],dsmpCapable[1][0], effectiveLaneMask[1][1],dsmpCapable[1][1]); TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "IOP2 Lane set 0: Lane mask = 0x%04X, DSMP enable = 0x%02X. " + "IOP2 Lane set 1: Lane mask = 0x%04X, DSMP enable = 0x%02X. ", + effectiveLaneMask[2][0],dsmpCapable[2][0], + effectiveLaneMask[2][1],dsmpCapable[2][1]); + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "Proc chip target HUID = 0x%08X.", i_pProcChipTarget->getAttr<TARGETING::ATTR_HUID>()); /*@ @@ -1660,14 +1823,12 @@ errlHndl_t computeProcPcieConfigAttrs( * @moduleid ISTEP_COMPUTE_PCIE_CONFIG_ATTRS * @reasoncode ISTEP_INVALID_CONFIGURATION * @userdata1[0:31] Target processor chip's HUID - * @userdata1[32:39] IOP 0 lane set 0 DSMP enable - * @userdata1[40:47] IOP 0 lane set 1 DSMP enable - * @userdata1[48:55] IOP 1 lane set 0 DSMP enable - * @userdata1[56:63] IOP 1 lane set 1 DSMP enable - * @userdata2[0:15] IOP 0 lane set 0 lane mask - * @userdata2[16:31] IOP 0 lane set 1 lane mask - * @userdata2[32:47] IOP 1 lane set 0 lane mask - * @userdata2[48:63] IOP 1 lane set 1 lane mask + * @userdata1[32:47] IOP 0 lane set 0 lane mask + * @userdata1[48:63] IOP 0 lane set 1 lane mask + * @userdata2[0:15] IOP 1 lane set 0 lane mask + * @userdata2[16:31] IOP 1 lane set 1 lane mask + * @userdata2[32:47] IOP 2 lane set 0 lane mask + * @userdata2[48:63] IOP 2 lane set 1 lane mask * @devdesc No valid PCIE IOP configuration found. All * PHBs on the processor will be disabled. * @custdesc A problem isolated to firmware or firmware @@ -1680,16 +1841,14 @@ errlHndl_t computeProcPcieConfigAttrs( ISTEP_INVALID_CONFIGURATION, TWO_UINT32_TO_UINT64( i_pProcChipTarget->getAttr<TARGETING::ATTR_HUID>(), - FOUR_UINT8_TO_UINT32( - dsmpCapable[0][0], - dsmpCapable[0][1], - dsmpCapable[1][0], - dsmpCapable[1][1])), + TWO_UINT16_TO_UINT32( + effectiveLaneMask[0][0], + effectiveLaneMask[0][1])), FOUR_UINT16_TO_UINT64( - effectiveLaneMask[0][0], - effectiveLaneMask[0][1], effectiveLaneMask[1][0], - effectiveLaneMask[1][1]), + effectiveLaneMask[1][1], + effectiveLaneMask[2][0], + effectiveLaneMask[2][1]), true); ERRORLOG::ErrlUserDetailsTarget(i_pProcChipTarget).addToLog(pError); pError->collectTrace(ISTEP_COMP_NAME); diff --git a/src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.H b/src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.H index 7907ae321..01246b53e 100644 --- a/src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.H +++ b/src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2012,2014 */ +/* Contributors Listed Below - COPYRIGHT 2012,2015 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -97,7 +97,7 @@ * @target_sched serial * @} * - */ + */ /******************************************************************************/ // Includes @@ -123,7 +123,8 @@ typedef std::list<uint32_t> BifurcatedIopsContainer; enum IopLanesPerProc { IOP_LANES_PER_PROC_24X = 24,// 24 Lanes per proc - IOP_LANES_PER_PROC_32X = 32 // 32 Lanes per proc + IOP_LANES_PER_PROC_32X = 32,// 32 Lanes per proc + IOP_LANES_PER_PROC_40X = 40,// 40 Lanes per proc }; /** @@ -136,10 +137,10 @@ struct LaneSet }; /** - * @brief Max possible IOPs per processor; invarient across all POWER8 - * processors + * @brief Max possible IOPs per processor; P8+ has 3 + * P8 has 2 */ -static const size_t MAX_IOPS_PER_PROC = 2; +static const size_t MAX_IOPS_PER_PROC = 3; /** * @brief Lane groups per IOP; invarient across all POWER8 processors @@ -161,7 +162,8 @@ struct laneConfigRow // PHB active mask (see PhbActiveMask enum) // PHB0 = 0x80 // PHB1 = 0x40 - // PHB1 = 0x20 + // PHB2 = 0x20 + // PHB3 = 0x10 uint8_t phbActive; }; @@ -203,9 +205,15 @@ enum PhbActiveMask PHB0_MASK = 0x80, ///< PHB0 enabled PHB1_MASK = 0x40, ///< PHB1 enabled PHB2_MASK = 0x20, ///< PHB2 enabled + PHB3_MASK = 0x10, ///< PHB3 enabled }; /** + * @brief Array of unsupported lanes configs for x40 lanes + */ +uint8_t UnsupportedLanesx40[] = {0x4,0x5,0x8,0x9,0xA,0xB,0xC}; + +/** * @brief call_proc_attr_update * * Stub to enable platforms to override attributes diff --git a/src/usr/hwpf/plat/fapiPlatAttributeService.C b/src/usr/hwpf/plat/fapiPlatAttributeService.C index 5c2bf00f6..9f2e85714 100644 --- a/src/usr/hwpf/plat/fapiPlatAttributeService.C +++ b/src/usr/hwpf/plat/fapiPlatAttributeService.C @@ -60,6 +60,7 @@ #include <hwpf/hwp/tp_dbg_data_accessors/getTpDbgDataAttr.H> #include <fapiAttributeIds.H> #include <hwas/common/hwasCommon.H> +#include <proc_setup_bars_defs.H> // The following file checks at compile time that all HWPF attributes are // handled by Hostboot. This is done to ensure that the HTML file listing @@ -949,7 +950,7 @@ fapi::ReturnCode fapiPlatGetProcPcieBarEnable ( // BAR # 0 are the PCIE Mem 64 // BAR # 1 are the PCIE Mem 32 // BAR # 2 are the PHB REGS - for( uint8_t u=0; u<3; u++ ) + for( uint8_t u=0; u< PROC_SETUP_BARS_PCIE_NUM_UNITS; u++ ) { if( phyp_mode ) { @@ -1030,7 +1031,7 @@ fapi::ReturnCode fapiPlatGetProcPcieBarBaseAddr ( //We will change the base addr down 4 bits, but need to keep //the proc/node offsets the same - for ( uint8_t u=0; u < 3; u++ ) + for ( uint8_t u=0; u < PROC_SETUP_BARS_PCIE_NUM_UNITS; u++ ) { if(TARGETING::is_sapphire_load()) { @@ -1077,7 +1078,7 @@ fapi::ReturnCode fapiPlatGetProcPcieBarSize ( { // NOTE: supported BAR0/1 sizes are from 64KB-1PB // NOTE: only supported BAR2 size is 4KB - for ( uint8_t u=0; u < 3; u++ ) + for ( uint8_t u=0; u < PROC_SETUP_BARS_PCIE_NUM_UNITS; u++ ) { o_pcieBarSize[u][0] = PCIE_BAR0_SIZE ; o_pcieBarSize[u][1] = PCIE_BAR1_SIZE ; diff --git a/src/usr/hwpf/plat/plat.mk b/src/usr/hwpf/plat/plat.mk index 4a6e3e098..063796055 100644 --- a/src/usr/hwpf/plat/plat.mk +++ b/src/usr/hwpf/plat/plat.mk @@ -5,7 +5,7 @@ # # OpenPOWER HostBoot Project # -# Contributors Listed Below - COPYRIGHT 2014 +# Contributors Listed Below - COPYRIGHT 2014,2015 # [+] International Business Machines Corp. # # @@ -29,6 +29,7 @@ EXTRAINCDIR += ${ROOTPATH}/src/include/usr/hwpf/fapi EXTRAINCDIR += ${ROOTPATH}/src/include/usr/hwpf/hwp EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/include EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/pstates/pstates +EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars OBJS += fapiPlatHwAccess.o OBJS += fapiPlatHwpInvoker.o diff --git a/src/usr/targeting/common/xmltohb/attribute_types.xml b/src/usr/targeting/common/xmltohb/attribute_types.xml index 833f27821..bd2f53d36 100644 --- a/src/usr/targeting/common/xmltohb/attribute_types.xml +++ b/src/usr/targeting/common/xmltohb/attribute_types.xml @@ -14792,7 +14792,7 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript <simpleType> <uint16_t> </uint16_t> - <array>2,2</array> + <array>3,2</array> </simpleType> <persistency>non-volatile</persistency> <readable/> @@ -14813,7 +14813,7 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript <simpleType> <uint8_t> </uint8_t> - <array>2,2</array> + <array>3,2</array> </simpleType> <persistency>non-volatile</persistency> <readable/> @@ -14836,7 +14836,7 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript <simpleType> <uint8_t> </uint8_t> - <array>2,2</array> + <array>3,2</array> </simpleType> <persistency>non-volatile</persistency> <readable/> @@ -14858,7 +14858,7 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript <simpleType> <uint8_t> </uint8_t> - <array>2,2</array> + <array>3,2</array> </simpleType> <persistency>non-volatile</persistency> <readable/> @@ -14880,7 +14880,7 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript </description> <simpleType> <uint8_t></uint8_t> - <array>2,2</array> + <array>3,2</array> </simpleType> <persistency>non-volatile</persistency> <readable/> @@ -14904,7 +14904,7 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript <simpleType> <uint16_t> </uint16_t> - <array>2,2</array> + <array>3,2</array> </simpleType> <persistency>non-volatile</persistency> <readable/> @@ -14925,7 +14925,7 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript <simpleType> <uint8_t> </uint8_t> - <array>2,2</array> + <array>3,2</array> </simpleType> <persistency>non-volatile</persistency> <readable/> @@ -14947,7 +14947,7 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript </description> <simpleType> <uint8_t></uint8_t> - <array>2,2</array> + <array>3,2</array> </simpleType> <persistency>non-volatile</persistency> <readable/> @@ -14969,7 +14969,7 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript <simpleType> <uint16_t> </uint16_t> - <array>2,2</array> + <array>3,2</array> </simpleType> <persistency>non-volatile</persistency> <readable/> @@ -15015,7 +15015,7 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript <simpleType> <uint8_t> </uint8_t> - <array>2,2</array> + <array>3,2</array> </simpleType> <persistency>non-volatile</persistency> <readable/> |