diff options
author | Dan Crowell <dcrowell@us.ibm.com> | 2020-01-07 16:40:33 -0600 |
---|---|---|
committer | Daniel M Crowell <dcrowell@us.ibm.com> | 2020-01-10 10:22:27 -0600 |
commit | 03db83368dbc1f49e717be441a313bce2c962c0f (patch) | |
tree | 932fbcb74a1a4f147c41466dbb0776fbac733168 /src/usr | |
parent | 6ceeb473dc9e84d3af17a940e6b37fac19036233 (diff) | |
download | blackbird-hostboot-03db83368dbc1f49e717be441a313bce2c962c0f.tar.gz blackbird-hostboot-03db83368dbc1f49e717be441a313bce2c962c0f.zip |
Handle automatic interleaving between OMI sub-channels
The memory channel is defined as a single MCC, and all of the
memory on that channel is part of a single address space. That
means that both OCMBs on the same MCC share an address space.
While this isn't the same mechanism as true interleaving, it
looks the same to the code consuming HDAT, so we need to set
the sharing flags appropriately.
Change-Id: Ic270582ced92614cf21ff7be0ef6f97c93ab2514
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/89340
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.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: Jayashankar Padath <jayashankar.padath@in.ibm.com>
Reviewed-by: Christian R Geddes <crgeddes@us.ibm.com>
Reviewed-by: Daniel M Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr')
-rwxr-xr-x | src/usr/hdat/hdatmsvpd.C | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/src/usr/hdat/hdatmsvpd.C b/src/usr/hdat/hdatmsvpd.C index 2a7ba42e1..5b67903f7 100755 --- a/src/usr/hdat/hdatmsvpd.C +++ b/src/usr/hdat/hdatmsvpd.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2016,2019 */ +/* Contributors Listed Below - COPYRIGHT 2016,2020 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -1719,11 +1719,6 @@ errlHndl_t HdatMsVpd::hdatLoadMsData(uint32_t &o_size, uint32_t &o_count) TARGETING::ATTR_MSS_MEM_MC_IN_GROUP_type l_mccSharingCount = {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_mccSharingGrpIds - = {0}; - //Size configured under each group TARGETING::ATTR_PROC_MEM_SIZES_type l_procMemSizesBytes = {0}; @@ -1764,16 +1759,6 @@ errlHndl_t HdatMsVpd::hdatLoadMsData(uint32_t &o_size, uint32_t &o_count) if(l_procMemSizesBytes[l_mccInGrp] > 0) { l_mccSharingCount[l_mccInGrp]++; - - //Assign sharing group id only if shared - //And only when first instance of sharing is found - if(l_mccSharingCount[l_mccInGrp] == - HDAT_MIN_NUM_FOR_SHARING) - { - l_mccSharingGrpIds[l_mccInGrp] = - l_nxtSharingGroupId; - l_nxtSharingGroupId++; - } } } @@ -1984,7 +1969,22 @@ errlHndl_t HdatMsVpd::hdatLoadMsData(uint32_t &o_size, uint32_t &o_count) { l_memStatus = HDAT_MEM_SHARED; setMsAreaInterleavedId(l_index, - l_mccSharingGrpIds[l_mccInGrp]); + l_mccInGrp); + } + //The memory channel is defined as a single + // MCC, and all of the memory on that + // channel is part of a single address + // space. That means that both OCMBs on + // the same MCC share an address space. + // While this isn't the same mechanism as + // true interleaving, it looks the same to + // the code consuming HDAT, so we need to + // set the sharing flags appropriately. + else if( l_omiList.size() > 1 ) + { + l_memStatus = HDAT_MEM_SHARED; + setMsAreaInterleavedId(l_index, + l_mccInGrp); } setMsAreaType(l_index,l_parentType); |