Skip to content

Commit

Permalink
Fix for shared flag not getting set for the MSAREA
Browse files Browse the repository at this point in the history
Change-Id: Ifa0b91ffc3b2e47f88bc2ca8c7b6e701a10d6a53
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/35394
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
  • Loading branch information
nagendraIBM authored and wghoffa committed Jan 27, 2017
1 parent ad3e1dd commit 79dd17b
Showing 1 changed file with 73 additions and 52 deletions.
125 changes: 73 additions & 52 deletions src/usr/hdat/hdatmsvpd.C
Expand Up @@ -1107,21 +1107,88 @@ errlHndl_t HdatMsVpd::hdatLoadMsData(uint32_t &o_size, uint32_t &o_count)
TARGETING::ATTR_ORDINAL_ID_type l_procChipId
= l_pProcTarget->getAttr<TARGETING::ATTR_ORDINAL_ID>();


//For each MCA
TARGETING::PredicateCTM l_allMca(TARGETING::CLASS_UNIT,
TARGETING::TYPE_MCA);
TARGETING::PredicateHwas l_funcMca;
l_funcMca.functional(true);
TARGETING::PredicatePostfixExpr l_allFuncMca;
l_allFuncMca.push(&l_allMca).push(&l_funcMca).And();

TARGETING::TargetHandleList l_mcaList;

TARGETING::targetService().
getAssociated(l_mcaList, l_pProcTarget,
TARGETING::TargetService::CHILD,
TARGETING::TargetService::ALL, &l_allFuncMca);

TARGETING::ATTR_PROC_MEM_BASES_type l_procMemBases = {0};
assert(l_pProcTarget->
tryGetAttr<TARGETING::ATTR_PROC_MEM_BASES>(l_procMemBases));

//Sharing count for each group
TARGETING::ATTR_MSS_MEM_MC_IN_GROUP_type l_mcaSharingCount = {0};

//Group ID for each group, group id will be assigned only
//if the group is shared
TARGETING::ATTR_MSS_MEM_MC_IN_GROUP_type l_mcsSharingGrpIds = {0};

//Size configured under each group
TARGETING::ATTR_PROC_MEM_SIZES_type l_procMemSizesBytes = {0};

assert(l_pProcTarget->tryGetAttr<TARGETING::ATTR_PROC_MEM_SIZES>
(l_procMemSizesBytes));



for(uint32_t l_mcaIdx = 0; l_mcaIdx<l_mcaList.size();
++l_mcaIdx)
{
uint32_t l_mcaInGrp = 0;
TARGETING::Target *l_pMcaTarget =
l_mcaList[l_mcaIdx];
if(!hdatFindGroupForMc(l_pProcTarget,
l_pMcaTarget,
l_mcaInGrp))
{
//Skip this MCA is not in any group
continue;
}

//Increment sharing count if mem configured under group.
if(l_procMemSizesBytes[l_mcaInGrp] > 0)
{
l_mcaSharingCount[l_mcaInGrp]++;

//Assign sharing group id only if shared
//And only when first instance of sharing is found
if(l_mcaSharingCount[l_mcaInGrp] ==
HDAT_MIN_NUM_FOR_SHARING)
{
l_mcsSharingGrpIds[l_mcaInGrp] =
l_nxtSharingGroupId;
l_nxtSharingGroupId++;
}
}
}


// TODO : RTC Story 159682
// Further CHTM support needs to be added which contains the trace
// array for 24 cores
hdatMsAddr_t l_hdatNhtmStartAddr;
hdatMsAddr_t l_hdatNhtmEndAddr;

TARGETING::ATTR_PROC_NHTM_BAR_BASE_ADDR_type l_nhtmStartAddr =
l_pProcTarget->getAttr<TARGETING::ATTR_PROC_NHTM_BAR_BASE_ADDR>();
l_pProcTarget->getAttr<TARGETING::ATTR_PROC_NHTM_BAR_BASE_ADDR>();
TARGETING::ATTR_PROC_NHTM_BAR_SIZE_type l_nhtmSize =
l_pProcTarget->getAttr<TARGETING::ATTR_PROC_NHTM_BAR_SIZE>();

if( 0 != l_nhtmSize )
{
l_hdatNhtmStartAddr.hi =
(l_nhtmStartAddr & 0xFFFFFFFF00000000ull) >> 32;
(l_nhtmStartAddr & 0xFFFFFFFF00000000ull) >> 32;
l_hdatNhtmStartAddr.lo =
l_nhtmStartAddr & 0x00000000FFFFFFFFull;
l_hdatNhtmStartAddr.hi |= HDAT_REAL_ADDRESS_MASK;
Expand All @@ -1145,28 +1212,12 @@ errlHndl_t HdatMsVpd::hdatLoadMsData(uint32_t &o_size, uint32_t &o_count)
l_nhtmSize);
}

TARGETING::ATTR_PROC_MEM_BASES_type l_procMemBases = {0};
assert(l_pProcTarget->
tryGetAttr<TARGETING::ATTR_PROC_MEM_BASES>(l_procMemBases));

//Sharing count for each group
TARGETING::ATTR_MSS_MEM_MC_IN_GROUP_type l_mcaSharingCount = {0};

//Group ID for each group, group id will be assigned only
//if the group is shared
TARGETING::ATTR_MSS_MEM_MC_IN_GROUP_type l_mcsSharingGrpIds = {0};

//Size configured under each group
TARGETING::ATTR_PROC_MEM_SIZES_type l_procMemSizesBytes = {0};

assert(l_pProcTarget->tryGetAttr<TARGETING::ATTR_PROC_MEM_SIZES>
(l_procMemSizesBytes));

TARGETING::PredicateCTM l_mcbistPredicate(TARGETING::CLASS_UNIT,
TARGETING::TYPE_MCBIST);

TARGETING::PredicatePostfixExpr l_presentMcbist;
l_presentMcbist.push(&l_mcbistPredicate).
l_presentMcbist.push(&l_mcbistPredicate).
push(&l_predHwasFunc).And();

TARGETING::TargetHandleList l_mcbistList;
Expand All @@ -1189,7 +1240,7 @@ errlHndl_t HdatMsVpd::hdatLoadMsData(uint32_t &o_size, uint32_t &o_count)
TARGETING::TYPE_MCS);

TARGETING::PredicatePostfixExpr l_funcMcs;
l_funcMcs.push(&l_mcsPredicate).push(&l_predHwasFunc).And();
l_funcMcs.push(&l_mcsPredicate).push(&l_predHwasFunc).And();

TARGETING::TargetHandleList l_mcsList;

Expand Down Expand Up @@ -1218,39 +1269,9 @@ errlHndl_t HdatMsVpd::hdatLoadMsData(uint32_t &o_size, uint32_t &o_count)
// Get associated MCAs
TARGETING::targetService().
getAssociated(l_mcaList, l_pMcsTarget,
TARGETING::TargetService::CHILD_BY_AFFINITY,
TARGETING::TargetService::ALL, &l_presentMca);
TARGETING::TargetService::CHILD_BY_AFFINITY,
TARGETING::TargetService::ALL, &l_presentMca);

for(uint32_t l_mcaIdx = 0; l_mcaIdx<l_mcaList.size();
++l_mcaIdx)
{
uint32_t l_mcaInGrp = 0;
TARGETING::Target *l_pMcaTarget =
l_mcaList[l_mcaIdx];
if(!hdatFindGroupForMc(l_pProcTarget,
l_pMcaTarget,
l_mcaInGrp))
{
//Skip this MCA is not in any group
continue;
}

//Increment sharing count if mem configured under group.
if(l_procMemSizesBytes[l_mcaInGrp] > 0)
{
l_mcaSharingCount[l_mcaInGrp]++;

//Assign sharing group id only if shared
//And only when first instance of sharing is found
if(l_mcaSharingCount[l_mcaInGrp] ==
HDAT_MIN_NUM_FOR_SHARING)
{
l_mcsSharingGrpIds[l_mcaInGrp] =
l_nxtSharingGroupId;
l_nxtSharingGroupId++;
}
}
}

for(uint32_t l_mcaIdx = 0; l_mcaIdx<l_mcaList.size();
++l_mcaIdx)
Expand Down

0 comments on commit 79dd17b

Please sign in to comment.