summaryrefslogtreecommitdiffstats
path: root/src/usr/hdat/hdatiohub.C
diff options
context:
space:
mode:
authorSampa Misra <sampmisr@in.ibm.com>2016-11-28 06:11:36 -0600
committerWilliam G. Hoffa <wghoffa@us.ibm.com>2017-01-05 15:14:09 -0500
commit53e816f368c031c575628d863e6eaf2f347fa168 (patch)
treee17bcfb5e32b7062949cd5c0472781ec5e488551 /src/usr/hdat/hdatiohub.C
parentfd1dc5a2c009d61145e2bb96865cf5de47674fb4 (diff)
downloadtalos-hostboot-53e816f368c031c575628d863e6eaf2f347fa168.tar.gz
talos-hostboot-53e816f368c031c575628d863e6eaf2f347fa168.zip
pcie lane eq and mm type changes
Change-Id: I2cc23d7590118e52f2561cace91647b9a9b4b205 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/33021 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src/usr/hdat/hdatiohub.C')
-rw-r--r--src/usr/hdat/hdatiohub.C95
1 files changed, 59 insertions, 36 deletions
diff --git a/src/usr/hdat/hdatiohub.C b/src/usr/hdat/hdatiohub.C
index 009be35c0..72e17489a 100644
--- a/src/usr/hdat/hdatiohub.C
+++ b/src/usr/hdat/hdatiohub.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2016 */
+/* Contributors Listed Below - COPYRIGHT 2016,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -78,7 +78,13 @@ extern trace_desc_t *g_trac_hdat;
const uint32_t HDAT_MULTIPLE = 16;
+//each PHB lane size
+const uint32_t NUM_OF_LANES_PER_PHB =
+ sizeof(TARGETING::ATTR_PROC_PCIE_LANE_EQUALIZATION_GEN3_type)/2;
+static_assert( NUM_OF_LANES_PER_PHB ==
+ sizeof(TARGETING::ATTR_PROC_PCIE_LANE_EQUALIZATION_GEN3_type)/2,
+ "no. of lanes per PHB should be 16");
/*******************************************************************************
* IO HUB constructor
@@ -242,8 +248,8 @@ uint8_t * HdatIoHubFru::setIOHub(uint8_t * io_virt_addr,
{
l_hdatHubEntry->hdatIoHubId =
this->iv_hubArray[l_cnt].hdatIoHubId;
- l_hdatHubEntry->hdatChipId =
- this->iv_hubArray[l_cnt].hdatChipId;
+ l_hdatHubEntry->hdatModuleId =
+ this->iv_hubArray[l_cnt].hdatModuleId;
l_hdatHubEntry->hdatEcLvl =
this->iv_hubArray[l_cnt].hdatEcLvl;
l_hdatHubEntry->hdatProcChipID =
@@ -261,8 +267,13 @@ uint8_t * HdatIoHubFru::setIOHub(uint8_t * io_virt_addr,
for ( uint16_t l_phbcnt = 0 ; l_phbcnt < HDAT_PHB_LANES; l_phbcnt++)
{
- l_hdatHubEntry->hdatLaneEqPHB[l_phbcnt] =
- this->iv_hubArray[l_cnt].hdatLaneEqPHB[l_phbcnt];
+ l_hdatHubEntry->hdatLaneEqPHBGen3[l_phbcnt] =
+ this->iv_hubArray[l_cnt].hdatLaneEqPHBGen3[l_phbcnt];
+ }
+ for ( uint16_t l_phbcnt = 0 ; l_phbcnt < HDAT_PHB_LANES; l_phbcnt++)
+ {
+ l_hdatHubEntry->hdatLaneEqPHBGen4[l_phbcnt] =
+ this->iv_hubArray[l_cnt].hdatLaneEqPHBGen4[l_phbcnt];
}
l_hdatHubEntry++;//increase by size of hdatHubEntry_t
@@ -712,17 +723,17 @@ errlHndl_t hdatLoadIoData(const hdatMsAddr_t &i_msAddr,
TARGETING::ATTR_MODEL_type l_model =
(l_pProcTarget->getAttr<TARGETING::ATTR_MODEL>());
- if(l_model == TARGETING::MODEL_MURANO)
+ if(l_model == TARGETING::MODEL_NIMBUS)
{
- l_hub->hdatChipId = HDAT_MODULE_TYPE_ID_MURANO;
+ l_hub->hdatModuleId = HDAT_MODULE_TYPE_ID_NIMBUS_LAGRANGE;
}
- else if(l_model == TARGETING::MODEL_VENICE)
+ else if(l_model == TARGETING::MODEL_CUMULUS)
{
- l_hub->hdatChipId = HDAT_MODULE_TYPE_ID_VENICE;
+ l_hub->hdatModuleId = HDAT_MODULE_TYPE_ID_CUMULUS_DUOMO;
}
else
{
- HDAT_ERR("Chip is not in Murano,Venice");
+ HDAT_ERR("Chip is not in Nimbus,Cumulus");
}
l_hub->hdatEcLvl = l_procEcLevel;
@@ -737,35 +748,47 @@ errlHndl_t hdatLoadIoData(const hdatMsAddr_t &i_msAddr,
l_hub->hdatFab0PresDetect = l_pProcTarget->
getAttr<TARGETING::ATTR_PROC_PCIE_PHB_ACTIVE>();
-
-#if 0 //@fixme-165346
- TARGETING::ATTR_PROC_PCIE_LANE_EQUALIZATION_type l_laneEq = {{0}};
-
- if(!l_pProcTarget->
- tryGetAttr<TARGETING::ATTR_PROC_PCIE_LANE_EQUALIZATION>(
- l_laneEq))
+ TARGETING::PredicateHwas l_predHwasFunc;
+ TARGETING::PredicateCTM l_phbPredicate (TARGETING::CLASS_UNIT,
+ TARGETING::TYPE_PHB);
+ TARGETING::PredicatePostfixExpr l_funcPhb;
+ l_funcPhb.push(&l_phbPredicate).push(&l_predHwasFunc).And();
+
+ TARGETING::TargetHandleList l_phbList;
+
+ TARGETING::targetService().getAssociated(l_phbList, l_pProcTarget,
+ TARGETING::TargetService::CHILD,
+ TARGETING::TargetService::ALL,
+ &l_funcPhb);
+ // copy the lane data
+ for(uint32_t l_idx = 0; l_idx<l_phbList.size(); ++l_idx)
{
- HDAT_ERR("ATTR_PROC_PCIE_LANE_EQUALIZATION"
- " not found");
- /*@
- * @errortype
- * @moduleid HDAT::MOD_IOHUB_LOAD_DATA
- * @reasoncode HDAT::RC_TGT_ATTR_NOTFOUND
- * @devdesc Target attribute not found
- * @custdesc Firmware encountered an internal error
- */
- hdatBldErrLog(l_err,
- MOD_IOHUB_LOAD_DATA,
- RC_TGT_ATTR_NOTFOUND,
- 0,0,0,0);
- break;
+ TARGETING::ATTR_PROC_PCIE_LANE_EQUALIZATION_GEN3_type
+ l_laneEq3 = {0};
+
+ TARGETING::ATTR_PROC_PCIE_LANE_EQUALIZATION_GEN4_type
+ l_laneEq4 = {0};
+
+ TARGETING::Target *l_phbTarget = l_phbList[l_idx];
+
+ assert( l_phbTarget->
+ tryGetAttr<TARGETING::ATTR_PROC_PCIE_LANE_EQUALIZATION_GEN3>(
+ l_laneEq3));
+
+ memcpy((l_hub->hdatLaneEqPHBGen3 +
+ l_idx*NUM_OF_LANES_PER_PHB), l_laneEq3,
+ NUM_OF_LANES_PER_PHB*2);
+
+ assert( l_phbTarget->
+ tryGetAttr<TARGETING::ATTR_PROC_PCIE_LANE_EQUALIZATION_GEN4>(
+ l_laneEq4));
+
+ memcpy((l_hub->hdatLaneEqPHBGen4 +
+ l_idx*NUM_OF_LANES_PER_PHB),l_laneEq4,
+ NUM_OF_LANES_PER_PHB*2);
+
}
- //copying data from l_laneEq(which is 4x32 bytes) to
- //uint16_t hdatLaneEqPHB[64]
- memcpy( l_hub->hdatLaneEqPHB, l_laneEq,
- (NUM_BYTES_PER_LANE * HDAT_PHB_LANES));
-#endif //@fixme-165346
//increment counts
fruData->iv_hubArrayHdr.hdatArrayCnt++;
OpenPOWER on IntegriCloud