summaryrefslogtreecommitdiffstats
path: root/src/usr/hdat
diff options
context:
space:
mode:
authorSampa Misra <sampmisr@in.ibm.com>2017-11-21 03:08:19 -0600
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-11-28 12:40:28 -0500
commitf10319641ba1045d997a233961235cce4d1635b2 (patch)
tree2be7af5160672e03334fda9f611aa9083fbd6371 /src/usr/hdat
parent2fc740c30b902bd7faae659031ece11592779a54 (diff)
downloadtalos-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/usr/hdat')
-rw-r--r--src/usr/hdat/hdatpcrd.C74
-rw-r--r--src/usr/hdat/hdatpcrd.H29
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 */
/*----------------------------------------------------------------------------*/
OpenPOWER on IntegriCloud