summaryrefslogtreecommitdiffstats
path: root/src/usr/fapi2
diff options
context:
space:
mode:
authorChristian Geddes <crgeddes@us.ibm.com>2019-07-31 15:43:51 -0500
committerDaniel M Crowell <dcrowell@us.ibm.com>2019-08-09 11:21:36 -0500
commita7892148b7dcd0d0a332e09835189f7a9d4f913b (patch)
tree5a6910fb53d4ba47b97777890fb052fc53d1f817 /src/usr/fapi2
parentaade92abb5dbf828533986c7d3745452a4447059 (diff)
downloadtalos-hostboot-a7892148b7dcd0d0a332e09835189f7a9d4f913b.tar.gz
talos-hostboot-a7892148b7dcd0d0a332e09835189f7a9d4f913b.zip
Only compare a proc's omi freq if it has functional OCMB children
There are checks we do during the memory intialization where we check to make sure that both processors have the same frequence set for their OMI traffic. If a processor has no OCMB targets then its OMI frequence will not get set so we should ignore those processors for this comparison. Change-Id: Id00f01756b431695e92a15872ebe00fd18306c4f Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/81462 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Matt Derksen <mderkse1@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> Reviewed-by: Roland Veloz <rveloz@us.ibm.com> Reviewed-by: Daniel M Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/fapi2')
-rw-r--r--src/usr/fapi2/attribute_service.C27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/usr/fapi2/attribute_service.C b/src/usr/fapi2/attribute_service.C
index 002208bd4..2f2ae45e0 100644
--- a/src/usr/fapi2/attribute_service.C
+++ b/src/usr/fapi2/attribute_service.C
@@ -2766,9 +2766,9 @@ ReturnCode platGetFreqMcaMhz(const Target<TARGET_TYPE_ALL>& i_fapiTarget,
/// values in the MEM_PLL_FREQ_BUCKETS tree. The key's used to lookup values in that
/// tree are the ATTR_FREQ_OMI_MHZ and ATTR_OMI_PLL_VCO attributes. These are on the
/// processor target but it is expected that all of the values match.
-// @param[out] o_omiFreq OMI Frequency of the system
-// @param[out] o_omiVco OMI VCO of the system
-// @return ReturnCode Zero on success, else platform specified error.
+/// @param[out] o_omiFreq OMI Frequency of the system
+/// @param[out] o_omiVco OMI VCO of the system
+/// @return ReturnCode Zero on success, else platform specified error.
errlHndl_t getOmiFreqAndVco(TARGETING::ATTR_FREQ_OMI_MHZ_type & o_omiFreq,
TARGETING::ATTR_OMI_PLL_VCO_type & o_omiVco)
{
@@ -2777,16 +2777,31 @@ errlHndl_t getOmiFreqAndVco(TARGETING::ATTR_FREQ_OMI_MHZ_type & o_omiFreq,
// Get all functional Proc targets
TARGETING::TargetHandleList l_procsList;
getAllChips(l_procsList, TARGETING::TYPE_PROC);
+ uint8_t l_firstValidProc = 0;
+ bool l_outValueSet = false;
// Until we are told we need to support individual processor frequency
// assert that all of the processors have the same values
for(uint8_t i = 0; i < l_procsList.size(); i++)
{
- // First processor's value will be used to compare against all other processors
- if(i == 0)
+ // Get a list of functional OCMB targets under this processor
+ TARGETING::TargetHandleList l_childOcmbList;
+ TARGETING::getChildAffinityTargets(l_childOcmbList, l_procsList[i],
+ TARGETING::CLASS_CHIP,
+ TARGETING::TYPE_OCMB_CHIP);
+ // If there are no OCMB children for this processor then ignore it;
+ if(l_childOcmbList.size() == 0)
+ {
+ continue;
+ }
+
+ // First valid processor's values will be used to compare against all other processors
+ if(!l_outValueSet)
{
o_omiFreq = l_procsList[i]->getAttr<TARGETING::ATTR_FREQ_OMI_MHZ>();
o_omiVco = l_procsList[i]->getAttr<TARGETING::ATTR_OMI_PLL_VCO>();
+ l_outValueSet = true;
+ l_firstValidProc = i;
continue;
}
@@ -2801,7 +2816,7 @@ errlHndl_t getOmiFreqAndVco(TARGETING::ATTR_FREQ_OMI_MHZ_type & o_omiFreq,
FAPI_ERR("platGetMcPllBucket: Detected two processors with difference OMI VCO / FREQ combinations."
" Proc 0x%.08X has OMI freq = %d and OMI vco = %d. "
" Proc 0x%.08X has OMI freq = %d and OMI vco = %d. " ,
- get_huid(l_procsList[0]), o_omiFreq, o_omiVco,
+ get_huid(l_procsList[l_firstValidProc]), o_omiFreq, o_omiVco,
get_huid(l_procsList[i]), l_omiFreqToCmp, l_omiVcoToCmp );
/*@
OpenPOWER on IntegriCloud