diff options
author | Elliott Dahle <dedahle@us.ibm.com> | 2014-02-12 16:17:24 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-02-13 13:01:04 -0600 |
commit | ecfc6a3a5aa975d7c72b940f5a5c1d969dfb6712 (patch) | |
tree | fae8b1ef4505bbcb2a0ee2843de724c82da6f6a4 /src/usr | |
parent | 66fdd0c61ee4ed4d3bf8254d03ede6b7fb4601a9 (diff) | |
download | talos-hostboot-ecfc6a3a5aa975d7c72b940f5a5c1d969dfb6712.tar.gz talos-hostboot-ecfc6a3a5aa975d7c72b940f5a5c1d969dfb6712.zip |
Tul63fp failing on istep hb_config_update of istep 0
Change-Id: Ie3b509b31d3067fe34be7930eb4e1beec4d8383b
CQ:SW245920
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/8806
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr')
-rw-r--r-- | src/usr/hwas/common/hwas.C | 58 | ||||
-rw-r--r-- | src/usr/targeting/common/common.mk | 5 | ||||
-rw-r--r-- | src/usr/targeting/common/predicates/predicateisnonfunctional.C | 75 | ||||
-rw-r--r-- | src/usr/targeting/common/utilFilter.C | 48 |
4 files changed, 183 insertions, 3 deletions
diff --git a/src/usr/hwas/common/hwas.C b/src/usr/hwas/common/hwas.C index cb079c71c..3bf141e26 100644 --- a/src/usr/hwas/common/hwas.C +++ b/src/usr/hwas/common/hwas.C @@ -521,10 +521,68 @@ errlHndl_t discoverTargets() //non functional membuf or no membufs associated with this MCS enableHwasState(l_MCSTarget,true,false, HWAS::DeconfigGard::DECONFIGURED_BY_NO_CHILD_MEMBUF); + + + HWAS_INF("discoverTargets: MCS %.8X mark as present, not functional", l_MCSTarget->getAttr<ATTR_HUID>() ); } + // Get list of non-functional Centaurs + TargetHandleList l_nonFuncCentaurs; + getChipResources(l_nonFuncCentaurs, TYPE_MEMBUF, + UTIL_FILTER_NON_FUNCTIONAL); + + // Some common variables used below + TargetHandleList pChildList; + PredicateIsFunctional isFunctional; + + // Iterate through list of non-functional Centaurs, and + // set all children as non-functional + for (TargetHandleList::const_iterator + pCenTarget_it = l_nonFuncCentaurs.begin(); + pCenTarget_it != l_nonFuncCentaurs.end(); + ++pCenTarget_it) + { + // Cache current target + TargetHandle_t l_cenTarget = *pCenTarget_it; + + // find all CHILD matches for this target and deconfigure them + targetService().getAssociated(pChildList, l_cenTarget, + TargetService::CHILD, TargetService::ALL, &isFunctional); + for (TargetHandleList::iterator pChild_it = pChildList.begin(); + pChild_it != pChildList.end(); + ++pChild_it) + { + TargetHandle_t l_childTarget = *pChild_it; + //non functional membuf or no membufs associated with this MCS + enableHwasState(l_childTarget,true,false, + HWAS::DeconfigGard::DECONFIGURED_BY_NO_PARENT_MEMBUF); + HWAS_INF("discoverTargets: Target %.8X mark as present" + ", not functional due to non-functional parent" + " Centaur", + l_childTarget->getAttr<ATTR_HUID>() ); + } + + // find all CHILD_BY_AFFINITY matches for this target and + // deconfigure them + targetService().getAssociated(pChildList, l_cenTarget, + TargetService::CHILD_BY_AFFINITY, TargetService::ALL, + &isFunctional); + for (TargetHandleList::iterator pChild_it = pChildList.begin(); + pChild_it != pChildList.end(); + ++pChild_it) + { + TargetHandle_t l_affinityTarget = *pChild_it; + //non functional membuf or no membufs associated with this MCS + enableHwasState(l_affinityTarget,true,false, + HWAS::DeconfigGard::DECONFIGURED_BY_NO_PARENT_MEMBUF); + HWAS_INF("discoverTargets: Target %.8X mark as present" + ", not functional due to non-functional parent" + " Centaur", + l_affinityTarget->getAttr<ATTR_HUID>() ); + } + } } while (0); diff --git a/src/usr/targeting/common/common.mk b/src/usr/targeting/common/common.mk index 7a5cb8c27..520f0462d 100644 --- a/src/usr/targeting/common/common.mk +++ b/src/usr/targeting/common/common.mk @@ -5,7 +5,7 @@ # # IBM CONFIDENTIAL # -# COPYRIGHT International Business Machines Corp. 2011,2013 +# COPYRIGHT International Business Machines Corp. 2011,2014 # # p1 # @@ -37,7 +37,8 @@ PREDICATES_OBJS = \ predicatectm.o \ predicateisfunctional.o \ predicatehwas.o \ - predicatehwaschanged.o + predicatehwaschanged.o \ + predicateisnonfunctional.o ITERATORS_OBJS = \ targetiterator.o \ diff --git a/src/usr/targeting/common/predicates/predicateisnonfunctional.C b/src/usr/targeting/common/predicates/predicateisnonfunctional.C new file mode 100644 index 000000000..5d702f105 --- /dev/null +++ b/src/usr/targeting/common/predicates/predicateisnonfunctional.C @@ -0,0 +1,75 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/targeting/common/predicates/predicateisnonfunctional.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2014 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ +/** + * @file targeting/common/predicates/predicateisnonfunctional.C + * + * @brief Implement predicate defined in + * src/usr/include/targeting/predicate/predicateisnonfunctional.H + * + */ + +// targeting support. +#include <targeting/common/commontargeting.H> + +namespace TARGETING +{ + +//****************************************************************************** +// PredicateIsNonFunctional::PredicateIsNonFunctional() +//****************************************************************************** +PredicateIsNonFunctional::PredicateIsNonFunctional(bool i_requirePresent) + :iv_requirePresent(i_requirePresent) +{ + +} + +//****************************************************************************** +// PredicateIsNonFunctional::~PredicateIsNonFunctional() +//****************************************************************************** +PredicateIsNonFunctional::~PredicateIsNonFunctional() +{ + +} + +//****************************************************************************** +// PredicateIsNonFunctional::operator() +//****************************************************************************** +bool PredicateIsNonFunctional::operator()( + const TARGETING::Target* i_pTarget) const +{ + bool l_rc = false; + + if (iv_requirePresent) + { + l_rc = ((!i_pTarget->getAttr<ATTR_HWAS_STATE>().functional) && + (i_pTarget->getAttr<ATTR_HWAS_STATE>().present)); + } + else + { + l_rc = !i_pTarget->getAttr<ATTR_HWAS_STATE>().functional; + } + + return l_rc; +}; + +} // namespace diff --git a/src/usr/targeting/common/utilFilter.C b/src/usr/targeting/common/utilFilter.C index bb4846074..34207a75c 100644 --- a/src/usr/targeting/common/utilFilter.C +++ b/src/usr/targeting/common/utilFilter.C @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -32,6 +32,7 @@ #include <targeting/common/predicates/predicatepostfixexpr.H> #include <targeting/common/predicates/predicateattrval.H> #include <targeting/common/utilFilter.H> +#include <targeting/common/predicates/predicateisnonfunctional.H> /** * Miscellaneous Filter Utility Functions @@ -125,6 +126,51 @@ void _getChipOrChipletResources( TARGETING::TargetHandleList & o_vector, } break; } + case UTIL_FILTER_NON_FUNCTIONAL: + { + // Get all non-functional chips or chiplets + // Non-functional predicate + TARGETING::PredicateIsNonFunctional l_isNonFunctional(false); + // Type predicate + TARGETING::PredicateCTM l_CtmFilter(i_class, i_type); + // Set up compound predicate + TARGETING::PredicatePostfixExpr l_nonFunctional; + l_nonFunctional.push(&l_CtmFilter).push(&l_isNonFunctional).And(); + // Apply the filter through all targets + TARGETING::TargetRangeFilter l_nonFuncTargetList( + TARGETING::targetService().begin(), + TARGETING::targetService().end(), + &l_nonFunctional); + o_vector.clear(); + for ( ; l_nonFuncTargetList; ++l_nonFuncTargetList) + { + o_vector.push_back(*l_nonFuncTargetList); + } + break; + } + case UTIL_FILTER_PRESENT_NON_FUNCTIONAL: + { + // Get all present and non-functional chips or chiplets + // Present and non-functional predicate + TARGETING::PredicateIsNonFunctional l_isPresNonFunctional; + // Type predicate + TARGETING::PredicateCTM l_CtmFilter(i_class, i_type); + // Set up compound predicate + TARGETING::PredicatePostfixExpr l_presNonFunctional; + l_presNonFunctional.push(&l_CtmFilter). + push(&l_isPresNonFunctional).And(); + // Apply the filter through all targets + TARGETING::TargetRangeFilter l_presNonFuncTargetList( + TARGETING::targetService().begin(), + TARGETING::targetService().end(), + &l_presNonFunctional); + o_vector.clear(); + for ( ; l_presNonFuncTargetList; ++l_presNonFuncTargetList) + { + o_vector.push_back(*l_presNonFuncTargetList); + } + break; + } default: TARG_ASSERT(0, TARG_LOC "Invalid functional state used"); break; |