diff options
author | Sampa Misra <sampmisr@in.ibm.com> | 2017-11-21 03:08:19 -0600 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-11-28 12:40:28 -0500 |
commit | f10319641ba1045d997a233961235cce4d1635b2 (patch) | |
tree | 2be7af5160672e03334fda9f611aa9083fbd6371 /src | |
parent | 2fc740c30b902bd7faae659031ece11592779a54 (diff) | |
download | talos-hostboot-f10319641ba1045d997a233961235cce4d1635b2.tar.gz talos-hostboot-f10319641ba1045d997a233961235cce4d1635b2.zip |
feature flag changes
Change-Id: Ib3e5f11a3833f84173115fcf93bd744e3e2d1c38
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/49936
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: NAGENDRA K. GURRAM <nagendra.g@in.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/usr/hdat/hdatpcrd.C | 74 | ||||
-rw-r--r-- | src/usr/hdat/hdatpcrd.H | 29 |
2 files changed, 101 insertions, 2 deletions
diff --git a/src/usr/hdat/hdatpcrd.C b/src/usr/hdat/hdatpcrd.C index b77c8d2e3..9e2e6c0ac 100644 --- a/src/usr/hdat/hdatpcrd.C +++ b/src/usr/hdat/hdatpcrd.C @@ -136,6 +136,9 @@ static errlHndl_t hdatSetPcrdHdrs(hdatSpPcrd_t *i_pcrd) i_pcrd->hdatPcrdIntData[HDAT_PCRD_CHIP_EC_LVL].hdatOffset = 0; i_pcrd->hdatPcrdIntData[HDAT_PCRD_CHIP_EC_LVL].hdatSize = 0; + i_pcrd->hdatPcrdIntData[HDAT_PCRD_DA_FEATURE_FLAGS].hdatOffset = 0; + i_pcrd->hdatPcrdIntData[HDAT_PCRD_DA_FEATURE_FLAGS].hdatSize = 0; + return l_errlHndl; @@ -675,6 +678,77 @@ errlHndl_t HdatPcrd::hdatLoadPcrd(uint32_t &o_size, uint32_t &o_count) this->iv_spPcrd->hdatPcrdIntData[HDAT_PCRD_CHIP_EC_LVL].hdatSize = l_pcrdECLvlTotalSize; this->iv_spPcrd->hdatHdr.hdatSize += l_pcrdECLvlTotalSize; + //populating the feature flag settings + //as of now all values are initialized with 0s + + //Get the the EQ(Quad id) targets + TARGETING::TargetHandleList l_eqList; + TARGETING::PredicateCTM + l_eqFilter(TARGETING::CLASS_UNIT, TARGETING::TYPE_EQ); + + TARGETING::PredicateHwas l_predEqPresent; + l_predEqPresent.present(true); + + TARGETING::PredicatePostfixExpr l_presentEq; + l_presentEq.push(&l_eqFilter).push(&l_predEqPresent).And(); + + TARGETING::targetService().getAssociated( + l_eqList, + l_pProcTarget, + TARGETING::TargetService::CHILD, + TARGETING::TargetService::ALL, + &l_presentEq); + + hdatPcrdFeatureFlagString *l_FeatureFlagStringPtr = NULL; + + l_FeatureFlagStringPtr = reinterpret_cast<hdatPcrdFeatureFlagString *> + ((uint8_t *)l_ECLvlInfoPcrdHdrPtr + sizeof(hdatHDIFDataArray_t) + + sizeof(hdatEcLvl_t)); + + memset(l_FeatureFlagStringPtr, 0x00, sizeof(hdatPcrdFeatureFlagString)); + memcpy(l_FeatureFlagStringPtr,FFSTRING,sizeof(FFSTRING)); + + hdatHDIFDataArray_t *l_FeatureFlagsPcrdHdrPtr = NULL; + + l_FeatureFlagsPcrdHdrPtr = reinterpret_cast<hdatHDIFDataArray_t *> + ((uint8_t *)l_FeatureFlagStringPtr + sizeof(hdatPcrdFeatureFlagString)); + + + + l_FeatureFlagsPcrdHdrPtr->hdatOffset = 0x0010; + l_FeatureFlagsPcrdHdrPtr->hdatArrayCnt = l_eqList.size(); + l_FeatureFlagsPcrdHdrPtr->hdatAllocSize = sizeof(hdatPcrdFeatureFlagSetting); + l_FeatureFlagsPcrdHdrPtr->hdatActSize = sizeof(hdatPcrdFeatureFlagSetting); + + hdatPcrdFeatureFlagSetting *l_hdatFeatureFlagSettPtr = reinterpret_cast<hdatPcrdFeatureFlagSetting *> + ((uint8_t *)l_FeatureFlagsPcrdHdrPtr + sizeof(hdatHDIFDataArray_t)); + + + uint32_t l_EQOrdId = 0; + for(uint32_t l_eqIdx = 0; l_eqIdx < l_eqList.size();++l_eqIdx) + { + TARGETING::Target* l_pTarget = l_eqList[l_eqIdx]; + l_EQOrdId = l_pTarget->getAttr<TARGETING::ATTR_ORDINAL_ID>(); + + l_hdatFeatureFlagSettPtr->hdatPcrdFFCurrentSetting = 0; + l_hdatFeatureFlagSettPtr->hdatPcrdFFDynChgCapability =0; + l_hdatFeatureFlagSettPtr->hdatPcrdEqOrdId = l_EQOrdId; + + l_hdatFeatureFlagSettPtr++; + } + + uint32_t l_pcrdFeatureFlagTotalSize = sizeof(hdatPcrdFeatureFlagString) + sizeof(hdatHDIFDataArray_t) + + sizeof(hdatPcrdFeatureFlagSetting) * MAX_EQ_PER_PROC; + + this->iv_spPcrd->hdatPcrdIntData[HDAT_PCRD_DA_FEATURE_FLAGS].hdatOffset = + this->iv_spPcrd->hdatPcrdIntData[HDAT_PCRD_CHIP_EC_LVL].hdatOffset + sizeof(hdatHDIFDataArray_t) + + sizeof(hdatEcLvl_t); + + this->iv_spPcrd->hdatPcrdIntData[HDAT_PCRD_DA_FEATURE_FLAGS].hdatSize = l_pcrdFeatureFlagTotalSize; + + this->iv_spPcrd->hdatHdr.hdatSize += l_pcrdFeatureFlagTotalSize; + + if( NULL != l_errl) { break; diff --git a/src/usr/hdat/hdatpcrd.H b/src/usr/hdat/hdatpcrd.H index dbef3da6a..9c6d89020 100644 --- a/src/usr/hdat/hdatpcrd.H +++ b/src/usr/hdat/hdatpcrd.H @@ -62,6 +62,8 @@ const char HDAT_PCRD_STRUCT_NAME[7] = "SPPCRD"; #define HDAT_PCRD_MAX_I2C_DEV 128 #define HDAT_PCRD_MAX_SMP_LINK 12 +//Max number of EQ per proc +#define MAX_EQ_PER_PROC 6 /** @enum hdatDataPtrs * Enumeration which defines the data sections of the PCRD */ @@ -77,8 +79,9 @@ enum hdatPcrdDataPtrs HDAT_PCRD_DA_PNOR = 6, HDAT_PCRD_DA_SMP = 7, HDAT_PCRD_CHIP_EC_LVL = 8, - HDAT_PCRD_DA_CNT = 9, - HDAT_PCRD_DA_LAST = 10, + HDAT_PCRD_DA_FEATURE_FLAGS = 9, + HDAT_PCRD_DA_CNT = 10, + HDAT_PCRD_DA_LAST = 11, }; /*----------------------------------------------------------------------------*/ @@ -167,6 +170,28 @@ struct hdatSpPcrd_t } __attribute__ ((packed)); +struct hdatPcrdFeatureFlagString +{ + char hdatPcrdffString[64][32]; +}__attribute__ ((packed)); + +struct hdatPcrdFeatureFlagSetting +{ + uint64_t hdatPcrdFFCurrentSetting; + uint64_t hdatPcrdFFDynChgCapability; + uint32_t hdatPcrdEqOrdId; +}__attribute__ ((packed)); + +const char FFSTRING [64][32] = {"TM Suspend Mode Enabled", + "","","","","","","","","", + "","","","","","","","","","", + "","","","","","","","","","", + "","","","","","","","","","", + "","","","","","","","","","", + "","","","","","","","","","", + "","","","" }; + + /*----------------------------------------------------------------------------*/ /* C++ class definition */ /*----------------------------------------------------------------------------*/ |